ПолезностиИсключительно для полезных тем из других разделов. Темы тут не создаются!
Темы сюда перемещаются из других разделов, и на их старых местах остаются постоянные перенаправления.
обьект это грубо говоря указатель на структуру. Первый ее член указатель на вмт, остальные это переменные экземпляра обьекта всякие.
Вмт это массив указателей на функции (методы) обьекта
Опять вопросик по радару назрел. При работе со списком игроков, заметил, что в списке иногда остаются те,кого рядом нету. В чем может быть проблема? Удаляю из списка когда приходит DeleteObject. Сервер Руофф.
Опять вопросик по радару назрел. При работе со списком игроков, заметил, что в списке иногда остаются те,кого рядом нету. В чем может быть проблема? Удаляю из списка когда приходит DeleteObject. Сервер Руофф.
Видимо иногда не приходит DeleteObject, оч давно когда еще юзал l2Control и у него было такое что на радаре оставались те кого рядом нету.
Да уж... Насчет удаления мусорных мобов и игроков я тоже не понимаю пока принципа. DeleteObject действительно приходит далеко не всегда.
Пробовал удалять по превышении расстояния от игрока, но не работает это. Странно, что когда отбегаешь от моба, он исчезает то на расстоянии
около 2000 единиц, а то и с 4000 виден.
Может вся карта игры поделена на квадраты
1 2 3
4 5 6
7 8 9
и когда скажем игрок в квадрате 1, а моб в квадратах 2 4 5, то мобы видны.
А когда моб в 3 6 7 8 9, то клиент удаляет таких мобов
С DeleteObject вообще смешно - При дропе сначала идет
DeleteObject а потом игрок этот дроп благополучно поднимает.
Пришлось при DeleteObject не удалять обьект, а помечать как невидимый
StopMove 49A136A8(Ботан) 156517,-48260,-3088
DeleteObject 4075C77D(Адена 2183)
GetItem 49A136A8(Ботан) 4075C77D(Адена 2183) 156517,-48260,-3088
InventoryUpdate
Последний раз редактировалось Эдвадко, 02.02.2011 в 22:40.
Наконец появилось немного свободного времени))
И сразу же какие-то косяки...
Пытаюсь вызвать GetNextCreature(float,int), получаю адрес ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z в engine.dll, но при вызове GetNextCreature клиент закрывается с ошибкой... Вроде простейшая экспортируемая функция, а понять не могу в чем прикол...
Думаю, мб с параметрами какие-то косяки?
Никто не подскажет в чем проблема или хотя бы в какую сторону пытаться копать?
Хм, решение конечно нашлось.... Но не могу понять одного...
Функция заработала в таком варианте(правда пока не проверил корректность,но как минимум клиент не вылетает) GetNextCreature(float,DWORD,DWORD,DWORD)
1.Параметр - радиус
2.что-то что лежит в engine со смещением 0x776574
3. 0
4.что-то что лежит в engine со смещением 0x776578
Теперь главный вопрос понять, что лежит по этим адресам...
ЗЫ корректность проверил, все работает верно...
Последний раз редактировалось Aries, 06.02.2011 в 23:58.
Ну куды ? Куды здесь можно засунуть четыре аргумента ?
Ну если только функция не обьявлена как fastcall- 0x776578 попадает в есх, 0 в ebx, 0x776574 - это указатель на обьект Creature,потом радиус. И на выходе указатель на следущий обьект Creature. Но тогда порядок аргументов должен быть обратный.
Код:
; Exported entry 5758. ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z
; =============== S U B R O U T I N E =======================================
; int __stdcall UNetworkHandler__GetNextCreature(float, int)
public ?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z
?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z proc near
; DATA XREF: ___:2051D4D8o
; qpjwqywc:off_218DF084o
var_8 = dword ptr -8
arg_0 = dword ptr 4
arg_4 = dword ptr 8
mov edx, [esp+arg_4]
fld [esp+arg_0]
mov eax, [ecx]
mov eax, [eax+690h]
push edx
push ecx
fstp [esp+8+var_8]
push 6
call eax
test eax, eax
jz short loc_203D458E
mov ecx, [eax+4]
test ecx, ecx
jz short loc_203D458E
cmp dword ptr [eax], 1
jnz short loc_203D458E
mov eax, ecx
retn 8
; ---------------------------------------------------------------------------
loc_203D458E: ; CODE XREF: UNetworkHandler::GetNextCreature(float,int)+1Bj
; UNetworkHandler::GetNextCreature(float,int)+22j
; UNetworkHandler::GetNextCreature(float,int)+27j
xor eax, eax
retn 8
?GetNextCreature@UNetworkHandler@@UAEPAUUser@@MH@Z endp
Последний раз редактировалось Эдвадко, 07.02.2011 в 00:58.
Да, все именно так...
Тогда, как я понимаю 0x776578 - указатель на объект UNetworkHandler?
Хм, т.к. со всем этим делом я еще довольно мало разбираюсь, то на будущее не подскажете как можно отследить этот объект? (на случай смены хроник и т.п.)