#51 27-03-2009 09:26

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Помогите написать плагин для SA-MP

Исправь,

009 wrote:

boats for SA-MP

он подумает что ты один из русских программистов который хочет сделать лодку для сампа smile

Offline

#52 27-03-2009 14:32

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

grin точно,а я то подумал что эт он не ответил когда зашёл!:lol::lol::lol:

Offline

#53 27-03-2009 16:11

listener
From: Vice City
Registered: 09-11-2006
Posts: 615
Website

Re: Помогите написать плагин для SA-MP

Попробуй вот так:

DWORD * objPtr = *(DWORD **)0x4B7CCC;
DWORD poolAddress = objPtr[1];

; оригинал
.text:0046EA1D                 mov     eax, dword_4B7CCC
.text:0046EA22                 mov     ecx, [eax+4]

Прочтение книжки по ассемблеру настоятельно рекомендуется.


C5 - GTA IV/RDR/GTA V script compiler.
~ 60% done.

Offline

#54 27-03-2009 19:41

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

СПС!получилось!не знаете где книжку по ассемблеру взять? blush

Offline

#55 27-03-2009 20:39

Alien
Registered: 12-10-2008
Posts: 564

Re: Помогите написать плагин для SA-MP

Купить? Можно скачать, но с книжкой учиться гораздо приятнее и удобнее.
Говорят, Калашникова "Ассемблер? Это просто! Учимся программировать" лучший учебник.
Я сам потихоньку начинаю читать=)
Потом еще понадобятся разные справочники и документации.

Offline

#56 28-03-2009 02:48

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

главное с чегото начать учиться пользоваться ассемблером;-)

Offline

#57 31-03-2009 04:54

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

Здрасти всем...
вот при использовании того адреса что дал listener слот действительно закрывался но вылетала ошибка сервера...я решил попробовать спросить по irc у kye(главный разработчик сампа) и на удивление он мне ответил...сказал что адрес правильный и что ошибка связана с скриптовой функцией SetPlayerChecpoint...
вот адрес который в ошибке был:0x00473EBB

Offline

#58 02-04-2009 01:16

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

В разговоре по 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'а,он уходил,но сказал что ещё можно будет обращаться и пожелал удачи с проектом smile

Offline

#59 19-04-2009 18:22

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

Здравствуйте уважаемые smile
Разработку я не забросил,встретил большие проблемы с ботами для сервера...точнее большие проблемы с иммитированием их подключения к серверу(проще говоря встал в мертвой точке),но есть другой вариант при чём более легкий и выполнимый...только для этого надо как то перебрать сложный для понимания плагин...ну расскажу по порядку:
Сервер самп использует бесплатный сетевой движок - RakNet,и есть плагин разработчика сампа,Y_Less'a ,где через память плагин собирает пакет и отправляет его игроку(через серверный RakNet).Поэтому я собираюсь собрать пакет где будет информация о "подключившемся игроке" и т.к. у клиента нет никаких проверок на бота и т.д. то он сразу же добавит псевдоигрока,а сервер не будет ничего об этом подозревать.после этого можно так же посылать пакеты выставления координат и т.д.,всё что душе угодно...но загвозтка в том что плагин Y_Less'a очень запутанный(по крайней мере для меня),я хотел взять от туда систему доступа к RakNet'y сервера,но не получилось,потом пытался изменить существующие функции,но сервер начел говорить "нет данной функции",поэтому обращаюсь к умельцам с просьбой дать мне код этой системы доступа пожалуйста помогите...

Плагин цепляю в архиве к сообщению...

Offline

#60 19-04-2009 19:16

XotaBi4b
From: Харьков
Registered: 13-09-2008
Posts: 87

Re: Помогите написать плагин для SA-MP

[You must login to view hidden text.]
Kye прав. Изменения в самом клиенте тоже нужны, иначе может получится ещё один сервер 025.
Я не специалист в этом деле, это просто моё мнение. А плагин Sacky хорошо работает ? Я его не пробовал.

Offline

#61 20-04-2009 07:32

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

kye говорит о pedах,а про ботов он сам согласился что они возможны,но он из не одобряет...
плагин Sacky работает,ботов создаёт но я их не использовал когда 0.2.2 ещё был...а щас понадобились но уже 0.2Х версия((
в 59 посту я описал как можно создать бота на стороне игрока(бот не пед,он иммитация игрока у которого будет жизнь,ник и т.д. а пед это пед)...может кто нибудь сможет всё таки разобраться в плагине Y_Less'a?

Offline

#62 06-05-2009 07:19

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

изза глючного плагина начал писать свой "управляющий 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

#63 09-03-2010 16:50

009
From: Кемерово
Registered: 06-03-2009
Posts: 46
Website

Re: Помогите написать плагин для SA-MP

Если тут комуто это интересно ещё:
в 0.3 есть встроенные нпк но каждый бот создавал отдельный процесс и "ел" 3 мб оперативки,так же они не могли выполнять команды типа walk to/run/shot и т.д. , поэтому я решил доделать то что начал давным давно и у меня всё получилось smile (знаю просто уже на много больше чем тогда)

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

Board footer

Powered by FluxBB