Модератор форума: КсюXa, ApeX  
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)

Скрипты
a3apbi4  Offline  Сообщение №1 написано: 7 декабря 2010, 18:01



11
Скрипты - неотъемлемая часть GECK. При написании возникает очень много казусов. Данная тема должна помочь не наступать на "грабли" новичкам и делиться опытом с другими более продвинутых мододелов.




Zero_Malkav  Offline  Сообщение №481 написано: 4 октября 2011, 18:07



621
Всем привет. Кто подскажет скрипт для триггера, который при вхождении ГГ в триггер делал видимые (изначально отмеченные как invisible) Ref-объекты (напримерRef001, Ref002)?

И подобный скрипт, но при использовании пункта меню в активаторе, и при условии, что у ГГ есть определенный объект (например BatareykaID).

Заранее спасибо...

Graf  Offline  Сообщение №482 написано: 4 октября 2011, 18:30



179
Цитата Mercutio

но при использовании пункта меню в активаторе, и при условии, что у ГГ есть определенный объект


Тут значит типа мессаг на активаторе, и активатор доступен только если у гг есть определённый объект? Я правильно понял?

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №483 написано: 4 октября 2011, 23:52



47
Граф а ты проверял этот скрипт на своем шмоте?
У меня почеу то вообще не работает на вещах,хотя эффект повесил,(короче Все сделал,как в эсп.файле)

Снадобье "Левитация"работает 3 минуты при этом он ходит по воздуху и топотит...:lol: - как раньше и отписывал,нужно поменять анимацию.

vasy40
Zero_Malkav  Offline  Сообщение №484 написано: 5 октября 2011, 02:20



621
Цитата Graf

Тут значит типа мессаг на активаторе, и активатор доступен только если у гг есть определённый объект? Я правильно понял?



Хм, за активатором закреплено меню. В меню две опции. Одна - ничего не делать (после чего меню исчезает). Вторая заменить батарею. Так вот, для второго пункта, необходим скрипт, который проверял наличие батарейки (BatareykaID) в инветаре ГГ и если она отсутствует выводил сообщение " у вас нет батарейки", а если присутствует то делал видимыми объекты помеченные как initiale disable.
.

Graf  Offline  Сообщение №485 написано: 5 октября 2011, 14:22 | Отредактировано: Graf - 5 октября 2011, 14:27



179
vasy40, На шмоте не проверял но и скриптом сделать не сложно. На щет тупотит, я уже сказал, я просто забыл кинуть в архив анимацию, так то анимация прописана, тебе нужно поставить в тот путь свою анимацию и все будит работать.

Добавлено (05.10.2011, 09:51)
---------------------------------------------
Mercutio, Ну скрипт для триггера, действие противоположное disable:
Code

begin ontrigger player
objectREF.enable
end

Второй скрипт напишу как буду дома.

Добавлено (05.10.2011, 18:22)
---------------------------------------------
Цитата Mercutio

Хм, за активатором закреплено меню. В меню две опции. Одна - ничего не делать (после чего меню исчезает). Вторая заменить батарею. Так вот, для второго пункта, необходим скрипт, который проверял наличие батарейки (BatareykaID) в инветаре ГГ и если она отсутствует выводил сообщение " у вас нет батарейки", а если присутствует то делал видимыми объекты помеченные как initiale disable.


Вот:

Code
short button  

begin OnActivate  

if ( IsActionRef player == 1 )  

   ShowMessage IdmessageBBB

endif  

end  

Begin gameMode     

set button to getbuttonpressed  
     
   if button == 0  
    if ( player.getitemcount BatareykaID >= 1 )  
    object1Ref.enable  
    object2Ref.enable  
   else  
    if ( player.getitemcount BatareykaID < 1 )  
    showmessage idmessageXXX

   elseif button == 1  
   endif  
endif  
endif
End

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Zero_Malkav  Offline  Сообщение №486 написано: 5 октября 2011, 14:25



621
Спасибо Graf... Буду разбираться...

Graf  Offline  Сообщение №487 написано: 5 октября 2011, 14:30



179
Mercutio, Вот мини объяснение:

Code
short button   

begin OnActivate   

if ( IsActionRef player == 1 ) ; если активировал гг  

    ShowMessage IdmessageBBB ; появляется мессаг с выбором

endif   

end   

Begin gameMode      

set button to getbuttonpressed   
       
    if button == 0  ; 1 выбор
     if ( player.getitemcount BatareykaID >= 1 )  ; если у гг 1 батарейка то два объекта появляются
     object1Ref.enable   
     object2Ref.enable   
    else  ; в другом случае
     if ( player.getitemcount BatareykaID < 1 )  ; если батарейки меньше одной
     showmessage idmessageXXX ; выбивает сообщение

    elseif button == 1  ; второй выбор "Отмена"
   endif   
  endif   
endif  
End

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №488 написано: 6 октября 2011, 17:02



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



PlayIdle p100 -вот должна быть проигранная анимация,вроде так
и если делать скрипт на вещи,то нужны команды наверное
типа Begin On add
Equip Player.item id
message id;Крылья одеты и активированы
end
Begin On add
Unequip Player.item id
message id;Крылья сняты и отключены
end
Все понятно в том есп.файле,да,понятно как делать таблетки или шприцы с зельем"Левитация"но мне нифига не понятно как это все + одежда крылья и анимация сделать одним скриптом.
Может подскажешь что?

vasy40
Graf  Offline  Сообщение №489 написано: 6 октября 2011, 19:26



179
vasy40, У меня там стоит два эффекта, один скрипт эффект на левитацию а второй скрипт на анимацию.

Цитата vasy40

типа Begin On add Equip Player.item id message id;Крылья одеты и активированы end Begin On add Unequip Player.item id message id;Крылья сняты и отключены end


Нет, блок Begin Onadd действует при получении вещи в инвентарь, и ты его неправильно написал...
Нужно писать примерно так:
Code
begin OnEquip player

ShowMessage aaaArmorInventorySMessage

end

begin OnUnEquip player

ShowMessage aaaArmorInventorySMessage2

end

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №490 написано: 7 октября 2011, 04:51



47
Спасибо!попробую еще что нибудь.

vasy40
Vi[RUS]  Offline  Сообщение №491 написано: 14 октября 2011, 11:59



275
Нужен скрипт для триггера, чтобы ГГ находясь в нем не мог совершать быстрое путешествие.

Steady  Offline  Сообщение №492 написано: 14 октября 2011, 13:55 | Отредактировано: Straight - 14 октября 2011, 12:19



Vi[RUS],

Scn 111Script

Begin OnTriggerEnter Player

If(EnableFastTravel == 0)

Return

Else

EnableFastTravel 0

Endif

End

Begin OnTriggerLeave Player

EnableFastTravel 1

End


Скрипт повесить на сам триггер. Правда не уверен что заработает (Скриптингом недавно начал заниматься)

Добавлено (14.10.2011, 17:55)
---------------------------------------------
Ах да забыл, в скрипте также сделана авто-включения ФастТревела когда ГГ выходит из триггера. Если это не нужно, убери последние три строчки.


Graf  Offline  Сообщение №493 написано: 14 октября 2011, 14:00 | Отредактировано: Graf - 14 октября 2011, 14:01



179
Straight, Проверки на:

Цитата Straight

If(EnableFastTravel == 0)



Нет, а не легче сделать так:

Code
Scn aaaScript   

Begin OnTriggerEnter Player   

EnableFastTravel 0   

End

Begin GameMode

if ( triggerRef.getdistance, player >= 10 )
EnableFastTravel 1
endif
end


---------------------------------------------
Straight, Ну или тогда уже так:

Code
Begin OnTriggerEnter Player   

EnableFastTravel 0   

End

Begin OnTriggerLeave Player   

EnableFastTravel 1   

End

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Steady  Offline  Сообщение №494 написано: 14 октября 2011, 14:17



Graf, сам об этом же подумал, зачем нужны эти условия? :)

Graf  Offline  Сообщение №495 написано: 14 октября 2011, 14:36



179
Straight, Ну он нечего об условиях не писал, значит лучше сделать так.

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Vi[RUS]  Offline  Сообщение №496 написано: 14 октября 2011, 16:37



275
Straight, Graf, Спасибо. good

vasy40  Offline  Сообщение №497 написано: 15 октября 2011, 14:41 | Отредактировано: vasy40 - 15 октября 2011, 14:57



47
Насчет левитации и анимации:

[ObjectID.]ResetFallDamageTimer - Функция ResetFallDamageTimer сбрасывает таймер падения. При сбросе таймера вызывающий объект (ObjectID) получает повреждения при падении так, как будто он начал падать только что.
Относится к типу: Miscellaneous Functions

[ActorID.]PickIdle - Функция PickIdle заставляет вызывающего актера (ActorID) выбрать новое анимационное движение (idle).
Относится к типу: Animation Functions | Actor Functions

PlayGroup Walk
PlayGroup Walk, 1 - Функция PlayGroup проигрывает анимационную группу, определенную в GroupName.
Необязательный флаг [flags] может использоваться, чтобы начать прогрывание анимационной группы различными способами.
Флаги:
0 Обычный (Normal) текущая анимация проиграется до конца полного цикла, затем начнется проигрывание новой анимации с самого начала, со своего первого стартового фрейма.
1 Немедленный старт (Immediate Start) Установка флага в единицу приведет к немедленной остановке в текущем фрейме проигрываемой в данный момент анимационной группы, после чего начнется проигрывание новой анимации со своего стартового фрейма.
2 Немедленный запуск цикла (петли) (Immediate Loop) Установка флага в 2 приводит к немедленному прекращению проигрывания в текущем фрейме анимационной группы, после чего стартует новая анимация со своего стартового фрейма и будет воспроизводиться в цикле много раз (по петле).
Примечание:
Проигрывание этой функцией некоторых анимационных групп на персонаже игрока может его "заморозить" и он перестанет реагировать на ваши действия. Вернуть его в нормальное состояние поможет вызов функции PickIdle или вызов PlayGroup со следующими параметрами:
Код: [Выделить]
PlayGroup Idle, 1
Относится к типу: Animation Functions
ВНИМАНИЕ!ВОПРОС -
Куда и как вставить в скрипт левитации - безопасное приземление - [ObjectID.]ResetFallDamageTimer и проигрывание анимации полета - PlayIdle p100 или хотя бы сообщение на дисплее о том что через 10 секунд эффект левитации закончиться?
Вот в этот скрипт:

Скрипт рабочий - Граф в курсе,но вот проблемка - при полете проигрывается анимация ходьбы,бега,плаванья и при приземлении ГГ погибает в 70%,потому что прогграмма считает что он упал с большой высоты.

Или вот эти команды нужно повесить скриптом на одежду?

[ObjectID.]ResetFallDamageTimer - эта команда в скрипте "Левитация" есть,но почему то не срабатывает,может оттого что не вставлен Ай Ди ГГ?

PlayIdle p100 - анимация тоже не проигрывается,потому что нет пока такой анимации.

Подскажите пожалуйста,и как это будет выглядеть в скрипте на одежду?

scn aaalexLevitationBaseEffectScript

begin ScriptEffectUpdate

player.PlayIdle p100

end
-------------------------------------------------------------------------------------------------------
И еще - у кого есть анимация полета,чтобы махали крыльями?

vasy40
Graf  Offline  Сообщение №498 написано: 16 октября 2011, 20:32



179
Цитата vasy40

Подскажите пожалуйста,и как это будет выглядеть в скрипте на одежду?


Ну скриптом добавляешь Актор эффекты через тот скрипт на броню, который я тебе писал.

Добавлено (17.10.2011, 00:32)
---------------------------------------------
vasy40, Player.CastImmediateOnSelf IdActorEffect

На случай если не знаешь, что так добавляется скриптом актор эффект.


...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №499 написано: 17 октября 2011, 05:43 | Отредактировано: vasy40 - 17 октября 2011, 08:20



47
Вот скрипт на одежду,который был в том есп,файле:

scn aaalexLevitationBaseEffectScript

begin ScriptEffectUpdate

player.PlayIdle p100

Player.CastImmediateOnSelf aaaforcelevitationscript

end

Так будет выглядеть?
И еще:

Зелье"Левитация" работает 3 минуты = 180 секунд,каким образом скриптом устроить проверку на время -чтобы на 170 секунде,на дисплей выводилась надпись-"До окончания "Левитации" 10 секунд."Это для того чтобы удачно приземлятся хотя бы в 50%

------------------------------------------------------------------------------
scn AAAlarmTime

short Stage
float Timer

Begin ScriptEffectStart
if (Stage == 0)
set Stage to 1
endif
End

Begin ScriptEffectUpdate
if (Stage == 1)
Set Timer to Timer + ScriptEffectElapsedSeconds
if (Timer >= 170)
ShowMessage ААА02;До окончания "Левитации" 10 секунд.
set Stage to 2
endif
endif
End
---------------------------------------------------------------------------
Сработает ли такой скрипт прикрученный к зелью"Левитация" с выводом предупреждения на дисплей?И можно ли добавить по окончанию эффекта замедление времени(Slowing down time) и безопасную посадку Player.resetFallDamageTimer?
P.S.Скрипт правильный-то есть записался в г.е.к.к.,но вот не выводит сообщение в игре,на монитор в чем ошибка? ShowMessage -сообщение создал,повесил скрипт на зелье"Левитация"

vasy40
Graf  Offline  Сообщение №500 написано: 17 октября 2011, 07:45



179
vasy40, Да причем тут эффектный скрипт? Я же сказал, все на актор эффектах.

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №501 написано: 17 октября 2011, 08:24 | Отредактировано: vasy40 - 17 октября 2011, 08:35



47
Ты сказал,что в том есп.файле что для Ф3 скрипт на одежду - вот он.
Как это будет выглядеть на Актор эффектах?И посмотри пожалуйста что с скриптом-таймером не так,он приведен выше.

vasy40
Graf  Offline  Сообщение №502 написано: 17 октября 2011, 11:51



179
vasy40, значит то не правильный скрипт. Он же делает только эффект анимации, подумай логически.

Добавлено (17.10.2011, 15:51)
---------------------------------------------

Цитата vasy40

Сработает ли такой скрипт прикрученный к зелью"Левитация" с выводом предупреждения на дисплей?И можно ли добавить по окончанию эффекта замедление времени(Slowing down time) и безопасную посадку Player.resetFallDamageTimer? P.S.Скрипт правильный-то есть записался в г.е.к.к.,но вот не выводит сообщение в игре,на монитор в чем ошибка? ShowMessage -сообщение создал,повесил скрипт на зелье"Левитация"


Ну и каким образом он дожен работать?

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №503 написано: 17 октября 2011, 14:03 | Отредактировано: vasy40 - 17 октября 2011, 14:06



47
Зелье"Левитация" работает 3 минуты = 180 секунд,каким образом скриптом устроить проверку на время -чтобы на 170 секунде,на дисплей выводилась надпись-"До окончания "Левитации" 10 секунд."Это для того чтобы удачно приземлятся хотя бы в 50%

Вот таким,наверное,у тебя же спрашивают...или самому на свои вопросы всегда отвечать???

scn AAAlarmTime

float timer ;переменная таймера
short startTimer
short sof
short kof

begin ScriptEffectStart
set timer to 180 ;поставить таймер на 180
end

begin ScriptEffectUpdate

if timer < 170 && kof==0 ;когда пройдет 170 секунд,вывести на монитор сообщение
set kof to 1
showMessage ААА01;До окончания "Левитации" 10 секунд.
endif

if timer < 180 && sof==0;когда пройдет 180 секунд, удачно приземлиться
resetFallDamageTimer
set sof to 1

endif

set timer to timer - getSecondsPassed ;отнять от таймера 1 секунду

end

Ты вопросов и загадок подбрасываешь больше - чем помогаешь.

vasy40
Graf  Offline  Сообщение №504 написано: 17 октября 2011, 14:08



179
vasy40, Ну а если я тебе говорю одно а ты делаешь совсем другое.

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
vasy40  Offline  Сообщение №505 написано: 17 октября 2011, 15:12



47
Scn AAAlexItemScript
begin OnEquip player;одел крылья
ShowMessage aaa01;вывелось сообщение
Player.CastImmediateOnSelf aaaforcelevitationscript;запустился эффект"Левитация"
end
begin OnUnEquip player;снял крылья
ShowMessage aaa02;вывелось сообщение
.........Эффект "Левитация" закончен.
end

Что в этом месте написать........?

vasy40
Graf  Offline  Сообщение №506 написано: 17 октября 2011, 15:21



179
Цитата vasy40

Что в этом месте написать........?


Player.RemoveSpell aaaforcelevitationscript;запустился

На вики заглядывай.

CastImmediateOnSelf - аналогично addspell

...-Вот такой вот парадокс. Мы делаем моды для игр, в которые уже давно не играем...
Volkogava  Offline  Сообщение №507 написано: 18 октября 2011, 14:08



73
Всем привет. Пытаюсь сделать так, чтобы спустя несколько игровых часов с игрока снималось определенное "заклинание":


Все работает, НО - таймер отсчитывается только в реальном времени, если в режиме ожидания или сна попытаться пропустить это время - ничего не происходит, после ожидания счетчик так и продолжает отчитывать заданное время. Так как сделать, чтобы этот счетчик учитывал ожидание или отдых персонажа?

Вот сдам бутылки - тогда и куплю гранатомет (©)
Spalny_Vagon  Offline  Сообщение №508 написано: 18 октября 2011, 19:16


Мастер


Цитата Volkogava

после ожидания счетчик так и продолжает отчитывать заданное время.


Совершенно верно, во время ожидания или сна getsecondspassed тоже спит или ожидает. Поэтому в таких случаях нужно использновать другие возможности, например глобальную переменную gamedayspassed

В этом фрагменте следующая стадия квеста наступает с задержкой в 12 часов.

======================
Мод "Нью-Йорк" на русском: https://modgames.net/load/fallout3/addon/new-york-bolshoe-yabloko/34-1-0-1294
Мод "Нью-Йорк" на английском: https://modgames.net/load/fallout3/kvesty/the-big-apple/23-1-0-19771
Alphaverb  Offline  Сообщение №509 написано: 24 октября 2011, 16:51



713
Делаю небольшой ребаланс-мод, ломаю голову над следующим кондишеном для эффекта:
1. Чтобы при уроне оружия < х, засчитывались лишь критические повреждения (то есть урон наносят лишь критические повреждения)
Подскажите, как его оформить

Volkogava  Offline  Сообщение №510 написано: 24 октября 2011, 19:26



73
Цитата Spalny_Vagon

gamedayspassed


Не могу понять, сейчас совсем перестал работать.


Где здесь может быть ошибка?

Вот сдам бутылки - тогда и куплю гранатомет (©)
Форум » Fallout: New Vegas » Мастерская » Скрипты (Вопросы и ответы)
Поиск:





Ответ на жалобу смотрите в разделе жалоб