#26 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 16-08-2008 12:13

Любая игра изпользующая скрипты использует подобнуб команду (wait, sleep). Пример из игры HOMMV.

sleep

sleep — приостановить на время текущий поток исполнения
 
Синтаксис

sleep(number-of-segments);

Описание

Останавливает работу текущего потока исполнения на указанное время. Время задается в игровых сегментах.

Значение параметра number-of-segments должно быть ≥ 1.

Команда sleep необходима для создания скриптов, которые должны выполнять периодические действия в течение долгого времени (например, скрипты, реализующие сценарии карт):

while 1 do 
    sleep(100) 
    print("another 100 game segments has passed") 
end

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

Например, если приведенный выше скрипт запустить на исполнение, убрав из него вызов sleep(100), то игра "зависнет" – поток, в котором будет исполняться скрипт, никогда не вернет управление скриптовой машине, а та – не вернет управление игре.

#27 Re: Sanny Builder и CLEO » Вопросы и предложения по Sanny Builder » 16-08-2008 11:06

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

#28 Re: Вопросы по скриптингу » Один вопрос » 09-08-2008 11:24

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

Тупо, не учитывая флаги:

03C0: 0@ = actor $PLAYER_ACTOR car
0A97: 1@ = car 0@ struct
0085: 2@ = 1@ // (int) 
0085: 3@ = 1@ // (int) 
2@ += 0x36
3@ += 0x428
0A8C: write_memory 2@ size 1 value 2 virtual_protect 0
0A8C: write_memory 3@ size 1 value 16 virtual_protect 0

#29 Re: Вопросы по скриптингу » Один вопрос » 09-08-2008 07:15

А опкод 0665? smile

Делает тоже самое:

.text:00494844     ; __linkproc__ opcode_0665
.text:00494844     @@opcode_0665:                          ; CODE XREF: _opcode_handler_16+37j
.text:00494844                                             ; DATA XREF: .text:__linkproc__ opcode_tableo
.text:00494844 0F8                 push    1               ; get_actor %1d% model_to %2d%
.text:00494846 0FC                 mov     ecx, esi
.text:00494848 0FC                 call    CScriptThread__getNumberParams
.text:0049484D 0F8                 mov     ecx, _opcodeParameters
.text:00494853 0F8                 push    ecx             ; int
.text:00494854 0FC                 mov     ecx, _PedPool
.text:0049485A
.text:0049485A     loc_49485A:                             ; CPed * CPool<CPed>::atHandle (u32 h);
.text:0049485A 0FC                 call    CPool_CPed__atHandle
.text:0049485F 0F8                 movsx   edx, word ptr [eax+22h]
.text:00494863 0F8                 jmp     loc_495DCE

или как сказал listener прочитать из поля modelId:

0A96: 5@ = actor 1@ struct
5@ += 0x22
0A8D: 5@ = read_memory 5@ size 2 virtual_protect 0

#30 Re: Вопросы по скриптингу » Один вопрос » 08-08-2008 20:38

@ILdar -

{$CLEO}
0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@
        if
            1@ <> -1
        then
            if and
                Actor.Dead(1@)
                00F3:   actor $PLAYER_ACTOR near_actor 1@ radius 2.0 2.0 0 on_foot
                0AB0:  key_pressed 0x75
            then
                04ED: load_animation "MEDIC"
                while 84EE:   not animation "MEDIC" loaded
                    wait 0
                end
                Player.CanMove($PLAYER_CHAR) = false
                01F7: set_player $PLAYER_CHAR ignored_by_cops 1
                03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 
                0639: AS_actor $PLAYER_ACTOR rotate_to_actor 1@
                0605: actor $PLAYER_ACTOR perform_animation_sequence "CPR" IFP_file "MEDIC" 4.0 loop 0 0 0 0 time -1 // versionA
                wait 7000
                04A5: store_dead_actor 1@ position_to 2@ 3@ 4@
                0665: get_actor 1@ model_to 5@
                Actor.DestroyInstantly(1@)
                Actor.RemoveReferences(1@)
                Model.Load(5@)
                while not Model.Available(5@)
                    wait 0
                end
                1@ = Actor.Create(CivMale, 5@, 2@, 3@, 4@)
                Actor.RemoveReferences(1@)
                Model.Destroy(5@) 
                04EF: release_animation "MEDIC"
                03BF: set_player $PLAYER_CHAR ignored_by_everyone 0
                01F7: set_player $PLAYER_CHAR ignored_by_cops 0
                Player.CanMove($PLAYER_CHAR) = true 
            end
        end
    end
end

#31 Re: Модификации » [ SA | WIL] Реалистичная военка. » 06-08-2008 10:38

@Noob - замени на:

038B: load_requested_models

#32 Re: Модификации » Спидометр » 03-08-2008 15:44

А я думал что опкод 02E3 возращает скорость в м/с.

#33 Re: Вопросы по скриптингу » cleo-скрипт. Что не так? » 24-07-2008 08:12

@xxxsxxx -

{$CLEO}
0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if
            0AB0:  key_pressed 0x74
        then
            Actor.PutAt($PLAYER_ACTOR, 2488.91, -1666.91, 13.14)
            wait 3000
        end
        if
            0AB0:  key_pressed 0x75
        then
            Actor.PutAt($PLAYER_ACTOR, 2488.91, -1666.91, 23.24)
            wait 3000
        end
        if
            0AB0:  key_pressed 0x76
        then
            Actor.PutAt($PLAYER_ACTOR, 2488.91, -1666.91, 33.34)
            wait 3000
        end
    end
end

#35 Re: Вопросы по скриптингу » Один вопрос » 19-07-2008 17:06

@Yarik
1) откуда ты взял такой комментарий?

2)

Actor.PutAt(0@, 1@, 2@, -100.0)

#36 Re: Вопросы по скриптингу » handling.cfg » 18-07-2008 19:49

Список адресов для каждой машины.

#38 Re: Вопросы по скриптингу » Помогите пожалуйста! Как отрыть ВСЕ возможности в начале игры? » 17-07-2008 09:43

@grand - в начале мейна оставь, остальные удали или закомментируй.

#39 Re: Вопросы по скриптингу » Помогите пожалуйста! Как отрыть ВСЕ возможности в начале игры? » 16-07-2008 19:19

grand wrote:

Скажите хотябы как открыть весь штат

0629: change_integer_stat 181 to 4

#40 Re: Вопросы по скриптингу » Один вопрос » 16-07-2008 15:32

@ILdar - все прекрасно работает:

{$CLEO}
0@ = 0
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        if and
            0AB0:  key_pressed 0x73 // F4
            0@ == 0
        then
            0@ = 1
            #ARMY.Load()
            while not #ARMY.Available()
                wait 0
            end
            09C7: change_player $PLAYER_CHAR model_to #ARMY
            #ARMY.Destroy()
            wait 150
        end
        if and
            0AB0:  key_pressed 0x73 // F4
            0@ == 1
        then
            0@ = 0
            09C7: change_player $PLAYER_CHAR model_to #NULL
            wait 150    
        end
    end
end

#42 Re: Модификации » Скрипты для Cleo актуальные в SA Multiplayer (samp 0.2.2) » 14-07-2008 13:33

@Noob -

{$CLEO}
0@ = 0
1@ = 0
33@ = 0
while true
    wait 0
    if
        Player.Defined($PLAYR_CHAR)
    then
        if and
            1@ == 1
            33@ > 1000
        then
            2@ = Actor.Health($PLAYER_ACTOR)
            2@ += 2
            Actor.Health($PLAYER_ACTOR) = 2@
            33@ = 0       
        end
        if and
            0AB0:  key_pressed 0x73
            0@ == 0
        then
            018C: play_sound 1058 at 0.0 0.0 0.0 
            0@ = 1
            1@ = 1
            wait 150
        end
        if and
            0AB0:  key_pressed 0x73
            0@ == 1
        then
            018C: play_sound 1058 at 0.0 0.0 0.0 
            0@ = 0
            1@ = 0
            wait 150
        end
    end
end

#43 Re: Вопросы по скриптингу » Музыка в интерьерах » 14-07-2008 09:19

{$CLEO}
0000:
while true
    wait 0
    if
        Player.Defined($PLAYER_CHAR)
    then
        09E8: 0@ = actor $PLAYER_ACTOR active_interior
        if
            0@ <> 0
        then
            0952: load_soundtrack 5
            0954: start_playing_loaded_soundtrack 
            while true
                wait 0
                09E8: 0@ = actor $PLAYER_ACTOR active_interior
                if
                    0@ == 0
                then
                    Break
                end 
            end
            0955: end_playing_loaded_soundtrack 
        end
    end
end

#44 Re: Вопросы по скриптингу » Один вопрос » 14-07-2008 06:30

@Взъерошенный -

Model.Load(1216)
while not Model.Available(1216)
    wait 0
end
0@ = Object.Create(1216, 0, 0, 0)
Model.Destroy(1216)

Вот еще несколько моделек:

1216    phonebooth1
1346    CJ_PHONE_KIOSK2
1363    CJ_PHONE_KIOSK

#45 Re: Вопросы по скриптингу » Один вопрос » 23-06-2008 14:29

Да, с программой опкод работает нормально.

#46 Re: Вопросы по скриптингу » Один вопрос » 23-06-2008 10:41

@Seemann - спасибо, это действительно работает как с опкодом так и без, значит там как-то активирована эта фича.

#47 Программирование » Force feedback (DirectInput) » 22-06-2008 19:27

Fess
Replies: 6

Решил поэкспериментировать с джойстиком, установил Microsoft DirectX SDK нашел пример, как раз с демонстрацией вибрации. Начал переделывать под Delphi, но застрял вот здесь:

    // This application needs only one effect: Applying raw forces.
    DWORD           rgdwAxes[2]     = { DIJOFS_X, DIJOFS_Y };
    LONG            rglDirection[2] = { 0, 0 };
    DICONSTANTFORCE cf              = { 0 };

    DIEFFECT eff;
    ZeroMemory( &eff, sizeof(eff) );
    eff.dwSize                  = sizeof(DIEFFECT);
    eff.dwFlags                 = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS;
    eff.dwDuration              = INFINITE;
    eff.dwSamplePeriod          = 0;
    eff.dwGain                  = DI_FFNOMINALMAX;
    eff.dwTriggerButton         = DIEB_NOTRIGGER;
    eff.dwTriggerRepeatInterval = 0;
    eff.cAxes                   = g_dwNumForceFeedbackAxis;
    eff.rgdwAxes                = rgdwAxes;
    eff.rglDirection            = rglDirection;
    eff.lpEnvelope              = 0;
    eff.cbTypeSpecificParams    = sizeof(DICONSTANTFORCE);
    eff.lpvTypeSpecificParams   = &cf;
    eff.dwStartDelay            = 0;

    // Create the prepared effect
    if( FAILED( hr = g_pDevice->CreateEffect( GUID_ConstantForce, 
                                              &eff, &g_pEffect, NULL ) ) )
    {
        return hr; // !!!!!!!!!!!!!
    }

вроде простой кусок но функция g_pDevice->CreateEffect всегда возвращает ошибку. Скомпилировал бы сам на си, но в наличие сейчас только Visual C++ 2005 Express Edition. Может прокинете какие-нибудь примеры на Delphi если есть.

#48 Re: Вопросы по скриптингу » Один вопрос » 22-06-2008 19:00

@Seemann - тестирование ничего не дало. Перепробовал множество вариантов только все безрезультатно.

#49 Re: Вопросы по скриптингу » Один вопрос » 22-06-2008 16:51

Можно ли как-нибудь заставить вибрировать джойстик, например при падении или при прыжках.

#50 Re: Вопросы по скриптингу » Windigo Shootertaiment presents - "Streets' king" mod » 21-06-2008 11:05

1)

while true
    wait 0
    0470: 0@ = actor $PLAYER_ACTOR current_weapon
    if
        0@ <> 0
    then
        0555: remove_weapon 0@ from_actor $PLAYER_ACTOR 
    end
end

2) Camera.SetPosition - точка, где камера находится; Camera.PointAt - точка, куда смотрит камера.

Board footer

Powered by FluxBB