PageRenderTime 55ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 1ms

/classes/dataGrabbers/Trinity_PVPDataGrabber.class.php

https://bitbucket.org/Yason/hg-armory
PHP | 1164 lines | 685 code | 244 blank | 235 comment | 49 complexity | 3763758f7fe06c3a02cc3b9b66b17527 MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. /**
  3. * Trinity_PVPDataGrabber.class.php
  4. *
  5. * This is the example implementation of a DataGrabber for XMLArsenal.
  6. * If you like to use your own DataGrabber-Class just implement the functions in such a way that they use
  7. * the same function-names and produce the same output as the functions shown in this file.
  8. *
  9. * @author Amras Taralom <amras-taralom@streber24.de>
  10. * @author Ytrosh
  11. * @version 0.6b, last modified 2010/06/05
  12. * @package XMLArsenal
  13. * @subpackage classes
  14. * @license http://opensource.org/licenses/gpl-3.0.html GNU General Public License version 3 (GPLv3)
  15. *
  16. */
  17. require dirname(__FILE__).'/fielddefs.php'; //load fieddefs
  18. //require dirname(__FILE__).'/talentdefs.php'; //load talents
  19. class Trinity_PVPDataGrabber{
  20. /**
  21. * the ID of Char
  22. * @access private
  23. * @var int
  24. */
  25. private $charid;
  26. /**
  27. * the name of char
  28. * @access private
  29. * @var string
  30. */
  31. private $charname;
  32. /**
  33. * the characters gender (0=male, 1=female)
  34. * @access private
  35. * @var int
  36. */
  37. private $gender;
  38. /**
  39. * the chartable from characters Table
  40. * guid, name, data, race, class
  41. * @access private
  42. * @var array
  43. * i.e. $chartable2['name'] or $chartable2['race']
  44. */
  45. private $chartable2;
  46. /**
  47. * exploded datastring from characters
  48. * @access private
  49. * @var array
  50. */
  51. private $data;
  52. /**
  53. * exploded datastring of Item from item_instance
  54. * @access private
  55. * @var array
  56. */
  57. private $idata;
  58. /**
  59. * the level of a character
  60. * @access private
  61. * @var int
  62. */
  63. private $level;
  64. /**
  65. * the instantaneous arenapoint of a character
  66. * @access private
  67. * @var int
  68. */
  69. private $arenapoints;
  70. /**
  71. * the guildname
  72. * @access private
  73. * @var string
  74. */
  75. private $guildname;
  76. /**
  77. * the guild id
  78. * @access private
  79. * @var int
  80. */
  81. private $guildid;
  82. /**
  83. * all honorable kills of a character
  84. * @access private
  85. * @var int
  86. */
  87. private $honorablekills;
  88. /**
  89. * ka, mal schauen....^^
  90. * @access private
  91. * @var int
  92. */
  93. private $title;
  94. /**
  95. * all basestats of a character
  96. * strength, agility, stamina, int, spirit, arms
  97. * @access private
  98. * @var array
  99. * i.e. $basestats['strength'] or $basestats['arms']
  100. */
  101. private $basestats;
  102. /**
  103. * all magic resistances of a character
  104. * holy, fire, nature, frost, shadow, , arcane
  105. * @access private
  106. * @var array
  107. * i.e. $resistances['holy'] or $resistances['frost']
  108. */
  109. private $resistances;
  110. /**
  111. * hitrating of a character
  112. * melee, ranged, holyspell, spellfire, spellnature, spellfrost, spellshadow, spellarcane
  113. * @access private
  114. * @var array
  115. * i.e. $hitrating['melee'] or $hitratings['spellfire']
  116. */
  117. private $hitratings;
  118. /**
  119. * critrating of a character
  120. * melee, ranged, holyspell, spellfire, spellnature, spellfrost, spellshadow, spellarcane
  121. * @access private
  122. * @var array
  123. * i.e. $critratings['melee'] or $critratings['spellfire']
  124. */
  125. private $critratings;
  126. /**
  127. * reputation of a character
  128. * melee, ranged, holyspell, spellfire, spellnature, spellfrost, spellshadow, spellarcane
  129. * @access private
  130. * @var array
  131. * i.e. $x=reputition id ; $reputation[$x]
  132. */
  133. private $reputation;
  134. /**
  135. * race of a character
  136. * 1=Human; 2=Orc; 3=Dwarf; 4=Night Elf; 5=Undead; 6=Tauren; 7=Gnome; 8=Troll; 10=Blood Elf; 11=Draenei
  137. * @access private
  138. * @var int
  139. */
  140. private $race;
  141. /**
  142. * items of a character
  143. * position:
  144. * head=0; neck=1; shoulder=2; shirt=3; chest=4; belt=5; legs=6; feet=7; wrist=8;
  145. * gloves=9; finger 1 =10; finger 2 =11; trinket 1 =12; trinket 2=13; back=14; main hand=15
  146. * off hand=16 ranged=17 atabard=18
  147. *
  148. * $y='id' or 'vz' or 'socket1' or 'socket2' or 'socket3'
  149. * @access private
  150. * @var array
  151. * i.e. $x=position ; $items[$x][$y]
  152. */
  153. private $items;
  154. /**
  155. * achievements of a character
  156. * increment numbered
  157. * @access private
  158. * @var array
  159. * i.e. $achievements[$x]
  160. */
  161. // private $achievements;
  162. /**
  163. * achievementcriteria of a character
  164. * increment numbered
  165. * @access private
  166. * @var array
  167. * i.e. $achievements[$x] */
  168. // private $achievementcriteria;
  169. /**
  170. * the ladder
  171. * @access private
  172. * @var array
  173. */
  174. private $arenaLadder;
  175. /**
  176. * all talents of a character
  177. * increment numbered
  178. * @access private
  179. * @var array
  180. *
  181. * i.e. $talents[0][x] Speccung 1 /// $talents[1][x] Speccung 2
  182. */
  183. private $talents;
  184. /**
  185. * all glyphe of a character
  186. * increment numbered
  187. * @access private
  188. * @var array
  189. *
  190. * i.e. $glyphe[0][x] Speccung 1 /// $glyphe[1][x] Speccung 2
  191. */
  192. private $glyphe;
  193. /**
  194. * db connecter
  195. * @access private
  196. * @var string
  197. */
  198. private $pvpdbconn;
  199. /**
  200. * memberguid of a character
  201. * increment numbered
  202. * @access private
  203. * @var array
  204. *
  205. * i.e. $memberguid[$x]
  206. */
  207. private $memberguid;
  208. /**
  209. * membercount
  210. * @access private
  211. * @var int
  212. */
  213. private $membercount;
  214. /**
  215. * memberguid of a character
  216. * increment numbered $x
  217. * @access private
  218. * @var array
  219. * $y=memberguid ; $y=memberrank ; $y=membername;
  220. * i.e. $memberguid[$x][$y]
  221. */
  222. private $memberstatus;
  223. /**
  224. * arenateams of a player
  225. * @access private
  226. * @var array
  227. * $x=2 or $x=3 or $x=5
  228. * i.e. $arenateamsidplayer[$x]
  229. */
  230. private $arenateamsidbyplayer;
  231. /**
  232. * the table from arena_team
  233. * arenateamid, name, captainguid, type, BackroundColor, EmblemStyle, EmblemColor, BorderStyle, BorderColor
  234. * @access private
  235. * @var array
  236. * i.e. $arenaTable2['type'] or $arenaTable2['BackroundColor']
  237. */
  238. private $arenaTable2;
  239. /**
  240. * the arenateam id
  241. * @access private
  242. * @var int
  243. */
  244. private $teamid;
  245. /**
  246. * the arenateam name
  247. * @access private
  248. * @var string
  249. */
  250. private $teamname;
  251. private $CharactersResults;
  252. private $SearchTeamsResults;
  253. private $getSearchGuildsResults;
  254. private $searchstring;
  255. private $ArenaTeammember;
  256. private $ArenaTeamproperties;
  257. private function int2float($int) {
  258. //convert to 32-bit binary
  259. $bin = str_pad(decbin($int), 32, '0', STR_PAD_LEFT);
  260. //extract float parts
  261. $sign = bindec(substr($bin, 0, 1));
  262. $exp = bindec(substr($bin, 1, 8));
  263. $mant = bindec(substr($bin, 9));
  264. //calculate float value
  265. $floatval = (1- 2*$sign) * (1+ $mant * pow(2, -23)) * pow(2, $exp - 127);
  266. return $floatval;
  267. }
  268. public function __construct(){
  269. //extra passwords
  270. include './classes/dataGrabbers/GrabberConfig.php';
  271. @mysql_query("SET NAMES 'utf8'", $this->pvpdbconn);
  272. @mysql_query("SET CHARACTER SET 'utf8'", $this->pvpdbconn);
  273. }
  274. //now fetch characters
  275. $characters = array();
  276. $res = @mysql_query("SELECT c.race,c.class,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 35), ' ', -1) AS UNSIGNED) AS level,c.name, g.name as gname FROM `characters` c LEFT JOIN `guild_member` gm on gm.guid = c.guid LEFT JOIN `guild` g on g.guildid=gm.guildid WHERE account = ".$id.";", $this->pvpdbconn);
  277. while($row = @mysql_fetch_assoc($res)){
  278. $characters[] = array('name'=>$row['name'], 'race'=>$row['race'], 'class'=>$row['class'], 'gender'=>$row['gender'], 'level'=>$row['level'], 'guild'=>$row['gname'],);
  279. }//while
  280. return array('valid'=>true, 'characters'=>$characters);
  281. }
  282. private function sha_password($user,$pass)
  283. {
  284. $user = $this->fullUpper($user);
  285. $pass = $this->fullUpper($pass);
  286. return sha1($user.':'.$pass);
  287. }
  288. private function fullUpper($str){
  289. // convert to entities
  290. $subject = htmlentities($str,ENT_QUOTES);
  291. $pattern = '/&([a-z])(uml|acute|circ';
  292. $pattern.= '|tilde|ring|elig|grave|slash|horn|cedil|th);/e';
  293. $replace = "'&'.strtoupper('\\1').'\\2'.';'";
  294. $result = preg_replace($pattern, $replace, $subject);
  295. // convert from entities back to characters
  296. $htmltable = get_html_translation_table(HTML_ENTITIES);
  297. foreach($htmltable as $key => $value) {
  298. $result = ereg_replace(addslashes($value),$key,$result);
  299. }
  300. return(strtoupper($result));
  301. }
  302. /* char tables */
  303. private function CharTable($player) //chartable with guid
  304. {
  305. $res = @mysql_query("SELECT guid, name,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender, data, race, class FROM `characters` WHERE guid='".mysql_real_escape_string($player)."' LIMIT 1;", $this->pvpdbconn);
  306. $chartable2 = @mysql_fetch_assoc($res);
  307. return $chartable2;
  308. }
  309. private function CharTable2($player) //chartable with name
  310. {
  311. $res = @mysql_query("SELECT guid, name,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender, data, race, class FROM `characters` WHERE convert(name using utf8) COLLATE utf8_bin = '".mysql_real_escape_string($player)."' LIMIT 1;", $this->pvpdbconn);
  312. $chartable2 = @mysql_fetch_assoc($res);
  313. return $chartable2;
  314. }
  315. private function GuildTable($guild) //guildtable with id
  316. {
  317. $res = @mysql_query("SELECT * FROM `guild` WHERE guildid='".mysql_real_escape_string($guild)."' LIMIT 1;", $this->pvpdbconn);
  318. $guildtable2 = @mysql_fetch_assoc($res);
  319. return $guildtable2;
  320. }
  321. private function GuildTable2($guild) //guildtable with name
  322. {
  323. $res = @mysql_query("SELECT * FROM `guild` WHERE convert( name USING utf8 ) COLLATE utf8_bin = '".mysql_real_escape_string($guild)."' LIMIT 1;", $this->pvpdbconn);
  324. $guildtable2 = @mysql_fetch_assoc($res);
  325. return $guildtable2;
  326. }
  327. private function ArenaTable2($team) //arenatable with name
  328. {
  329. $res = mysql_query("SELECT a.arenateamid, a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE convert( a.name USING utf8 ) COLLATE utf8_bin = '".mysql_real_escape_string($team)."' LIMIT 1;", $this->pvpdbconn);
  330. $arenaTable2 = @mysql_fetch_assoc($res);
  331. return $arenaTable2;
  332. }
  333. private function ArenaTable($team) //arenatable with id
  334. {
  335. $res = mysql_query("SELECT a.arenateamid, a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE a.arenateamid='".mysql_real_escape_string($team)."' LIMIT 1;", $this->pvpdbconn);
  336. $arenaTable2 = @mysql_fetch_assoc($res);
  337. return $arenaTable2;
  338. }
  339. private function setData($player)
  340. {
  341. $this->data = explode(' ',$this->chartable['data']);
  342. }
  343. private function setMembertable($guild)
  344. {
  345. $this->membercount=0;
  346. $res = mysql_query("SELECT guid, rank FROM `guild_member` WHERE guildid ='".$this->guildid."';", $this->pvpdbconn);
  347. while($arr = @mysql_fetch_assoc($res))
  348. {
  349. $this->memberguid[$this->membercount]=$arr['guid'];
  350. $this->memberrank[$this->membercount]=$arr['rank'];
  351. $this->membercount=$this->membercount+1;
  352. }
  353. return $this->memberstatus;
  354. }
  355. public function setSearchString($queryString)
  356. {
  357. $this->searchstring=$queryString;
  358. }
  359. public function setGuildId($guild)
  360. {
  361. if (!ctype_digit($guild)) //$guild is a name
  362. {
  363. $this->guildtable=$this->GuildTable2($guild);
  364. $this->guildid = $this->guildtable['guildid'];
  365. $this->guildname=$guild;
  366. }
  367. else
  368. { //$guild is id
  369. $this->setGuildName($guild);
  370. $this->guildid=$guild;
  371. }
  372. $this->setMembertable($this->guildid);
  373. }
  374. public function setGuildName($guild)
  375. {
  376. if (!ctype_digit($guild))
  377. { //$guild is a name
  378. $this->guildname=$guild;
  379. $this->setGuildId($guild);
  380. }else
  381. { //$guild is id
  382. $this->guildtable=$this->guildTable($guild);
  383. $this->guildid = $guild;
  384. $this->guildname=$this->guildtable['name'];
  385. }
  386. $this->setMembertable($this->guildid);
  387. }
  388. public function setArenaTeamName($team)
  389. {
  390. if (!ctype_digit($team))
  391. { //$team is a name
  392. $this->teamname=$team;
  393. $this->setArenaTeamId($team);
  394. }else
  395. { //$team is id
  396. $this->teamtable=$this->ArenaTable($team);
  397. $this->teamid = $team;
  398. $this->teamname=$this->teamtable['name'];
  399. }
  400. }
  401. public function setArenaTeamId($team)
  402. {
  403. if (!ctype_digit($team)) //$teamis a name
  404. {
  405. $this->teamtable=$this->ArenaTable2($team);
  406. $this->teamid = $this->teamtable['arenateamid'];
  407. $this->teamname=$team;
  408. }
  409. else
  410. { //$team is id
  411. $this->setArenaTeamName($team);
  412. $this->teamid=$team;
  413. }
  414. }
  415. public function setCharId($player)
  416. {
  417. if (!ctype_digit($player)) //$player is a name
  418. {
  419. $this->chartable=$this->CharTable2($player);
  420. $this->charid = $this->chartable['guid'];
  421. $this->charname=$player;
  422. }
  423. else
  424. { //$player is id
  425. $this->setCharName($player);
  426. $this->charid=$player;
  427. }
  428. $this->setData($player);
  429. }
  430. public function getCharId()
  431. {
  432. if($this->charid) return $this->charid;
  433. else return null;
  434. }
  435. public function setCharName($player)
  436. {
  437. if (!ctype_digit($player))
  438. { //$player is a name
  439. $this->charname=$player;
  440. $this->setCharId($player);
  441. }else
  442. { //$player is id
  443. $this->chartable=$this->CharTable($player);
  444. $this->charid = $player;
  445. $this->charname=$this->chartable['name'];
  446. }
  447. $this->setData($player);
  448. }
  449. public function getName($player)
  450. {
  451. if (!ctype_digit($player))
  452. { //$player is a name
  453. $this->charname=$player;
  454. $this->setCharId($player);
  455. }else
  456. { //$player is id
  457. $this->chartable=$this->CharTable($player);
  458. $this->charid = $player;
  459. $this->charname=$this->chartable['name'];
  460. }
  461. $this->setData($player);
  462. return $this->charname;
  463. }
  464. public function getPrimaryProfessions(){
  465. $eUnitFields =& $GLOBALS['eUnitFields'];
  466. $resultset = array();
  467. $professions = array(171, 186, 202, 773, 755, 182, 393, 165, 164, 197, 333);
  468. $data = $this->data;
  469. for($i = 928; $i < 1310; $i+=3){
  470. $priProfId = $data[$i] - 65536;
  471. if(in_array($priProfId, $professions)){
  472. $values = $data[$i+1];
  473. $values = base_convert($values, 10, 2);
  474. $values = str_pad($values, 32, 0, STR_PAD_LEFT);
  475. $max = bindec(substr($values, 0, 16));
  476. $cur = bindec(substr($values, 16, 16));
  477. array_push($resultset, array('prof'=>$priProfId, 'cur'=>$cur, 'max'=>$max));
  478. }//if
  479. }//for
  480. return $resultset;
  481. }//getPrimaryProfessions()
  482. //NUR zum testen
  483. public function getData($player)
  484. {
  485. $this->data = explode(' ',$this->chartable['data']);
  486. return $this->data;
  487. }
  488. //Nur zum Testen
  489. public function getChosenTitleMask(){
  490. $eUnitFields =& $GLOBALS['eUnitFields'];
  491. //this is from CharTitles.dbc column 37: titleMaskID (Integer, used ingame in the drop down menu)
  492. return $this->data[$eUnitFields['PLAYER_CHOSEN_TITLE']];
  493. }//getChosenTitleMask()
  494. public function getSearchCharactersResults($realmName)
  495. {
  496. $x=0;
  497. $this->SearchCharactersResults = array();
  498. $res = mysql_query("SELECT c.race,c.class,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 35), ' ', -1) AS UNSIGNED) AS level,c.name, g.name as gname FROM `characters` c LEFT JOIN `guild_member` gm on gm.guid = c.guid LEFT JOIN `guild` g on g.guildid=gm.guildid WHERE c.name LIKE '".$this->searchstring."%';", $this->pvpdbconn);
  499. while($arr = mysql_fetch_array($res))
  500. {
  501. $this->SearchCharactersResults[$x]['realmName']=$realmName;
  502. $this->SearchCharactersResults[$x]['classId']=$arr['class'];
  503. $this->SearchCharactersResults[$x]['genderId']=$arr['gender'];
  504. $this->SearchCharactersResults[$x]['guild']=$arr['gname'];
  505. $this->SearchCharactersResults[$x]['level']=$arr['level'];
  506. $this->SearchCharactersResults[$x]['name']=$arr['name'];
  507. $this->SearchCharactersResults[$x]['raceId']=$arr['race'];
  508. $x++;
  509. }
  510. return $this->SearchCharactersResults;
  511. }
  512. public function getSearchTeamsResults($realmName)
  513. {
  514. $x=0;
  515. $this->SearchSearchTeamsResults = array();
  516. $res = mysql_query("SELECT a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE a.name LIKE '".$this->searchstring."%';", $this->pvpdbconn);
  517. while($arr = mysql_fetch_assoc($res))
  518. {
  519. $this->SearchTeamsResults[$x]['realmName']=$realmName;
  520. $this->SearchTeamsResults[$x]['gamesPlayed']=$arr['games'];
  521. $this->SearchTeamsResults[$x]['gamesWon']=$arr['wins'];
  522. $this->SearchTeamsResults[$x]['name']=$arr['name'];
  523. $this->SearchTeamsResults[$x]['ranking']=$arr['rank'];
  524. $this->SearchTeamsResults[$x]['rating']=$arr['rating'];
  525. $this->SearchTeamsResults[$x]['seasonGamesPlayed']=$arr['played'];
  526. $this->SearchTeamsResults[$x]['seasonGamesWon']=$arr['wins2'];
  527. $this->SearchTeamsResults[$x]['teamSize']=$arr['type'];
  528. $this->SearchTeamsResults[$x]['background']= str_pad(base_convert($arr['BackgroundColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  529. $this->SearchTeamsResults[$x]['borderColor']= str_pad(base_convert($arr['BorderColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  530. $this->SearchTeamsResults[$x]['borderStyle']=$arr['BorderStyle'];
  531. $this->SearchTeamsResults[$x]['iconColor']=str_pad(base_convert($arr['EmblemColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  532. $this->SearchTeamsResults[$x]['iconStyle']=$arr['EmblemStyle'];
  533. $this->SearchTeamsResults[$x]['leaderRace']=$arr['race'];
  534. $x++;
  535. }
  536. return $this->SearchTeamsResults;
  537. }
  538. public function getSearchGuildsResults($realmName)
  539. {
  540. $x=0;
  541. $this->SearchCharactersResults = array();
  542. $res = mysql_query("SELECT g.BackgroundColor,g.BorderStyle, g.EmblemColor, g.EmblemStyle, g.BorderColor, g.name, c.race FROM `guild` g JOIN characters c on g.leaderguid = c.guid WHERE g.name LIKE '".$this->searchstring."%';", $this->pvpdbconn);
  543. while($arr = mysql_fetch_assoc($res))
  544. {
  545. $this->SearchGuildsResults[$x]['realmName']=$realmName;
  546. $this->SearchGuildsResults[$x]['emblemBackground']=$arr['BackgroundColor'];
  547. $this->SearchGuildsResults[$x]['emblemBorderColor']=$arr['BorderColor'];
  548. $this->SearchGuildsResults[$x]['emblemBorderStyle']=$arr['BorderStyle'];
  549. $this->SearchGuildsResults[$x]['emblemIconColor']=$arr['EmblemColor'];
  550. $this->SearchGuildsResults[$x]['emblemIconStyle']=$arr['EmblemStyle'];
  551. $this->SearchGuildsResults[$x]['name']=$arr['name'];
  552. $this->SearchGuildsResults[$x]['leaderRace']=$arr['race'];
  553. $x++;
  554. }
  555. return $this->SearchGuildsResults;
  556. }
  557. public function getClass()
  558. {
  559. return (int)$this->chartable['class'];
  560. }
  561. public function getRace()
  562. {
  563. return (int)$this->chartable['race'];
  564. }
  565. public function getGender()
  566. {
  567. return (int)$this->chartable['gender'];
  568. }
  569. public function getLevel()
  570. {
  571. $this->level=$this->data[34];
  572. return (int)$this->level;
  573. }
  574. public function getArenaPoints()
  575. {
  576. $this->arenapoints=$this->data[1563];
  577. return (int)$this->arenapoints;
  578. }
  579. public function getHonorableKills()
  580. {
  581. return (int)$this->data[1517];
  582. }
  583. public function getTitle()
  584. {
  585. $this->title=$this->data[648];
  586. return $this->title;
  587. }
  588. public function getGuildIdplayer()
  589. {
  590. $this->guildid=$this->data[237];
  591. return $this->guildid;
  592. }
  593. public function getGuildNameplayer()
  594. {
  595. $this->guildtable3=$this->guildtable($this->getGuildIdplayer());
  596. return $this->guildtable3['name'];
  597. }
  598. public function getCharStats()
  599. {
  600. $eUnitFields =& $GLOBALS['eUnitFields'];
  601. return array(
  602. //Grundwerte
  603. 'strength' => $this->data[$eUnitFields['UNIT_FIELD_STAT0']],
  604. 'strengthPos' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_POSSTAT0']])),
  605. 'strengthNeg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_NEGSTAT0']])),
  606. 'agility' => $this->data[$eUnitFields['UNIT_FIELD_STAT1']],
  607. 'agilityPos' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_POSSTAT1']])),
  608. 'agilityNeg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_NEGSTAT1']])),
  609. 'stamina' => $this->data[$eUnitFields['UNIT_FIELD_STAT2']],
  610. 'staminaPos' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_POSSTAT2']])),
  611. 'staminaNeg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_NEGSTAT2']])),
  612. 'int' => $this->data[$eUnitFields['UNIT_FIELD_STAT3']],
  613. 'intPos' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_POSSTAT3']])),
  614. 'intNeg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_NEGSTAT3']])),
  615. 'spirit' => $this->data[$eUnitFields['UNIT_FIELD_STAT4']],
  616. 'spiritPos' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_POSSTAT4']])),
  617. 'spiritNeg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_NEGSTAT4']])),
  618. 'armor' => $this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']],
  619. //Nahkampf
  620. 'mhMinDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MINDAMAGE']])),
  621. 'mhMaxDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MAXDAMAGE']])),
  622. 'ohMinDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MINOFFHANDDAMAGE']])),
  623. 'ohMaxDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MAXOFFHANDDAMAGE']])),
  624. 'mhTempo' => round((int2float($this->data[$eUnitFields['UNIT_FIELD_BASEATTACKTIME']]) / 1000), 2),
  625. 'ohTempo' => round((int2float($this->data[$eUnitFields['UNIT_FIELD_BASEATTACKTIME']+1]) / 1000), 2),
  626. 'mAtp' => $this->data[$eUnitFields['UNIT_FIELD_ATTACK_POWER']],
  627. 'mAtpMod' => $this->data[$eUnitFields['UNIT_FIELD_ATTACK_POWER_MODS']],
  628. 'mHitRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+5],
  629. 'mHitPercent' => 0.00,
  630. 'mExpRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1'+23]],
  631. 'mExpPercent' => 0.00,
  632. 'mCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_CRIT_PERCENTAGE']]), 2),
  633. 'mCritRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+8],
  634. 'mExpertise' => $this->data[$eUnitFields['PLAYER_EXPERTISE']],
  635. //Distanz
  636. 'rMinDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MINRANGEDDAMAGE']])),
  637. 'rMaxDmg' => round(int2float($this->data[$eUnitFields['UNIT_FIELD_MAXRANGEDDAMAGE']])),
  638. 'rTempo' => round((int2float($this->data[$eUnitFields['UNIT_FIELD_RANGEDATTACKTIME']]) / 1000), 2),
  639. 'rAtp' => $this->data[$eUnitFields['UNIT_FIELD_RANGED_ATTACK_POWER']],
  640. 'rAtpMod' => $this->data[$eUnitFields['UNIT_FIELD_RANGED_ATTACK_POWER_MODS']],
  641. 'rHitRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+6],
  642. 'rHitPercent' => 0.00,
  643. 'rExpRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1'+23]],
  644. 'rExpPercent' => 0.00,
  645. 'rCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_RANGED_CRIT_PERCENTAGE']]), 2),
  646. 'rCritRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+9],
  647. //Zauber
  648. 'spellBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']],
  649. 'holyBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+1],
  650. 'fireBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+2],
  651. 'natureBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+3],
  652. 'frostBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+4],
  653. 'shadowBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+5],
  654. 'arcaneBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_DAMAGE_DONE_POS']+6],
  655. 'healBonus' => $this->data[$eUnitFields['PLAYER_FIELD_MOD_HEALING_DONE_POS']],
  656. 'spHitRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+7],
  657. 'spHitPercent' => 0.00,
  658. 'spExpRating' => 0,
  659. 'spExpPercent' => 0.00,
  660. 'spCritRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+10],
  661. 'spCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']]), 2),
  662. 'holyCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+1]), 2),
  663. 'fireCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+2]), 2),
  664. 'natureCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+3]), 2),
  665. 'frostCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+4]), 2),
  666. 'shadowCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+5]), 2),
  667. 'arcaneCritPercent' => round(int2float($this->data[$eUnitFields['PLAYER_SPELL_CRIT_PERCENTAGE1']+6]), 2),
  668. 'spHasteRating' => 0,
  669. 'spHastePercent' => round(int2float($this->data[$eUnitFields['UNIT_MOD_CAST_SPEED']]), 2),
  670. 'spRegeneration' => 0,
  671. //Verteidigung
  672. 'defense' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+1],
  673. 'dodgePercent' => round(int2float($this->data[$eUnitFields['PLAYER_DODGE_PERCENTAGE']]), 2),
  674. 'dodgeRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+2],
  675. 'parryPercent' => round(int2float($this->data[$eUnitFields['PLAYER_PARRY_PERCENTAGE']]), 2),
  676. 'parryRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+3],
  677. 'blockPercent' => round(int2float($this->data[$eUnitFields['PLAYER_BLOCK_PERCENTAGE']]), 2),
  678. 'blockRating' => $this->data[$eUnitFields['PLAYER_FIELD_COMBAT_RATING_1']+4],
  679. 'resilienceRating' => 0,
  680. 'resiliencePercent' => 0,
  681. //Sonstige
  682. 'health' => $this->data[$eUnitFields['UNIT_FIELD_MAXHEALTH']],
  683. 'mana' => $this->data[$eUnitFields['UNIT_FIELD_MAXPOWER1']],
  684. 'rage' => $this->data[$eUnitFields['UNIT_FIELD_MAXPOWER2']]/10,
  685. 'energy' => $this->data[$eUnitFields['UNIT_FIELD_MAXPOWER4']],
  686. );
  687. }
  688. private function getRatingFromPercent($which, $percent){
  689. $val = 0;
  690. $bases = array('dodge'=>12,'parry'=>15,'defense'=>1.5,'block'=>5);
  691. if($which == 'dodge' || $which == 'parry' || $which == 'defense' || $which == 'block'){
  692. if($this->level < 35) $val = ($bases[$which]/2);
  693. if($this->level >= 35 && $this->level < 61) $val = $bases[$which] * (($this->level - 8) / 52);
  694. if($this->level >= 61 && $this->level < 71) $val = $bases[$which] * (82/ (282 - 3 * $this->level));
  695. if($this->level >= 71 && $this->level < 81) $val = $bases[$which] * (82/52) * pow((131/63), (($this->level - 70)/10));
  696. else $val = 0;
  697. }
  698. if(!$val) $val = 0;
  699. $val = $val * $percent;
  700. return round($val);
  701. }
  702. public function getResistances()
  703. {
  704. $eUnitFields =& $GLOBALS['eUnitFields'];
  705. $this->resistances = array('holyRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+1],
  706. 'fireRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+2],
  707. 'natureRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+3],
  708. 'frostRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+4],
  709. 'shadowRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+5],
  710. 'arcaneRes' =>$this->data[$eUnitFields['UNIT_FIELD_RESISTANCES']+6]);
  711. return $this->resistances;
  712. }
  713. public function getReputation()
  714. {
  715. $handle = fopen(dirname(__FILE__).'/Faction.csv', 'r');
  716. $factionTemplate = array();
  717. $raceMask = 1 << ($this->getRace()-1);
  718. $classMask = 1 << ($this->getClass()-1);
  719. while(($row = fgetcsv($handle)) != false){
  720. $baseRep = 0;
  721. for ($i=0; $i < 4; $i++){
  722. if (($row[2+$i] & $raceMask ||
  723. ($row[2+$i] == 0 &&
  724. $row[6+$i] != 0)) &&
  725. ($row[6+$i] & $classMask ||
  726. $row[6+$i] == 0)){
  727. $baseRep = $row[10+$i];
  728. if($baseRep >= 1000000000) $baseRep = -1*(4294967296 - $baseRep);
  729. break;
  730. }
  731. }
  732. $this->reputation[$row[0]] = $baseRep;
  733. }
  734. fclose($handle);
  735. $res = @mysql_query("SELECT faction, standing FROM `character_reputation` WHERE `guid`='".$this->charid."' AND (flags & 1 = 1);", $this->pvpdbconn);
  736. while($arr = @mysql_fetch_assoc($res))
  737. {
  738. $faction = $arr['faction'];
  739. $standing = $this->reputation[$faction] + $arr['standing'];
  740. //capping. else armory displays much too long status bars
  741. if($standing > 42999) $standing = 42999;
  742. if($standing < -42000) $standing = -42000;
  743. $this->reputation[$faction] = $standing;
  744. }
  745. return $this->reputation;
  746. }
  747. public function getItems(){
  748. $this->items = array();
  749. $res = @mysql_query("SELECT ii.data, ci.slot, ci.item_template FROM `item_instance` ii JOIN `character_inventory` ci ON ci.item = ii.guid WHERE ii.owner_guid=".$this->charid." AND ci.bag = 0 AND ci.slot >= 0 AND ci.slot < 19;", $this->pvpdbconn);
  750. while($row = @mysql_fetch_assoc($res)){
  751. $idata = explode(' ',$row['data']);
  752. $this->items[$row['slot']] = array( 'id'=>$row['item_template'],
  753. 'ench'=>$idata[22],
  754. 'socket1'=>$idata[28],
  755. 'socket2'=>$idata[31],
  756. 'socket3'=>$idata[34],
  757. 'dur'=>$idata[58],
  758. 'randomEnchant'=>$idata[56]);
  759. }//while
  760. return $this->items;
  761. }
  762. public function getTalents()
  763. {
  764. $res=@mysql_query("SELECT spell FROM `character_spell` WHERE guid='".$this->charid."' AND disabled=0;", $this->pvpdbconn);
  765. while($arr = @mysql_fetch_assoc($res))
  766. {
  767. $spec = '0';
  768. if(!$this->talents[$spec]) $this->talents[$spec] = array();
  769. array_push($this->talents[$spec], $arr['spell']);
  770. }
  771. return $this->talents;
  772. }
  773. public function getActiveSpec(){
  774. return 0;
  775. }
  776. public function getGuildId(){
  777. return $this->guildid;
  778. }
  779. public function getGuildName($guild)
  780. {
  781. if (!ctype_digit($guild))
  782. { //$guild is a name
  783. $this->guildname=$guild;
  784. $this->setGuildId($guild);
  785. }else
  786. { //$guild is id
  787. $this->guildtable=$this->GuildTable($guild);
  788. $this->guildid = $guild;
  789. $this->guildname=$this->guildtable['name'];
  790. }
  791. return $this->guildname;
  792. }
  793. public function getMembercount()
  794. {
  795. return $this->membercount;
  796. }
  797. public function getGuildEmblem(){
  798. return array(
  799. 'emblemStyle' => $this->guildtable['EmblemStyle'],
  800. 'emblemColor' => $this->guildtable['EmblemColor'],
  801. 'borderStyle' => $this->guildtable['BorderStyle'],
  802. 'borderColor' => $this->guildtable['BorderColor'],
  803. 'backgroundColor' => $this->guildtable['BackgroundColor']
  804. );
  805. }
  806. public function getMemberstatus() //Array with PlayerGuid, Membername, Memberrank
  807. {
  808. $this->memberstatus = array();
  809. $res = mysql_query("SELECT c.race,c.class,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender,CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(`data`, ' ', 35), ' ', -1) AS UNSIGNED) AS level,gm.rank,c.name FROM `characters` c JOIN `guild_member` gm on gm.guid = c.guid WHERE gm.guildid = ".$this->guildid.";", $this->pvpdbconn);
  810. while($row = mysql_fetch_assoc($res)){
  811. array_push($this->memberstatus, array( 'rank' => $row['rank'],
  812. 'name' => $row['name'],
  813. 'race' => $row['race'],
  814. 'level' => $row['level'],
  815. 'gender' => $row['gender'],
  816. 'class' => $row['class'],
  817. 'achpoints' =>0
  818. ));
  819. }//while
  820. return $this->memberstatus;
  821. }
  822. public function getArenaTeamsIdByPlayer()
  823. {
  824. $res = mysql_query("SELECT a.name,a.type,a.arenateamid FROM `arena_team` a JOIN `arena_team_member` atm on a.arenateamid = atm.arenateamid WHERE atm.guid='".$this->charid."';", $this->pvpdbconn);
  825. while($arr = @mysql_fetch_assoc($res))
  826. {
  827. if ($arr['type']==2) {$this->arenateamsidbyplayer[2]['id']=$arr['arenateamid']; $this->arenateamsidbyplayer[2]['name']=$arr['name'];}
  828. else {
  829. if ($arr['type']==3)
  830. {$this->arenateamsidbyplayer[3]['id']=$arr['arenateamid']; $this->arenateamsidbyplayer[3]['name']=$arr['name'];}
  831. else
  832. {
  833. if ($arr['type']==5)
  834. {$this->arenateamsidbyplayer[5]['id']=$arr['arenateamid']; $this->arenateamsidbyplayer[5]['name']=$arr['name'];}
  835. }
  836. }
  837. }
  838. if($this->arenateamsidbyplayer) return $this->arenateamsidbyplayer;
  839. else return array();
  840. }
  841. public function getArenaName()
  842. {
  843. return $this->teamname;
  844. }
  845. public function getArenaTeamproperties()
  846. {
  847. $this->ArenaTeamproperties = array();
  848. $arr=$this->ArenaTable($this->teamid);
  849. $this->ArenaTeamproperties['teamId'] = $this->teamid;
  850. $this->ArenaTeamproperties['gamesPlayed']=$arr['games'];
  851. $this->ArenaTeamproperties['gamesWon']=$arr['wins'];
  852. $this->ArenaTeamproperties['name']=$arr['name'];
  853. $this->ArenaTeamproperties['ranking']=$arr['rank'];
  854. $this->ArenaTeamproperties['rating']=$arr['rating'];
  855. $this->ArenaTeamproperties['seasonGamesPlayed']=$arr['played'];
  856. $this->ArenaTeamproperties['seasonGamesWon']=$arr['wins2'];
  857. $this->ArenaTeamproperties['teamSize']=$arr['type'];
  858. $this->ArenaTeamproperties['background']= str_pad(base_convert($arr['BackgroundColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  859. $this->ArenaTeamproperties['borderColor']= str_pad(base_convert($arr['BorderColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  860. $this->ArenaTeamproperties['borderStyle']=$arr['BorderStyle'];
  861. $this->ArenaTeamproperties['iconColor']=str_pad(base_convert($arr['EmblemColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  862. $this->ArenaTeamproperties['iconStyle']=$arr['EmblemStyle'];
  863. $this->ArenaTeamproperties['leaderRace']=$arr['race'];
  864. return $this->ArenaTeamproperties;
  865. }
  866. public function getArenaTeammember()
  867. {
  868. $this->ArenaTeammember = array();
  869. $res = mysql_query("
  870. SELECT atm.guid, atm.played_week, atm.wons_week, atm.played_season, atm.wons_season, atm.personal_rating, c.name, c.race,mid(lpad( hex( CAST(substring_index(substring_index(data,' ',".(36+1)."),' ',-1) as unsigned) ),8,'0'),4,1) AS gender, c.class, g.name as gname FROM `arena_team_member` atm JOIN `characters` c on atm.guid=c.guid LEFT JOIN `guild_member` gm on gm.guid = c.guid LEFT JOIN `guild` g on g.guildid=gm.guildid WHERE atm.arenateamid='".$this->teamid."';", $this->pvpdbconn);
  871. while($arr = @mysql_fetch_assoc($res))
  872. {
  873. array_push($this->ArenaTeammember, array('guid' => $arr['guid'], //Player Guid
  874. 'name' => $arr['name'], //Player Name
  875. 'guild' => $arr['gname'], //Player Guild
  876. 'played_week' => $arr['played_week'],
  877. 'class' => $arr['class'],
  878. 'gender' => $arr['gender'],
  879. 'race' => $arr['race'],
  880. 'won_week' => $arr['wons_week'],
  881. 'played_season' => $arr['played_season'],
  882. 'won_season' => $arr['wons_season'],
  883. 'personal_rating' =>$arr['personal_rating']
  884. ));
  885. }
  886. return $this->ArenaTeammember;
  887. }
  888. public function getArenaladder($realmName)
  889. {
  890. $x=0;
  891. $this->arenaLadder = array();
  892. $res = mysql_query("(SELECT a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE a.type = 3 ORDER BY ats.rating DESC)
  893. UNION
  894. (SELECT a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE a.type = 2 ORDER BY ats.rating DESC)
  895. UNION
  896. (SELECT a.name,a.type,a.BackgroundColor,a.EmblemStyle,a.EmblemColor,a.BorderStyle,a.BorderColor, ats.rating, ats.rank, ats.games, ats.wins, ats.played, ats.wins2, c.race FROM `arena_team` a JOIN `arena_team_stats` ats on a.arenateamid = ats.arenateamid JOIN characters c ON c.guid = a.captainguid WHERE a.type = 5 ORDER BY ats.rating DESC);",
  897. $this->pvpdbconn);
  898. while($arr = mysql_fetch_assoc($res))
  899. {
  900. $this->arenaLadder[$x]['realmName']=$realmName;
  901. $this->arenaLadder[$x]['gamesPlayed']=$arr['games'];
  902. $this->arenaLadder[$x]['gamesWon']=$arr['wins'];
  903. $this->arenaLadder[$x]['name']=$arr['name'];
  904. $this->arenaLadder[$x]['ranking']=$arr['rank'];
  905. $this->arenaLadder[$x]['rating']=$arr['rating'];
  906. $this->arenaLadder[$x]['seasonGamesPlayed']=$arr['played'];
  907. $this->arenaLadder[$x]['seasonGamesWon']=$arr['wins2'];
  908. $this->arenaLadder[$x]['teamSize']=$arr['type'];
  909. $this->arenaLadder[$x]['background']= str_pad(base_convert($arr['BackgroundColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  910. $this->arenaLadder[$x]['borderColor']= str_pad(base_convert($arr['BorderColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  911. $this->arenaLadder[$x]['borderStyle']=$arr['BorderStyle'];
  912. $this->arenaLadder[$x]['iconColor']=str_pad(base_convert($arr['EmblemColor'], 10, 16), 8, 0, STR_PAD_LEFT);
  913. $this->arenaLadder[$x]['iconStyle']=$arr['EmblemStyle'];
  914. $this->arenaLadder[$x]['leaderRace']=$arr['race'];
  915. $x++;
  916. }
  917. return $this->arenaLadder;
  918. }
  919. }
  920. ?>