GetRoleBase - Там есть вектор GRoleForbid, это и есть список банов на аккаунте GetRoleBase - Пакет такой, запрос отправлять к gamedbd Это только на персонаже, на аккаунте другой пакет ForbidUser, id - 8004 Так этот пакет ведь банит, а не показывает баны. struct __cppobj ForbidUserArg : Rpc::Data { char operation; int gmuserid; int source; int userid; int time; Octets reason; };
Как узнать, есть ли бан на аккаунте, пакетом, или как можно?.. Спасибо
Взял функцию у Вас GetRoleData $r = GetRoleData(1024); echo '<pre>'; print_r($r); echo '</pre>'; Вывело все как надо, все окей работает. Но есть вопросик, в status есть поле var_data, с таким содержимым: [var_data] => 06000000000000003a8c0000010000005c769f0a39423443313030301000000000000000ffffffff0000000000000000000000000f000000 Не подскажите, как его перевести в человекопонятный вид, или может где почитать про это? Спасибо
По названию темы ожидал увидеть здесь описание какой-то уязвимости. Но судя по тому, что ТС хочет сделать, так оно и будет в его случае Скоро будет тема "меня взломали памагите"
Привет Вот если работать с сервера где запущен сам сервер игры, то работает такое подключение: fp = fsockopen('127.0.0.1', 29300); if (!$fp) { die('Соединение с игровой базой не установлено'); } var_dump($fp);// resource(7) of type (stream) А если я с любого хостинга, или своего сервера другого пытаюсь подключится так-же, только ставлю ИП сервера к которому подключаюсь, мне выбивает ошибку: Error 10061 - No connection could be made because the target machine actively refused it $fp = fsockopen('IP', 29300); if (!$fp) { die('Соединение с игровой базой не установлено'); } Как правильно подключится к игровой базе не из локального сервера? Что я не так делаю? Спасибо
Но этот пакет не прибавляет, а просто устанавливает кол-во голды. Было 5, дал еще 10 = в итоге на аккаунте 10, и общее кол-во тоже 10. Ваш код взял А в чем проблема использовать другой пакет,который получает кол-во голде на акке(вроде такой есть)?Прибавить свое количество,и отправить на аккаунт. В том, что этот метод полностью очищает историю голды на аккаунте. Если было за всю историю аккаунта 100 голды, и этим пакетом поставить 10, то в истории будет всего 10 уже. Можно так-же через mysql, но там интервал вроде какой-то идет
<?php Function Cuint($Data) { if($Data < 64) return strrev(pack("C", $Data)); else if($Data < 16384) return strrev(pack("S", ($Data | 0x8000))); else if($Data < 536870912) return strrev(pack("I", ($Data | 0xC0000000))); return strrev(pack("c", -32) . pack("I", $Data)); } if (isset($_POST['Send'])) { $data = pack('N*', $_POST['acc_id'], $_POST['gold_num']); $send = Cuint(521).Cuint(strlen($data)).$data; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($sock, "127.0.0.1", 29400); socket_set_block($sock); socket_send($sock, $send, 8192, 0); socket_set_nonblock($sock); socket_close($sock); } ?> <center> <form method="POST"> ID аккаунта <input type="text" name="acc_id"><br> Кол-во голды <input type="text" name="gold_num"><br> <input type="submit" value="Отправить" name="Send"> </center> --- добавлено: 23 фев 2018 в 13:57 --- Так-же можете забрать голд отправив отрицательное количество Но этот пакет не прибавляет, а просто устанавливает кол-во голды. Было 5, дал еще 10 = в итоге на аккаунте 10, и общее кол-во тоже 10. Ваш код взял
Пытаюсь прибавить голды, но получается только пакетом: DEBUGADDCASH , но при добавлении через этот пакет - перезаписывается вся информация о голде на аккаунте, и она не прибавляется - а просто устанавливается в то значение которое я установлю. В логе сервера при использовании DEBUGADDCASH , вот что: info : GameDBServer::OnAddSession, sid=342. info : GameDBServer::OnAddSession, sid=343. info : GameDBServer::OnDelSession, sid=342. TRACE : debugaddcash userid=1024:cash_add=110 info : GameDBServer::OnDelSession, sid=343. $DebugAddCash = new WritePacket(); $DebugAddCash -> getresponse = false; // without response $DebugAddCash -> WriteUInt32(1024); // userid $DebugAddCash -> WriteUInt32(5 * 100); // cash $DebugAddCash -> Pack(0x209); // opcode $DebugAddCash -> Send("localhost", 29400); // send to gamedbd Нашел пакет: ADDCASH, но при попытке его использовать - голда не прибавляется. struct __cppobj AddCash : Protocol { int userid; int zoneid; int sn; int cash; }; $AddCash = new WritePacket(); $AddCash -> WriteUInt32(1024); // userid $AddCash -> WriteUInt32(1); // zoneid $AddCash -> WriteUInt32(65536); // sn (установил такое значение, ибо похоже на конфиг [so_sndbuf = 65536] ) $AddCash -> WriteUInt32(5 * 100); // cash $AddCash -> Pack(0x203); // opcode $AddCash -> Send("localhost", 29400); // send to gamedbd $Re_AddCash = new ReadPacket($AddCash); $Re_AddCash -> ReadPacketInfo(); $res = []; $res['retcode'] = $Re_AddCash -> ReadUInt32(); $res['userid'] = $Re_AddCash -> ReadUInt32(); $res['zoneid'] = $Re_AddCash -> ReadUInt32(); $res['sn'] = $Re_AddCash -> ReadUInt32(); /* Результат: array(4) { ["retcode"]=> int(0) ["userid"]=> int(1024) ["zoneid"]=> int(1) ["sn"]=> int(65536) } */ Но голда не прибавляется. В логе сервера при использовании AddCash, вот что: info : GameDBServer::OnAddSession, sid=333. info : GameDBServer::OnDelSession, sid=333. Может что-то не так делаю? Спасибо
Правильно сформулированный вопрос творит чудеса. Название пакета, с помощью которого можно будет получить список предметов у персонажа. И еще один пакет, с помощью которого удалять эти предметы можно было бы. Если такие пакеты естьконечно же
Всем привет! Каким пакетом можно у игрока посмотреть список предметов которые у него есть, удалить предмет? И еще пакет интересует, которым можно изменять уровень персонажа, его харакктеристики (хп, ману...) Искал по пвкоду не могу найти подходящий пакет, их много, может прпоустил.. спасибо!
---
Немного начинаю понимать, но все-же на примере было бы понятнее. Взял для примера пакет для просмотра информации о игроке 0x1F43 http://pwdev.ru/index.php?title=GetRoleDataRes Вот пример кода, который работает include 'ReadPacket.php'; $GetRoleData = new WritePacket(); $GetRoleData -> WriteUInt32(-1); // always $GetRoleData -> WriteUInt32(1024); // roleid $GetRoleData -> Pack(0x1F43); // opcode if (!$GetRoleData -> Send("localhost", 29400)) // send to gamedbd return; $GetRoleData_Re = new ReadPacket($GetRoleData); $GetRoleData_Re -> ReadPacketInfo(); $GetRoleData_Re -> ReadUInt32(); // -1 $GetRoleData_Re -> ReadUInt32(); // retcode $GRoleData['base']['version'] = $GetRoleData_Re -> ReadUByte(); $GRoleData['base']['id'] = $GetRoleData_Re -> ReadUInt32(); $GRoleData['base']['name'] = $GetRoleData_Re -> ReadUString(); $GRoleData['base']['race'] = $GetRoleData_Re -> ReadUInt32(); var_dump($GRoleData); И выдаёт мне результат: array(1) { ["base"]=> array(13) { ["version"]=> int(1) ["id"]=> int(1024) ["name"]=> string(3) "PersonName" } } Все вроде-бы хорошо, но мне не понятно откуда узнать, какие данные передать, и какие я получу... $GetRoleData = new WritePacket(); $GetRoleData -> WriteUInt32(-1); // что это за параметр, и почему он первый $GetRoleData -> WriteUInt32(1024); // Этот второй $GetRoleData -> Pack(0x1F43); // opcode $GetRoleData_Re = new ReadPacket($GetRoleData); $GetRoleData_Re -> ReadPacketInfo(); $GetRoleData_Re -> ReadUInt32(); // -1 $GetRoleData_Re -> ReadUInt32(); // retcode $GRoleData['base']['version'] = $GetRoleData_Re -> ReadUByte();// где узнать список послеодовательностей полей, которые приходят в $GetRoleData_Re $GRoleData['base']['id'] = $GetRoleData_Re -> ReadUInt32(); $GRoleData['base']['name'] = $GetRoleData_Re -> ReadUString(); $GRoleData['base']['race'] = $GetRoleData_Re -> ReadUInt32(); Спасибо --- добавлено: 20 фев 2018 в 22:25 --- Вот например на pwdev нашел пакет, который по идее отправляет анонс. http://pwdev.ru/index.php?title=OnlineAnnounce Тип: пакет (ProtocolType) Сервис: gdeliveryd Опкод: 0x4 Тип данных Название int userid int localsid int remain_time byte zoneid int free_time_left int free_time_end int creatime byte referrer_flag byte passwd_flag byte usbbind byte accountinfo_flag Как мне его использовать, имея такой шаблон? $GetRoleData = new WritePacket(); $GetRoleData -> WriteUInt32(-1); // always $GetRoleData -> WriteUInt32(1024); // roleid $GetRoleData -> Pack(0x1F43); // opcode Это было бы отличным примером, спасибо
Всем привет! Знаю немного php, и начал интересоваться как взаимодействует сайт-сервер, и немного запутался, а точнее - не понимаю связь пакетов, шифраций... Вот например, я хочу достать максимум информации по персонажу, как это реализовать, имея просто ид персонажа? Нашел "пример работы с пакетами" http://pwdev.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B_%D1%81_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0%D0%BC%D0%B8 Там вначале страницы генерируется запрос как я понимаю $GetRoleBase = new WritePacket(); $GetRoleBase -> WriteUInt32(-1); // always $GetRoleBase -> WriteUInt32(1024); // roleid $GetRoleBase -> Pack(0xBC5); // opcode Данные преобразуются с помощью WriteUInt32 public function WriteUInt32($value) { $this -> request .= pack("N", $value); } И самое последнее и самое интересное, это "опкод". $GetRoleBase -> Pack(0xBC5); // opcode Это я так понимаю "команда" серверу, что я хочу взять инфу о персонаже? Именно: 0xBC5 этот код?... Если да, то где можно взять список этих опкодов? Спасибо за любые ответы
Имена участников (разделяйте запятой).