1. Гость, мы просим Вас ознакомиться с Правилами Форума и Отказом от ответственности!

Результаты поиска

  1. wsok
    на 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, но все же хотелось разобраться, как устроен пакет, который я отловил.
    Сообщение от: wsok, 5 дек 2015 в разделе: PW Вопросник
  2. wsok
  3. wsok
  4. wsok
  5. wsok
  6. wsok
  7. wsok
  8. wsok
  9. wsok
  10. wsok
    Для теста нацарапал такую функцию, 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 версии
    Автор темы: wsok, 2 дек 2015, ответов - 8, в разделе: PW Вопросник
  11. wsok
  12. wsok
  13. wsok
  14. wsok
  15. wsok
  16. wsok
  17. wsok
  18. wsok
  19. wsok
  20. wsok