#26 Re: Вопросы по скриптингу » Один вопрос » 01-10-2010 21:07

Нет, под группой я не pedtype имел ввиду, а когда несколько гангстеров вместе идут.

#27 Re: Вопросы по скриптингу » Один вопрос » 01-10-2010 20:44

Как определить, к какой группе принадлежит актёр?

#28 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 30-09-2010 18:57

Alien wrote:

0AE1 хранит последеного найденного актера либо в стурктуре CCustomThread, либо в статической переменной (если это CScriptThread).

	static int gLastIdx = 0;
CCustomThread *asCustom = this->AsCustom();
int *lastIdx = asCustom ? &asCustom->lastFoundActor : &gLastIdx;

Во-первых, я C++ не знаю, только Delphi.
Во-вторых, мне это из скрипта нужно сделать.

#29 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 29-09-2010 17:02

@Alien, не подскажешь, где в памяти опкод 0AE1 хранит последнего найденного актёра?

#31 Re: Вопросы по скриптингу » Один вопрос » 26-09-2010 21:30

Как получить хэндл того, кто бьёт или среляет в актёра?

#32 Re: Программирование » Несколько вопросов по Delphi » 05-05-2010 21:17

Я плагины для ГТАшки не создаю, но на пару вопросов всё-же ответить могу:
1) Угадал. smile
2) Переименовать и ничего более.

В справке CLEO 4 есть тема создания своих опкодов.
Вот маленький и простенький плагин реального времени в игре. Исходник прилагается. Может что-нибудь интересное там найдёшь.
[You must login to view hidden text.]

#34 Re: Вопросы по скриптингу » Один вопрос » 28-04-2010 13:23

@~AquaZ~

[You must login to view hidden text.]

Для подобных вещей настоятельно рекомендуется использовать тэг hide
(а лучше пользоваться PM)

#35 Re: Вопросы по скриптингу » Один вопрос » 27-04-2010 19:37

@~AquaZ~
Насчёт "сплющенных текстур", вот держи. Надеюсь, как это дело работает, сам разберёшся.

{$CLEO .cs}
0000:

0390: load_txd_dictionary 'ImgTest' 
038F: load_texture "Img1" as 60

0A8D: 3@ = read_memory 12677188 size 4 virtual_protect 0 // Ширина экрана в пикселях
0A8D: 4@ = read_memory 12677192 size 4 virtual_protect 0 // и его высота
0093: 3@ = integer 3@ to_float 
0093: 4@ = integer 4@ to_float 
0073: 3@ /= 4@
4@ = 120.0 // Сюда пишем высоту текстуры
006B: 4@ *= 3@
4@ *= 0.7

:label
wait 0
03F0: enable_text_draw 0
03E3: set_texture_to_be_drawn_antialiased 1 
074B: draw_texture 60 position 320.0 150.0 scale 120.0 4@ angle 0.0 color_RGBA 255 255 255 255 
jump @label

#36 Re: Вопросы по скриптингу » Один вопрос » 27-04-2010 19:08

@Aquaz Текстуру в TXD вверх тормашками запихни, а angle на нуль поставь.
Второй способ - высоту текстуры отрицательной сделать.

#37 Re: Вопросы по скриптингу » Один вопрос » 26-04-2010 11:31

CLEO Xakep wrote:

1. Максимальная скорость...

00AD: set_car 22@ max_speed_to 10.0

С машиной игрока не работает. cry

#38 Re: Вопросы по скриптингу » Один вопрос » 25-04-2010 22:04

Как изменить максимальную скорость и ускорение машины игрока?

#39 Re: Программирование » Помогите найти ошибку » 25-04-2010 19:58

Sanchez, спасибо тебе большое!

Кстати, твой исходник намного компактней моего получился.

#40 Программирование » Помогите найти ошибку » 24-04-2010 22:20

CraZZZy-GameRRR
Replies: 4

Прога должна писать данные в память потока по заданному смещению, а вместо этого выдаёт "Access violation at address...". Что тут не так?

procedure TForm1.Button2Click(Sender: TObject);
var
  PID: LongInt;
  MAddr: LongInt;

const
  Offset = 1578;

begin
  PID := GetPID('gta_sa.exe');
  if PID = 0 then
    MessageBox(handle,pchar('Игра не запущена.'),pchar('Ошибка!'),16)
  else
    begin
      MAddr := ReadMemoryInt($A8B42C, PID);
      While MAddr <> 0 do
        if ReadMemoryString(MAddr + 8, PID) = 'CRSPEED' then
          begin
          MAddr := ReadMemoryInt(MAddr + 16, PID);
          inc(MAddr, Offset);
          WriteMemoryByte(MAddr, 255, PID);
          Exit;
          end;
        MAddr := ReadMemoryInt(MAddr, PID);
        end;
      MessageBox(handle,pchar('Поток CRSPEED не найден.'),pchar('Ошибка!'),16);
    end;
end;




function GetPID(name: string): LongInt;
var
hSnapshot: THandle;
lppe: TProcessEntry32;
begin
Result := 0;
hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hSnapshot = 0 then
  exit;
lppe.dwSize := SizeOf(TProcessEntry32);
if Process32First(hSnapshot,lppe) then
  repeat
    if name = ExtractFileName(lppe.szExeFile) then
    begin
      Result := lppe.th32ProcessID;
      break;
    end;
  until not Process32Next(hSnapshot,lppe);
CloseHandle(hSnapshot);
end;


function ReadMemoryInt(MainAddress, IDAgent: LongInt): LongInt;
var HandleWindow : LongInt;
    ipBase: Pointer;
    IpBuf: LongInt;
    numberRead: DWORD;
begin
 HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
 ipBase:=ptr(MainAddress);
 ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 4, numberRead);
 CloseHandle(HandleWindow);
 Result := ipbuf;
end;


function ReadMemoryString(MainAddress, IDAgent: LongInt): PChar;
var HandleWindow : LongInt;
    ipBase: Pointer;
    IpBuf: PChar;
    numberRead: DWORD;
begin
 HandleWindow:=OpenProcess(PROCESS_VM_READ,False,IDAgent);
 ipBase:=ptr(MainAddress);
 ReadProcessMemory(HandleWindow, ipBase, Addr(ipbuf), 8, numberRead);
 CloseHandle(HandleWindow);
 Result := ipbuf;
end;


procedure WriteMemoryByte(MainAddress: LongInt; ipBuf: Byte ;IDAgent: LongInt);
var HandleWindow : LongInt;
    ipBase: Pointer;
    numberWrite: DWORD;
begin
 HandleWindow:=OpenProcess(PROCESS_ALL_ACCESS,False,IDAgent);
 ipBase:=ptr(MainAddress);
 WriteProcessMemory(HandleWindow, ipBase, Addr(ipbuf), ipBuf, numberWrite);
 CloseHandle(HandleWindow);
end;

#42 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 18-04-2010 21:13

Скрипт:

{$CLEO .cs}
wait 6000
0AF4: 1@v = read_string_from_ini_file "cleo\Config.ini" section "General" key "Param1"
0AF4: 2@v = read_string_from_ini_file "cleo\Config.ini" section "General" key "Param2"
0ACC: show_text_lowpriority 1@v time 3000
wait 2000
0ACC: show_text_lowpriority 2@v time 3000
0A93: end_custom_thread

INI-файл, который мы читаем:

[General]
Param1=True
Param2=False

Затем всё внимание на экран...
Выводит первую переменную - TrueFalse (???).
Затем вторую - False (вроде правильно).

Это можно исправить?

#43 Re: Работа с памятью, EXE » Разыскиваю адрес памяти » 17-04-2010 19:32

Нет, это мне не подходит. Мне КОНКРЕТНЫЙ адрес нужен.

#44 Re: Работа с памятью, EXE » Разыскиваю адрес памяти » 16-04-2010 23:08

Кто-нибудь, подскажите какой-либо статический адрес, который игра никогда не использует и он доступен для чтения/записи из скрипта.

#45 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 09-04-2010 23:33

@CraZZZy-GameRRR - попытаться можно, но смысл-то в чем? Лень упаковывать текстуры в архивы?

Ну, например, любой желающий сможет нарисовать и с лёгкостью подключить свой собственный скин к моему спидометру. К тому же текстуры в PNG весят намного меньше нежели в TXD (у меня 240 КБ против 2.27 МБ). Можно ещё кучу других пременений придумать.

#46 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 08-04-2010 21:43

@Alien - Спасибо, теперь работает правильно!

Alien, ести не трудно, можешь в CLEO добавить опкод типа 038F для загрузки текстур из PNG файлов?

#47 Re: Вопросы по скриптингу » Один вопрос » 07-04-2010 20:46

Seemann wrote:
CraZZZy-GameRRR wrote:
Seemann wrote:

Это CLEO скрипты, или ты в main.scm их создаешь?

CLEO

Тогда внимательно перечитай правила создания CLEO скриптов и подумай, глюк это или фича
http://cleo.sannybuilder.com/?lang=ru&id=3

Ага... теперь понял. Ура! заработало... Спасибки! wink

#48 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 07-04-2010 20:33

Похоже, я баг нашёл в CLEO 4.

Вот мой скрипт нормального ручного тормоза:

0000: NOP

:Brake_1
wait 0
if
    Actor.Driving($PLAYER_ACTOR)
jf @Brake_1
03C0: 0@ = actor $PLAYER_ACTOR car
2@ = 0

:Brake_2
wait 0
if
    Actor.Driving($PLAYER_ACTOR)
jf @Brake_10

01BD: 1@ = current_time_in_ms 
0062: 1@ -= 3@

IF
    1@ >= 350    
jf @Brake_3

IF
    0AB0:  key_pressed 0x42
THEN
    IF
        2@ == 1    
    THEN
        2@ = 0
    ELSE
        2@ = 1    
    END
    01BD: 3@ = current_time_in_ms
END

:Brake_3
IF
    2@ == 1
THEN
    0A8C: write_memory 0xB73464 size 1 value 255 virtual_protect 0 
END
jump @Brake_2

:Brake_10
Car.RemoveReferences(0@)
jump @Brake_1

Жмём <B> - машина стоит, ещё раз жмём - не стоит.

А этот скрипт определяет состояние ручника:

0000: NOP 

:BrakeTest
wait 0
if 
   Actor.Driving($PLAYER_ACTOR)
jf @BrakeTest
0A8D: 1@ = read_memory 0xB73464 size 1 virtual_protect 0 
01E4: show_text_1number_lowpriority GXT 'NUMBER' number 1@ time 0 flag 1
jump @BrakeTest

Проблема в том, что в CLEO 4 (v 4.1.0.25) если использовать мой ручник, скрипт проверки всегда выдаёт 0 (ручник опущен), а если обычный (пробел) - определяет правильно. В CLEO 3 (v 3.0.950) работает без проблем.

#49 Re: Вопросы по скриптингу » Один вопрос » 07-04-2010 18:18

Seemann wrote:

Это CLEO скрипты, или ты в main.scm их создаешь?

CLEO

Board footer

Powered by FluxBB