[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 3123»
Модератор форума: Enforcer, BFG16k, coolant, nurupo 
pff.clan.su - Форум » Игра NFK » Зона разработок » Наработки для bot.dll
Наработки для bot.dll
coolantДата: Вт, 2008-11-18, 11:46 | Сообщение # 1
Админ
Группа: Администраторы
Сообщений: 1109
Награды: 11
Статус: Offline
Вот статистика для трибесов

не поддерживаются suden death, тк повер переменную gamesudden сделал криво
в след версии будем думать как это исправить, а пока пусть так...
Если в игре есть боты, то ведется отдельная статистика.

Update
изменены и добавлены некоторые функции
статистика доступна тут http://nfk.pro2d.ru/?action=ladder

глобальные переменные

Code
uses WinSock, SysUtils

BotGame:boolean;
NeedUpdate:boolean;
NewGame:boolean;

в процедуре MAIN_Loop надо добавить

Code
procedure MAIN_Loop;
var
          i: byte;

begin

...

if StrToInt(GetSystemVariable('warmupleft'))<>0 then
         NeedUpdate:=false;

if NewGame then
         if not NeedUpdate and (StrToInt(GetSystemVariable('warmupleft'))=0) then
          NeedUpdate:=True;

if NeedUpdate then
         begin
          ACheckBot;
          AGetScore;
         end;

...
...

end;

в ResetGame и MapChanged

Quote
procedure EVENT_ResetGame;
var
i: byte;
begin
...

NewGame:=True;
BotGame:=False;

...
...

end;

procedure EVENT_MapChanged;
begin
...

NewGame:=True;
BotGame:=False;

...
...

end;

Новые процедуры

Code
procedure ASendPlayers;
        const
         host = 'nfk.pro2d.ru';
        var
         i     : byte;
         wData : WSADATA;
         addr  : sockaddr_in;
         sock  : integer;
         error : integer;
         buf   : array [0..1023] of Char;
         str   : string;
         phe   : PHostEnt;
begin
        NeedUpdate:=False;
        NewGame:=False;

        WSAStartup($0101, wData);
        phe := gethostbyname(PChar(string(host)));
        if phe = nil then
         begin
         WSACleanup;
         Exit;
         end;

        sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

        if sock = INVALID_SOCKET then
         begin
         WSACleanup;
         Exit;     
         end;

        addr.sin_family := AF_INET;
        addr.sin_port   := htons(80);     
        addr.sin_addr   := PInAddr(phe.h_addr_list^)^;

        error := connect(sock, addr, sizeof(addr));
        if error = SOCKET_ERROR then
         begin
         closesocket(sock);
         WSACleanup;
         Exit;
         end;

         str := 'GET http://' + host + '/?action=arena';
       for I:=0 to 7 do
        if players[i] <> nil then
        with players[i] do
         begin
         str := str + '&name'+IntToStr(i+1)+'=' + NickTrim(netname) ;
         str := str + '&frags'+IntToStr(i+1)+'=' + IntToStr(frags) ;
         str := str + '&deaths'+IntToStr(i+1)+'=' + IntToStr(deaths) ;
         end;
         str := str + '>=' + GetSystemVariable('gametype');
         if BotGame then str := str + '&botgame=1' else str := str + '&botgame=0' ;
         str := str + ' HTTP/1.0'#13#10#13#10;
         send(sock, str[1], Length(str), 0);
         AddMEssage('^1SCORE SEND');
        closesocket(sock);
        WSACleanup;
end;

Code
procedure AGetScore;
var i:byte;
        OT, TL, T_M, T_S, FL, DS_R, CS_R:Integer;
        TS_R, TS_B, DL, CL, DS_B, CS_B  :Integer;
        GT                    :String;
begin
         TL    :=StrToInt(GetSystemVariable('timelimit'));
         OT    :=StrToInt(GetSystemVariable('overtime'));
         T_M   :=StrToInt(GetSystemVariable('time_min'));
         T_S   :=StrToInt(GetSystemVariable('time_sec'));
         FL    :=StrToInt(GetSystemVariable('fraglimit'));
         CL    :=StrToInt(GetSystemVariable('capturelimit'));
         DL    :=StrToInt(GetSystemVariable('domlimit'));
         TS_R  :=StrToInt(GetSystemVariable('teamscore_red'));
         TS_B  :=StrToInt(GetSystemVariable('teamscore_blue'));
         GT    :=GetSystemVariable('gametype');
         DS_R  :=DomScore_Red;
         DS_B  :=DomScore_blue;
         CS_R  :=CaptScore_Red;
         CS_B  :=CaptScore_Blue;

        if TL<>0 then
         if (T_M>=TL+OT) then ASendPlayers;

        if FL<>0 then
         for i:=0 to 4 do
          if players[i] <> nil then
           if players[i].frags >= FL then ASendPlayers;

        if GT='CTF' then
         if CL<>0 then
          if (CS_R>=CL) or (CS_B>=CL) then ASendPlayers;

        if GT='DOM' then
         if DL<>0 then
          if (DS_R>=DL) or (DS_B>=DL) then ASendPlayers;
end;

Code
procedure ACheckBot;
var i:byte;
begin
         for i:=0 to 7 do
          if players[i] <> nil then
           if players[i].bot then
            begin BotGame:=True; Exit; end;
end;

Code
function NickTrim(Nick : string): string;
var i:byte;
begin
     Nick:=cleanstr(Nick);
     for i:=0 to length(Nick) do
        if Nick[i] in ['$','&', '''','"','#'] then
         delete(nick,i,1);
     Result := Nick;
end;

Code
function cleanstr(s:string):string;
var
      i:integer;
      cleann:boolean;
begin
      Result := '';
      cleann := false;
      for i := 1 to length(s) do
      begin
        if cleann then
        begin
          cleann := false;
          continue;
        end
        else
        if s[i] = '^' then
        begin
          cleann := true;
          continue;
        end;
        Result := Result + s[i];
      end;
end;

bot_hack

Code
function CaptScore_Red:Byte;
begin
    Result:=PInteger($0054C2C8)^;
end;

function CaptScore_Blue:Byte;
begin
    Result:=PInteger($0054C2CC)^;
end;

function DomScore_Blue:Byte;
begin
    Result:=PInteger($0054C818)^;
end;

function DomScore_Red:Byte;
begin
    Result:=PInteger($0054C81C)^;
end;
 
EnforcerДата: Вт, 2008-11-18, 14:34 | Сообщение # 2
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Адреса памяти которые могут пригодитцо...

Ниже приведены по 2 адреса оба они обсолютно идентичны и возвращяют одно и тоже двухбайтовое значение...
При помощи соотв. функции из них можно получать результаты и даже изменять их...

1) Capture Score RED:
0054C2C8
0054C81C

2) Capture Score BLUE:
0054C2CC
0054C818

Dom Score coming soon...


 
coolantДата: Чт, 2008-11-20, 13:59 | Сообщение # 3
Админ
Группа: Администраторы
Сообщений: 1109
Награды: 11
Статус: Offline
DomScore Blue
$0054C818

DomScore Red
$0054C81C

 
EnforcerДата: Пн, 2008-12-29, 16:46 | Сообщение # 4
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Inmenu identificator - can be TRUE or FALAS smile

Inmenu adresses:
0016964A
005547CC

Оба адреса возвращают одно и тоже значение, если ты в меню то единичку если не в меню то нолик...


 
EnforcerДата: Пн, 2008-12-29, 16:50 | Сообщение # 5
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Bloodrain adress - can be true or false

0054CBD0

Для коллекции добавляю его сюды...


 
EnforcerДата: Чт, 2010-04-29, 16:33 | Сообщение # 6
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Shaft SIZE:

a:=pInteger($0054BF40);
a^:=150;

Grenade Speed:

// b 1 Inertiay := Inertiay / 1.025; stopspeed 1.003 GOOD
// c 2 InertiaX := InertiaX / 1.003; stopspeed 1.001 GOOOD
// d 3 GRENADE_SLOWSPEED = 1.07; 1.003 GOOD
PExtended($491FF0)^:=grenadespeedA;
pextended($491FFC)^:=grenadespeedB;
pextended($492010)^:=grenadespeedC;

Добавлено (2010-04-29, 17:33)
---------------------------------------------
Кулант, скажи пожалуйста, как ты получил хост нэйм и IP сервака,
скинь плиз именно процедуры целиком вместе с адресами... Очень нужно !


 
coolantДата: Ср, 2010-05-05, 13:02 | Сообщение # 7
Админ
Группа: Администраторы
Сообщений: 1109
Награды: 11
Статус: Offline
Code
function GetHostname:string;
var
   str: string[50];
   i:byte;
begin
   str:='';
     str:=PChar($0054C709)^;
  for i:=1 to 49 do begin
   if PChar($0054C709+i)^ <> '' then
     str:=str + PChar($0054C709+i)^;
  end;
   Result:=str;
end;

Code
function GetIP(i:byte):ShortString;
begin
   Result:=PShortString(PCardinal($00757B80 + i * 4)^ + $141)^;
end;

Скоро выложу все исходники статистики

 
EnforcerДата: Вт, 2010-10-19, 20:09 | Сообщение # 8
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Во спасибки, исходы когда будешь выкладывать (запароль соответсвенно)

Добавлено (2010-10-19, 20:09)
---------------------------------------------
0054C2C8 MATCH_REDTEAMSCORE dw 0
0054C2CC MATCH_BLUETEAMSCORE dw 0


 
EnforcerДата: Пт, 2011-09-30, 21:56 | Сообщение # 9
Инжинер
Группа: Модераторы
Сообщений: 1161
Награды: 9
Статус: Offline
Похоже на распрыг (inertia)...
Или я просто ошибся

Прикрепления: 2854532.png(64Kb)


 
warlock_stderrДата: Вс, 2012-04-01, 15:33 | Сообщение # 10
Молчун
Группа: Проверенные
Сообщений: 8
Награды: 0
Статус: Offline
Зачем вы такие адреса в паблик выкладываете? Любой нуб сможет вбить RVA в ollydbg, отредактировать и получить бинарную строку, вбить ее в abel|ppatcher и получить готовый exe.
 
pff.clan.su - Форум » Игра NFK » Зона разработок » Наработки для bot.dll
Страница 1 из 3123»
Поиск: