You are not logged in.
Исправь,
boats for SA-MP
он подумает что ты один из русских программистов который хочет сделать лодку для сампа
Offline
Попробуй вот так:
DWORD * objPtr = *(DWORD **)0x4B7CCC; DWORD poolAddress = objPtr[1]; ; оригинал .text:0046EA1D mov eax, dword_4B7CCC .text:0046EA22 mov ecx, [eax+4]
Прочтение книжки по ассемблеру настоятельно рекомендуется.
Offline
Купить? Можно скачать, но с книжкой учиться гораздо приятнее и удобнее.
Говорят, Калашникова "Ассемблер? Это просто! Учимся программировать" лучший учебник.
Я сам потихоньку начинаю читать=)
Потом еще понадобятся разные справочники и документации.
Offline
Здрасти всем...
вот при использовании того адреса что дал listener слот действительно закрывался но вылетала ошибка сервера...я решил попробовать спросить по irc у kye(главный разработчик сампа) и на удивление он мне ответил...сказал что адрес правильный и что ошибка связана с скриптовой функцией SetPlayerChecpoint...
вот адрес который в ошибке был:0x00473EBB
Offline
В разговоре по irc с Y_Less'ом он сказал вот что:
"<Y_Less> You can't just set an address to true to connect a player, you need to fake a connection to the network layer"
Что переводится как:Вы не можете выставить значение true на слот игрока,вы должны фальсифицировать соединение с сетью.
По мойму лучше поверить Y_Less'у а не kye(с его этим SetPlayerChecpoint),поэтому у меня вопрос:как можно фальсифицировать соединение с сетью?(я не успел спросить у Y_Less'а,он уходил,но сказал что ещё можно будет обращаться и пожелал удачи с проектом
Offline
Здравствуйте уважаемые
Разработку я не забросил,встретил большие проблемы с ботами для сервера...точнее большие проблемы с иммитированием их подключения к серверу(проще говоря встал в мертвой точке),но есть другой вариант при чём более легкий и выполнимый...только для этого надо как то перебрать сложный для понимания плагин...ну расскажу по порядку:
Сервер самп использует бесплатный сетевой движок - RakNet,и есть плагин разработчика сампа,Y_Less'a ,где через память плагин собирает пакет и отправляет его игроку(через серверный RakNet).Поэтому я собираюсь собрать пакет где будет информация о "подключившемся игроке" и т.к. у клиента нет никаких проверок на бота и т.д. то он сразу же добавит псевдоигрока,а сервер не будет ничего об этом подозревать.после этого можно так же посылать пакеты выставления координат и т.д.,всё что душе угодно...но загвозтка в том что плагин Y_Less'a очень запутанный(по крайней мере для меня),я хотел взять от туда систему доступа к RakNet'y сервера,но не получилось,потом пытался изменить существующие функции,но сервер начел говорить "нет данной функции",поэтому обращаюсь к умельцам с просьбой дать мне код этой системы доступа пожалуйста помогите...
Плагин цепляю в архиве к сообщению...
Offline
[You must login to view hidden text.]
Kye прав. Изменения в самом клиенте тоже нужны, иначе может получится ещё один сервер 025.
Я не специалист в этом деле, это просто моё мнение. А плагин Sacky хорошо работает ? Я его не пробовал.
GTA SA CrashKiller by MadniX , Virtual_Key_Codes for opcode 0AB0
Offline
kye говорит о pedах,а про ботов он сам согласился что они возможны,но он из не одобряет...
плагин Sacky работает,ботов создаёт но я их не использовал когда 0.2.2 ещё был...а щас понадобились но уже 0.2Х версия((
в 59 посту я описал как можно создать бота на стороне игрока(бот не пед,он иммитация игрока у которого будет жизнь,ник и т.д. а пед это пед)...может кто нибудь сможет всё таки разобраться в плагине Y_Less'a?
Offline
изза глючного плагина начал писать свой "управляющий RakNet"....короч использовать функции сетевого движка сампа для отправки фальшивых пакетов о подключении игрока
Но тут такая фигня,я нашёл в ассемблере как выглядят эти функции в месте где используются для подключения игрока,но вот с этими eax и т.д. я не разобрался до сих пор...
Вот код полный:
.text:00474477 loc_474477: ; CODE XREF: sub_4743C0+BFj .text:00474477 mov cl, [eax] .text:00474479 mov [edx+eax], cl .text:0047447C inc eax .text:0047447D test cl, cl .text:0047447F jnz short loc_474477 .text:00474481 mov eax, [ebp+esi*4+320h] .text:00474488 mov [eax], bl .text:0047448A xor eax, eax .text:0047448C mov dword ptr [ebp+esi*4+0], 1 .text:00474494 mov [ebp+esi*4+19C8h], eax .text:0047449B mov [ebp+esi*4+1CE8h], eax .text:004744A2 mov [ebp+esi*4+2328h], eax .text:004744A9 lea ecx, [esp+148h+var_124] .text:004744AD mov [esi+ebp+2648h], al .text:004744B4 call sub_43C7F0 .text:004744B9 push 1 .text:004744BB push 8 .text:004744BD lea edx, [esp+150h+var_138] .text:004744C1 push edx .text:004744C2 lea ecx, [esp+154h+var_124] .text:004744C6 mov [esp+154h+var_4], 1 .text:004744D1 mov [esp+154h+var_138], bl .text:004744D5 call sub_43CE90 .text:004744DA mov eax, edi .text:004744DC lea ecx, [eax+1] .text:004744DF nop .text:004744E0 .text:004744E0 loc_4744E0: ; CODE XREF: sub_4743C0+125j .text:004744E0 mov dl, [eax] .text:004744E2 inc eax .text:004744E3 test dl, dl .text:004744E5 jnz short loc_4744E0 .text:004744E7 sub eax, ecx .text:004744E9 push 1 .text:004744EB mov ebx, eax .text:004744ED push 8 .text:004744EF lea eax, [esp+150h+var_138] .text:004744F3 push eax .text:004744F4 lea ecx, [esp+154h+var_124] .text:004744F8 mov [esp+154h+var_138], bl .text:004744FC call sub_43CE90 .text:00474501 movzx ecx, bl .text:00474504 push ecx .text:00474505 push edi .text:00474506 lea ecx, [esp+150h+var_124] .text:0047450A call sub_43CF40 .text:0047450F mov edx, dword_4B7CCC .text:00474515 mov edi, [edx] .text:00474517 mov eax, [edi] .text:00474519 push esi .text:0047451A lea ecx, [esp+14Ch+var_12A] .text:0047451E push ecx .text:0047451F mov ecx, edi .text:00474521 call dword ptr [eax+0DCh] .text:00474527 mov ebx, [eax] .text:00474529 mov ax, [eax+4] .text:0047452D mov edx, [edi] .text:0047452F push 0 .text:00474531 push 1 .text:00474533 sub esp, 8 .text:00474536 mov ecx, esp .text:00474538 push 0 .text:0047453A mov [ecx], ebx .text:0047453C push 2 .text:0047453E mov [ecx+4], ax .text:00474542 push 1 .text:00474544 lea ecx, [esp+164h+var_124] .text:00474548 push ecx .text:00474549 push offset unk_49BA78 .text:0047454E mov ecx, edi .text:00474550 call dword ptr [edx+7Ch] .text:00474553 mov edx, dword_4B7CCC .text:00474559 mov ecx, [edx] .text:0047455B mov eax, [ecx] .text:0047455D push esi .text:0047455E lea edx, [esp+14Ch+in] .text:00474562 push edx .text:00474563 call dword ptr [eax+0DCh] .text:00474569 mov eax, dword ptr [esp+148h+in.S_un] .text:0047456D push eax ; in .text:0047456E call ds:inet_ntoa
а вот отдельно:
запись ида подключившегося игрока:
.text:004744B9 push 1 .text:004744BB push 8 .text:004744BD lea edx, [esp+150h+var_138] .text:004744C1 push edx .text:004744C2 lea ecx, [esp+154h+var_124] .text:004744C6 mov [esp+154h+var_4], 1 .text:004744D1 mov [esp+154h+var_138], bl .text:004744D5 call sub_43CE90
Запись длины имени:
.text:004744E9 push 1 .text:004744EB mov ebx, eax .text:004744ED push 8 .text:004744EF lea eax, [esp+150h+var_138] .text:004744F3 push eax .text:004744F4 lea ecx, [esp+154h+var_124] .text:004744F8 mov [esp+154h+var_138], bl .text:004744FC call sub_43CE90
И запись имени,длины имени:
.text:00474501 movzx ecx, bl .text:00474504 push ecx .text:00474505 push edi .text:00474506 lea ecx, [esp+150h+var_124] .text:0047450A call sub_43CF40
Далее отправка пакета игрокам(не уверен что это то):
.text:0047450F mov edx, dword_4B7CCC .text:00474515 mov edi, [edx] .text:00474517 mov eax, [edi] .text:00474519 push esi .text:0047451A lea ecx, [esp+14Ch+var_12A] .text:0047451E push ecx .text:0047451F mov ecx, edi .text:00474521 call dword ptr [eax+0DCh] .text:00474527 mov ebx, [eax] .text:00474529 mov ax, [eax+4] .text:0047452D mov edx, [edi] .text:0047452F push 0 .text:00474531 push 1 .text:00474533 sub esp, 8 .text:00474536 mov ecx, esp .text:00474538 push 0 .text:0047453A mov [ecx], ebx .text:0047453C push 2 .text:0047453E mov [ecx+4], ax .text:00474542 push 1 .text:00474544 lea ecx, [esp+164h+var_124] .text:00474548 push ecx .text:00474549 push offset unk_49BA78 .text:0047454E mov ecx, edi .text:00474550 call dword ptr [edx+7Ch] .text:00474553 mov edx, dword_4B7CCC .text:00474559 mov ecx, [edx] .text:0047455B mov eax, [ecx] .text:0047455D push esi .text:0047455E lea edx, [esp+14Ch+in] .text:00474562 push edx .text:00474563 call dword ptr [eax+0DCh] .text:00474569 mov eax, dword ptr [esp+148h+in.S_un] .text:0047456D push eax ; in .text:0047456E call ds:inet_ntoa
а вот как выглядит всё это в соурсе сампа:
RakNet::BitStream bsSend; bsSend.Write(bytePlayerID); bsSend.Write(strlen(szPlayerName)); bsSend.Write(szPlayerName,strlen(szPlayerName)); pNetGame->GetRakServer()->RPC("xx",&bsSend,HIGH_PRIORITY,RELIABLE_ORDERED,0, pNetGame->GetRakServer()->GetPlayerIDFromIndex(bytePlayerID),TRUE,FALSE);
Как я понял для "упаковки" в пакет мне надо знать по какому адресу сидит bsSend
А для отправки: pNetGame
Помогите пожалуйста
Offline
Если тут комуто это интересно ещё:
в 0.3 есть встроенные нпк но каждый бот создавал отдельный процесс и "ел" 3 мб оперативки,так же они не могли выполнять команды типа walk to/run/shot и т.д. , поэтому я решил доделать то что начал давным давно и у меня всё получилось (знаю просто уже на много больше чем тогда)
Plugin for SA:MP 0.3a R4 server
Controllable NPC 0.1
by 009
Плагин убирает использование samp_npc.exe что экономит оперативную память и сокращает количество процессов от samp.
Так же плагин даёт возможность управлять действиями NPC
Функции:
CreateNPC(npcid,npcname[]); - создать NPC с указанным id и именем (имя не играет роли вообще)
DestroyNPC(npcid); - уничтожить NPC
SetNPCPos(npcid,Float:X,Float:Y,Float:Z); - сменить координаты NPC
NPC_AimAt(npcid,Float:X,Float:Y,Float:Z); - NPC прицелится в указанную точку
NPC_ShotAt(npcid,Float:X,Float:Y,Float:Z); - NPC стреляет в указанную точку
NPC_WalkTo(npcid,Float:X,Float:Y,Float:Z); - NPC идёт в указанную точку
NPC_RunTo(npcid,Float:X,Float:Y,Float:Z); - NPC бежит лёгким бегом в указанную точку
NPC_SprintTo(npcid,Float:X,Float:Y,Float:Z); - NPC бежит быстрым бегом в указанную точку
SetNPCWeapon(npcid,weaponid); - сменить оружие NPC
KillNPC(npcid); - убить NPC
SpawnNPC(npcid); - заспавнить NPC
StopNPC(npcid); - остановить текущее действие NPC
Каждый NPC работает на отдельном потоке что означает что лагов от них практически не будет
Вы можете убить NPC из оружия
В архиве вложен тест-мод для NPC, используйте /state 0 - 5 чтобы повеселиться (лучше человек 5,так веселее будет)
Скачать можно тут: download
Информация о разработке новой версии: projects
Offline