Register for your free account! | Forgot your password?

Go Back   elitepvpers > MMORPGs > Perfect World
You last visited: Today at 15:42

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Rus. server

Discussion on Rus. server within the Perfect World forum part of the MMORPGs category.

Reply
 
Old 01/20/2010, 01:10   #1306
 
elite*gold: 0
Join Date: Jan 2009
Posts: 69
Received Thanks: 13
Скачал архив с форума, запустил бота из архива, задал мобов, нажал кнопочку Старт и бот успешно убил ещё штук 7 росянок... Интересно, у кого-то кроме меня самого, то что я сотворил, вообще заработало? ) Может мне снится? )

Вообще я мало разбираюсь в инжектах, но тут на форуме как минимум ещё у 2 человек инжекты из автоита работали.
FunkU is offline  
Old 01/20/2010, 01:23   #1307
 
Sirioga's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 5
Received Thanks: 0
Quote:
Originally Posted by FunkU View Post
Хм... У меня мой бот на автоите и работает нормально. Я ж написал, что проверил. Росянок 7 бот убил. ) А какая у тебя система?
xp sp2, и скорее всего то что ты написал ток у тебя и работает)
Sirioga is offline  
Old 01/20/2010, 01:31   #1308
 
elite*gold: 0
Join Date: Jan 2009
Posts: 69
Received Thanks: 13
Я не писал, а модифицировал. ) Проверил на своём ноуте бота - тоже работает. Система везде XP SP3, но сборки разные. Могу на Висте ещё проверить попозже... Мне интересно, а какие ещё программы на автоите с инжектами ты пытался запускать?
FunkU is offline  
Old 01/20/2010, 01:43   #1309
 
Sirioga's Avatar
 
elite*gold: 0
Join Date: Oct 2009
Posts: 5
Received Thanks: 0
Quote:
Originally Posted by FunkU View Post
Я не писал, а модифицировал. )
Я не имел ввиду весь mhs а только часть кода.
Sirioga is offline  
Old 01/20/2010, 02:12   #1310
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
смени
MOV_EDI(Dec($TID))
PUSH_EDI()
на
PUSH(Dec($TID))
еще может быть причина вылета
mhs тупо пытается выделить моба по ид независимо от того есть он на месте или нет и если моб в таргете значит присутствует и можно его килл
сначала надо проверить наличие моба а потом уж таргет делать
Novohyd is offline  
Thanks
1 User
Old 01/20/2010, 02:32   #1311
 
elite*gold: 0
Join Date: Jan 2009
Posts: 69
Received Thanks: 13
Novohyd
Да, это понятно. Мой собственный бот проверяет наличие моба. А в MHS это вставить довольно трудоёмко будет. Я просто хотел сделать рабочий на новой версии MHS. ) Но пока он работает только у меня. Кстати ты же вроде сделал рабочий инжект на автоите, да? Он тоже только у тебя работает?
FunkU is offline  
Old 01/20/2010, 06:32   #1312
 
elite*gold: 0
Join Date: Jul 2008
Posts: 43
Received Thanks: 16
По карте. Если кто хочет ту картинку целиком сразу грузить - лучше забудьте про эту великолепную идею.
Я тут посчитал. Её размеры в jpg - около 10 Мб. Но в памяти же она развернётся в обычный BitMap, давайте прикинем размер его.
Разрешение картинки: 8192х9215 - итого 75 489 280 пикселей. На каждый пиксель 3 байта, а скорее всего 4 из-за выравнивания. Итого 300 Мб памяти на то чтобы загрузить данную картинку в память.
Можно конечно её сильно уменьшить, но тогда расположение бота можно угадать лишь ОЧЕНЬ приблизительно.
На мой взгляд - лучше уж грузить частями карту, так же как это реализованно в самом клиенте. Там одновременно максимум 4 куска может быть.
dj_al is offline  
Old 01/20/2010, 07:29   #1313
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
Quote:
Originally Posted by FunkU View Post
Novohyd
Да, это понятно. Мой собственный бот проверяет наличие моба. А в MHS это вставить довольно трудоёмко будет. Я просто хотел сделать рабочий на новой версии MHS. ) Но пока он работает только у меня. Кстати ты же вроде сделал рабочий инжект на автоите, да? Он тоже только у тебя работает?
Инжект тот-же. только вместо записи ид в регистр и push регистр у меня сразу push ид

вот функция выбирающая первого по порядку присутствующего моба из MHS-ного конфиг-файла. выдергивал целиком так что может малость подправить придется
возвращает i найденного моба.
Novohyd is offline  
Old 01/20/2010, 08:45   #1314
 
elite*gold: 0
Join Date: Apr 2009
Posts: 237
Received Thanks: 403
Alexhomp
совсем забыл добавить: попытки поиска адреса .. ни к чему не приведут...

Поправка:
[BA] + $1C + $8 + $60 + $4 + $0 :: Current location (char)
dwar is offline  
Thanks
2 Users
Old 01/20/2010, 08:51   #1315
 
elite*gold: 0
Join Date: Jan 2009
Posts: 69
Received Thanks: 13
Novohyd
Попробовал заменить, как ты сказал и дать человеку, у которого бот не работал и он всё равно не заработал. Может это связано с разными версиями каких-то библиотек?
FunkU is offline  
Old 01/20/2010, 09:43   #1316
 
elite*gold: 0
Join Date: Nov 2009
Posts: 69
Received Thanks: 5
я давал этого бота по знакомым - работает совершенно без сбоев
Novohyd is offline  
Old 01/20/2010, 10:49   #1317
 
elite*gold: 0
Join Date: Nov 2009
Posts: 8
Received Thanks: 0
Quote:
Originally Posted by dwar View Post
Alexhomp
совсем забыл добавить: попытки поиска адреса и смещений для получения текстового значения названия текущей локации, ни к чему не приведут, т.к. данная строка носит чисто информативных характер, и формируется при прорисовки интерфейса. Можно, конечно же, дальше влезть в код и найти процедуру, отвечающую за это, но, есть ли смысл?
Спасибо что навёл на нужную дорогу. Буду учить asm)))

Хотя можно еще попробовать поискать ID территории. Надеюсь получится)))
Alexhomp is offline  
Old 01/20/2010, 17:09   #1318
 
elite*gold: 0
Join Date: Jan 2009
Posts: 137
Received Thanks: 19
Давненько я что-то тут не был )))

Тут по рюкзаку спрашивали... Код из моей тулзы. Состояние Alpha, но чу где брать и как - понятно.

Code:
InventoryAddress = C1C
InventoryQuestAddress = C24


// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ Unified type for holding bounds (maybe need to be extended?)
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
type
  TaBounds = record
    Curr: Cardinal;
    Max : Cardinal;
  end;

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ TODO type for holding item properties
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
type
  TaItem = record
    ID                  : Integer;
    Quantity            : TaBounds;
    Position            : Integer;
    Price               : Cardinal;
    NameAddress         : Cardinal;
    Name                : WideString;
    GearLevelRequirement: Cardinal;
    StrRequirement      : Cardinal;
    AgiRequirement      : Cardinal;
    ItemLevelRequirement: Cardinal;
    ConRequirement      : Cardinal;
    IntRequirement      : Cardinal;
    Durability          : TaBounds;
  end;

type
  TaItemsArray = array of TaItem;

var
  aItems  : array [0..100000] of TaItem;

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ unifyied getItem function
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function TaPWT.getItem(aProcessID: Cardinal; aPointer: DWORD): TaItem;
var
  S: WideString;
begin
  Result.ID := getDWORD(aProcessID, aPointer + $8);
  if Result.ID < 100000 then
  begin
    Result.Quantity.Curr := getDWORD(aProcessID, aPointer + $10);
    S := getSTRING(aProcessID, getDWORD(aProcessID, aPointer + $40), 1024);
    S := MidStr(S, 8, Length(S));
    S := LeftStr(S, Pos('\', S) - 1);
    if Pos('(', S) > 0 then
      S := LeftStr(S, Pos('(', S) - 2);
    Result.Name := S;
  end
  else
    Result.ID := 0;
end;

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~ function to get BackPack list
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function TaPWT.GetBackpack(aProcessID: Cardinal):TaItemsArray;
var
  aItem: TaItem;
  tempA: TaItemsArray;
  p1, p2, p3, p4: DWORD;
  i, n: integer;
  IniFileItemsT: TIniFile;
begin
  IniFileItemsT  := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'aPWToolsItems.ini');
  n := 0;
  p1 := getDWORD(aProcessID, getDWORD(aProcessID, getDWORD(aProcessID, aBaseAddress) + $1C) + $20);
  p2 := getDWORD(aProcessID, p1 + aPlayerOffsets.InventoryAddress);
  p3 := getDWORD(aProcessID, p2 + $0C);
  SetLength(tempA, getDWORD(aProcessID, p2 + $10));
  for i := 0 to Length(tempA) - 1 do
  begin
    p4 := getDWORD(aProcessID, p3 + (I * 4));
    aItem := getItem(aProcessID, p4);
    if aItem.ID <> 0 then
    begin
      if (aItems[aItem.ID].Name = '') and (aItem.Name <> '')  then
      begin
        IniFileItemsT.WriteString('Items',  IntToStr(aItem.ID), aItem.Name);
        aItems[aItem.ID].Name := aItem.Name;
      end;
      aItems[aItem.ID].ID := aItem.ID;
      aItems[aItem.ID].Quantity.Curr := aItem.Quantity.Curr;
      tempA[n] := aItems[aItem.ID];
      tempA[n].Position := i;
      Inc(n);
    end;
  end;
  SetLength(Result, n);
  for i := 0 to n - 1 do
    Result[i] := tempA[i];
  IniFileItemsT.Free;
end;
AlexGD is offline  
Thanks
2 Users
Old 01/21/2010, 11:50   #1319
 
elite*gold: 0
Join Date: Mar 2009
Posts: 1
Received Thanks: 0
Народ, кто нибудь в курсе, есть ли возможность видеть точное кол-во хп у боссов, допустим в хх? Если есть, то как это возможно сделать?
PsiSnake is offline  
Old 01/21/2010, 18:42   #1320
 
elite*gold: 0
Join Date: Jan 2009
Posts: 137
Received Thanks: 19
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;
Тут инфы более чем достаточно...
AlexGD is offline  
Reply




All times are GMT +2. The time now is 15:42.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.