Problema senza senso!

TheTrigger

Utente Attivo
3 Giu 2011
38
0
0
Salve a tutti, apro questa discussione in modo abbastanza disperato

Nel mio codice php, ho una funzione che mi salva dei dati di testo (degli array 'parsati') su un altro file php (questo file ha estensione php ma non viene 'eseguito', solo letto come testo), praticamente il codice che lo genera è strutturato così:


Codice:
# FILE 1
varie elaborazioni
Ciclo di 2
{
 elabora dati
 Salva dati.
} // alla fine di questo sono state salvate 2 righe di array(multidimensionali) parsati.. es: $array[$X]['datox']['datoy]['datoz'], su $X cè 1 e 2, e vengono salvati correttamente
__
(questo file viene incluso poco dopo)
#FILE 2
carica & visualizza dati (e si stampano 'giustamente' 2 righe)

La funzione che salva i dati, quando lo fa scrive su schermo una frase gigante (proprio x accertarmi che i salvataggi siano avvenuti e nel numero corretto), e mi vengono stampati appunto questi 2 avvisi.
Invece la funzione viene richiamata ben 4 volte! (o meglio, il salvataggio è eseguito 4 volte e l'avviso avviene 2 volte). All'interno di questa funzione NON ci sono cicli!

Sarà 1 mese che cerco il pezzo di codice marcio, ma non ce ne è traccia... stò cominciando a pensare che sia qualche altro problema (qualcosa overflow???oO), utilizzo vettori con anche 5 profondità (farà mica impazzire php?._.) ed anche le funzione ob_start, ma ho provato a rimuoverle ma non cambia niente.....

Un altra cosa senza senso apparente è che se metto un die() nel file che carica i dati prima della metà il codice di salvataggio si comporta nella maniera giusta, se invece lo metto dopo circa la metà il codice sballa come ho descritto...

Chissà cosa penserete dopo aver letto una 'boiata' del genere, ma proprio non ne vengo a capo..!!

// Non ho postato il codice perché lo ritengo troppo intrippato.. ma se non avete idea di cosa possa essere (al di fuori di errori di codice) lo incollo..

Grazie
 
Ok capo... Il mio progetto è un browsergame (giusto x farti capire il senso del codice), e questa è la parte relativa agli scontri a turni.


ELABORAZIONE DEI DATI:
PHP:
<?php
require_once('battle/lib.battle.php');

// questa pagina viene inclusa nella index.php
if ($battle_status == 1)
{	
	### INIT ###
	$data['action_type'] = 0;
	$spellid = 0;
	$EndBattle = FALSE;
	############
	
	### leggi azione del player
	
	if 	(substr($act,0,8) == 'spellid:')
	{
		$spellid = (int)substr($act,8);
		$data['action_type'] = 2; # try to cast a spell
	}
	elseif (!empty($act))
		switch ($act)
		{
			case 'attack':
				$data['action_type'] = 1;
				$spellid = 0;
				debug("Azione: Attacco");
			break;
			
			case 'fuga':
				TryEscapeBattle();
				$data['action_type'] = 1;
				$spellid = 0;
				debug("Azione: FUGA");
			break;
			
			default:
				$data['action_type'] = 0;
				$spellid = 0;
				debug("AZIONE: NO",1);
			break;
			
		}
		
	
	if ($data['action_type'] != 0)
	{
		// leggo l'ID del match
		$matchid =& $PLAYER['matchid'];
		$array = read_Match($matchid);
		
		$Players = 1; // Dopotutto, io ci son perforza,no?
		foreach($array[0][0] as $key => $value)
		{
			if (is_numeric($array[0][0][$key]['id'])) 
			{
				++$Players; 
				$CreepID = $key;
				//debug("\$CreepID settato su '$CreepID'");	
			}
		}
				
		$guys[$name]['nome'] =& $PLAYER['nome'];
		$guys[$name]['hp'] =& $PLAYER['hp'];
		$guys[$name]['hp_max'] =& $PLAYER['hp_max'];
		$guys[$name]['mana'] =& $PLAYER['mana'];
		$guys[$name]['mana_max'] =& $PLAYER['mana_max'];
		$guys[$name]['level'] =& $PLAYER['level'];
		$guys[$name]['forza'] =& $PLAYER['forza'];
		$guys[$name]['destrezza'] =& $PLAYER['destrezza'];
		$guys[$name]['intelligenza'] =& $PLAYER['intelligenza'];
		$guys[$name]['fatica'] =& $PLAYER['fatica'];
		$guys[$name]['fame'] =& $PLAYER['fame'];
		$guys[$name]['basedamage'] =& $PLAYER['basedamage'];
		$guys[$name]['attack'] =& $PLAYER['attack'];
		$guys[$name]['armor'] =& $PLAYER['armor'];
		$guys[$name]['buffs'] = $PLAYER['buffs'];
		$guys[$name]['weaponid'] =& $PLAYER['weaponid'];
		$guys[$name]['armorid'] =& $PLAYER['armorid'];
		$guys[$name]['id'] =& $PLAYER['nome'];
		$guys[$name]['buffs'] = $PLAYER['buffs'];
		$guys[$name]['avatar'] =& $PLAYER['avatar'];
		$guys[$name]['azione'] = 0;
		
		$MaxRound = (count($array)-1); // Rounds 
		$MaxSubRound = (count($array[$MaxRound])-1); // SubRounds
		
		$SaveNRound = $MaxRound+1;	
			
		## Ora leggo le stats
		$guys[$CreepID] = $array[$MaxRound][$MaxSubRound][$CreepID];
			
		if(isset($array[$MaxRound][$MaxSubRound][$name]))
			$guys[$name]['buffs'] = $array[$MaxRound][$MaxSubRound][$name]['buffs'];
			
		if(!isset($guys[$CreepID]['avatar'])) $guys[$CreepID]['avatar'] = FALSE;
			
		##########	
		for ($SubRound = 1; $SubRound <= $Players; $SubRound++)
		{
			# caso di chi attacca.
			# leggi ultimo attaccante per percentuali(da fare)
			switch($SubRound)
			{
				case 1:
					$guy = $name;
					$target = $CreepID;
					break;
				
				case 2:
					$guy = $CreepID;
					$target = $name;
					break;
			}
			$guys[$target]['azione'] = 0;
			$guys[$guy]['azione'] = 1;
			
			if (($guys[$guy]['hp'] > 0) && ($guys[$target]['hp'] > 0))
			{
				
				#								#
				#		INIZIALIZZAZIONE		#
				#			BATTAGLIA			#
				#								#
				#								#
				
				$data['criticalchance'] = 3; // %di critico (modifica in base allo spirito e altre cazz4te)
				$data['extradamage'] = 0; // x + y
				$data['moltiplicator'] = 1; // x * y
				$data['total_damage'] = 0;
				$guys[$guy]['dannoinflitto'] = 0;
				
				
				if(!is_array($guys[$guy]['buffs'])) $guys[$guy]['buffs'] = array();
				
				if (is_numeric($guy)) // scriptare la ia
				{
					debug('Azione creep (1)');
					$data['action_type'] = 1;
					$spellid = 0;
				}
	
				if ($data['action_type'] == 2) // Cast
				{
					debug("Rilevato tentativo di cast: ($spellid)");
					$guys[$guy]['buffs'][$spellid] = SPELL_LOAD($spellid);
					
					if ($guys[$guy]['mana'] >= (int)$_SESSION['SPELL_CACHE'][$spellid]['manacost'])
					{
						$guys[$guy]['mana'] -= $_SESSION['SPELL_CACHE'][$spellid]['manacost'];
						debug("MANA PRESENTE.");
					}
					else
					{
						debug("NIENTE MANA! Spellid >> 4");
						$guys[$guy]['buffs'][$spellid = 4] = SPELL_LOAD($spellid,'rounds');
					}
				}	
			
			
				if(mt_rand(1,100) <= $data['criticalchance'] && $spellid == 0)
				{
					debug("Eseguito critico!");
					$spellid = 3;
					$guys[$guy]['buffs'] = SPELL_LOAD(3,'rounds');
				}
				
				//var_dump($guys[$guy]['buffs']);
				
				BattleBuffs($guy);

				if ($data['action_type'] == 1)
				{
					$logaritmodifesa = ArmorMath($guys[$target]['armor']);
					
					$data['total_damage'] += 
						round((
							($guys[$guy]['basedamage']+mt_rand(-$guys[$guy]['basedamage']*0.13,$guys[$guy]['basedamage']*0.13)) 
							* $data['moltiplicator'])+$data['extradamage']);
							
					$data['total_damage'] = round($data['total_damage'] - $data['total_damage'] * $logaritmodifesa);
					
					$guys[$guy]['dannoinflitto'] = $data['total_damage'];
					# ...
					#		...
					$guys[$target]['hp'] -= $data['total_damage'];
				}
				
				if ($PLAYER['records']['maxdamage'] < $data['total_damage'])
					$PLAYER['records']['maxdamage'] = $data['total_damage'];
					
				$PLAYER['records']['totdamage'] += $data['total_damage'];
				
			}
			
			###########################################################################################################
			$EndBattle = CheckEndBattle($CreepID);
					
			mysql_("UPDATE ".TABLE_PLAYER." SET records = '".serialize($PLAYER['records'])."' WHERE id = {$PLAYER['id']}");
														
			mysql_("UPDATE ".TABLE_ATTR." SET hp = '{$PLAYER['hp']}', mana = '{$PLAYER['mana']}'																
												WHERE id_p = {$PLAYER['id']}");						
			
			
			//if ($ != 0)
			{
				if(update_battle($matchid,$guys,$SaveNRound,$SubRound) == TRUE)
					debug("Salvato! >> update_battle($matchid,$guys,$SaveNRound,$SubRound)");
				else
					debug('Salvataggio Bnet3 Fallito',3);	
			}
			
			if ($EndBattle == TRUE)
			{
				RemoveEndBattleBuffs($guy);
				mysql_('UPDATE '.TABLE_PLAYER." SET	buff = '".serialize($guys[$guy]['buffs'])."' WHERE id = {$PLAYER['id']}");
				break;
			}
			
		} // end FOR
	}

}
unset($array,$guys);
?>



FUNZIONE CHE SALVA I DATI:
PHP:
function update_battle($matchid,$guys,$round,$sub_round)
{
	if (!is_numeric($matchid)) debug("Errore: \$matchid: $matchid non è un numero (update_battle function)",3);
	if (!is_array($guys)) debug("Errore: \$guys non è un array! (update_battle function)",3);
	if (!is_numeric($round) && $round<0) debug("Errore: \$round:$round non valido $matchid (update_battle function)",3);
	if (!is_numeric($sub_round) && $sub_round<0) debug("Errore: \$sub_round:$sub_round non valido (update_battle function)",3);
	
	foreach($guys as $name => $a)
	{
		if(!isset($a['buffs']))
			$array[$round][$sub_round][$name]['buffs'] = '';
	}
	
	$array[$round][$sub_round] = $guys; // => $array[$round][$sub_round][creep/player][stats];
	
	echo "<h2>DATI SALVATI!</h2><br>";
	if(!$file = fopen($_SERVER['DOCUMENT_ROOT']."/battle/match/$matchid.php",'a'))
	{
		debug('Errore: Impossibile leggere/scrivere/trovare il file $matchid.php',3);
		return FALSE;
	}
	else
	{
		fwrite($file, serialize($array).'<END>');
		fclose($file);
		return TRUE;
	}
			
}



VISUALIZZAZZIONE DEI DATI:
PHP:
<?php
require_once('battle/lib.battle.php');

$array = read_Match($PLAYER['matchid']);

//print_r($array);
foreach($array[0][0] as $key => $value)
	if(is_numeric($key) && isset($value) && $value['id'] == $key)
		$CreepID = $key;

foreach($array as $Round => $SBA)
{
	echo "Round: $Round";
	foreach($SBA as $SubRound => $display)
	{	
		if (!$Round && !$SubRound)
		{
			echo "<div class='battle_init'>Incontri <strong>{$display[$CreepID]['nome']}</strong> che ti attacca con <strong>{$display[$CreepID]['weaponname']}</strong></div>";
		}
		else
		{
			switch($display[$name]['azione'])
			{
				case 0: // stò sukando
					$guy = $CreepID;
					$target = $name;
					break;
				
				case 1: // stò attaccando
					$guy = $name;
					$target = $CreepID;
					break;
			}
			
			
			echo '<actioncontainer>
				<div id=azione>',
				($display[$guy]['dannoinflitto'] == 0)?
				"<font color='#CC6600'>{$display[$guy]['nome']} tenta di colpire {$display[$target]['nome']} ma lo manca!</font><br />":
				"{$display[$guy]['nome']} attacca {$display[$target]['nome']} infliggendo {$display[$guy]['dannoinflitto']} danni!",
				
				"</div><div id=left>
					<img src='",$display[$guy]['avatar'],"' width='54' height='54' border='0' align='left'>
					{$display[$guy]['nome']} HP: {$display[$guy]['hp']}<br />
					{$display[$guy]['nome']} MP: {$display[$guy]['mana']}"
					,display_buffs($display[$guy]['buffs']),'</div>',
				
				(($display[$target]['hp'] <= 0) ? '<span style="' . ruotaimmagine(-15,-25) . ' margin-left:50px; padding-top:30px; text-shadow:0px 0px 12px red;  font-size:60px; position:absolute">OWNED</span>': NULL),
				'<div id=right>
					<img src="'.@$display[$target]['avatar'],'" width="54" height="54" border="0" align="right">
					',$display[$target]['nome'],' HP: ',$display[$target]['hp'],"<br />\r\n" ,
					$display[$target]['nome']," MP: ",$display[$target]['mana']
					
					
					
				/*,display_buffs($display[$target]['buffs'])*/,'</div></actioncontainer>';
	 	}
	}
} 
?>


grazie
 
Perché aggiungi <END> alla fine del file? È inutile. PHP capisce che la stringa è serializzata e tramite la funzione unserialize ti dovrebbe restituire l'array. A parte questo, puoi postare il contenuto di un file di esempio? Così vediamo se il problema è lì oppure nell'elaborazione. Non mi sembra che ci siano errori evidenti nello script.
 
<END> lo uso perché ci sono più valori serializzati, dato che li inserisco in momenti anche diversi ho deciso di aggiungerli a cascata invece di caricare tutto il file e risalvarlo.

Questa è la funzione di lettura
PHP:
function read_Match ($matchid)
{
	$url = $_SERVER['DOCUMENT_ROOT']."/battle/match/$matchid.php";		
	if (file_exists($url) && is_readable($url))
	{
		$file_cont = file_get_contents($url);
		$righe = explode('<END>',$file_cont);
		foreach ($righe as $serial)
		{
			$x = unserialize($serial);
			if (is_array($x))
				foreach ($x as $Round => $SB_)
					foreach ($SB_ as $SubRound => $Guys)
						if (isset($array[$Round][$SubRound]))
							debug(">>read_Match ($matchid) già settato [$Round][$SubRound]",2); // Questo non si verifica mai
						else
							$array[$Round][$SubRound] = $Guys;
		}
		return $array;
			
	} else debug('Impossibile leggere il file',3);
}


Il file salvato è tipo questo: (Generato da 2 turni, invece ce ne sono 4) (ogni turno include 2subturni)
Codice:
a:1:{i:0;a:1:{i:0;a:1:{i:4;a:15:{s:2:"hp";s:3:"500";s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:0;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";i:0;}}}}<END>a:1:{i:1;a:1:{i:1;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";s:3:"450";s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:1;s:13:"dannoinflitto";d:7;}i:4;a:16:{s:2:"hp";d:493;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:0;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";i:0;s:6:"avatar";b:0;}}}}<END>a:1:{i:1;a:1:{i:2;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";d:442;s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:0;s:13:"dannoinflitto";d:7;}i:4;a:17:{s:2:"hp";d:493;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:1;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";a:0:{}s:6:"avatar";b:0;s:13:"dannoinflitto";d:8;}}}}<END>a:1:{i:2;a:1:{i:1;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";s:3:"442";s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";i:1;s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:1;s:13:"dannoinflitto";d:8;}i:4;a:16:{s:2:"hp";d:485;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:0;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";i:0;s:6:"avatar";b:0;}}}}<END>a:1:{i:2;a:1:{i:2;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";d:434;s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";i:1;s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:0;s:13:"dannoinflitto";d:8;}i:4;a:17:{s:2:"hp";d:485;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:1;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";a:0:{}s:6:"avatar";b:0;s:13:"dannoinflitto";d:8;}}}}<END>a:1:{i:3;a:1:{i:1;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";s:3:"434";s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:1;s:13:"dannoinflitto";d:7;}i:4;a:16:{s:2:"hp";d:478;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:0;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";i:0;s:6:"avatar";b:0;}}}}<END>a:1:{i:3;a:1:{i:2;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";d:427;s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:0;s:13:"dannoinflitto";d:7;}i:4;a:17:{s:2:"hp";d:478;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:1;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";a:0:{}s:6:"avatar";b:0;s:13:"dannoinflitto";d:7;}}}}<END>a:1:{i:4;a:1:{i:1;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";s:3:"427";s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:1;s:13:"dannoinflitto";d:8;}i:4;a:16:{s:2:"hp";d:470;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:0;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";i:0;s:6:"avatar";b:0;}}}}<END>a:1:{i:4;a:1:{i:2;a:2:{s:10:"TheTrigger";a:21:{s:4:"nome";s:10:"TheTrigger";s:2:"hp";d:419;s:6:"hp_max";s:3:"450";s:4:"mana";s:3:"150";s:8:"mana_max";s:3:"150";s:5:"level";s:1:"3";s:5:"forza";s:1:"1";s:9:"destrezza";s:1:"1";s:12:"intelligenza";s:2:"22";s:6:"fatica";s:1:"5";s:4:"fame";s:3:"465";s:10:"basedamage";i:11;s:6:"attack";i:56;s:5:"armor";i:7;s:5:"buffs";a:0:{}s:8:"weaponid";N;s:7:"armorid";N;s:2:"id";R:5;s:6:"avatar";s:10:"avatar.png";s:6:"azione";i:0;s:13:"dannoinflitto";d:8;}i:4;a:17:{s:2:"hp";d:470;s:4:"mana";s:3:"200";s:5:"level";s:2:"75";s:10:"weaponname";s:21:"You are not prepared!";s:8:"weaponid";s:1:"8";s:10:"basedamage";s:2:"10";s:9:"basearmor";s:2:"20";s:5:"armor";i:20;s:4:"nome";s:7:"Illidan";s:2:"id";s:1:"4";s:6:"azione";i:1;s:5:"danno";i:0;s:8:"dropgold";N;s:7:"dropexp";N;s:5:"buffs";a:0:{}s:6:"avatar";b:0;s:13:"dannoinflitto";d:8;}}}}<END>

Si, sò che è senza dubbio da migliorare, troppo ridondante...
 
Dunque, per prima cosa, invece di usare <END> inserisci semplicemente un carattere di fine linea (\n o PHP_EOL). In questo modo puoi leggere il file usando la funzione file, che crea un array in cui ogni elemento corrisponde ad una riga.

Poi, la deserializzazione del contenuto porta a questo array:
Codice:
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [4] => Array
                        (
                            [hp] => 500
                            [mana] => 200
                            [level] => 75
                            [weaponname] => You are not prepared!
                            [weaponid] => 8
                            [basedamage] => 10
                            [basearmor] => 20
                            [armor] => 20
                            [nome] => Illidan
                            [id] => 4
                            [azione] => 0
                            [danno] => 0
                            [dropgold] => 
                            [dropexp] => 
                            [buffs] => 0
                        )

                )

        )

)
Sbaglio, o non è esattamente quello che volevi tu? Se ad un round corrisponde un array, allora qui il round è uno...
 
L'array prodotto e letto vanno benissimo (poi userò file() come mi hai consigliato), il primo indice definisce il turno, il secondo il subturno, nel terzo c'è l'identificatore player/creep e gli altri sono i relativi dati, il problema è che se ne generano + di quanti ne voglio... la battaglia sembra proprio che si ripeta, di output debug() o echo non viene visualizzato niente e non ci sono altri cicli.. sembra un Daemon staccato dal codice ._.
In più, quando gli faccio eseguire una 'magia' non c'è solo 1 turno in eccesso, ma ben 4o5. (ad esempio: le magie durano es: 5 turni, se eseguo turni normali funziona(e il conto alla rovescia si abbassa), mentre nei turni 'doppi'(quelli indesiderati) rimane sempre a 5, mentre però tutti gli altri valori vengono calcolati come se fossero azioni normali...

..non capisco è xche la funzione update_battle() non dica quando e xche queste 'azioni fantasma' avvengono......


L'array che hai recuperato è il primo array serializzato, ce ne sono 5 (il primo di inizializzazione e 4 di turni)

ti ringrazio per l'aiuto che mi stai dando
 

Discussioni simili