|
You last visited: Today at 18:42
Advertisement
Rus. server
Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.
03/27/2010, 18:21
|
#1576
|
elite*gold: 0
Join Date: Jul 2009
Posts: 60
Received Thanks: 84
|
А зачем тебе знать этот ID?
Если атакует тебя, то таргет сам берется, если чужого персонажа (наверное, пишешь анти помощь окружающим?), то достаточно простого флага
Конечно, сам таргет не ставится, если бьют пета, но как только ты его вылечишь, моб переагрится на тебя.
|
|
|
03/27/2010, 18:42
|
#1577
|
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
|
я пишу баффера-помощника. оказывается есть еще одно смещение,указывающее на ячейку памяти, где находится ид ударившего магией. а знать нужно потому что в это время у мну в таргете член пати, которого я лечу. соответственно возникает ситуация- мну бьют магией, я его не вижу, соответственно никаких мер не предпринимаю, и рано или поздно оказываюсь чуть-чуть мертвым. а так прикольно получается- моб еще не ударил- а я уже знаю ![Smile](images/smilies/smile.gif) ,если что- сваливаю.
|
|
|
03/28/2010, 20:38
|
#1578
|
elite*gold: 0
Join Date: Jul 2009
Posts: 60
Received Thanks: 84
|
И что же ты утаиваешь это смещение?) Показывай)
|
|
|
03/28/2010, 22:52
|
#1579
|
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
|
Quote:
Originally Posted by slavapil
я особо не копал, но вроде:
[BA] + 1C + 20 + 354 - указатель на масив Id-ов (wordы)
[BA] + 1C + 20 + 358 - количество наложенных бафов (dword)
|
что-то не получается у меня получить указатель на массив . помогите разобраться.если можно на пальцах.
вот смещения
DWORD MobAtackIDFiz = 0x2C4; // Смещение к адр.Прицела Моба ID цели Моба (физ урон)
DWORD MobAtackIDMag = 0x2C8; // Смещение к адр.Прицела Моба ID цели Моба -(маг урон)
|
|
|
03/29/2010, 08:34
|
#1580
|
elite*gold: 0
Join Date: Sep 2009
Posts: 13
Received Thanks: 13
|
Quote:
Originally Posted by gen-ostr
что-то не получается у меня получить указатель на массив . помогите разобраться.если можно на пальцах.
|
Code:
procedure Bafs;
Var
fCount, offs, PlBase,Read: cardinal;
fW:word;
Str:string;
const
PW_BASE_ADDRESS = $0098ADDC;
Begin
//Бафы
ReadProcessMemory(hProcess, pointer(PW_BASE_ADDRESS), @offs, 4, Read);
ReadProcessMemory(hProcess, pointer(offs + $1C), @offs, 4, Read);
ReadProcessMemory(hProcess, pointer(offs + $20), @offs, 4, Read);
ReadProcessMemory(hProcess, pointer(offs + $358), @fCount, 4, Read);
ReadProcessMemory(hProcess, pointer(offs + $354), @PlBase, 4, Read);
Str:='';
while fCount>0 do
begin
ReadProcessMemory(hProcess, pointer(PlBase + 2*fCount), @fW, 2, Read);
Str:=Str+IntToStr(fW)+';';
Dec(fCount);
end;
Form1.Edit15.Text:= Str;
End;
вот код
|
|
|
03/29/2010, 14:22
|
#1581
|
elite*gold: 0
Join Date: Jun 2009
Posts: 15
Received Thanks: 5
|
Люди, подскажите пожалуйста, как можно найти цепочку оффсетов для начала блока данных о мобе. Если это уже обсуждалось, пожалуйста скажите номер поста или примерно страницы. Так же мне очень бы хотелось узнать как самому находить оффсеты для каких то значений например о персонаже, если я знаю оффсет для начала блока. Тоесть допустим мы имеем [BA] + 20, а как мы дальше узнаем, что допустим + 464 - это HP, а 468 это MP и т.д.
|
|
|
03/29/2010, 16:29
|
#1582
|
elite*gold: 0
Join Date: Jul 2009
Posts: 240
Received Thanks: 58
|
okay? xD
|
|
|
03/30/2010, 18:12
|
#1583
|
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
|
Помогите разобраться с массивом баффов, которые наложены на перса.По +354 есть этот массив, но ИД наложенных бафов отличается от ИД, которое в описателе скила.
как я понял, там 2-х байтовые числа. кроме того, к примеру, тот же "совет бессмертного" накладывает сразу два баффа. Просто хочу сделать ребафф не по таймеру, а по наличию-отсутствию баффа.( после смерти ведь баффы сбрасываются)
Да и антистан в нужный момент тоже не помешал бы.
|
|
|
03/31/2010, 07:26
|
#1584
|
elite*gold: 0
Join Date: Jul 2009
Posts: 60
Received Thanks: 84
|
Составь таблицу с ID бафов. Как вариант.)
Поздравьте меня, в течении 4-х долгих суток фарма в 4 окна удалось насобирать на феню.
И сразу же обнаружилось ряд недостатков.
Например, этот петух жареный, как и все летающие петы, постоянно застревает в земле. Поэтому приходится каждый раз жать мышкой "следовать", что совсем не удобно.
Появляется ряд вопросов: есть ли у кого инжект кнопки следовать, стоять, и желательно атаки и скиллов пета? Альт+1 тянуться использовать не удобно, а через PostMessage реализовать так и не удалось..
|
|
|
03/31/2010, 09:31
|
#1585
|
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
|
поздравляю. как вариант- используй атаку с воздуха, после каждой атаки поднимайся немного над землей. в данное время усиленно копаю в сторону функции "помощь в атаке" (такое же действие как идти к.. следовать..) а через PostMessage реализовать можно, только ведь есть инжект "атака петом". адрес где-то пробегал. вок как сделаю помощь в атаке - тоже займусь скилами Пэта.......
|
|
|
03/31/2010, 13:59
|
#1586
|
elite*gold: 0
Join Date: Sep 2009
Posts: 13
Received Thanks: 13
|
копайте тут $004bfb90 и $005b7ed0
|
|
|
03/31/2010, 17:11
|
#1587
|
elite*gold: 0
Join Date: Jul 2009
Posts: 60
Received Thanks: 84
|
Неудобно перед каждым мобом прыгать) Хотя если действительно с воздуха бить...и друидкой ничего не делать.. Ведь феня убивает в два раза быстрее чем хозяйка.
На счет PostMessage, пример выкладывал AlexGD, якобы рабочий.. Но этот код даже эскейп не посылает).. не говоря уже об Альт.
|
|
|
03/31/2010, 17:33
|
#1588
|
elite*gold: 0
Join Date: Dec 2009
Posts: 57
Received Thanks: 24
|
чтобы передать Альт+1 надо PostMessage со всеми параметрами передавать и составить правильно маску флагов. PostMessage реально любую комбинацию передавать.
Посмотри на исходниках.ру. там даже с примерами
slavapil. не сочти за наглость, но мож поделишся кодом? хотя бы инфой что и куда запихивать?
|
|
|
03/31/2010, 18:31
|
#1589
|
elite*gold: 0
Join Date: Jul 2009
Posts: 60
Received Thanks: 84
|
Quote:
Originally Posted by AlexGD
Ну, блин, не думал, что такой гемор будет с отправкой кнопочек клиенту. Причем пока всякие циферки и Ф-ки отправлял - все отлично было. А вот захотелось мне сделать процедуру экстренного свала из под огня. Ну, говорю, клиент . Жмакни мне тильдочку. А он мне в ответ - ты чо - сдурел шоли? Я тебе чо - текстовый редактор тильдочки жмакать? И вот тут у танка отвалилась башня. То нажимает, то не нажимает, то язык ему не тот. и т.д. и т.п. Короче проимелся я более 10 часов...
Вот вам результат... Может кому полезно будет...
Code:
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ procedures to send key pressing to client
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TaPWT.SendKey(aWindowHandle: HWND; aPWThreadID: Cardinal; Key: Word; const Shift: TShiftState; SpecialKey, EngLayout: Boolean);
type
TBuffers = array [0..1] of TKeyboardState;
var
pKeyBuffers: ^TBuffers;
lParam: LongInt;
Layout, tLayout: Cardinal;
i: integer;
begin
if EngLayout then
begin
Layout := LoWord(GetKeyboardLayout(aPWThreadID));
PostMessage(aWindowHandle, WM_INPUTLANGCHANGEREQUEST, 0, $00000409);
end;
Sleep(20);
AttachThreadInput(aPWThreadID, GetCurrentThreadId, true);
sleep(20);
pKeyBuffers := nil;
lParam := MakeLong(0, MapVirtualKey(Key, 0));
if SpecialKey then
lParam := lParam or $1000000;
New(pKeyBuffers);
try
GetKeyboardState(pKeyBuffers^[1]);
FillChar(pKeyBuffers^[0], SizeOf(TKeyboardState), 0);
if ssShift in Shift then
pKeyBuffers^[0][VK_SHIFT] := $80;
if ssAlt in Shift then
begin
pKeyBuffers^[0][VK_MENU] := $80;
lParam := lParam or $20000000;
end;
if ssCtrl in Shift then
pKeyBuffers^[0][VK_CONTROL] := $80;
SetKeyboardState(pKeyBuffers^[0]);
if ssAlt in Shift then
begin
PostMessage(aWindowHandle, WM_SYSKEYDOWN, Key, lParam);
PostMessage(aWindowHandle, WM_SYSKEYUP, Key, lParam or $C0000000);
end
else
begin
PostMessage(aWindowHandle, WM_KEYDOWN, Key, lParam);
PostMessage(aWindowHandle, WM_KEYUP, Key, lParam or $C0000000);
end;
sleep(50);
Application.ProcessMessages;
SetKeyboardState(pKeyBuffers^[1]);
finally
if pKeyBuffers <> nil then
Dispose(pKeyBuffers);
end;
AttachThreadInput(aPWThreadID, GetCurrentThreadId, false);
sleep(20);
if EngLayout then
for I := 1 to 10 do
if Layout <> LoWord(GetKeyboardLayout(aPWThreadID)) then
begin
PostMessage(aWindowHandle, WM_INPUTLANGCHANGEREQUEST, 0, Layout);
Sleep(20);
end
else
break;
end;
procedure TCharForm.Button5Click(Sender: TObject);
begin
aPWT.SendKey(aPWWindow.aWindowHandle, aPWWindow.aThreadId, VK_ESCAPE, [], false, true);
aPWT.SendKey(aPWWindow.aWindowHandle, aPWWindow.aThreadId, VkKeyScan('~'), [ssShift], false, true);
aPWT.SendKey(aPWWindow.aWindowHandle, aPWWindow.aThreadId, VK_DOWN, [], false, true);
aPWT.TextToClipboard('exit');
aPWT.SendKey(aPWWindow.aWindowHandle, aPWWindow.aThreadId, VkKeyScan('v'), [ssCtrl], false, true);
aPWT.SendKey(aPWWindow.aWindowHandle, aPWWindow.aThreadId, VK_RETURN, [], false, true);
end;
|
Как видишь, тут Алекс отчаянно использует эти самые параметры) Уверяет, что работает.. Может стоит тебе проверить? - вдруг это я что-то не учел.
Адрес инжекта да.. пробегал. А код к нему нет) Есть одна статья (на русском), где собирались пояснить, как самому писать инжекты, но так и не собрались..
|
|
|
04/01/2010, 07:08
|
#1590
|
elite*gold: 0
Join Date: Sep 2009
Posts: 13
Received Thanks: 13
|
Ничего сложного, IDA Pro в помощь.
Ищите по этим Call-ам, и всё увидите ![Smile](images/smilies/smile.gif)
Вот хорошее описание
вот один пример:
// PM_DEFEND = 0;
// PM_AUTO = 1;
// PM_MANUAL = 2;
Code:
procedure PetSetModeCall(aPParams: PParams); stdcall;
var
Cal1,Cal2: pointer;
Pa1: cardinal;
begin
Cal1 := Pointer($004bfb90);
Cal2 := Pointer($005b7ed0);
Pa1 := aPParams^.Param1;
asm
pushad
push ecx
mov eax,Pa1
mov [esp+00],eax
call Cal1
lea ecx,[esp+$00]
push $04
push ecx
push $03
push $00
lea ecx,[eax+$000000ec]
call Cal2
pop ecx
popad
end;
end;
|
|
|
All times are GMT +2. The time now is 18:42.
|
|