#1 Re: Вопросы по скриптингу » Один вопрос » 30-06-2019 20:22

Здравствуйте. smile Клео я изучаю недавно. Решил написать скрипт в котором игрока будет обслуживать бармен.
По задумке когда сиджей заходит в бар то 2й бармен (слева) должен уже быть в баре,ожидая сиджея. Если подойти к бармену встав на красный маркер, с игрока снимут 15$ и бармена начнёт обслуживать сиджея, а поставив перед ним заказ (вино бутылки по id 1509), сиджей её выпьет и бутылка исчезнет. После этого сиджей может двигаться, а экран будет шататься, то затемняясь то просветляясь, с учётом замедления игры в 2раза - эффект опьянения длительностью на 1минуту.  Когда эффект кончится всё придёт в норму - сиджей трезвый.
Да, ошибок у меня ещё много, но я не знаю как их все поправить. rolleyes
1й баг - хоть скрипт и цикличен, модель загружается много раз.
2й баг - красный маркер напротив бармена не виден, хотя и активен.
3й баг - связан с анимациями сиджея, он просто встал, двигать им нельзя и сразу пошли эффекты опьянения. Но анимации бармена воспроизводятся.

Помогите мне пожалуйста и покажите на примерах исправленные варианты

{$CLEO}
0000:
while true //пока условие верное, скрипт будет работать
:1
wait 0
Model.Load(1509) //объявляем модель бутылки по id 1509
Model.Load(#VWFYCRP) //объявляем модель бармена
038B: load_requested_models //загружаем объявленные модели
:2
wait 0
if and//проверяем на загруженность 
Model.Available(1509) //бутылка загружена?
Model.Available(#VWFYCRP) //бармен загружен?  
jf @2 //если нет то возвращаемся к метке 2 и проверка будет происходить до тех пор пока объявленные модели не загрузятся
wait 100 //задержка в 100мс
Actor.Create(3@,CIVFEMALE, #VWFYCRP, 500.3259, -77.7879, 998.7578) //создаём актора в данных координатах (бар грув-стрит). 
Object.Create(0@,1509,0.0,0.0,0.0) //создаём бутылку
wait 100
Model.Destroy(1509)  //уничтожаем каждую модель 
Model.Destroy(#VWFYCRP) 
Actor.RemoveReferences(3@) //стираем сведения 
Object.RemoveReferences(0@) //чтобы не грузить память
wait 500
jump @2


wait 1000 //задержка в 0мс
if and //проверяем несколько условий
player.Defined(0) //игрок (cj) жив ?
not actor.Driving($PLAYER_ACTOR) //игрок не в машине ?
player.Money(0) > 14 //число игрока целое и больше 14 ?
0102:   actor $PLAYER_ACTOR in_sphere 500.3043 -75.8083 998.7578 radius 1.0 1.0 1.0 sphere 1 stopped_on_foot //когда игрок встанет на маркер 
then //тогда
player.Money(0) += -15  //с игрока снимут 15$ 
    
if 
00FE:   actor $PLAYER_ACTOR in_sphere 500.3043 -75.8083 998.7578 radius 1.0 1.0 1.0 sphere 1//если игрок ещё стоит на маркере 
Player.CanMove(3@) = False //бармен никуда не уйдёт
//и обслужит игрока
0605: actor 3@ perform_animation "BARSERVE_LOOP" IFP "BAR" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1 //бармен смотрит по сторонам и ожидает клиентов
0605: actor 3@ perform_animation "BARSERVE_ORDER" IFP "BAR" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 2000 //бармен на месте прислушался
wait 2000 
0605: actor 3@ perform_animation "BARSERVE_BOTTLE" IFP "BAR" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 3000 //наклонился и достал бутылку
wait 3000 
0605: actor 3@ perform_animation "BARSERVE_GIVE" IFP "BAR" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 3000 //бармен поставил перед игроком выпивку
070A: AS_actor $PLAYER_ACTOR attach_to_object 0@ offset 0.05 0.06 0.05 on_bone 6 16 perform_animation "DRNKBR_PRTL" IFP "GANGS" time 15000



    
wait 1500
    1@ = 0
    
        repeat
        wait 0
            if
            not player.Defined(0)
            then
            1@ = 1 //Dead/arrested/not found flag
            end
        until not actor.Animation($PLAYER_ACTOR) == "DRNKBR_PRTL"
    
    04EF: release_animation "GANGS"
    
        if
        1@ == 0
        then
        015D: set_gamespeed 0.5 
        player.SetDrunkVisuals(0,50)
        object.Destroy(0@)
        actor.DestroyInstantly(3@) - уничтожаем бармена
        
            while player.Defined(0)
            wait 0
            32@ = 0
                
                repeat
                wait 0
                    if
                    not player.Defined(0)
                    then
                    break
                    end
                until 32@ > 999
                
            fade 0 1500
            
                repeat
                wait 0
                    if
                    not player.Defined(0)
                    then
                    break
                    end
                until not fading
                
            fade 1 1500
            
                repeat
                wait 0
                    if
                    not player.Defined(0)
                    then
                    break
                    end
                until not fading                        
            end //while
        
        015D: set_gamespeed 1.0 
        player.SetDrunkVisuals(0,0)
        end
    end
end

Board footer

Powered by FluxBB