Code:
procedure TMan.ReadMonInfo(aSetup:Tstringlist);
var
TempDist:single;
I:integer;
begin
TempDist:=strtoint(aSetup.values['AttackSize']);
//ReadProcessMemory(ProcessID, Pointer($00931C6C),@W2I_ENVIRON_BASE_ADDR,4,Num);
//ReadProcessMemory(ProcessID, Pointer(W2I_ENVIRON_BASE_ADDR + $8), @W2I_ENVIRON_BASE_ADDR, 4, Num);//µГµЅЦЬО§»·ѕіµШЦ·
ReadProcessMemory(ProcessID, Pointer(W2I_ENVIRON_BASE_ADDR + $24), @W2I_MONSTER_BASE_ADDR, 4, Num); //µГµЅ№ЦОп »щµШЦ·
ReadProcessMemory(ProcessID, Pointer(W2I_MONSTER_BASE_ADDR + $14), @W2I_MONSTER_COUNT, 4, Num); //ЦЬО§№ЦОпКэБї
ReadProcessMemory(ProcessID, Pointer(W2I_MONSTER_BASE_ADDR + $24), @W2I_MONSTER_MAXCOUNT, 4, Num); //№ЦОпКэЧйµДЧоґуЦµ (MAX =769)
ReadProcessMemory(ProcessID, Pointer(W2I_MONSTER_BASE_ADDR + $18), @W2I_MONSTER_ADDR, 4, Num); //№ЦОпБР±нµДКЧµШЦ·
For i:= 0 to W2I_MONSTER_MAXCOUNT-1 do begin //768
ReadProcessMemory(ProcessID, Pointer(W2I_MONSTER_ADDR+i*4),@W2I_ENV_MONSTER_ADDR,4,Num); //ПаУ¦О»ЦГ№ЦОпµШЦ· //¶БИЎ№ЦОпЖ«ТЖ
if W2I_ENV_MONSTER_ADDR>0 then begin
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_ADDR+$4),@W2I_ENV_MONSTER_OBJ,4,Num);//¶БИЎ№ЦОпРЕПўЦёХл
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$238),@W2I_ENV_MONSTER_NAME1,4,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_NAME1),@W2I_ENV_MONSTER_NAME,16,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$11c),@W2I_ENV_MONSTER_ID,4,Num); //CALLУГµД№ЦОпID
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$25c),@W2I_ENV_MONSTER_DIST,4,Num);//№ЦОпѕаАл
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$b4),@W2I_ENV_MONSTER_TYPE,4,Num);//№ЦОпАаРН
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$12c),@W2I_ENV_MONSTER_CURHP,4,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$15c),@W2I_ENV_MONSTER_MAXHP,4,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$3c),@W2I_ENV_MONSTER_X,4,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$40),@W2I_ENV_MONSTER_Z,4,Num);
ReadProcessMemory(ProcessID, Pointer(W2I_ENV_MONSTER_OBJ+$44),@W2I_ENV_MONSTER_Y,4,Num);
//ReadProcessMemory(ProcessID, pointer(W2I_ENV_MONSTER_OBJ+$294),@W2I_ENV_MONSTER_STATUS1,4,num);//№ЦОпЧґМ¬
//ReadProcessMemory(ProcessID, pointer(W2I_ENV_MONSTER_OBJ+$2a0),@W2I_ENV_MONSTER_STATUS2,4,num);//№ЦОпЧґМ¬ 2
case W2I_ENV_MONSTER_TYPE of
6:begin //№ЦОп //ХвЦЦsingleАаРНµШ±ИЅП КЗ·сУР±ШТЄЧЄ»»ОЄint РНµДЈїЈїЈїЈїЈїЈїЈїЈїЈїЈїЈїЈї
if (tempDist >= W2I_ENV_MONSTER_DIST) then begin //»сИЎЧоЅьµД №ЦОпРЕПў
if strtobool(aSetup.Values['CanAttackMon']) then begin //Ц»ґтЦё¶ЁµД№ЦОпЖф¶Ї
if strtobool(aSetup.Values['NoRobet']) then begin // І»ЗА№ЦЖф¶Ї
if W2I_ENV_MONSTER_CURHP<>W2I_ENV_MONSTER_MAXHP then continue
else begin
if pos(W2I_ENV_MONSTER_NAME,aSetup.Values['CanAttackList'])>0 then begin
TempDist:=W2I_ENV_MONSTER_DIST;
Monster.Name :=W2I_ENV_MONSTER_NAME;
Monster.MonID :=W2I_ENV_MONSTER_ID;
Monster.Distant :=W2I_ENV_MONSTER_DIST;
Monster.MonPoX :=W2I_ENV_MONSTER_X;
Monster.MonPoY :=W2I_ENV_MONSTER_Y;
Monster.MonPoZ :=W2I_ENV_MONSTER_Z;
end;
end;
end;
end
else begin //ґтЛщУРµД№Ц when CanAttackMon = false
TempDist:=W2I_ENV_MONSTER_DIST;
Monster.Name :=W2I_ENV_MONSTER_NAME;
Monster.MonID :=W2I_ENV_MONSTER_ID;
Monster.Distant :=W2I_ENV_MONSTER_DIST;
//Monster.MonStatus :=W2I_ENV_MONSTER_STATUS2;
Monster.MonPoX :=W2I_ENV_MONSTER_X;
Monster.MonPoY :=W2I_ENV_MONSTER_Y;
Monster.MonPoZ :=W2I_ENV_MONSTER_Z;
end;
end;
end;
7:begin //КЗNPC
//
end;
9:begin //КЗіиОп
//
end;
end; //end case
end;
end;
end;