#1 02-06-2008 14:28

AlphaOmega
Registered: 02-06-2008
Posts: 98

TAXI корректная замена

Здравствуйте. Возник у меня следующий вопрос.

Вот есть в ГТАшном скрипте миссия ТАКСИ. Но она доступна только для двух машин (taxi, cabbie). Допустим я хочу сделать чтобы и другие машины в этом учавствовали. Как написать на клео такой скрипт, чтобы он не конфликтовал с основным? Например может быть по другой кнопке активировать миссию? и вообще, может где-то есть подобный скрипт?

Offline

#2 02-06-2008 21:54

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

Оно кажеться идёт с ехешника и для мисии береться только 2 ID такси-тачек, хотя...
Вот коечто: (в потоке R3)
if or
   Actor.DrivingTaxiVehicle($PLAYER_ACTOR)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #AMBULAN)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #FIRETRUK)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #HUNTER)
   Actor.DrivingVehicleType($PLAYER_ACTOR, #BOXBURG)
...
start_mission 121  // Taxi-Driver Sub-Mission
$ONMISSION_TAXI = 1

Возможно в файле VEHICLES.IDE написать нужной машине клас taxi и получиться

Offline

#3 03-06-2008 09:30

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: TAXI корректная замена

Опкод 0602 совершенно четко проверяет ID модели машины игрока на равенство числам 420 и 438. Т.е. добавить новую такси не так-то просто. Нужно менять условие в R3, чтобы кроме такси подходили другие машины.

00D6: if 
0602:   actor $PLAYER_ACTOR driving_taxi 
004D: jump_if_false @R3_673

на

00D6: if or
0602:   actor $PLAYER_ACTOR driving_taxi 
00DD:   actor $PLAYER_ACTOR driving_car_with_model #PCJ600
004D: jump_if_false @R3_673

тогда можно будет возить пассажиров и на мотике.

Кроме этого условия по аналогии надо поменять еще одно, чуть пониже в скрипте, и 2 условия в самой миссии.

Offline

#4 03-06-2008 09:42

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

Значит 0602 берет ИД с ехе а не VEHICLES.IDE ?

Offline

#5 03-06-2008 09:54

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: TAXI корректная замена

_opcode_0602:
// читаем параметр опкода (актера)
push 1                                  ; ParamsNumber
mov ecx, esi
call CollectNumberParams

// получаем адрес актера
mov eax, dword ptr ds:dwOpcodeParameter1
mov ecx, ds:CPedsPool
push eax                                ; Handle
call GetActorStruct                     ; Handle -> Struct

// проверяем ведет ли машину
mov ecx, [eax+CPed.isDriving]
test ch, 1
mov [esp+234h+ConditionResult], 0
jz  short loc_4912E1

// читаем адрес машины
mov eax, [eax+CPed.VehicleStruct]
test eax, eax
jz  short loc_4912E1

// читаем номер модели
mov ax, [eax+CVehicleUnit.scriptableUnit.unit.modelID]

// СРАВНИВАЕМ С 420
cmp ax, 420  
jz  short loc_4912DC

// СРАВНИВАЕМ С 438
cmp ax, 438 
jnz short loc_4912E1

// ЕСЛИ ОДНО ИЗ УСЛОВИЕ TRUE = > 0602 TRUE
loc_4912DC: 
mov [esp+234h+ConditionResult], 1

// ИНАЧЕ УСЛОВИЕ = FALSE
loc_4912E1:
mov ecx, dword ptr [esp+234h+ConditionResult]
push ecx                                ; ConditionResult
mov ecx, esi

// записываем результат условия
call SetConditionResult                 ; skip 004d if true
xor al, al

// выходим
jmp _case_opcode_end

как видишь, никакого vehicles.ide. Флаг такси оттуда возможно используется где-то еще, но не в 0602

Last edited by Seemann (03-06-2008 09:57)

Offline

#6 03-06-2008 10:08

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

Ну да, только 2 виды такси использует. Может тогда флаг нигде и не используется

Offline

#7 03-06-2008 13:13

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: TAXI корректная замена

так это нужно править только оригинальный скрипт?
или может всё-таки можно это через cleo реализовать?

Не обязательно точь-в точь - то есть может написать на клео код, который уже другие машины будет брать и выполнять «свои» миссии? (задать кооринаты и названия) и время там.......

подскажите плиз

Offline

#8 03-06-2008 13:19

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: TAXI корректная замена

Без правки кода миссии ты все равно не сможешь работать таксистом не на такси, даже если ты эту миссию запустишь, скажем, из cleo-скрипта. То же касается остальных миссий.

Offline

#9 03-06-2008 13:27

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: TAXI корректная замена

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

Чтобы я смог дальше всё развить (а в дальнейшем поделиться со всеме) мне требуется небольшая помощь. Исходный скрипт в виде:

проверка на вход в машины ХХХ и ХХХ
если в них сидит игрок и нажимает на ХХХ кнопку, то запускается миссия

задаётся массив из 5 точек (мест) и выбирается одна из них

в радиусе ХХХ метров появляется случайный прохожий с маркером
(его нужно взять, тогда появится маркер на радаре с одной из тех точек выше)

миссия заканчивается если: вышел из машины или взорвался или доехал до точки

чтобы дальше возить - снова нужно нажать на кнопку ХХХ

если есть какие-нибудь заготовки похожие (можно по частям) - былб бы рад

Offline

#10 04-06-2008 15:51

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

AlphaOmega читай пост №3 там ВСЁ написано!!!

Seemann но ведь можна код такси мишн с мейна перенести в клео, только с заменой
0602:   actor $PLAYER_ACTOR driving_taxi
на нужные модели

Как вариант вообще там заменить 0602:   actor $PLAYER_ACTOR driving_taxi на Актор_Драйвинг и можна будет возить на любом транспорте grin

Last edited by Yarik (04-06-2008 15:53)

Offline

#11 04-06-2008 16:03

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: TAXI корректная замена

Yarik wrote:

AlphaOmega читай пост №3 там ВСЁ написано!!!
<...>
Как вариант вообще там заменить 0602:   actor $PLAYER_ACTOR driving_taxi на Актор_Драйвинг и можна будет возить на любом транспорте grin

Это понятно, но для этого нужно кодить в главном скрипте, а мне необходимо оставить его нетронутым и всё написать на cleo...

Offline

#12 04-06-2008 16:32

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: TAXI корректная замена

2Yarik, просто перенесити миссию в клео - нельзя.

Offline

#13 04-06-2008 16:44

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: TAXI корректная замена

просто перенесити миссию в клео - нельзя.

почему же? я в свое время легко перенес миссию CPRACE (основа всех гонок в игре) в клео. И создал на ее базе свою гонку для Alien City, yelmi видел, не даст соврать.

Offline

#14 04-06-2008 17:16

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: TAXI корректная замена

Не только видел, но и проходил эту гонку.  grin

Offline

#15 04-06-2008 18:55

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: TAXI корректная замена

Seemann wrote:

легко перенес миссию CPRACE

копипастом?

[large]Добавленно.[/large]
аа. Ну тогда ясно.

Last edited by flashTrash (04-06-2008 20:35)

Offline

#16 04-06-2008 19:39

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

flashTrash конечно не простым "копипастом" - а с соответствующими правками smile

Offline

#17 05-06-2008 02:25

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: TAXI корректная замена

Нет, на самом деле почти копипастом. Я только заменил там один набор координат на свой и сохранил как .cm файл. После этого осталось только написать .cs-триггер, который запускал бы миссию в нужный момент (start_custom_mission).

Offline

#18 05-06-2008 08:37

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

Ну я о том что надо еще взять кусок потока R3 а не только скопировать TAXIODD

Offline

#19 05-06-2008 17:53

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: TAXI корректная замена

ну значит будем писать с нуля...
прошу привести фрагменты кодов на следующие события (будем по-шагово делать):

* создать в радиусе ХХ человека (случайного) с маркером
** если подъехать к ниму - он садится в машину
** если отменить миссию - исчезает маркер, а не сам человек (то есть без kill/release/unload/remove)

Offline

#20 05-06-2008 18:51

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: TAXI корректная замена

AlphaOmega: лучше копипастом с оригинала

Offline

#21 05-06-2008 19:00

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: TAXI корректная замена

Yarik wrote:

AlphaOmega: лучше копипастом с оригинала

Не выходит. Копилятор брыкается на строку
0006: 49@ =  0  ;; integer values
говорит что локальная переменная 49 вне допустимых границ и макс. значение -33@
sad

может поможешь?
копипастом сделай и откомпиль скрипт таксимода на кнопку, например 0х33 (цифра 3) и на тачку STRETCH... пилз... я пока тоже попробую помудрить...

Offline

Board footer

Powered by FluxBB