#2426 09-08-2010 22:35

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Один вопрос

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


GIMS developer

Offline

#2427 09-08-2010 22:57

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Ну модов довольно таки много, для меня главное чтоб вылетов небыло, так что я их ставлю по одному, потом тестирую немного, если начнёт вылетать, мод удаляю.
Мэйн чистый, клео скрипты на скрине -
5808b70e53c54260ea9e0d21a8ec1399.jpeg

Offline

#2428 10-08-2010 07:40

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Один вопрос

3Doomer wrote:

вполне возможно, что какой-то из КЛЕО скриптов попортил сейв файл

rolleyes

точнее тебе вряд ли кто скажет, хотя...

Last edited by 3Doomer (10-08-2010 07:41)


GIMS developer

Offline

#2429 10-08-2010 13:57

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

Re: Один вопрос

Sergey81 wrote:

http://i8.fastpic.ru/thumb/2010/0810/2e … 6b82e.jpeg 
Не запускаются миссии Мэдд Догга в LV и 2 миссии копов на досье и убийство Пуласки. Причём игра проходима, т.е. эти миссии уже как будто выполнены были. Если к примеру загрузить сейв с http://gtasavegames.com/ и взять эти миссии, они работают.
Как-нибудь можно выяснить почему так происходит и как пофиксить?

1. Узнать точное название миссии.
2. Открыть main.scm и посмотреть, какие условия проверяются перед ее запуском.
3. Найти, какое из условий не выполняется.

Возможно, что миссии были пройдены, но остались маркеры.

Offline

#2430 10-08-2010 16:42

1karl
Registered: 24-03-2009
Posts: 1

Re: Один вопрос

Я видел что опкодов на вертолёты очень мало)
Я хотел спросить как сделать проверку что вертолёт в тей точке куда надо было лететь и сделать так чтобы вертолёт летел к второй точки и т.д.
Проверка как:

01AF:   car 74@ sphere 0 in_sphere 143@ 150@ 157@ radius 0.2 0.2 1.0

Не действует. Он стоит в этой точке и лететь на след. не хочет

Offline

#2431 10-08-2010 17:32

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

1. Узнать точное название миссии.
DEFINE MISSION 93 AT @VCRASH1          // Misappropriation
DEFINE MISSION 94 AT @VCR2             // High Noon
DEFINE MISSION 95 AT @DOC2             // Madd Dogg
2. Открыть main.scm и посмотреть, какие условия проверяются перед ее запуском.
А в каком именно месте они записаны?

>Возможно, что миссии были пройдены, но остались маркеры.
Миссии считаются пройденными, т.е. по прилёту из либерти сити звонит тенпенни и говорит куда отнести досье. Но миссию, где досье надо достать, я не выполнял.

UPD. Условия вроде нашёл.

:DOC
thread 'DOC' 

:DOC_11
wait $DEFAULT_WAIT_TIME 
if 
  $599 == 1 
else_jump @DOC_36 
end_thread 

:DOC_36
if 
   Player.Defined($PLAYER_CHAR)
else_jump @DOC_180 
if 
  $ONMISSION == 0 
else_jump @DOC_180 
if 
00FF:   actor $PLAYER_ACTOR sphere 0 in_sphere $X_ROYAL_CASINO $Y_ROYAL_CASINO $Z_ROYAL_CASINO radius 1.2 1.2 2.0 on_foot 
else_jump @DOC_180 
if 
   Player.Controllable($PLAYER_CHAR)
else_jump @DOC_180 
if 
  $599 == 0 
else_jump @DOC_180 
$ONMISSION = 1 
00BA: show_text_styled GXT 'DOC_2' time 1000 style 2  // Madd Dogg
gosub @SUB_FADE_500MS 
start_mission 95  // Madd Dogg

:DOC_180
jump @DOC_11

UPD2. 82874b99fcf7b0c83fd6562cf0fbc71e.jpeg 

Поменял на 0, миссия запустилась. Теперь надо написать клео где менять значения этих глобальных переменных или как?

Last edited by Sergey81 (10-08-2010 17:49)

Offline

#2432 10-08-2010 20:44

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

Re: Один вопрос

{$CLEO}
$599 = 0
0A93: end_custom_thread

Offline

#2433 10-08-2010 21:29

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

if 
00FF:   actor $PLAYER_ACTOR sphere 0 in_sphere 2159.899 1443.042 9.8203 radius 1.2 1.2 2.0 on_foot 
$599 = 0 
if 
00FF:   actor $PLAYER_ACTOR sphere 0 in_sphere 1598.557 2667.83 9.8203 radius 1.2 1.2 2.0 on_foot 
$598 = 0 
0A93: end_custom_thread

Прописал вот так, вроде работает. Сейв правда остался уже после того как тенпенни позвонил, так что перед этим миссию не проверить, однако если зайти на то место где её маркер должен быть, она начинается.
Спасибо за помощь.

Last edited by Sergey81 (10-08-2010 21:30)

Offline

#2434 15-08-2010 03:08

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Снова вопрос smile
Есть какой-нибудь простой способ вывести имя машины на экран?

{$CLEO}

{
    Mod Name:   Windshield GUI
    Author:     Wesser
    Credits:    Demarest
}

const

   PL_VEHICLE        = 31@ 
///-------------------------
   STRING            = 5@ 
   STRING2           = 30@ 
///-------------------------
   VEHICLE_TEXT      = 0@s 
///-------------------------

end



0000: Starting code...

while true
    wait 0 
    
    if 
00DF:   actor $PLAYER_ACTOR driving
    then
        03F0: enable_text_draw 1 
                gosub @VehicleTextDisplay 

    end
end




:VehicleTextDisplay
if 
00DF:   actor $PLAYER_ACTOR driving
then
    03C0: PL_VEHICLE = actor $PLAYER_ACTOR car
    0441: 3@ = car PL_VEHICLE model
    000E: 3@ -= 400 
    0012: 3@ *= 0x308 
    000A: 3@ += 0xB1F650 
    000A: 3@ += 0x36 
    0A8D: STRING = read_memory 3@ size 4 virtual_protect 0 // I found this :)
    000A: 3@ += 0x4 
    0A8D: STRING2 = read_memory 3@ size 3 virtual_protect 0 
    0AB1: call_scm_func @SubString 2 STRING STRING2 
end
return 

:SubString
gosub @DrawVehicleText 
0AB2: ret 0 

:DrawVehicleText
03E0: unknown_text_draw_flag 1 
033F: set_text_draw_letter_size 0.3 1.2 
081C: draw_text_outline 2 RGBA 0 0 0 255 
033E: set_draw_text_position 142.0 376.0 GXT VEHICLE_TEXT 
return

Этот код с Windshield gui у меня работает на чистой игре, но не работает с другими модами, где много всяких asi и прочего. Причём zonetext работает нормально, только вот с названиями машин проблема.

Offline

#2435 15-08-2010 08:20

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Один вопрос

{$CLEO}
wait 0
while true
  wait 0
   if  
     Player.Defined($PLAYER_CHAR)
     then
         if and
          Actor.Driving($PLAYER_ACTOR)
          0AB0:   key_pressed 35 // или другое поставить условие
           then
               03C0: 1@ = actor $PLAYER_ACTOR car 
               0441: 1@ = car 1@ model
               0ADB: 0@v = car_model 1@ name
               0ADE: 0@ = text_by_GXT_entry 0@v
               0ACB: show_styled_text 0@ time 1000 style 2
           end
     end   
end

Offline

#2436 15-08-2010 08:37

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

Re: Один вопрос

00BAA458     pCurrentCarName

тут хранится указатель на строку с именем текущей машины.

Этот указатель можно использовать в опкоде 0ADF. Но я с новыми опкодами не работал, поэтому детальнее помочь не смогу.

Offline

#2437 15-08-2010 14:39

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Выяснил что Windshield не работал из за Limit adjuster'a, a именно из за строки Vehicle Models.
Но всё равно ещё раз благодарю за советы.

Offline

#2438 19-08-2010 07:57

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Нашёл пост Seemannа об уровне хаоса, и решил сделать миссию как в вайсе, когда нужно повысить уровень хаоса до максимума. Вот код

04F7: status_text $1 type 0 line 1 GXT 'FES_CRI' // global_variable  // ŒPECYŒ‡E­…•

:M21_2815
wait 0 
if 
   Player.Defined($PLAYER_CHAR)
jf @M21_2963 
if 
   not Actor.Dead($PLAYER_ACTOR)
jf @M21_2963 
0@ = 314639 
008B: 0@ = &0(0@,1i) // (int) 
0@ -= 10787168 
0@ /= 4 
008B: 0@ = &0(0@,1i) // (int) 
008A: $1 = 0@ // (int) 
if 
   not $1 > 2399 
jf @M21_2936 
jump @M21_2815

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

Offline

#2439 20-08-2010 04:24

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Нельзя ли с помощью cleo к чекпоинтам, которые создаются в гонках или например в одной из миссий Woozie, приаттачить партиклы? Чтоб было как в MCLA.

Offline

#2440 20-08-2010 11:18

mlkv1n
Registered: 20-08-2010
Posts: 3

Re: Один вопрос

В качестве условия для оператора repeat использовал условие "Player.Money($PLAYER_CHAR) >= 1000".
Теперь при компиляции вылезает ошибка о несовместимости типов переменных.. Как я понимаю integer там и там, так в чем тогда проблема?

Offline

#2441 20-08-2010 11:43

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Один вопрос

Лучше сделать по-другому.
Сначала узнавай сколько денег у игрока (010B), а затем полученное значение проверяй больше или равно тысячи. Я не совсем уверен что можно применять >= в таких случаях.

Offline

#2442 20-08-2010 12:32

mlkv1n
Registered: 20-08-2010
Posts: 3

Re: Один вопрос

Просто в документации в статье по созданию миссии было такое же условие. Ну да фиг с ним твой совет помог, спасибо, но теперь вылезает ошибка перехода на нулевой оффсет.. Ставил опкод 0000: как написано в документации, но не помогло.
Вот код мэйна:

DEFINE OBJECTS 0 
DEFINE MISSIONS 1 
DEFINE MISSION 0 at @FIRST 
DEFINE EXTERNAL_SCRIPTS -1 // Use -1 to not write AAA script 
DEFINE UNKNOWN_EMPTY_SEGMENT 0 
DEFINE UNKNOWN_THREADS_MEMORY 0 

// -------------------- 
// THE STRIPPED MAIN THREAD 
// contains initial info 
// -------------------- 
thread 'Main' 
var 
$PLAYER_CHAR: Player 
end // var 
01F0: set_max_wanted_level_to 6 
set_wb_check_to 0 
00C0: set_current_time 8 0 
04E4: unknown_refresh_game_renderer_at 2488.5601 -1666.84 
Camera.SetAtPos(2488.5601, -1666.84, 13.38) 
$PLAYER_CHAR = Player.Create(#NULL, 2488.5601, -1666.84, 13.38) 
$PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR) 
Camera.SetBehindPlayer 
set_weather 0 
wait 0 ms 
$PLAYER_CHAR.SetClothes("PLAYER_FACE", "HEAD", Head) 
$PLAYER_CHAR.SetClothes("JEANSDENIM", "JEANS", Legs) 
$PLAYER_CHAR.SetClothes("SNEAKERBINCBLK", "SNEAKER", Shoes) 
$PLAYER_CHAR.SetClothes("VEST", "VEST", Torso) 
$PLAYER_CHAR.Build 
$PLAYER_CHAR.CanMove = True 
fade 1 (out) 0 ms 
select_interior 0 
0629: change_stat 181 (islands unlocked) to 4 
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 unknown 0 
016D: restart_if_busted at 1550.68 -1675.49 14.51 angle 90.0 unknown 0
// put your create_thread commands here
 create_thread @mission_first_trigger
 end_thread
 
:MAIN_LOOP
0001: wait $DEFAULT_WAIT_TIME ms
00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes
0002: jump @MAIN_LOOP 
// put your mods (threads) here


//-------------Mission 0---------------
// put your missions here

:mission_first_trigger
thread "m_0_trig"
$TrigMarker = marker.CreateIconAndSphere(15, 2498.3433, -1646.731, 13.5448)
while $First_M_Trig == 0
wait 250
    if player.Defined($PLAYER_CHAR)
    then
        if $ONMISSION == 0
        then
            if 00FF:    actor $PLAYER_ACTOR sphere 0 in_sphere 2498.3433 -1646.731 13.5448 radius 1.0 1.0 2.0 on_foot
            then
                $ONMISSION = 1
                00BA: show_text_styled GXT 'INTRO_1' time 1000 style 2
                Marker.Disable($TrigMarker)
                start_mission @FIRST
            end
        end
    end
end
end_thread

:FIRST
thread "m_o"
repeat
    010B: 4@ = player $PLAYER_CHAR money 
    if 0112:   wasted_or_busted // mission only 
    then 
        jump @MissionFailed
    end
until 4@ >= 1000     
:MissionPassed
01E3: text_1number_styled 'M_PASSD' 0 5000 ms 1 // MISSION PASSED! 
$First_M_Trig = 1
jump @Cleanup
:MissionFailed
00BA: text_styled 'M_FAIL' 5000 ms 1 // ~r~MISSION FAILED!
:Cleanup
$ONMISSION = 0
mission_cleanup
end_thread

Offline

#2443 20-08-2010 14:19

Silent
Registered: 08-05-2010
Posts: 29

Re: Один вопрос

                start_mission @FIRST

Ты замениш етот линию на:

                start_mission 0

и всё будет хорошо smile

Но толко зто, что миссий должны иметь такой формат:
http://www.gtamodding.com/index.php?tit … _a_mission

мой первый пост в русском языке! smile

Offline

#2444 20-08-2010 15:16

mlkv1n
Registered: 20-08-2010
Posts: 3

Re: Один вопрос

Спасибо за помощь wink

Offline

#2445 22-08-2010 19:07

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Возможно ли сделать лимиты для патронов как в GTA IV?

:ammolim 
0000: NOP

:ammolim_2
wait 0
0470: 0@ = actor $PLAYER_ACTOR current_weapon
041A: 1@ = actor $PLAYER_ACTOR weapon 0@ ammo 

:projectiles_1 
if or
 0@ == 16 
  0@ == 17
   0@ == 18 
jf @handguns_1 
if
 1@ > 25
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 25                     
jump @ammolim


:handguns_1
if or
 0@ == 22 
  0@ == 23
   0@ == 24 
   jf @shotguns
if
 1@ > 325
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 325                     
jump @ammolim
 
:shotguns 
if or
 0@ == 25 
  0@ == 26
   0@ == 27
      jf @submachineguns 
if
 1@ > 100
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 100                     
jump @ammolim  

:submachineguns  
if or
 0@ == 28 
  0@ == 29
   0@ == 32
   jf @machineguns
if
 1@ > 1200
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 1200                     
jump @ammolim

:machineguns  
if or
 0@ == 30 
  0@ == 31
   jf @rifles
if
 1@ > 600
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 600                     
jump @ammolim

:rifles   
if or
  0@ == 33
   0@ == 34
   jf @ammolim
if
 1@ > 100
jf @ammolim  
017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 100                     
jump @ammolim

Набросал код, так подойдёт или что-то нужно исправить/дополнить/убрать?
И как реализовать, когда покупаешь оружие в амуниции, чтоб выводилось на экран сообщение, что достигнут максимум патронов и не снимались деньги при дальнейшей покупке?

Last edited by Sergey81 (22-08-2010 20:46)

Offline

#2446 22-08-2010 22:43

Silent
Registered: 08-05-2010
Posts: 29

Re: Один вопрос

Попробой етот скрипт, потому уто твой скрипт может дать 'Jump to 0 offset' ошибку:
Скрипт сделаный в высокопоставленней конструкций ('high-level construct', может быть плохо писаный smile )

0000: NOP

while true
    wait 0
    0470: 0@ = actor $PLAYER_ACTOR current_weapon
    041A: 1@ = actor $PLAYER_ACTOR weapon 0@ ammo 
    if or
        0@ == 16 
        0@ == 17
        0@ == 18 
    then 
        if
            1@ > 25
        then  
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 25                     
        end
    end
    if or
        0@ == 22 
        0@ == 23
        0@ == 24 
    then
        if
            1@ > 325
        then  
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 325                     
        end
    end
    if or
        0@ == 25 
        0@ == 26
        0@ == 27
    then
        if
            1@ > 100
        then 
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 100                     
        end
    end
    if or
        0@ == 28 
        0@ == 29
        0@ == 32
    then
        if
            1@ > 1200
        then  
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 1200                     
        end
    end
    if or
        0@ == 30 
        0@ == 31
    then
        if
            1@ > 600
        then 
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 600                     
        end
    end
    if or
        0@ == 33
        0@ == 34
    then
        if
            1@ > 100
        then 
            017B: set_actor $PLAYER_ACTOR weapon 0@ ammo_to 100                     
        end
    end
end

И как реализовать, когда покупаешь оружие в амуниции, чтоб выводилось на экран сообщение, что достигнут максимум патронов и не снимались деньги при дальнейшей покупке?

Все ammunation скрипт должны быть изменение.

Извините за мой плохой язык!

Offline

#2447 23-08-2010 23:00

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Один вопрос

такая ситуёвина:
есть хендл маркера, созданного через 04CE:
надо узнать, где он находится(коорды)
я понял, где в структуре маркеров они записаны, но как получить адрес структуры нужного маркера по хендлу?


GIMS developer

Offline

#2448 24-08-2010 08:20

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

Re: Один вопрос

Вот как это происходит в коде игры:

.text:00583EB0 000                     mov edx, [esp+arg_0] // хендл
.text:00583EB4 000                     cmp edx, -1 // сравниваем с -1
.text:00583EB7 000                     jz  short _ret
.text:00583EB9 000                     mov eax, edx // записываем хендл в eax
.text:00583EBB 000                     and eax, 0FFFFh
.text:00583EC0 000                     lea ecx, [eax+eax*4]
.text:00583EC3 000                     shl ecx, 3
.text:00583EC6 000                     shr edx, 16
.text:00583EC9 000                     cmp dx, ds:CMarkers._Index[ecx]
.text:00583ED0 000                     jnz short _ret
если дошли сюда значит CMarkers._Index[ecx] - это искомый маркер

Попробуй сам перевести это в удобоваримую форму))

начало CMarkers в 00BA86F0.

Offline

#2449 24-08-2010 09:34

KOLLEGA
Registered: 10-01-2009
Posts: 52

Re: Один вопрос

Прошу прощения если повторяюсь

Вопрос по Vice city
как проверить, что игрок в зоне видимости актера, т.е. в определенном радиусе и актер повернут в сторону игрока, если оба находятся в помещении и требуется, чтобы актер не видел игрока сквозь стены
(как бывает при использовании kill actor)


Поправьте меня если я ошибаюсь
только вежливо :)

Offline

#2450 24-08-2010 10:27

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Один вопрос

Seemann wrote:

Вот как это происходит в коде игры:

.text:00583EB0 000                     mov edx, [esp+arg_0] // хендл
.text:00583EB4 000                     cmp edx, -1 // сравниваем с -1
.text:00583EB7 000                     jz  short _ret
.text:00583EB9 000                     mov eax, edx // записываем хендл в eax
.text:00583EBB 000                     and eax, 0FFFFh
.text:00583EC0 000                     lea ecx, [eax+eax*4]
.text:00583EC3 000                     shl ecx, 3
.text:00583EC6 000                     shr edx, 16
.text:00583EC9 000                     cmp dx, ds:CMarkers._Index[ecx]
.text:00583ED0 000                     jnz short _ret
если дошли сюда значит CMarkers._Index[ecx] - это искомый маркер

Попробуй сам перевести это в удобоваримую форму))

начало CMarkers в 00BA86F0.

Viger написал мне это как плагин к QO, код получился не длинный, но перевести в хекс и засунуть в сам скрипт почему-то не смог...сказал что-то про невозможность имитировать оператор "and eax, 0FFFFh"


GIMS developer

Offline

Board footer

Powered by FluxBB