Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

BrunoGysin

Erro funçao unserialize

Recommended Posts

Estou com o seguinte erro

 

Notice: unserialize() [function.unserialize]: Error at offset 840 of 2302 bytes in /data/methods/mob_db/ver-MonsterController.php on line 329

 

a linha e

 

$Spawns = unserialize($this->getAttr('spawns'));

 

 

Ou seja

if(is_array($Spawns)) { 

       $pASD="";

       foreach($Spawns as $cS => $sP) {

       $mname    = $cS;
       $title    = $sP['map_name'];
       $count    = $sP['amount'];

       if($count==FALSE) continue;
       else $pASD .= "<li><a href=\"?act=ver-mapas&field={$mname}\">{$title}</a> ({$mname}) [{$count}]</li>";

       }

     $Spawns = substr($pASD,0,-2);

     }

     if(!is_string($Spawns) || strlen($Spawns)==0) $Spawns = "<center>N/A</center>";

     $this->setAttr('spawns', $Spawns);

     // Monster drops

     $this->setAttr('drops', $this->createItemDropTable($this->getAttr('drops'),1));

       // Boss drops

         if($this->getAttr('mexp') > 0) {
         $this->setAttr('mdrops', $this->createItemDropTable($this->getAttr('mdrops'),2));
         }

   }

 

essa funçao fais exibir os mapas que aquele mob vive de acordo com a tabela na mysql

 

a:26:{s:10:"ein_fild07";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";i:160;}s:10:"ein_fild08";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";i:100;}s:10:"gef_fild00";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (00)";s:6:"amount";i:200;}s:10:"gef_fild04";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (04)";s:6:"amount";i:120;}s:10:"gef_fild05";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (05)";s:6:"amount";i:120;}s:10:"gef_fild07";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (07)";s:6:"amount";i:80;}s:9:"hu_fild06";a:2:{s:8:"map_name";s:15:"Campos de Hugel";s:6:"amount";i:40;}s:10:"mjolnir_08";a:2:{s:8:"map_name";s:18:"Monte Mjolnir (08)";s:6:"amount";i:40;}s:10:"moc_fild01";a:2:{s:8:"map_name";s:19:"Deserto Sograt (01)";s:6:"amount";i:40;}s:11:"mosk_fild02";a:2:{s:8:"map_name";s:17:"Campo de Moscóvia";s:6:"amount";i:40;}s:10:"pay_fild01";a:2:{s:8:"map_name";s:22:"Floresta de Payon (01)";s:6:"amount";i:40;}s:10:"pay_fild03";a:2:{s:8:"map_name";s:22:"Floresta de Payon (03)";s:6:"amount";i:120;}s:10:"pay_fild04";a:2:{s:8:"map_name";s:22:"Floresta de Payon (04)";s:6:"amount";i:160;}s:10:"pay_fild08";a:2:{s:8:"map_name";s:22:"Floresta de Payon (08)";s:6:"amount";i:120;}s:10:"prt_fild00";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (00)";s:6:"amount";i:160;}s:10:"prt_fild01";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (01)";s:6:"amount";i:120;}s:10:"prt_fild02";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (02)";s:6:"amount";i:120;}s:10:"prt_fild04";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (04)";s:6:"amount";i:120;}s:10:"prt_fild05";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (05)";s:6:"amount";i:280;}s:10:"prt_fild06";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (06)";s:6:"amount";i:240;}s:10:"prt_fild08";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (08)";s:6:"amount";i:280;}s:10:"prt_maze01";a:2:{s:8:"map_name";s:25:"Labirinto da Floresta (1)";s:6:"amount";i:20;}s:10:"xmas_dun01";a:2:{s:8:"map_name";s:33:"Depósito da Fábrica de Brinquedos";s:6:"amount";i:40;}s:11:"yuno_fild01";a:2:{s:8:"map_name";s:22:"Fronteira de Aldebaran";s:6:"amount";i:80;}s:11:"yuno_fild03";a:2:{s:8:"map_name";s:16:"Planalto de Juno";s:6:"amount";i:120;}s:11:"yuno_fild04";a:2:{s:8:"map_name";s:16:"Planalto de Juno";s:6:"amount";i:240;}}

 

 

Mais quando eu Adiciono a seguinte outro testo na mysql (a que veio com o site)

Esse:

a:24:{s:10:"ein_fild07";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";s:2:"40";}s:10:"ein_fild08";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";s:2:"25";}s:10:"gef_fild00";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (00)";s:6:"amount";s:2:"50";}s:10:"gef_fild04";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (04)";s:6:"amount";s:2:"30";}s:10:"gef_fild05";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (05)";s:6:"amount";s:2:"30";}s:10:"gef_fild07";a:2:{s:8:"map_name";s:24:"Arredores de Geffen (07)";s:6:"amount";s:2:"20";}s:9:"hu_fild06";a:2:{s:8:"map_name";s:15:"Campos de Hugel";s:6:"amount";s:2:"10";}s:11:"yuno_fild01";a:2:{s:8:"map_name";s:22:"Fronteira de Aldebaran";s:6:"amount";s:2:"20";}s:11:"yuno_fild03";a:2:{s:8:"map_name";s:16:"Planalto de Juno";s:6:"amount";s:2:"30";}s:11:"yuno_fild04";a:2:{s:8:"map_name";s:16:"Planalto de Juno";s:6:"amount";s:2:"60";}s:10:"mjolnir_08";a:2:{s:8:"map_name";s:18:"Monte Mjolnir (08)";s:6:"amount";s:2:"10";}s:10:"moc_fild01";a:2:{s:8:"map_name";s:19:"Deserto Sograt (01)";s:6:"amount";s:2:"10";}s:10:"pay_fild01";a:2:{s:8:"map_name";s:22:"Floresta de Payon (01)";s:6:"amount";s:2:"10";}s:10:"pay_fild03";a:2:{s:8:"map_name";s:22:"Floresta de Payon (03)";s:6:"amount";s:2:"30";}s:10:"pay_fild04";a:2:{s:8:"map_name";s:22:"Floresta de Payon (04)";s:6:"amount";s:2:"40";}s:10:"pay_fild08";a:2:{s:8:"map_name";s:22:"Floresta de Payon (08)";s:6:"amount";s:2:"30";}s:10:"prt_maze01";a:2:{s:8:"map_name";s:25:"Labirinto da Floresta (1)";s:6:"amount";s:1:"5";}s:10:"prt_fild00";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (00)";s:6:"amount";s:2:"40";}s:10:"prt_fild01";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (01)";s:6:"amount";s:2:"30";}s:10:"prt_fild02";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (02)";s:6:"amount";s:2:"30";}s:10:"prt_fild04";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (04)";s:6:"amount";s:2:"30";}s:10:"prt_fild05";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (05)";s:6:"amount";s:2:"70";}s:10:"prt_fild06";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (06)";s:6:"amount";s:2:"60";}s:10:"prt_fild08";a:2:{s:8:"map_name";s:26:"Arredores de Prontera (08)";s:6:"amount";s:2:"70";}}

 

o Erro sai e amostra tudo certinho

 

 

Para adicionar de uma maneira fácil isso na tabela da database existe umas paginas em php que transfere de uma tabela para outro deixando dessa forma ai

 

Alguém ajuda D= já tentei de varias formas

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique tb se "magic_quotes_gpc" está ativado

por padrão deve estar desativado..

 

se não puder desativá-lo, crie uma condicional antes de unserialize()

if( get_magic_quotes_gpc() )
{
$str = stripslashes($str);
}
unserialize( $str );

 

 

Para desativar o magic_quotes_gpc em tempo de execução:

ini_set('magic_quotes_gpc',FALSE);

 

 

 

obs: no php do OS-X(mac) o magic_quotes_gpc vem ativado por padrão...

alguns hosts mal configurados também mantém ativado..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo =/

 

eu percebi que quando adiciona nas tabelas ele adiciona diferente da qual tava acho que provoca esse erro

 

eu tenho uma pagina em php quando executa ela, ela envia as localização de uma tabela para outra nesse processo ela fica diferente da qual tava,

 

obs:

 

o normal E funciona tem Essa linha :

a:26:{s:10:"ein_fild07";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";i:160;}

 

Não funciona:

a:24:{s:10:"ein_fild07";a:2:{s:8:"map_name";s:18:"Campos de Einbroch";s:6:"amount";s:2:"40"}

 

 

ali no final tem ( s:6 ) no de cima tem tem so ( i ) e no numero 40 tem 1(um) ( " ) Aspa dupla não sei o nome ao certo

 

qual quer coisa essa e a pagina php responsável por enviar de uma tabela para outra e deixar dessa forma:

<?php

 

$query = mysql_query("SELECT * FROM mob_db");

 

$i=0;

 

while($monster = mysql_fetch_array($query)) {

 

unset($this_mob_total_spawn);

unset($submit);

 

$g=0;

$i++;

 

echo "</p><p><b>Monster Nr. " . $i . ": ID " . $monster['ID'] . ", ". $monster['iName'] ."</b><br />";

 

$maps_query = mysql_query("SELECT * FROM spawns WHERE mob_id=". $monster['ID'] ."");

 

while($map = mysql_fetch_array($maps_query)) {

 

//$g++;

//echo "$g: " . $map['map'] . " (". $map['amount'] .")<br /\n>";

 

if(is_numeric($alice[$map['map']]['amount'])) {

$alice[$map['map']]['amount'] += $map['amount'];

} else {

$alice[$map['map']] = array (

'map_name' => $map['map_name'],

'amount' => $map['amount']

);

}

 

}

 

 

foreach($alice as $map => $mapdata) {

echo $map . " (" . $mapdata['map_name'] . "), " . $mapdata['amount'] . "<br />\n";

}

 

mysql_query("UPDATE mob_db SET Spawns='". mysql_real_escape_string(serialize($alice)) ."' WHERE ID=". $monster['ID'] ."");

 

unset($alice);

 

}

 

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você está montando um DB de Rag.

Clássico erro de tentar usar mapas em português...

 

Você está usando a ferramenta de importar para gerar os Spawns passo 4 e após está usando os spawns gerados para importar par ao mob_db (passo 5)

 

Quando você busca um monstro aparece o erro que você citou e a localização do monstro fica em N/A correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Evandro Oliveira

Você já havia citado o problema para ele na sua primeira resposta. Este erro que ele tem é por conta de usar os dados em português, se usar em inglês funciona perfeitamente.

 

Esta é a função que pega os dados e joga na página de resultados. Essa função mostra o mapa em que os monstros se encontram.

 

// Map locations

     $Spawns = unserialize($this->getAttr('spawns'));

     if(is_array($Spawns)) {

       $pASD="";

       foreach($Spawns as $cS => $sP) {

       $mname    = $cS;
       $title    = $sP['map_name'];
       $count    = $sP['amount'];

       if($count==FALSE) continue;
       else $pASD .= "<a href=\"?act=fieldview&field={$mname}\">{$title}</a> ({$mname}) [{$count}], ";

       }

     $Spawns = substr($pASD,0,-2);  // Esta linha é a 329 que dá o erro.

     }

     if(!is_string($Spawns) || strlen($Spawns)==0) $Spawns = "<center>N/A</center>";

     $this->setAttr('spawns', $Spawns);

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Evandro Oliveira

Você já havia citado o problema para ele na sua primeira resposta. Este erro que ele tem é por conta de usar os dados em português, se usar em inglês funciona perfeitamente.

 

Prefiro encontrar a causa do problema e resolver do que me conformar com "não dá pra fazer assim".

 

Eu quero a implementação de 'getAttr', e não o seu uso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prefiro encontrar a causa do problema e resolver do que me conformar com "não dá pra fazer assim".

 

Eu quero a implementação de 'getAttr', e não o seu uso.

 

Para resolver isso primeiro você tem que entender o sistema, sem isso não vai ter programação que faça milagre....

 

Só te dar uma dica.... Alguns Mapas em português funcionam perfeitamente... mesmo com acentos outros não...

 

Boa Sorte...

 

Esse é o resultado desejado por ele:

 

jiboia.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você está montando um DB de Rag.

Clássico erro de tentar usar mapas em português...

 

Você está usando a ferramenta de importar para gerar os Spawns passo 4 e após está usando os spawns gerados para importar par ao mob_db (passo 5)

 

Quando você busca um monstro aparece o erro que você citou e a localização do monstro fica em N/A correto?

Sim

 

 

Eu também já retirei todos os acentos,

 

 

a linha 329 que aparece no erro e essa

 

$Spawns = unserialize($this->getAttr('spawns'));

 

 

a data base tem uma versão em português bem antigo e desatualizado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

a linha 329 que aparece no erro e essa

 

$Spawns = unserialize($this->getAttr('spawns'));

 

 

Meu querido, essa linha já foi postada, no mínimo, 4 vezes e eu já entendi isso.

 

Eu preciso que vocês localizem algo parecido com

public function getAttr($attribute) ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o código que controla os resultados dos monstros...

<?php if(!defined('EFFICIENT_ROOT')) exit;

 // --- Print monster results

 // This is the MonsterController class from the Cailloux project.
 // I liked this one better than the other variant, so I decided to copy/paste this in with
 // minimal changes instead of trying to work with the old MOB_PRINT_RESULTS function.

 // Basic use goes like this:

 // Initialize
 // $var = new MonsterController(DROP_RATE, DB_STRUCT_MOB, MEDIA_RES_PATHS, MEDIA_FILE_TYPES);

 // Output result with something like this
 // $var->runMonsterRes(SQL_OUTPUT, OUTPUT_LIMIT, OUTPUT_OFFSET);

 class MonsterController extends Controller {

 public $layout, $lpath;
 public $droprate, $exprate, $eleprop;
 public $eattk, $defence;

 public function __construct($droprates, $exprates, $eleprops, $db_struct, $res_paths, $file_ext) {
   $this->droprate = $droprates;
   $this->dbstruct = $db_struct;
   $this->respaths = $res_paths;
   $this->mediaext = $file_ext;
   $this->exprate = $exprates;
   $this->eleprop = $eleprops;
 }

  /*********************************/
  /* Elemental damage calculation
  /*********************************/
  static function setElements($el) {

   $t=0;
   $elements = array('neutral', 'water', 'earth', 'fire', 'wind', 'poison', 'holy', 'shadow', 'ghost', 'undead');
   foreach($elements as $k=>$v) {
     $element_attack[$v] = (($el[$t] > 1) ? '<span style=\'color: #00aa00\'>' : (($el[$t] < 0) ? '<span style=\'color: #aa0000\'>' : '<span>')) . $el[$t]*100 . '</span>';
     $t++;
   }

   return $element_attack;

  }

   public function monsterMode($mode) {

     $array_mode = array(
       1     =>  message('db_mode01'),
       2     =>  message('db_mode02'),
       4     =>  message('db_mode03'),
       8     =>  message('db_mode04'),
       16    =>  message('db_mode05'),
       32    =>  message('db_mode06'),
       64    =>  message('db_mode07'),
       128   =>  message('db_mode08'),
       256   =>  message('db_mode09'),
       512   =>  message('db_mode10'), // Not used anymore
       1024  =>  message('db_mode11'),
       2048  =>  message('db_mode12'),
       4096  =>  message('db_mode13'),
       8192  =>  message('db_mode14'),
     );

     $result = array();

     $z="";

       for($i = 0;$i <= 13;$i++) {
          if($mode & pow(2,$i)) {
              $result[] = pow(2,$i);
          }
          elseif($i == 0) {
          $z .= '<li>' . message('db_mode00') . '</li>' . "\n";
          }
       }

       // Some modes are being skipped from being printed
       foreach($result as $k=>$v) {
         if($v == 1 || $v == 128 || $v == 512) {
           continue;
         }
         else {
           $z .= "<li>{$array_mode[$v]}</li>";
         }
       }

       if(!$z) {
         $z = "    <li>" . message('db_mode-1') . "</li>\n";
       }

       return "<ul>".$z."</ul>";
   }

   private function monsterSkills($array) {

     $Skills = unserialize($array);
     $sUtil  = array(); 
     $sTotal = "";

     if(is_array($Skills) && count($Skills) > 0) {

       foreach ($Skills as $key => $sData) {

         switch($sData['skillState']) {
           case 'idle':    $sState = message('db_sstate1'); break;
           case 'attack':  $sState = message('db_sstate2'); break;
           case 'follow':  $sState = message('db_sstate3'); break;
           case 'angry':   $sState = message('db_sstate4'); break;
           case 'chase':   $sState = message('db_sstate5'); break;
           case 'walk':    $sState = message('db_sstate6'); break;
           default: $sState = '???';
         }

         if($sData['skillName'] == "NPC_KEEPING" || $sData['skillName'] == "NPC_EMOTION" || $sData['skillName'] == "NPC_SMOKING" || $sData['skillName'] == "NPC_EMOTION_ON" || $sData['skillName'] == "")
           continue;

         elseif(array_key_exists($sData['skillID'].$sData['skillLvL'], $sUtil)) 
           continue;

         $sTotal .= "<li><a title=\"$sState\">" . message('db_skillvl')  . " " . $sData['skillLvL'] . " " . $sData['skillTitle'] . "</a></li>";
         $sUtil[$sData['skillID'].$sData['skillLvL']] = TRUE; 

       }

       $Skills = (empty($Skills)) ? "" : "<ul>$sTotal</ul>";

     } 

     else $Skills = "<ul><li>" . message('db_noskills') . "</li></ul>";

     return $Skills;

   }

   // Use: createItemDropTable([array with item drops], [drop type, 1=regular; 2=MvP drops])
   public function createItemDropTable($ItemDrops, $dropType) {

     $ItemDrops = unserialize($ItemDrops);

     $totalItems = count($ItemDrops);

      $g=0;
      $dropTable="";

     if(!is_array($ItemDrops))
       return "<center>N/A</center>";

     foreach($ItemDrops as $Item) {

       $i['id']      = $Item['id'];
       $i['name']    = $Item['name'];
       $i['type']    = $Item['type'];
       $i['dropper'] = number_format($Item['dropChance']/100, 2);

     if($dropType == 2) $i['dropper'] *= $this->droprate['item_rate_mvp'];

     else {
       switch($i['type']) {
         case 0:   $i['dropper'] *= $this->droprate['item_rate_heal'];   break; // Healing item
         case 2:   $i['dropper'] *= $this->droprate['item_rate_use'];    break; // Usable item
         case 11:  $i['dropper'] *= $this->droprate['item_rate_use'];    break; // Delayed usable item
         case 3:   $i['dropper'] *= $this->droprate['item_rate_common']; break; // Misc
         case 4:   $i['dropper'] *= $this->droprate['item_rate_equip'];  break; // Weap
         case 5:   $i['dropper'] *= $this->droprate['item_rate_equip'];  break; // Equip
         case 6:   $i['dropper'] *= $this->droprate['item_rate_card'];   break; // Card
         case 7:   $i['dropper'] *= $this->droprate['item_rate_use'];    break; // Pet egg
         case 8:   $i['dropper'] *= $this->droprate['item_rate_use'];    break; // Pet equip
         case 10:  $i['dropper'] *= $this->droprate['item_rate_use'];    break; // Ammo
         default:  $i['dropper'] *= $this->droprate['item_rate_common'];        // Default
       }
     }

     if($i['dropper'] > 100) $i['dropper'] = 100;

     // Image file is fixed to 4001 for all cards.
     $imgID = ($i['id'] >= 4000 && $i['id'] <= 5000) 
       ? "4001"
       : $i['id'];

     $imgFileName = $imgID ."." . $this->mediaext['item'];

     //$alice = "<a href=\"http://" . CAILL_PATH . "/itemsearch/?cid=on&id=". $ItemID ."&ccoll_d=on\">$ItemName</a> ($ItemDropChance%)";
     $alice = "<a onclick=\"setDisplay('smokescreen'); showprop('ajaxFrame','" . $i['id'] . "', 'itemsearch');\">". $i['name'] ."</a> (". $i['dropper'] ."%)"; 

     $g++;

     $dropTable .= ($g == 1) 
       ? "<table cellspacing=\"1\" style=\"width: 100%\"><tr>"
       : (($g-1)%3 == 0
         ? "<tr>"
         : "")
       ;

     $dropTable .= "<td style=\"width: 33%\"><img onclick=\"popUp('" . $this->respaths['collection'] . "/" . $imgID . "." . $this->mediaext['collection'] . "')\" src=\"" . $this->respaths['item'] . "/" . $imgFileName .  "\" alt=\"{$i['name']}\" /> $alice</td>\n";

     if($g%3 == 0 || $g == $totalItems)

       $dropTable = ($g == 2) 
         ? $dropTable .= "<td style=\"width: 33%\"></td></tr>"
         : $dropTable .= "</tr>";

     if($g == $totalItems) 

       $dropTable .= "</table>\n\n";

    }

    return($dropTable);

   }


   public function prepareView() {

     $this->setAttr('exp',$this->getAttr('exp')*$this->exprate['bexp']);
     $this->setAttr('jexp',$this->getAttr('jexp')*$this->exprate['jexp']);

     // Race

     $race = $this->getAttr('race');

     switch($race) {
       case 0: $race = message('db_mob_race0'); break;
       case 1: $race = message('db_mob_race1'); break;
       case 2: $race = message('db_mob_race2'); break;
       case 3: $race = message('db_mob_race3'); break;
       case 4: $race = message('db_mob_race4'); break;
       case 5: $race = message('db_mob_race5'); break;
       case 6: $race = message('db_mob_race6'); break;
       case 7: $race = message('db_mob_race7'); break;
       case 8: $race = message('db_mob_race8'); break;
       case 9: $race = message('db_mob_race9'); break;
       default: $race = message('db_mob_race-1'); break;
     }

     $this->setStatistics('Race', $race);
     $this->setAttr('race',$race);

     // Defence / dmg. reduction

     $this->defence = $this->getAttr('defence') . ' ' . message('db_stat_def') . ' (' . (number_format($this->getAttr('defence')*(2/3),2)) . "% " . message('db_def_reduct') . ") / " . $this->getAttr('m_defence') . ' ' . message('db_stat_mdef');

     // Monster mode

     $this->setAttr('mode', $this->monsterMode($this->getAttr('mode')));

     // Dodge 95%

     $this->result['dodge'] = (75+$this->getAttr('mob_lvl')+$this->getAttr('dex'));

     // Hit 100%

     $this->result['hit'] = (20+$this->getAttr('mob_lvl')+$this->getAttr('agi'));

     // Walking speed

     $speed = $this->getAttr('speed');

     $speed_real = ($speed == 0) ? "" : "(". number_format(1000/$speed,2) . " " . message('db_cells_sec') . ")";

     if     ($speed > 500) $speed = message('db_walkspd1');
     elseif ($speed > 350) $speed = message('db_walkspd2');
     elseif ($speed > 300) $speed = message('db_walkspd3');
     elseif ($speed > 250) $speed = message('db_walkspd4');
     elseif ($speed > 200) $speed = message('db_walkspd5');
     elseif ($speed > 150) $speed = message('db_walkspd6');
     elseif ($speed > 100) $speed = message('db_walkspd7');
     elseif ($speed >= 1)  $speed = message('db_walkspd8');
     else                  $speed = message('db_walkspd9');

     $this->setAttr('speed',$speed." ".$speed_real);

     // Scale

     $scale = $this->getAttr('size');

     $scale = ($scale >= 0 && $scale < 4) ? message('db_mob_scale'.($scale)) : message('db_mob_scale3');

       $this->setStatistics('Size', $scale);

     $this->setAttr('size',$scale);

     // Range 1

     $range1 = $this->getAttr('range1');
     $range1 = ($range1 < 0 || $range1 > 2) ? message('db_mob_range13') : message('db_mob_range'.($range1+11));

       $this->setStatistics('Range', $range1);

     $this->setAttr('range1',$range1);

     // Element

       list($eLV,$eType) = str_split($this->getAttr('element'),1);

       // Elemental property damage

       $e_attack = $this->setElements($this->eleprop[$eLV][$eType]);

       $eLV *= 0.5;

       $eType = ($eType < 0 || $eType > 9) ? message('mElementNA') : message('mElement'.$eType);

         $this->setStatistics('Element', $eType . ' ' . $eLV);

       // Set element&lvl + elemental resistance.
       $this->setAttr('element',($eType." ".$eLV));
       $this->eattk = $e_attack;

     // Attack delay -> ASPD

           // !!! This needs some cleaning up !!!!

     $adelay = $this->getAttr('adelay');

     $aspd = ($adelay == 0) ? 200 . " (" . message('db_calc_overflow') . ")"  : ((2000-$adelay)/10) . " (" . number_format(1/$adelay,4) ." " . message('db_aspd_sec') . ")";

     $this->setAttr('adelay', $aspd);

     // Skills

     $this->setAttr('skills', $this->monsterSkills($this->getAttr('skills')));

     // Map locations

     $Spawns = unserialize($this->getAttr('spawns'));

     if(is_array($Spawns)) { 

       $pASD="";

       foreach($Spawns as $cS => $sP) {

       $mname    = $cS;
       $title    = $sP['map_name'];
       $count    = $sP['amount'];

       if($count==FALSE) continue;
       else $pASD .= "<a href=\"?act=fieldview&field={$mname}\">{$title}</a> ({$mname}) [{$count}], ";

       }

     $Spawns = substr($pASD,0,-2);

     }

     if(!is_string($Spawns) || strlen($Spawns)==0) $Spawns = "<center>N/A</center>";

     $this->setAttr('spawns', $Spawns);

     // Monster drops

     $this->setAttr('drops', $this->createItemDropTable($this->getAttr('drops'),1));

       // Boss drops

         if($this->getAttr('mexp') > 0) {
         $this->setAttr('mdrops', $this->createItemDropTable($this->getAttr('mdrops'),2));
         }

   }

   /*********************************/
   /* Output monster search tables
   /*********************************/
   public function output($res, $resLim, $resOffset) {

     $e = 0;
     $i = 0;
     $output = (string)"";

     while($result = mysql_fetch_array($res)) {

       $e++;

       if($i >= $resLim) {
       break;
       } 

       if($e <= $resOffset) {
       continue;
       }

       $this->result = $result;
       $this->prepareView();
       require(isset($this->layout) ? ( (isset($this->lpath)) ? $this->lpath . '/mob_form_' . $this->layout . '.php' : 'layout/mob/mob_form_' . $this->layout . '.php') : ( ($this->getAttr('mexp') > 0) ? 'layout/mob/mob_form_mvp.php' : 'layout/mob/mob_form_regular.php'));
       $i++;
     }
     return $output;
   }
 }

?>

 

Este é o responsável por impostar os locais que cada monstro nasce e os nomes dos mapas.

<?php if(!defined('EFFICIENT_ROOT')) exit;

 $map_name = $_GET['field'];

 $check_map = $db->query("SELECT " . Settings::get('db_struct', 'spawns', 'title') . " FROM " . Settings::get('db_struct', 'tables', 'spawns') . " WHERE " . Settings::get('db_struct', 'spawns', 'map') . "='" . $db->escape($map_name) . "' LIMIT 1")->fetchArray();

   if($check_map[0]==TRUE) {

       $thisMapQuery = $db->query("SELECT * FROM " . Settings::get('db_struct', 'tables', 'spawns') . " WHERE " . Settings::get('db_struct', 'spawns', 'map') . "='$map_name'");

       $thisMapTotalSpawn = array();

       while($spawn = $db->fetchArray()) {

         if(isset($thisMapTotalSpawn[$spawn['mob_id']]['amount']) && is_numeric($thisMapTotalSpawn[$spawn['mob_id']]['amount'])) {
           $thisMapTotalSpawn[$spawn['mob_id']]['amount'] += $spawn['amount'];
         }

         else {
           $thisMapTotalSpawn[$spawn['mob_id']] = array (
           'mob_name'  => $spawn['mob_name'],
           'amount'    => $spawn['amount']
           );
         }

       }

       $db->free();

       $thisMapReadAbleSpawns  = "";
       $thisMapMonsterIdents   = "";

       foreach($thisMapTotalSpawn as $mobID => $spawnProp) {

       $thisMapReadAbleSpawns .= "<li><a href=\"#monster$mobID\">". $spawnProp['mob_name'] ."</a> [". $spawnProp['amount'] ."]</li>";

       $thisMapMonsterIdents .= "OR " . Settings::get('db_struct', 'mob_src', 'id') . "=$mobID ";

       }

     $thisMapGetMonsters = $db->query("SELECT * FROM " . Settings::get('db_struct', 'tables', 'mob_src') . " WHERE" . substr($thisMapMonsterIdents,2)); 

     $mobResult = new MonsterController(Settings::get('main', 'drop_rates'), Settings::get('main', 'exp_rates'), Settings::get('main', 'eleProperties'), Settings::get('db_struct', 'mob_src'), Settings::get('main', 'db_res_paths'), Settings::get('main', 'file_types'));

     $monsterTables = $mobResult->output($db->query, 100, 0);

       $db->free();

     $STATISTICS = $mobResult->statistics;

     $resPaths = Settings::get('main', 'db_res_paths');
     $fileType = Settings::get('main', 'file_types');

     function setMapStatistics($thisMapStatistics) {
       foreach($thisMapStatistics as $thisMapMonsterProperty => $thisMapMonsterAmount) {          
         if($thisMapMonsterAmount == TRUE) {
           return "<li>" . $thisMapMonsterProperty . " (" . $thisMapMonsterAmount . ")</li>\n";
         }
       }
     }

     include('layout/field/field_view.php');

   }

   else {
     echo errorHandler(sprintf(message('map_noRes'), $map_name));
   }

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.