#!/usr/bin/php '; $this->fileName = ""; $this->handle = null; } // Destructor public function __destruct(){ // echo 'The class "' . __CLASS__ . '" was destroyed.
'; } // Method to get the filename public function getFileName(){ return $this->fileName; } // Method to set the filename public function setFileName($filename){ $this->fileName = $filename; } // Method to get the handle content public function getHandle(){ // TODO Check file exists $this->handle = fopen($this->fileName, "r"); return $this->handle; } } class LogEvent { // Properties declaration public $event = ""; // public $date = ""; // public $source = ""; // public $target = ""; // public $ability = ""; // public $effect = ""; // public $value = 0; // public $threat = 0; // Constructor public function __construct() { // echo 'The class "' . __CLASS__ . '" was initiated!
'; $this->event = ""; // $this->date = $date; // $this->source = $source; // $this->target = $target; // $this->ability = $ability; // $this->effect = $effect; // $this->value = $value; // $this->threat = $threat; } // Destructor public function __destruct(){ // echo 'The class "' . __CLASS__ . '" was destroyed.
'; } // Method to set the event public function arrayEvent($logEvent){ // [23:40:42.150] [@Comendatore] [Combat Training Target MK-10 {2816257300627456}:133000004817] [Ion Pulse {2199843594305536}] [ApplyEffect {836045448945477}: Damage {836045448945501}] (7659* elemental {836045448940875}) <19146> // [date] [src] [target] [ability] [effect] (value) // $isMatching = preg_match_all('/[\[<\(]([^\[<\(\]>\)]*)[\]>\)]/m', $logEvent, $this->event, PREG_SET_ORDER, 0); $isMatching = preg_match_all('/[\[<\(]([^\[<\]>]*)[\]>\)]/m', $logEvent, $this->event, PREG_SET_ORDER, 0); return $this->event; } } $handlecontent = new loadFile; $handlecontent->setFileName("combat_2020-07-29_20_28_31_201102.txt"); $handleresult = $handlecontent->getHandle(); if($handleresult) { $totalAmount=0;$totalThreat=0;$stateCombat = False;$totalHitCrit=0;$arraySource=array();$combatRef=0; while (($line = fgets($handleresult)) !== false) { $log = new LogEvent; $log = $log->arrayEvent($line); // Combat detection if( strstr($log[4][1],'EnterCombat') ) { $stateCombat = True; $combatRef++; $encounter=explode(" (", $log[5][1]); $arraySource[$combatRef]["encounter"] = $encounter[0]; $arraySource[$combatRef]["startCombatDate"] = $log[0][1]; } elseif ( strstr($log[4][1],'ExitCombat') ) { $stateCombat = False; $arraySource[$combatRef]["endCombatDate"] = $log[0][1]; } if( $stateCombat ) { $logDate = $log[0][1]; $logSource = $log[1][1]; $logTarget = $log[2][1]; $logAbility = $log[3][1]; $logEffect = $log[4][1]; $logValue = (isset($log[5][1]) && ($log[5][1] != ''))?explode(" ", $log[5][1]):0; $logThreat = isset($log[6][1])?$log[6][1]:0; // On traire les valeurs renvoyées dans $logValue (ex: 519* energy {836045448940874}) if( is_array($logValue) ) { $logAmount = $logValue[0]; $logDmgType = isset($logValue[1])?$logValue[1]:0; $logDmgId = isset($logValue[2])?$logValue[2]:0; } else { $logAmount = $logValue; } // On incrémente le nombre de coups critiques si c'est un critique if (strstr($logAmount, '*')) { $hitCrit = True; $logAmount = str_replace('*','',$logAmount); } else { $hitCrit = False; } // On construit le tableau final seulement si la source est un joueur ou un boss $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["target"] = $logTarget; $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["ability"] = $logAbility; $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["dmgType"] = $logDmgType; $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["dmgDone"] = $logAmount; $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["hitCritDone"] = $hitCrit; $arraySource[$combatRef][$log[1][1]][$log[0][1]]["source"]["threatDone"] = $logThreat; } } print_r($arraySource); } else { echo "Error while loading file handle !"; } ?>