на 1.3.6 все делается без пакетов $userid = floor($roleid / 16) * 16; Спасибо, видимо придется так и делать. Кстати, заметил, что в 136 нету пакета ForbidUser (8004), но при бане из ГМ панели в игре отловил пакет \x81\x62\x2d\x00\x00\x00\x21\x00\x00\x00\x10\x00\x00\x00\x20\x00\x00\x00\x38\x1c\x74\x00\x65\x00\x73\x00\x74\x00\x20\x00\x75\x00\x73\x00\x65\x00\x72\x00\x20\x00\x74\x00\x65\x00\x73\x00\x74\x00 Так понимаю опкод 81(Dec:129), второе 62(Dec: 98 ) неизвестный параметр, возможно тип операции, далее длина и тело пакета (банящий юзер, тот кого банят, время и причина бана). Если честно, то информации по структуре этого пакета в 136 я не нашел. Попытки составить код под этот пакет не привели к рабочему результату... $ForbidUserArg = new WritePacket(); $ForbidUserArg->WriteUInt32(-1); // retcode $ForbidUserArg->WriteUByte(98); // operation $ForbidUserArg->WriteUInt32(-1); // gmuserid $ForbidUserArg->WriteUInt32(0); // source $ForbidUserArg->WriteUInt32(32); // userid $ForbidUserArg->WriteUInt32(160); // time $ForbidUserArg->WriteUString("TEST", "UTF-16LE"); $ForbidUserArg->Pack(129); if (!$ForbidUserArg->Send("127.0.0.1",29100)) return; $ForbidUserRes = new ReadPacket($ForbidUserArg); print_r($ForbidUserRes->ReadPacketInfo()); Увы не работает, однако если отсылаю тот код, который поймал в ТСП лог - напрямую в сокет gdlivery, то бан срабатывает, так и не понял, как устроен данный пакет. --- добавлено: 5 дек 2015 в 17:39 --- конечно в 136 банить акк можно и просто добавив запись в таблицу SQL forbid, но все же хотелось разобраться, как устроен пакет, который я отловил.
И ещё, в GetRoleBase и GetRoleInfo тоже нет userid. Напиши в саппорт китая, чтобы они переделали 1.3.6 с юзерайдишником. т.е. такого пакета там в принципе нет?
В общем ищу способ получить по айди перосонажа - айди аккаунта в 1.3.6 Некоторые из вас могут сказать, юзай пакет Roleid2Uid, да, все верно, но он как выяснилось работает в 1.4.4+ Но вот в 1.3.6 не получается, либо в 1.3.6 другой опкод, либо пакета просто нет этого, в общем прошу помощи либо найти пакет и его опкод в 1.3.6 или есть ли вообще любые пакеты в 1.3.6, которые хранят информацию об аккаунте персонажа? --- добавлено: 5 дек 2015 в 10:46 --- И ещё, в GetRoleBase и GetRoleInfo тоже нет userid.
Самое главное Серей проигнорировал моё сообщение, правильно, нечего сказать видимо.
Вроде разобрался, не без помощи друзей ) Немного поменял пакет запроса... 1. убрал $PutRoleData->WriteUByte(1); // overwrite 2. так называемые данные reserved читались как ReadUByte, а нужно ReadUInt32. Тоже самое примерно и с записью. После сделанных корректировок чтение и сохранение заработало корректно, всем, кто мне помогал спасибо!
Писал уже сто раз: работает только общий пакет PutRoleData. Всякие PutRoleBase и подобные не работают. Если интересно почему — открываем метод PutRoleBase в сервисе и любуемся, что его тело пусто — один ret (китайцы поленились, лапша упала на хард с билдом и обнулила эту область, котэ игрался со студией и удалил код). т.е. возможности сохранять этот и подобные ему пакеты, нет? Нет. Тем более я не пойму зачем ты выдрал из PutRoleData часть пакета и прилепил к ней опкод PutRoleBase. Я PutRoleData не от балды писал и он прекрасно сохраняет любые данные о персе. Чем он тебе не угодил — хз. в 1.3.6 его просто нет --- добавлено: 2 дек 2015 в 16:45 --- и ещё, почему то IWEB прекрасно сохраняет данные перса в XML, странно?
Писал уже сто раз: работает только общий пакет PutRoleData. Всякие PutRoleBase и подобные не работают. Если интересно почему — открываем метод PutRoleBase в сервисе и любуемся, что его тело пусто — один ret (китайцы поленились, лапша упала на хард с билдом и обнулила эту область, котэ игрался со студией и удалил код). т.е. возможности сохранять этот и подобные ему пакеты, нет?
Насколько я помню $PutRoleData->WriteUByte(1); // overwrite это требуется только в GRoleData и, ещё, переменная reserved3 - byte, максимальное значение - 255 $PutRoleData->WriteUByte(1); // overwrite Закомментировал. И теперь пытаюсь присвоить значение 11 но не работает по прежнему.
т.е. я думал в правильном направлении? Надо использовать несколько пакетов для составления XML? да. именно уже применил, данные получаю корректно, теперь проблема с пакетом сохранения, создал другую тему.
Для теста нацарапал такую функцию, include_once('configure.php'); include_once('includes/fnc.pocket.php'); function test($value) { global $configure; $data = GetRoleBase($value); //получаем данные $data['role']['base']['reserved3'] = "1111"; //присваиваем переменной новое значение PutRoleBase($value, $data); //сохраняем изменения $result = GetRoleBase($value); //получаем данные чтоб увидеть результат return $result['role']['base']['reserved3']; //выводим значение сохраненой переменной } echo test(32); GetRoleBase я уже проверил, она корректно выдает данные, но вот с запросом сохранения непорядок... Переменной $data['role']['base']['reserved3'] присваиваю новое значение и пытаюсь сохранить. Но на выходе получаю опять значение 0, т.е. пакет записи изменений не отрабатывает. Структуру и опкод вроде использую корректно, но в чем то косяк... вот привожу код функции PutRoleBase function PutRoleBase($roleid, $data) { global $configure; $PutRoleData = new WritePacket(); $PutRoleData->WriteUInt32(-1); $PutRoleData->WriteUInt32($roleid); $PutRoleData->WriteUByte(1); // overwrite $GRoleData = $data['role']; $PutRoleData->WriteUByte($GRoleData['base']['version']); $PutRoleData->WriteUInt32($GRoleData['base']['id']); $PutRoleData->WriteUString($GRoleData['base']['name']); $PutRoleData->WriteUInt32($GRoleData['base']['race']); $PutRoleData->WriteUInt32($GRoleData['base']['cls']); $PutRoleData->WriteUByte($GRoleData['base']['gender']); $PutRoleData->WriteOctets($GRoleData['base']['custom_data']); $PutRoleData->WriteOctets($GRoleData['base']['config_data']); $PutRoleData->WriteUInt32($GRoleData['base']['custom_stamp']); $PutRoleData->WriteUByte($GRoleData['base']['status']); $PutRoleData->WriteUInt32($GRoleData['base']['delete_time']); $PutRoleData->WriteUInt32($GRoleData['base']['create_time']); $PutRoleData->WriteUInt32($GRoleData['base']['lastlogin_time']); if (count($GRoleData['base']['forbid']) == 4 && isset($GRoleData['base']['forbid']['type'])) { $temp = $GRoleData['base']['forbid']; unset($GRoleData['base']['forbid']); $GRoleData['base']['forbid'][0] = $temp; } $PutRoleData->WriteCUInt32(count($GRoleData['base']['forbid'])); for ($i = 0; $i < count($GRoleData['base']['forbid']); $i++) { $PutRoleData->WriteUByte($GRoleData['base']['forbid'][$i]['type']); $PutRoleData->WriteUInt32($GRoleData['base']['forbid'][$i]['time']); $PutRoleData->WriteUInt32($GRoleData['base']['forbid'][$i]['createtime']); $PutRoleData->WriteUString($GRoleData['base']['forbid'][$i]['reason']); } $PutRoleData->WriteOctets($GRoleData['base']['help_states']); $PutRoleData->WriteUByte($GRoleData['base']['reserved1']); $PutRoleData->WriteUByte($GRoleData['base']['reserved2']); $PutRoleData->WriteUByte($GRoleData['base']['reserved3']); $PutRoleData->Pack(0xBC4); return $PutRoleData->Send("localhost", $configure['dbgame_port']); } где же собака порылась? --- добавлено: 2 дек 2015 в 12:42 --- напоминаю, структуру использую 1.3.6 версии
[IMG] Сделал самодельную функцию-велосипед GetRoleData, проверил, вроде работает.
Теперь насчет существования пакета GetRoleData в версиях 1.4.2 и ниже, даже в конфиге старого IWEBa его нет, но возможность XML редактирования есть, получается со GetRoleData этот пакет ввели с версией 1.44 но возможность XML редактирования есть GetRoleBase - PutRoleBase GetRoleStatus - PutRoleStatus GetRolePocket - PutRolePocket GetRoleEquipment - PutRoleEquipment GetRoleStorehouse - PutRoleStorehouse GetRoleTask - PutRoleTask т.е. я думал в правильном направлении? Надо использовать несколько пакетов для составления XML?
Теперь насчет существования пакета GetRoleData в версиях 1.4.2 и ниже, даже в конфиге старого IWEBa его нет, но возможность XML редактирования есть, получается составными пакетами там XML построение идет?
Либо у меня проблема с глазами, либо в версиях 1.4.2 и ниже не используется в XML построении пакет GetRoleData, а вместо него для построения XML несколько раз вызываются пакеты типа GetRoleBase GetRoleStatus и т.д. это так или я просто не смог найти пакет подобный GetRoleData?
окей, буду наедятся, что в 1.4.2 опкоды и структура как в 136, как структуру тащить я понял, [IMG] но как опкод узнать так и не допер... кто подскажет?
распаковываю матраса... судя по объему он больше, чем прошлый образ, надеюсь нашел не обрезанный. Если конечно порнухи туда не натолкали ))) --- добавлено: 1 дек 2015 в 20:54 --- увы, у матроса gamedbd тоже обрезан... --- добавлено: 1 дек 2015 в 20:58 --- увы, у матроса gamedbd тоже обрезан... https://dl.dropboxusercontent.com/u/67868654/gamed_delivery.rar тоже обрезан, нормальный файл gamedbd должен иметь размер примерно как... [IMG] в версия ниже 1.4.2 он незначительно отличается, но по любому не 3 мб и даже не 10 мб...
ну спс, буду надеятся хоть на 1 ссылке будет полная версия, без обрезков ) --- добавлено: 1 дек 2015 в 20:36 --- https://dl.dropboxusercontent.com/u/67868654/gs126.rar вроде нужны gamedbd и gdilevry
Думаешь сборки от пилы или матроса не обрезанные? Насколько я помню, размеры всех сервисов были довольно большими. осталось теперь разобраться как достать файлы из .img так как нет желания возиться с установкой ... --- добавлено: 1 дек 2015 в 20:20 --- Утилитку для распаковки образов IMG нашел тут, успешно достал содержимое. Однако файлы и там обрезаны оказались... Или не ту сборку скачал на колине? --- добавлено: 1 дек 2015 в 20:23 --- толку от гугла, все ссылки на пилу или матроса сборки битые...
А в гугле забанили или логику не завезли? Можно по ключевым словам "пила", "матрос" и т.д. Думаешь сборки от пилы или матроса не обрезанные?
В общем как известно в 136 версии (и им подобных) в ядре нет отладочной информации Ну как бы есть. все сборки, что только нашел (ниже 1.4.2) с обрезанными дебаг инфами... Т.е. используя такой инструмент, для отлова информации, он говорит, мол нет дебаг информации и не может получить данные. --- добавлено: 1 дек 2015 в 19:37 --- [IMG]
Имена участников (разделяйте запятой).