Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class PacketParser {
- public $DB, $Room, $Items, $Maps, $Skills, $Passives, $ClientData;
- public function __construct() {
- try {
- $this->DB = new DB(Config::get('User'), Config::get('Pass'), Config::get('DB'));
- } catch (PDOException $e) {
- echo $e->getMessage();
- }
- if ($this->DB != null) {
- $this->write("MySQL server started!", "MYSQL");
- $this->ClientData = new Map();
- $this->Maps = new Map();
- $this->Items = new Map();
- $this->Skills = new Map();
- $this->Passives = new Map();
- $this->Room = new Room();
- $this->cacheAll();
- }
- }
- public function cacheAll() {
- $maps = $this->DB->query('SELECT * FROM maps')->resultset();
- foreach($maps as $map) {
- $this->Maps->set($map->Name, $map);
- }
- $this->write("Cached {$this->Maps->size()} maps", "CACHE");
- unset($maps);
- $items = $this->DB->query('SELECT * FROM items')->resultset();
- foreach($items as $item) {
- $this->Items->set($item->id, $item);
- }
- $this->write("Cached {$this->Items->size()} items", "CACHE");
- unset($items);
- $skills = $this->DB->query('SELECT * FROM skills')->resultset();
- foreach($skills as $skill) {
- $this->Skills->set($skill->id, $skill);
- }
- $this->write("Cached {$this->Skills->size()} skills", "CACHE");
- unset($skills);
- $passives = $this->DB->query('SELECT * FROM passives')->resultset();
- foreach($passives as $passive) {
- $this->Passives->set($passive->auraid, $passive);
- }
- $this->write("Cached {$this->Passives->size()} passives", "CACHE");
- unset($passives);
- }
- public function GetSettingsObject() {
- return $this->DB->query('SELECT * FROM settings_server WHERE id = 1')->single();
- }
- public function GetClientData($client) {
- if ($this->ClientData->containsKey((int)$client) && !$this->ClientData->isEmpty()) {
- return $this->ClientData->get((int)$client);
- }
- return null;
- }
- public function AddClientData($socket, $data) {
- $this->ClientData->set((int)$socket, $data);
- }
- public function write($msg, $type = 'INFO') {
- printf('%s%s %s <%s> %s %s',"\n",@date('m/d/y'),@date('g:i A'),$type, $msg, chr(10));
- }
- public function send($client, $packet) {
- $packet .= "\0";
- socket_write($client, $packet);
- $this->write($packet, "SENDPACKET");
- }
- public function CheckPacket($client, $packet) {
- $this->write("Packet > " . $packet, "SERVER");
- if (startsWith($packet, "<")) {
- $this->write("Handling XML Packet", "SERVER");
- $this->HandleXML($client, $packet);
- } else {
- $this->write("Handling % Packet", "SERVER");
- $this->HandlePercentage($client, $packet);
- }
- }
- public function HandleXML($client, $xml) {
- if (contains('policy', $xml)) {
- $this->send($client, "<cross-domain-policy><allow-access-from domain='*' to-ports='5588'/></cross-domain-policy>");
- } else if (contains("verChk", $xml)) {
- $this->send($client, "<msg t='sys'><body action='apiOK' r='0'></body></msg>");
- } else if (contains("login", $xml)){
- $this->LoginParse($client, $xml);
- }
- }
- public function GetUoBranch() {
- $Users = [];
- foreach($this->Room->UserList as $users) {
- $user = $this->GetClientData($users);
- array_push($Users, array(
- 'strUsername' => $user->Username,
- "uoName" => $user->Username,
- 'strFrame' => "Enter",
- 'strPad' => "Spawn",
- 'intMP' => 100,
- 'intMPMax' => 100,
- 'intHP' => 1500,
- 'intHPMax' => 1500,
- 'intLevel' => (int)$user->Level,
- 'entID' => (int)$user->id,
- 'afk' => false,
- 'ty' => 0,
- 'tx' => 0,
- 'intState' => 1,
- 'entType' => "p",
- 'showHelm' => false,
- 'showCloak' => false
- ));
- }
- return $Users;
- }
- public function SendRoomData($client, $name, $roomNum) {
- $packet = json_decode('{"t":"xt","b":{"r":-1,"o":{"cmd":"moveToArea","areaName":"battleon-1","uoBranch":[{"strUsername":"toxic","uoName":"toxic","strFrame":"Enter","strPad":"Right2","intMP":200,"intMPMax":200,"intHP":596,"intHPMax":596,"intLevel":2,"entID":1,"afk":false,"ty":426,"tx":391,"intState":1,"entType":"p","showHelm":true,"showCloak":true}],"strMapFileName":"Battleon/town-NewBattleonTown-2May16.swf","intType":2,"monBranch":[],"sExtra":"","areaId":2,"strMapName":"battleon"}}}');
- $map = $this->Maps->get($name);
- $packet->b->o->areaName = $map['Name'] . '-' . $roomNum;
- $packet->b->o->uoBranch = $this->GetUoBranch();
- $packet->b->o->areaId = 2;
- $packet->b->o->strMapFileName = $map['FileName'];
- $packet->b->o->strMapName = $map['Name'];
- $this->send($client, stripslashes(json_encode($packet)));
- }
- public function equipItem($client) {
- $packet = null;
- $user = $this->GetClientData($client);
- $useritems = $this->DB->query('SELECT * FROM users_items WHERE userid = ? AND equipped=1')->bind(1, $user->id);
- if($useritems->num_rows() > 0) {
- $UItems = $useritems->resultset();
- foreach($UItems as $Item) {
- $packet = json_decode('{"t":"xt","b":{"r":-1,"o":{"uid":1,"ItemID":1,"strES":"Weapon","cmd":"equipItem","sFile":"items/swords/sword01.swf","sLink":"","sType":"Sword","sMeta":""}}}');
- $items = $this->Items->get($Item->itemid);
- $packet->b->o->uid = (int) $user->id;
- $packet->b->o->ItemID = (int) $items->id;
- $packet->b->o->strES = $Item->equipment;
- $packet->b->o->sFile = $items->File;
- $packet->b->o->sLink = $items->Link;
- $packet->b->o->sType = $items->Type;
- $this->send($client, stripslashes(json_encode($packet)));
- }
- }
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"uid":'.$user->id.',"sStats":"Warriors favor Strength, Endurance, and Dexterity","iCP":568,"cmd":"updateClass","sDesc":"Warriors are quintessential melee fighters. Simple, direct, and effective, they are masters of armed combat, and quite durable.","sClassCat":"M1","aMRM":["Warriors gain mana when they Strike an enemy in combat (more effective on crits) Are struck by an enemy in combat"],"sClassName":"Warrior"}}}');
- }
- public function JoinOK($client) {
- $pID = $this->GetPid($client);
- $data = "<msg t='sys'><body action='joinOK' r='2'><pid id='1'/><vars /><uLs r='2'>";
- foreach($this->Room->UserList as $users) {
- $user = $this->GetClientData($users);
- $data .= "<u i='{$user->id}' m='0' s='0' p='1'><n><![CDATA[{$user->Username}]]></n><vars></vars></u>";
- }
- $data .= "</uLs></body></msg>";
- $this->SendRoom(stripslashes($data));
- }
- public function GetData_ID($id)
- {
- /*
- if (!$this->ClientData->isEmpty()) {
- $iterator = $this->ClientData->getIterator()->getIterator();
- while ($iterator->valid()) {
- if ($this->ClientData->containsKey($iterator->key())) {
- if ($iterator->current()->id == $id) {
- return $iterator->current();
- }
- }
- $iterator->next();
- }
- }
- return null;
- */
- return $this->DB->query('SELECT * FROM users WHERE id = ?')->bind(1, $id)->single();
- }
- public function RetriveUserInfo($id) {
- $UserData = $this->GetData_ID($id);
- $this->write($id);
- $userinfo = [];
- $userinfo['uid'] = (int) $UserData->id;
- $userinfo['data'] = [];
- $userinfo['data']['intColorAccessory'] = (int)$UserData->ColorAccessory;
- $userinfo['data']['iCP'] = 0;
- $userinfo['data']['intLevel'] = (int) $UserData->Level;
- $userinfo['data']['iBagSlots'] = (int) $UserData->BagSlots;
- $userinfo['data']['iBoostRep'] = 0;
- $userinfo['data']['intColorBase'] = (int) $UserData->ColorBase;
- $userinfo['data']['iUpgDays'] = (int) $UserData->UpgradeDays;
- $userinfo['data']['intDays'] = 0;
- $userinfo['data']['sCountry'] = 'xx';
- $userinfo['data']['iSTR'] = 0;
- $userinfo['data']['strQuests2'] = '00000000000000000000000000000000000000000000000000000000000000000000000000000000A0000000000000000000';
- $userinfo['data']['ip0'] = 0;
- $userinfo['data']['iq0'] = 0;
- $userinfo['data']['strQuests3'] = '00000000000000000000000000000000000000000000000000000000000000000000000000000000A0000000000000000000';
- $userinfo['data']['iAge'] = (int) $UserData->Age;
- $userinfo['data']['intExpToLevel'] = 400;
- $userinfo['data']['iWIS'] = 0;
- $userinfo['data']['ip2'] = 0;
- $userinfo['data']['ip1'] = 0;
- $userinfo['data']['intMP'] = 100;
- $userinfo['data']['intGold'] = (int) $UserData->Gold;
- $userinfo['data']['sHouseInfo'] = [];
- $userinfo['data']['ip4'] = 0;
- $userinfo['data']['id2'] = 0;
- $userinfo['data']['iBankSlots'] = (int) $UserData->BankSlots;
- $userinfo['data']['id1'] = 0;
- $userinfo['data']['ip3'] = 0;
- $userinfo['data']['id0'] = 0;
- $userinfo['data']['ip6'] = 0;
- $userinfo['data']['iHouseSlots'] = (int) $UserData->HouseSlots;
- $userinfo['data']['ip5'] = 0;
- $userinfo['data']['intColorSkin'] = (int) $UserData->ColorSkin;
- $userinfo['data']['id3'] = 0;
- $userinfo['data']['intMPMax'] = 200;
- $userinfo['data']['intHPMax'] = 596;
- $userinfo['data']['dUpgExp'] = '5/23/2011 9:02:33 PM';
- $userinfo['data']['iBoostXP'] = 0;
- $userinfo['data']['iUpg'] = 0;
- $userinfo['data']['ip7'] = 0;
- $userinfo['data']['ip8'] = 0;
- $userinfo['data']['CharID'] = (int) $UserData->id;
- $userinfo['data']['ip9'] = 0;
- $userinfo['data']['strEmail'] = $UserData->Email;
- $userinfo['data']['iINT'] = 0;
- $userinfo['data']['intColorTrim'] = (int) $UserData->ColorTrim;
- $userinfo['data']['lastArea'] = 'battleon-2';
- $userinfo['data']['im0'] = 0;
- $userinfo['data']['iFounder'] = 0;
- $userinfo['data']['intDBExp'] = 102;
- $userinfo['data']['intExp'] = 102;
- $userinfo['data']['UserID'] = (int) $UserData->id;
- $userinfo['data']['intHits'] = 1;
- $userinfo['data']['ia1'] = 0;
- $userinfo['data']['intHP'] = 596;
- $userinfo['data']['dCreated'] = '5/23/2011 9:02:33 PM';
- $userinfo['data']['strQuests'] = '00000000000000000000000000000000000000000000000000000000000000000000000000000000A0000000000000000000';
- $userinfo['data']['iBoostG'] = 0;
- $userinfo['data']['bitSuccess'] = 1;
- $userinfo['data']['bPermaMute'] = false;
- $userinfo['data']['intColorEye'] = (int) $UserData->ColorEye;
- $userinfo['data']['strHairName'] = $UserData->HairName;
- $userinfo['data']['iLCK'] = 0;
- $userinfo['data']['iDailyAds'] = 0;
- $userinfo['data']['iDBCP'] = 0;
- $userinfo['data']['intDBGold'] = 955;
- $userinfo['data']['iBoostCP'] = 0;
- $userinfo['data']['intActivationFlag'] = 5;
- $userinfo['data']['intAccessLevel'] = (int) $UserData->Access;
- $userinfo['data']['strHairFilename'] = $UserData->HairFile;
- $userinfo['data']['intColorHair'] = (int) $UserData->ColorHair;
- $userinfo['data']['HairID'] = (int) $UserData->HairID;
- $userinfo['data']['strGender'] = $UserData->Gender;
- $userinfo['data']['strUsername'] = $UserData->Username;
- $userinfo['data']['iDailyAdCap'] = 0;
- $userinfo['data']['iDEX'] = 0;
- $userinfo['data']['intCoins'] = 0;
- $userinfo['data']['strMapName'] = 'battleon';
- $userinfo['data']['iEND'] = 0;
- $userinfo['data']['eqp'] = '';
- $useritems = $this->DB->query('SELECT * FROM users_items WHERE userid = ? AND equipped = 1 ORDER BY equipment DESC')->bind(1, $id)->resultset();
- foreach($useritems as $items) {
- $item = $this->Items->get($items->itemid);
- //{"Weapon":{"ItemID":1,"sFile":"items/swords/sword01.swf","sLink":""}
- $itemEquip = $items->equipment;
- $userinfo['data']['eqp'][$itemEquip] = [];
- $userinfo['data']['eqp'][$itemEquip]['ItemID'] = (int) $item->id;
- $userinfo['data']['eqp'][$itemEquip]['sFile'] = $item->File;
- $userinfo['data']['eqp'][$itemEquip]['sLink'] = $item->Link;
- }
- return $userinfo;
- }
- public function testSendRoomData($client, $name, $id) {
- $map = $this->Maps->get($name);
- $packet = [
- 't' => 'xt',
- 'b' => ['r' => -1,
- 'o' => [
- 'cmd' => 'moveToArea',
- 'areaName' => $map->Name . '-' . $id,
- 'uoBranch' => $this->GetUoBranch(),
- 'strMapFileName' => $map->FileName,
- 'intType' => 2,
- 'monBranch' => [],
- 'sExtra' => '',
- 'areaId' => 2,
- 'strMapName' => $map->Name
- ]
- ]
- ];
- $this->send($client, stripslashes(json_encode($packet)));
- $this->send($client, "%xt%server%-1%You have joined {$map->Name}-{$id}!%");
- }
- public function RetrieveUserDatas($client, $perc) {
- $a = [];
- $splitted = explode("%", $perc);
- for($i = 5; $i < count($splitted); $i++) {
- $id = $splitted[$i];
- if($id != null && $id != 0) {
- array_push($a, $this->RetriveUserInfo($id));
- }
- }
- $packet = [
- 't' => 'xt',
- 'b' => ['r' => -1,
- 'o' => [
- 'cmd' => 'initUserDatas',
- 'a' => $a
- ]
- ]
- ];
- $this->send($client, stripslashes(json_encode($packet)));
- }
- public function GetPid($client) {
- for ($i=0; $i<$this->Room->UserList->size(); $i++) {
- if ($this->Room->UserList->get($i) == $client) {
- return $i+2;
- }
- }
- return -1;
- }
- public function testJoinOK($client) {
- $data = "";
- $pid = $this->GetPid($client);
- $data .= "<msg t='sys'><body action='joinOK' r='2'><pid id='{$pid}'/><vars /><uLs r='2'>";
- foreach($this->Room->UserList as $users) {
- $user = $this->GetClientData($users);
- $test = $this->GetPid($users);
- $data .= "<u i='{$test}' m='0' s='0' p='{$test}'><n><![CDATA[{$user->Username}]]></n><vars></vars></u>";
- }
- $data .= "</uLs></body></msg>";
- return $data;
- }
- public function uER($client) {
- $data = "";
- $data .= "<msg t='sys'><body action='uER' r='2'>";
- foreach($this->Room->UserList as $users) {
- $user = $this->GetClientData($users);
- $test = $this->GetPid($users);
- $data .= "<u i ='" . $user->id . "' m='0' s='0' p='" . $test . "'><n><![CDATA[" . $user->Username . "]]></n><vars></vars></u>";
- }
- $data .= "</body></msg>";
- $this->SendRoom_Except($client, stripslashes($data));
- }
- public function uotlsLoad($client) {
- // {"t":"xt","b":{"r":-1,"o":{"cmd":"uotls","o":{"strFrame":"Enter","intMP":100.0,"intLevel":1,"entID":2,"strPad":"Spawn","intMPMax":400.0,"intHP":400.0,"afk":false,"intHPMax":400.0,"ty":0,"tx":0,"intState":1,"entType":"p","showCloak":true,"showHelm":true,"strUsername":"twilly","uoName":"twilly"},"unm":"twilly"}}}
- $packet = json_decode('{"t":"xt","b":{"r":-1,"o":{"cmd":"uotls","o":{"strFrame":"Enter","intMP":100.0,"intLevel":1,"entID":2,"strPad":"Spawn","intMPMax":400.0,"intHP":400.0,"afk":false,"intHPMax":400.0,"ty":0,"tx":0,"intState":1,"entType":"p","showCloak":true,"showHelm":true,"strUsername":"twilly","uoName":"twilly"},"unm":"twilly"}}}');
- $packet->b->o->strUsername = 'twilly';
- $packet->b->o->unm = 'twilly';
- }
- public function HandlePercentage($client, $perc) {
- if(contains('firstJoin', $perc)) {
- $this->Room->AddToRoom($client);
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"cmd":"cvu","o":{"PCstRatio":7.47,"PChpDelta":1640,"PChpBase1":360,"baseHit":0,"intSPtoDPS":10,"resistRating":17,"curveExponent":0.66,"baseCritValue":1.5,"PChpGoal100":4000,"intLevelCap":100,"baseMiss":0.1,"baseParry":0.03,"GstBase":12,"modRating":3,"baseResistValue":0.7,"baseBlockValue":0.7,"intHPperEND":5,"baseHaste":0,"baseBlock":0,"statsExponent":1,"PChpBase100":2000,"intAPtoDPS":10,"PCstBase":15,"baseCrit":0.05,"baseEventValue":0.05,"GstGoal":572,"PChpGoal1":400,"GstRatio":5.6,"intLevelMax":100,"bigNumberBase":8,"PCstGoal":762,"baseDodge":0.04,"PCDPSMod":0.85}}}}');
- $this->uER($client);
- $this->SendRoom_Except($client, '{"t":"xt","b":{"r":-1,"o":{"cmd":"uotls","o":{"strFrame":"Enter","intMP":100.0,"intLevel":1,"entID":2,"strPad":"Spawn","intMPMax":400.0,"intHP":400.0,"afk":false,"intHPMax":400.0,"ty":0,"tx":0,"intState":1,"entType":"p","showCloak":true,"showHelm":true,"strUsername":"twilly","uoName":"twilly"},"unm":"twilly"}}}');
- $this->JoinOK($client);
- $this->testSendRoomData($client, 'battleon', 1);
- }
- if(contains('retrieveUserDatas', $perc)) {
- $this->RetrieveUserDatas($client, $perc);
- }
- if(contains('moveToCell', $perc)) {
- $user = $this->GetClientData($client);
- $this->SendRoom_Except($client, '%xt%uotls%-1%'.$user->Username.'%strPad:Spawn,tx:0,strFrame:"Enter",ty:0%');
- }
- if(contains('retrieveInventory', $perc)) {
- $user = $this->GetClientData($client);
- $this->equipItem($client);
- $this->LoadInventory($client);
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"tempSta":{"ba":{},"Weapon":{"STR":1,"INT":1,"DEX":1,"WIS":1,"END":1},"innate":{"STR":10,"INT":2,"DEX":8,"WIS":4,"LCK":2,"END":11},"ar":{"STR":1,"END":2},"he":{}},"cmd":"stu","sta":{"$tdo":0.061366354062338764,"$thi":0.009711979119244894,"_cmi":1,"$smb":0,"_tdo":0.04,"_cmo":1,"_sem":0.05,"$WIS":5,"$tha":0.014082369722905094,"_sp":0,"$tpa":0.03,"_cdi":1,"$cpo":1,"_chi":1,"$cpi":1,"_cdo":1,"_tbl":0,"_tpa":0.03,"_cho":1,"$LCK":2,"$shb":0,"$STR":12,"$sem":0.06942395823848979,"_ap":0,"_sbm":0.7,"$cmi":0.9854320313211327,"$cai":1,"$tbl":0,"_srm":0.7,"_cai":1,"$DEX":9,"_STR":10,"$ap":25,"$cao":1,"_DEX":8,"$sbm":0.6825184375853591,"$cmc":1,"$INT":3,"_cpi":1,"$chi":1,"$cho":1,"_INT":2,"_scm":1.5,"_cao":1,"_END":11,"_WIS":4,"_shb":0,"_tre":0.07,"$cdo":1,"$tcr":0.07525114571003673,"$END":14,"$cdi":1,"_cpo":1,"$scm":1.5485598955962245,"_tcr":0.05,"_tha":0,"_thi":0,"$srm":0.7,"$cmo":1,"$sp":6,"_LCK":2,"_cmc":1,"$tre":0.07,"_smb":0},"wDPS":18}}}');
- }
- }
- public function LoadInventory($client) {
- $packet = json_decode('{"t":"xt","b":{"r":-1,"o":{"bankCount":0,"cmd":"loadInventoryBig","items":[{"ItemID":1,"sDesc":"Sword","sName":"Default Sword","sFile":"items/swords/sword01.swf","sLink":"","sElmt":"Fire","iRng":100,"iDPS":100,"sES":"Weapon","sType":"Sword","iLvl":1,"sIcon":"iwsword","iRty":10,"iQSIndex":-1,"iQSValue":0,"iQty":1,"sReqQuests":"","iStk":1,"EnhLvl":1,"EnhID":1,"EnhDPS":0,"EnhRty":0,"EnhRng":0,"InvEnhPatternID":1,"EnhPatternID":1,"ProcID":-1,"bStaff":0,"bCoins":0,"bTemp":0,"bHouse":0,"bUpg":0,"iCost":0,"iHrs":-1,"sMeta":"","ClassId":-1,"bPTR":0,"bEquip":1},{"ItemID":2,"sDesc":"The heart of a warrior is filled with courage and strength. Your skills with weapons in close combat make you a powerful force on the battlefield.","sName":"Warrior","sFile":"NewWarriorB2.swf","sLink":"NewWarriorB2","sElmt":"Fire","iRng":100,"iDPS":100,"sES":"ar","sType":"Class","iLvl":1,"sIcon":"iiclass","iRty":10,"iQSIndex":-1,"iQSValue":0,"iQty":1,"sReqQuests":"","iStk":1,"EnhLvl":1,"EnhID":1,"EnhDPS":0,"EnhRty":0,"EnhRng":0,"InvEnhPatternID":1,"EnhPatternID":1,"ProcID":-1,"bStaff":0,"bCoins":0,"bTemp":0,"bHouse":0,"bUpg":0,"iCost":1000,"iHrs":-1,"sMeta":"33","ClassId":1,"bPTR":0,"bEquip":1}],"hitems":[]}}}');
- $user = $this->GetClientData($client);
- $packet->b->o->items = [];
- $query = $this->DB->query('SELECT * FROM users_items WHERE userid = ?')->bind(1, $user->id);
- $classID = 0;
- if($query->num_rows() > 0) {
- $UserItems = $query->resultset();
- foreach($UserItems as $UserItem) {
- $item = $this->Items->get($UserItem->itemid);
- if($item->ClassID > 0) {
- $classID = $item->ClassID;
- }
- array_push($packet->b->o->items, [
- "ItemID" => (int) $item->id,
- "sDesc" => $item->Desc,
- "sName" => $item->Name,
- "sFile" => $item->File,
- "sLink" => $item->Link,
- "sElmt" => $item->Elmt,
- "iRng" => (int) $item->Rng,
- "iDPS" => (int) $item->DPS,
- "sES" => $item->ES,
- "sType" => $item->Type,
- "iLvl" => (int) $item->Lvl,
- "sIcon" => $item->Icon,
- "iRty" => (int) $item->Rty,
- "iQSIndex" => -1,
- "iQSValue" => 0,
- "sReqQuests" => "",
- "iStk" => (int) $item->Stk,
- "EnhLvl" => 1,
- "EnhID" => 1,
- "EnhDPS" => 0,
- "EnhRty" => 0,
- "EnhRng" => 0,
- "InvEnhPatternID" => 1,
- "EnhPatternID" => 1,
- "ProcID" => -1,
- "bStaff" => $item->Staff,
- "bCoins" => $item->Coins,
- "bTemp" => $item->Temp,
- "bHouse" => $item->House,
- "bUpg" => $item->Upg,
- "iCost" => $item->Cost,
- "iHrs" => -1,
- "sMeta" => "",
- "ClassId" => (int) $classID,
- "bPTR" => 0,
- "bEquip" => $UserItem->equipped
- ]);
- }
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"cmd":"clearAuras"}}}');
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"cmd":"aura+p","auras":[],"tInf":"p:2"}}}');
- $this->write($classID);
- $skills = json_decode('{"t":"xt","b":{"r":-1,"o":{"cmd":"sAct","actions":{"passive":[{"id":71,"ref":"p1","icon":"isp2","nam":"Aggression","desc":"You deal 10% additional damage with physical attacks","range":null,"isOK":false,"fx":"m","tgt":"s","typ":"passive"},{"id":72,"ref":"p2","icon":"isp2","nam":"Resolute","desc":"Damage taken reduced by 10%","range":null,"isOK":false,"fx":"m","tgt":"s","typ":"passive"}],"active":[{"id":1,"icon":"iwd1","ref":"aa","mp":0,"nam":"Auto attack","anim":"Attack1,Attack2","desc":"A basic attack, taught to all adventurers.","range":301,"isOK":true,"fx":"m","damage":1,"auto":true,"tgt":"h","tgtMax":1,"typ":"aa","cd":2000,"dsrc":"AP2"},{"id":2,"icon":"ims2,iwaxe","ref":"a1","mp":20,"nam":"Decisive Strike","anim":"Attack3","desc":"A powerful strike, dealing 150% weapon damage.","range":301,"isOK":true,"fx":"m","damage":2,"auto":false,"tgt":"h","tgtMax":1,"typ":"p","cd":2000,"dsrc":"AP2"},{"id":3,"icon":"iss1","ref":"a2","mp":30,"nam":"Imbalancing Strike","anim":"Stab","desc":"A precise blow which stuns your opponent for 4 seconds.","range":301,"isOK":false,"fx":"m","damage":0,"auto":false,"tgt":"h","tgtMax":1,"typ":"p","cd":10000,"dsrc":"AP2"},{"id":4,"icon":"imd1,iwsword","ref":"a3","mp":20,"nam":"Prepared Strike","anim":"Point","desc":"Your next two auto attacks taken within 5 seconds will be powerful critical hits which cannot be avoided.","range":301,"isOK":false,"fx":"m","damage":0,"auto":false,"tgt":"s","tgtMax":1,"typ":"p","cd":15000},{"id":5,"icon":"iwshield","ref":"a4","mp":30,"nam":"On Guard","anim":"Attack4","desc":"Challenge your opponent, dealing 75% normal damage, and taking 50% damage from all sources for 10 seconds.","range":301,"isOK":false,"fx":"m","damage":0,"auto":false,"tgt":"h","tgtMax":1,"typ":"p","cd":30000,"dsrc":"AP2"},{"id":6,"icon":"icu1","ref":"i1","mp":0,"nam":"Potions","anim":"Cheer","desc":"Equip a potion or scroll from your inventory to use it here.","range":808,"isOK":true,"fx":"","damage":0,"auto":false,"tgt":"f","tgtMax":1,"typ":"i","cd":60000}]}}}}');
- $skills->b->o->actions = [];
- $skills->b->o->actions['passive'] = [];
- $classes = $this->DB->query('SELECT * FROM classes WHERE id = ?')->bind(1, $classID);
- if($classes->num_rows() > 0) {
- $class = $classes->single();
- if(!empty($class->Passives)) {
- $PassiveIDs = explode(",", $class->Passives);
- foreach($PassiveIDs as $PassiveID) {
- if($PassiveID != null && $PassiveID != 0) {
- $passive = $this->Passives->get($PassiveID);
- array_push($skills->b->o->actions['passive'], [
- 'id' => $passive->auraid,
- 'ref' => $passive->Ref,
- 'icon' => $passive->Icon,
- 'nam' => $passive->Name,
- 'range' => null,
- 'isOK' => false,
- 'fx' => 'm',
- 'tgt' => 's',
- 'typ' => $passive->Type
- ]);
- }
- }
- }
- $skills->b->o->actions['active'] = [];
- if(!empty($class->Skills)) {
- $SkillIDs = explode(",", $class->Skills);
- foreach($SkillIDs as $SkillID) {
- if($SkillID != null && $SkillID != 0) {
- $Skill = $this->Skills->get($SkillID);
- if (strpos($Skill->Extra, ",")) {
- $ExtArray = explode(",", $Skill->Extra);
- $Extra = array($ExtArray[0] => $ExtArray[1]);
- } else {
- $Extra = (object)null;
- }
- array_push($skills->b->o->actions['active'], [
- 'id' => (int)$Skill->id,
- 'nam' => $Skill->nam,
- 'icon' => $Skill->icon,
- 'desc' => $Skill->description,
- 'mp' => $Skill->mp,
- 'anim' => $Skill->anim,
- 'Ref' => $Skill->Ref,
- 'isOK' => (bool)$Skill->isOK,
- 'tgt' => $Skill->tgt,
- 'tgtMax' => (int)$Skill->tgtMax,
- 'typ' => $Skill->typ,
- 'range' => $Skill->rng,
- 'fx' => $Skill->fx,
- 'cd' => (int)$Skill->cd,
- 'Extra' => $Extra
- ]);
- }
- }
- }
- }
- $this->send($client, stripslashes(json_encode($skills)));
- $this->send($client, '{"t":"xt","b":{"r":-1,"o":{"cmd":"enhp","o":{"1":{"iWIS":"16","sDesc":"none","ID":"1","iSTR":"16","iLCK":"0","sName":"Adventurer","iDEX":"16","iEND":"18","iINT":"16"}}}}}');
- }
- $this->send($client, stripslashes(json_encode($packet)));
- }
- public function SendRoom_Except($client, $packet) {
- foreach ($this->Room->UserList as $user) {
- if ($client != $user) {
- $this->send($user, $packet);
- }
- }
- }
- public function SendRoom($packet) {
- foreach ($this->Room->UserList as $user) {
- $this->send($user, $packet);
- }
- }
- public function LoginParse($client, $xml) {
- $XMLDom = new SimpleXMLElement($xml);
- $unmArray = $XMLDom->xpath('/msg/body/login/nick');
- $pwdArray = $XMLDom->xpath('/msg/body/login/pword');
- $username = explode("~",$unmArray[0])[1];
- $password = $pwdArray[0];
- $this->write("Login attempt by: " . $username . ", " . $password, "XML");
- $XMLDom = null;
- unset($unmArray);
- unset($pwdArray);
- $query = $this->DB->query('SELECT * FROM users WHERE Username = ? AND Password = ?')->bind(1, $username)->bind(2, $password);
- if($query->num_rows() > 0) {
- $UserData = $query->single();
- $UserData->Username = strtolower($UserData->Username);
- $Settings = $this->GetSettingsObject();
- $this->AddClientData($client, $UserData);
- $this->send($client, "%xt%server%-1%Accepting party invites.%");
- $this->send($client, "%xt%server%-1%Accepting goto requests%");
- $this->send($client, "%xt%server%-1%Accepting Friend requests.%");
- $this->send($client, "%xt%server%-1%Accepting PMs.%");
- $this->send($client, "%xt%server%-1%Ability ToolTips will always show on mouseover.%");
- $this->send($client, "%xt%server%-1%Accepting duel invites.%");
- $this->send($client, "%xt%server%-1%Accepting guild invites.%");
- $this->send($client, "%xt%loginResponse%-1%true%{$UserData->id}%{$UserData->Username}%{$Settings->MOTD}%2016-07-18T01:01:05%sNews={$Settings->News},sMap={$Settings->Map},sBook={$Settings->Book},sFBC={$Settings->FBC},sAssets={$Settings->Assets},sWTSandbox={$Settings->WTSandbox},gMenu={$Settings->GameMenu},sVideo={$Settings->Video}%");
- unset($Settings);
- unset($UserData);
- }
- unset($query);
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement