Сообщение отредактировал Johnix: 07 March 2010 - 20:26
Скриптинг в GTA IV
#161
Отправлено 07 March 2010 - 09:21
#162
Отправлено 08 March 2010 - 14:45
и еще вопрос - с помощью опен4 можно писать миссии? скрипты же можно импортировать вроде бы, хоть я и не пробовал, но функция есть.
куда кстати автор тулсы делся? Good-Nts? от кого-то когда то слышал что в армии он, а точно кто-нить знает?
Смотря, что понимать как "с помощью". Можно посмотреть исходники (на предмет, как оно было сделано, и реализовать аналогичное через ScriptHook/Alice). Менять сами скрипты нельзя.
Good сейчас в армии, до лета (неподалеку от монгольско-китайской границы). Регулярно звонит оттуда и ругается, что никакого прогресса нет.
Очереди желающих написать билдер как-то не наблюдается. Если все пойдет нормально, то я планирую все-таки домучить свой компилятор/декомпилятор ближе к концу апреля. Если все будет просто идеально, то в начале апреля будет закрытая бета.
Точка бета-релиза - возможность декомпилировать и скомпилировать обратно все скрипты IV/EfLC.
#163
Отправлено 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
Отправлено 13 July 2010 - 18:13
Сообщение отредактировал shkun: 13 July 2010 - 18:49
#165
Отправлено 13 July 2010 - 19:28
#166
Отправлено 13 July 2010 - 21:11
Сообщение отредактировал shkun: 14 July 2010 - 08:33
#167
Отправлено 14 July 2010 - 12:14
Сообщение отредактировал shkun: 14 July 2010 - 13:03
#168
Отправлено 14 July 2010 - 14:46
#169
Отправлено 15 July 2010 - 08:10
значения параметров косвенно можно определить по названию функции. Если функция называется GetCarModel (в переводе получить модель машины), значит должно быть как минимум 2 параметра:помогите плиз! пытаюсь для начала скрипт создать где не случайная машина спавнится, а заданная мной. и че то не могу разобраться никак. обьясните какие параметры за что отвечают в этих процедурах:
GetCarModel(vehicle: Vehicle; var pValue: eModel);
CreateCar(nameHash: u32; x: f32; y: f32; z: f32; var pVehicle: Vehicle; unknownTrue: b8);
И еще вопрос. Где используются Native функции? А то пока что кроме таких процедур и функций как эти никаких не видел..
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
Отправлено 15 July 2010 - 08:15
Это не чат, поэтому ответ может занимать какое-то время. Те, кто может ответить - обычно заняты и ответят, как появится свободное время.
Также, не стоит мультипостить. Вместо этого рекомендуется пользоваться кнопкой "Edit/Отредактировать сообщение"
Native - это то, что используется в IV/MC:LA/RDR вместо опкодов. Это функции .exe, которые предназначены для вызова из скриптов.
Параметры фунций очевидны из их названий.
GetCarModel первым параметром получает HANDLE Vehicle, для которого нужно получить номер модели, а вторым параметром передается указатель на переменную, в которую будет занесен номер модели.
CreateVehicle первым параметром получает хэш имени модели, три следующих параметра - координаты, в которых будет создана машина, пятый параметр - указатель на переменную, в которую будет занесен хэндл созданной машины и шестой (как это следует из названия) - пока неизвестен.
#171
Отправлено 15 July 2010 - 14:15
Какое значение примет переменная _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
Отправлено 15 July 2010 - 18:04
если быть точнее, она будет равна 1171614426.Она примет значение ID'а машины которую мы создали.
вовсе нет. Все точно также как в SB. Перед тем как создать машину или что-либо еще, нужно загрузить в память игры нужную модеь. Делается это все теми же командами: RequestModel(), HasModelLoaded(), MarkModelAsNoLongerNeeded() (аналоги опкодов 0247, 0248, 0249). В тестовом примере dhook я брал случайную модель из числа загруженных командой GetRandomCarModelInMemory(), но по идее нужную модель нужно обязательно загружать и выгружать после использования. GetCarModel тут не при чем.Я ведь и запустался изза того что в SB мы чтобы создать машину, загружали ее модель, а уже потом создавли ее карте. Здесь же наоборот)
А тут уже нужно иметь знания дельфи )) Просто между параметрами должны стоять запятые, а не точка с запятой. Исправь на GetCarModel(mycar, mymodel); Хотя вообще эта команда там лишняя.EDIT: Что-то попробовал я такой скрипт как ты сказал - выдает ошибку [Error] sultanrs.dpr(28): Not enough actual parameters на строчке GetCarModel(mycar; mymodel); сразу после mycar; Может чтото не так делаю?
#173
Отправлено 15 July 2010 - 18:31
если изменить на запятую, то выскакивает: [Error] sultanrs.dpr(28): Types of actual and formal var parameters must be identicalИсправь на GetCarModel(mycar, mymodel);
если убрать вообще эту строку, то выскакивает предупреждение: [Warning] sultanrs.dpr(28): Return value of function 'SpawnSultanRS' might be undefined
а когда в игре нажмаешь на К - вылет. Сейчас поробую перед созданим машины, загрузить модель и сделать проверку. Может получится.
#174
Отправлено 15 July 2010 - 18:37
#175
Отправлено 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
Отправлено 16 July 2010 - 04:54
#177
Отправлено 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
Отправлено 17 July 2010 - 08:02
#179
Отправлено 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
Отправлено 18 July 2010 - 06:02
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных
















