Перейти к содержимому


Фотография

Скриптинг в GTA IV


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 215

#161 Johnix

Johnix

    Активный участник

  • Пользователи
  • PipPipPip
  • 87 сообщений
  • Пол:Мужчина
  • Город:Новосибирск

Отправлено 07 March 2010 - 09:21

ок спасибо пожалуй все таки подожду санни билдера) и еще вопрос - с помощью опен4 можно писать миссии? скрипты же можно импортировать вроде бы, хоть я и не пробовал, но функция есть. куда кстати автор тулсы делся? Good-Nts? от кого-то когда то слышал что в армии он, а точно кто-нить знает? вау, новое лого забавное

Сообщение отредактировал Johnix: 07 March 2010 - 20:26

Изображение
Изображение

#162 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 08 March 2010 - 14:45

и еще вопрос - с помощью опен4 можно писать миссии? скрипты же можно импортировать вроде бы, хоть я и не пробовал, но функция есть.
куда кстати автор тулсы делся? Good-Nts? от кого-то когда то слышал что в армии он, а точно кто-нить знает?


Смотря, что понимать как "с помощью". Можно посмотреть исходники (на предмет, как оно было сделано, и реализовать аналогичное через ScriptHook/Alice). Менять сами скрипты нельзя.

Good сейчас в армии, до лета (неподалеку от монгольско-китайской границы). Регулярно звонит оттуда и ругается, что никакого прогресса нет.

Очереди желающих написать билдер как-то не наблюдается. Если все пойдет нормально, то я планирую все-таки домучить свой компилятор/декомпилятор ближе к концу апреля. Если все будет просто идеально, то в начале апреля будет закрытая бета.

Точка бета-релиза - возможность декомпилировать и скомпилировать обратно все скрипты IV/EfLC.
You think your day was surreal? Try mine.

#163 VcSaJen

VcSaJen

    Активный участник

  • Пользователи
  • PipPipPip
  • 270 сообщений
  • Пол:Мужчина
  • Интересы:GTA, скриптинг в GTA.


Отправлено 09 March 2010 - 00:53

ок спасибо
пожалуй все таки подожду санни билдера)

Ты не бери в голову, что скриптить в Delphi сложно, просто я в скрипте использовал дополнительные возможности Delphi, а если их не использовавть, то почти не будет отличатся от SB.
P.S. Кстати, тот скрипт - это скриптовая часть конструктора миссий, который я разрабатываю - RaCon (The Dart Race Constructor). Он загружает все данные из INI - файла во время игры, а INI файл будет генерироваться программой GUI.
@Listener - когда записываться на участие в бете?

Сообщение отредактировал VcSaJen: 09 March 2010 - 00:55


#164 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 13 July 2010 - 18:13

А вот писать скрипты на дельфи в чем? В дельфиевском компиляторе? А где его взять тогда?

Сообщение отредактировал shkun: 13 July 2010 - 18:49


#165 Chipsman

Chipsman

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 786 сообщений
  • Пол:Не определился


Отправлено 13 July 2010 - 19:28

делфи скачать

#166 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 13 July 2010 - 21:11

Ясно. Кстати не вышел еще скрипт билдер? Вроде говорили про бета тестирование в апреле а уже июль.. и dhook работает только на втором патче? а то я пробовал на четвертом английском - не пошло.

Сообщение отредактировал shkun: 14 July 2010 - 08:33


#167 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 14 July 2010 - 12:14

все таки решил скинуть патч английский 1.0.2.0. игра запустилась. Все работает. Буду пробовать скриптить. P.S А чего тут так тихо? Все куда-то переехали? Или скриптинг умер?

Сообщение отредактировал shkun: 14 July 2010 - 13:03


#168 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 14 July 2010 - 14:46

помогите плиз! пытаюсь для начала скрипт создать где не случайная машина спавнится, а заданная мной. и че то не могу разобраться никак. обьясните какие параметры за что отвечают в этих процедурах: GetCarModel(vehicle: Vehicle; var pValue: eModel); CreateCar(nameHash: u32; x: f32; y: f32; z: f32; var pVehicle: Vehicle; unknownTrue: b8); И еще вопрос. Где используются Native функции? А то пока что кроме таких процедур и функций как эти никаких не видел..

#169 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 15 July 2010 - 08:10

помогите плиз! пытаюсь для начала скрипт создать где не случайная машина спавнится, а заданная мной. и че то не могу разобраться никак. обьясните какие параметры за что отвечают в этих процедурах:

GetCarModel(vehicle: Vehicle; var pValue: eModel);
CreateCar(nameHash: u32; x: f32; y: f32; z: f32; var pVehicle: Vehicle; unknownTrue: b8);

И еще вопрос. Где используются Native функции? А то пока что кроме таких процедур и функций как эти никаких не видел..

значения параметров косвенно можно определить по названию функции. Если функция называется GetCarModel (в переводе получить модель машины), значит должно быть как минимум 2 параметра:
1. хендл машины и
2. переменная-приемник, куда будет записано ID модели.
Хендл машины - это переменная с ее "именем", позволяющим отличить от другой машины. Хендл получается как раз из следующей функции: CreateCar. Ее параметры можно понять по названию:

1. хэш имени модели (в скриптах используются не настоящие названия моделей, типа AMBULANCE, а числа или хэш). Список хэшей и имена моделей им соответстующие можно найти здесь
http://www.gtamoddin...f_models_hashes
Например, для AMBULANCE хэш равен 1171614426 или 0x45D56ADA.

2,3,4. тут просто - это координаты места, где будет создана машина. Например, 100.10 -986.12 55.0

5. Переменная с типом Vehicle, в которую будет записан хендл созданной машины (см. выше)

6. Неизвестный параметр. В оригинальных скриптах всегда равен 1 или True.

Если ты вызовешь процедуру
var
_mycar:Vehicle;
_mymodel: u32;

CreateCar(1171614426, 100.10, -986.12, 55.0, _mycar, true);
а потом
GetCarModel(_mycar; _mymodel);
какое значение примет переменная _mymodel?


Native-функции используются в оригинальных скриптах игры. Скриптовые приблуды типа Alice или Delphi Hook используют обертки для этих же функций для удобства использования. Например, GetCarModel в конечном счете будет переделана хуком в native GET_CAR_MODEL и подсунута игре.

А чего тут так тихо? Все куда-то переехали? Или скриптинг умер?

Скриптинг живет и здравствует, но, увы, только на западе. Достаточно посмотреть эти темы на гтафорумс:
http://www.gtaforums...howtopic=392325 - .net script hook
http://www.gtaforums...howtopic=390582 - c++ script hook
http://www.gtaforums...howtopic=386816 - lua script hook (Alice)
http://www.gtaforums...howtopic=452446 - еще один Lua

К сожалению, среди наших соотечественников поклонников написания скриптов для вышеупомянутых языков не очень много. Связано это наверно с дороговизной и сложностью сред программирования (кроме луа). Дельфи мог бы стать неплохой альтернативой, если бы Delphi Hook развивался для новых версий GTA IV.

#170 listener

listener

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 356 сообщений
  • Пол:Мужчина
  • Город:Ft.Lauderdale


Отправлено 15 July 2010 - 08:15

shkun
Это не чат, поэтому ответ может занимать какое-то время. Те, кто может ответить - обычно заняты и ответят, как появится свободное время.
Также, не стоит мультипостить. Вместо этого рекомендуется пользоваться кнопкой "Edit/Отредактировать сообщение"

Native - это то, что используется в IV/MC:LA/RDR вместо опкодов. Это функции .exe, которые предназначены для вызова из скриптов.

Параметры фунций очевидны из их названий.
GetCarModel первым параметром получает HANDLE Vehicle, для которого нужно получить номер модели, а вторым параметром передается указатель на переменную, в которую будет занесен номер модели.

CreateVehicle первым параметром получает хэш имени модели, три следующих параметра - координаты, в которых будет создана машина, пятый параметр - указатель на переменную, в которую будет занесен хэндл созданной машины и шестой (как это следует из названия) - пока неизвестен.
You think your day was surreal? Try mine.

#171 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 15 July 2010 - 14:15

seemann, спасибо большое за помощь!

Какое значение примет переменная _mymodel?


Она примет значение ID'а машины которую мы создали.
Я ведь и запустался изза того что в SB мы чтобы создать машину, загружали ее модель, а уже потом создавли ее карте. Здесь же наоборот)

EDIT: Что-то попробовал я такой скрипт как ты сказал - выдает ошибку [Error] sultanrs.dpr(28): Not enough actual parameters на строчке GetCarModel(mycar; mymodel); сразу после mycar; Может чтото не так делаю? Вот сам скрипт:

library sultanrs;

uses
  Windows,
  SysUtils,
  Scripting in '..\Scripting.pas',
  ScriptingEnums in '..\ScriptingEnums.pas',
  ScriptingUtils in '..\ScriptingUtils.pas';

// useful scripting functions

{$E .dh}

function KeyPressed(const Key: Smallint): Boolean;
begin
  Result := Hi(GetKeyState(Key)) = $FF;
end;

function SpawnSultanRS: Vehicle;
var
  x, y, z: f32;
  mycar: vehicle;
  mymodel: u32;

begin
  GetCharCoordinates(GetPlayerPed, x, y, z);
  CreateCar(3999278268, x + 2.0, y, z, mycar, true);
  GetCarModel(mycar; mymodel);
  MarkCarAsNoLongerNeeded(mycar);
end;

// main procedure
procedure RunTick; cdecl;
begin
// put your codes there

  if KeyPressed(Ord('K')) then
  begin
	SpawnSultanRS;
	wait(500);
  end;

end;

exports
  RunTick;

begin
end.

2Listener

Это не чат, поэтому ответ может занимать какое-то время. Те, кто может ответить - обычно заняты и ответят, как появится свободное время.
Также, не стоит мультипостить. Вместо этого рекомендуется пользоваться кнопкой "Edit/Отредактировать сообщение"


Извините :(, исправлюсь :)

Сообщение отредактировал shkun: 15 July 2010 - 17:56


#172 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 15 July 2010 - 18:04

Она примет значение ID'а машины которую мы создали.

если быть точнее, она будет равна 1171614426.

Я ведь и запустался изза того что в SB мы чтобы создать машину, загружали ее модель, а уже потом создавли ее карте. Здесь же наоборот)

вовсе нет. Все точно также как в SB. Перед тем как создать машину или что-либо еще, нужно загрузить в память игры нужную модеь. Делается это все теми же командами: RequestModel(), HasModelLoaded(), MarkModelAsNoLongerNeeded() (аналоги опкодов 0247, 0248, 0249). В тестовом примере dhook я брал случайную модель из числа загруженных командой GetRandomCarModelInMemory(), но по идее нужную модель нужно обязательно загружать и выгружать после использования. GetCarModel тут не при чем.

EDIT: Что-то попробовал я такой скрипт как ты сказал - выдает ошибку [Error] sultanrs.dpr(28): Not enough actual parameters на строчке GetCarModel(mycar; mymodel); сразу после mycar; Может чтото не так делаю?

А тут уже нужно иметь знания дельфи )) Просто между параметрами должны стоять запятые, а не точка с запятой. Исправь на GetCarModel(mycar, mymodel); Хотя вообще эта команда там лишняя.

#173 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 15 July 2010 - 18:31

Исправь на GetCarModel(mycar, mymodel);

если изменить на запятую, то выскакивает: [Error] sultanrs.dpr(28): Types of actual and formal var parameters must be identical
если убрать вообще эту строку, то выскакивает предупреждение: [Warning] sultanrs.dpr(28): Return value of function 'SpawnSultanRS' might be undefined
а когда в игре нажмаешь на К - вылет. Сейчас поробую перед созданим машины, загрузить модель и сделать проверку. Может получится.

#174 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 15 July 2010 - 18:37

Измени тип переменной mymodel на eModel; [Warning] sultanrs.dpr(28): Return value of function 'SpawnSultanRS' might be undefined это значит что результат функции не определен. Функция function SpawnSultanRS: Vehicle; должна возвращать значение типа Vehicle в переменной Result, а она (Result) у тебя вообще не используется. Можно сделать так: CreateCar(3999278268, x + 2.0, y, z, Result, true); и убрать переменную mycar

#175 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 15 July 2010 - 18:54

хммм сделал вроде все правильно, игра продолжает вылетать... вот часть скрипта:

function SpawnSultanRS: Vehicle;
var
  x, y, z: f32;

begin
  GetCharCoordinates(GetPlayerPed, x, y, z);
  CreateCar(3999278268, x + 2.0, y, z, Result, true);
  MarkCarAsNoLongerNeeded(Result);
end;

потом уже упростил до не возможности и написал:

function SpawnSultanRS: Vehicle;

begin
  CreateCar(3999278268, 905.0, -510.0, 14.88, Result, true);
  MarkCarAsNoLongerNeeded(Result);
end;

Результат - вылет...
Кстати пробовал писать без MarkCarAsNoLongerNeeded(Result); то есть чтобы чисто была команда создания машины. Все равно вылет(

Сообщение отредактировал shkun: 15 July 2010 - 19:12


#176 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 16 July 2010 - 04:54

Мы же договорились, что нужно загрузить модель машины (3999278268) перед ее созданием. Игра вылетает, потому что не может найти нужную модель в памяти.

#177 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 16 July 2010 - 18:44

Попробовал загружать, а потом проверку - вылет. Вот код:

begin
  RequestModel(3999278268);
  if HasModelLoaded(3999278268) then
  GetCharCoordinates(GetPlayerPed, x, y, z);
  CreateCar(3999278268, x + 2.0, y, z, result, true);
  MarkCarAsNoLongerNeeded(result);
end;


#178 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 17 July 2010 - 08:02

Если ты писал скрипты в SB, то должен был видеть как там происходит загрузка моделей и создание машин. Если нет - открой main.scm предыдущих игр и посмотри. Или посмотри скрипты самой IV (например, через OpenIV), чтобы узнать как и что надо сделать. Только так можно чему то научиться. В твоем коде есть одна ошибка, из-за которой происходит вылет. Попытайся сравнить свой код с оригинальными скриптами и найти ее.

#179 shkun

shkun

    Участник

  • Пользователи
  • PipPip
  • 12 сообщений
  • Пол:Мужчина
  • Интересы:Скриптинг, моделинг GTA SA и GTA IV

Отправлено 17 July 2010 - 18:24

посмотрел, поискал.. вот код из четвертой:

.native HAS_MODEL_LOADED // in=1, out=1
										   .iftrue
											   PushD 8
											   Var
											   RefGet
											   PushD 9
											   Var
											   PushD 0
											   Add
											   RefGet
											   PushD 9
											   Var
											   PushD 4
											   Add
											   RefGet
											   PushD 9
											   Var
											   PushD 8
											   Add
											   RefGet
											   PushD 23
											   LocalVar
											   PushD 1
											   .native CREATE_CAR // in=6, out=0

то есть загрузка модели, проверка на загруженность, создание авто.
Вот код из сан андреаса:

:Createcar
wait 0
Model.Load(#SULTAN)

:Createcar_3
wait 100
if
Model.Available(#SULTAN).
jf @Createcar_3
$9 = Car.Create(#SULTAN, 2488.917, -1658.0735, 13.3549)
0229: set_car $9 color_to 31 0

Суть та же - загружаем - проверяем - создаем.
Ну и в моем случае я вроде следовал этому принципу... Так в чем тогда ошибка?...


EDIT: Seemann спасибо тебе большое за помощь!! Я поставил две задержки по 100мс и все заработало!!))) Теперь буду пробовать как-нить совершенствовать этот скриптик))

Сообщение отредактировал shkun: 17 July 2010 - 18:50


#180 Seemann

Seemann

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 266 сообщений
  • Пол:Мужчина
  • Город:Россия, Иркутск/СПб

Отправлено 18 July 2010 - 06:02

Обрати внимание, что модель должна проверяться в цикле на доступность (как в примере с SB). Одного wait 100 может быть недостаточно.




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных