Скрипты в GECK
#1
Отправлено
Знающие люди, подскажите, существует ли функция, при помощи которой можно узнать, сколько времени player провёл в режиме сна.
Есть функция GetPCSleepHours, но насколько я понял, она возвращает значение, которое игрок выставляет в меню сна. Мне кажется это не очень надёжным.
Мне нужна надёжная функция, которая по окончании сна, возвратила бы количество часов/минут/секунд.
#2
Отправлено
#6
Отправлено
Создано два идентичных пистолета, под разными ИД под разные патроны. Оба они положены в форм-лист. Два нужных боеприпаса тоже положены в отдельный форм-лист. Создано и настроено месседж-окно с условиями. Написан скрипт по образу и подобию такого же, только с гораздо большим ассортиментом патронов для ствола, но тот работает, а мой нет ><
Проблема в том, что на первую кнопку месседжбокса оружие реагирует нормально, а на второй - не экипируется вообще. Если кто знает - как это вылечить, помогите плз - сам плаг почти готов, преимущественно скрипты остались..
[codebox]scn aaaAmmo10mmPistolSelect
float weaponCondition
short needequip
short button
short hasJHP
short hasAP
short numAmmoTypes
short currentAmmoType
short pistolType
begin OnEquip
if menumode
if player.GetItemCount CFammo10mmJHP >= 1
set hasJHP to 1
else
set hasJHP to 0
endif
endif
if player.GetItemCount CFammo10mmAP >= 1
set hasAP to 1
else
set hasAP to 0
endif
set numAmmoTypes to ( hasJHP + hasAP )
if player.IsWeaponInList aaa10mmAmmo
set currentAmmoType to 1
elseif player.IsWeaponInList aaa10mmAmmo
set currentAmmoType to 2
endif
if player.IsWeaponInList aaa10mmPistols
set PistolType to 1
elseif player.IsWeaponInList aaa10mmPistols
set PistolType to 2
endif
if numAmmoTypes > 1
set needequip to 1
ShowMessage aaa10mmSelectionMSG
elseif numAmmoTypes == 1
set weaponCondition to player.GetWeaponHealthPerc / 100
if hasJHP == 1 && currentAmmoType != 1
if PistolType == 1
player.AddItemHealthPercent Weap10mmPistol 1 weaponCondition 1
player.EquipItem Weap10mmPistol 0 1
removeme
elseif hasAP == 1 && currentAmmoType != 2
if PistolType == 1
player.AddItemHealthPercent Weap10mmPistolAP 1 weaponCondition 1
player.EquipItem Weap10mmPistolAP 0 1
removeme
endif
endif
endif
endif
end
Begin MenuMode
if needequip
set button to GetButtonPressed
if ( button == 0 )
set needequip to 0
elseif ( button == currentAmmoType )
set needequip to 0
elseif button > 0
set weaponCondition to player.GetWeaponHealthPerc / 100
set needequip to 0
if button == 1
if PistolType == 1
player.AddItemHealthPercent Weap10mmPistol 1 weaponCondition 1
player.EquipItem Weap10mmPistol 0 1
removeme
if PistolType == 2
player.AddItemHealthPercent Weap10mmPistol 1 weaponCondition 1
player.EquipItem Weap10mmPistol 0 1
removeme
elseif button == 2
if PistolType == 1
player.AddItemHealthPercent Weap10mmPistolAP 1 weaponCondition 1
player.EquipItem Weap10mmPistolAP 0 1
removeme
if PistolType == 2
player.AddItemHealthPercent Weap10mmPistolAP 1 weaponCondition 1
player.EquipItem Weap10mmPistolAP 0 1
removeme
endif
endif
endif
endif
endif
endif
endif
end[/codebox]
#7
Отправлено
Думаю, сделаем быстро.
Как вы считаете, имеет ли смысл преобразовать OSFM в FSFM? То есть, провести полную перетряску первого тома учебника с учетом специфики Fallout3?
Это будет следующим шагом. Ко всему прочему, сейчас появился расширитель скриптового языка Fallout`a, так называемый FSE.
#8
Отправлено
Думаю стоит. Во-первых делать придется не с нуля, это уже проще. А во-вторых особенности все-таки есть в скриптинге Фаллаута и неплохо бы их расписать.Как вы считаете, имеет ли смысл преобразовать OSFM в FSFM?
Мир друзьям - смерть врагам!
Мой новый сайт-блог: https://igorlutiy.pp.ua - как некое подведение итогов моей жизни в интернете
Мой профиль на Самиздате: http://samlib.ru/l/ljutyj_i/
#14
Отправлено
ActorID.SetFactionRank FactionID, 0 Player.RemoveItem Caps001 200
ActorID - это АйДи Брамина (если быть точным, нужно указывать RefID)
FactionID - АйДи фракции
ЗЫ: неплохо бы еще сделать и проверку на наличие денег у игрока. Но это проще сделать через условие для фразы диалога.
Мир друзьям - смерть врагам!
Мой новый сайт-блог: https://igorlutiy.pp.ua - как некое подведение итогов моей жизни в интернете
Мой профиль на Самиздате: http://samlib.ru/l/ljutyj_i/
#16
Отправлено
Пиши А по поводу диалогов - туторов есть целая куча (для Обливиона и один для Фаллаута), там ничего сложного нет (если конечно не придумать что-то уж сильно заумноеИгорь, спасибо, я тебе ещё в асе напишу подробней, а то вот взялся осваивать диалоги методом научного тыка, но этим методом сложно понять скрипыт)
Мир друзьям - смерть врагам!
Мой новый сайт-блог: https://igorlutiy.pp.ua - как некое подведение итогов моей жизни в интернете
Мой профиль на Самиздате: http://samlib.ru/l/ljutyj_i/
#17
Отправлено
SHORT DoOnce SHORT RunScript SHORT LockpickSkill SHORT ExplosivesSkill SHORT Usewrench SHORT LuckSkillBase SHORT ColaRandom SHORT DamageValue SHORT ChanceToUnlock SHORT ChanceToJam SHORT ChanceOfInjury SHORT LuckFactor SHORT HasFailed SHORT DamageRange SHORT PlayerHealth SHORT RepairSkill SHORT Wrench SHORT Handuse SHORT Dollar SHORT Button Short NukaVending1 BEGIN OnLoad SET LuckFactor TO 3 END Begin gamemode Set Button to GetButtonPressed SET Handuse TO (100-((LuckSkillBase * LuckFactor) + Player.GetActorValue Agility)) SET Usewrench TO (LockpickSkill + (RepairSkill * 3)) / 5 SET LuckSkillBase TO (Player.GetActorValue Luck) sET ChanceOfInjury TO (100 - (RepairSkill + (LuckSkillBase * LuckFactor))) SET DamageRange TO ChanceOfInjury;same type of roll, but there will still be 2 rolls SET Wrench TO (Player.GetItemCount Wrench01 ) SET PlayerHealth TO (Player.GetActorValue Health) if runscript == 1 ShowMessage 1Nucka, Usewrench, Handuse, Wrench, Dollar, ChanceToJam, ChanceOfInjury, DamageRange, PlayerHealth SET RunScript TO 0 ELSE Activate ENDIF ELSE Activate ENDIF ELSE Activate ENDIF ELSE Activate ENDIF END Begin gamemode IF button == 0 IF Usewrench > GetRandomPercent SET ColaRandom TO Usewrench * (GetRandomPercent + 1) / 100 Player.Additem NukaCola 1 * ColaRandom Player.RemoveItem Wrench01 1 1 RewardXP 5 SET RunScript TO 1 ElseIF Usewrench < GetRandomPercent SET ColaRandom TO Usewrench * (GetRandomPercent + 1) / 100 Player.damageActorValue Health DamageRange Player.Say Hit Player.RemoveItem Wrench01 1 1 SET RunScript TO 1 ShowMessage 1NuckaDamagedMessage DamageValue ElseIf wrench == 0 showmessage 1wrencyno SET RunScript TO 1 ENDIF ENDIF end Begin gamemode IF Button == 1 IF Handuse > GetRandomPercent SET ColaRandom TO Handuse * (GetRandomPercent + 1) / 100 Player.Additem NukaCola 1 * ColaRandom RewardXP 5 SET RunScript TO 1 ElseIF Handuse < GetRandomPercent SET ColaRandom TO Handuse * (GetRandomPercent + 1) / 100 Player.damageActorValue Health DamageRange Player.Say Hit ShowMessage 1NuckaDamagedMessage DamageValue SET RunScript TO 1 ENDIF ENDIF end begin gamemode IF Button == 2 Set Dollar To (Player.GetItemCount 11PrewarMoney) If Dollar >= 1 Player.additem NukaCola 1 Player.removeitem 11PrewarMoney 1 SET RunScript TO 1 if dollar < 1 ShowMessage 1Doolarno SET RunScript TO 1 Endif Endif endif End
[/code]
Помогите делаю скрипт, чтобы подошёл гг к автомату с ядер колой, перед ним сплыло сообщение, с показателями и функциями
Взломать автомат (Использует гаечный клю для вскрытия)
Залезть рукой
Использовать доллар чтобы купить колу
Сдеала, подхожу, активирую перевый вариант беру ГГ дохнет или начинает бесконечно повторять действие, со всторым тоже самое и третье, почему то также работает,
А если покину какую нибудь локацию у героя отнимаются жизни и он дохнет
Помогите срипт исправить пожалуйста
#19
Отправлено
Я бы для начала попробовал все используемые gamemode блоки объединить в один. Как минимум проблема отнятия жизни у ГГ при смене локации возникает из-за этого разделения: во втором блоке gamemode проверяется условие button == 0. Это условие выполняется сразу при входе в gamemode, даже без показа всякого сообщения и использования GetButtonPressed (т.е. до того, как ГГ вообще дотронулся до автомата) Так что рекомендую проделать следующее:
а) объединить все блоки gamemode в один
б) добавить некий флаг, означающий, что гг активировал автомат и должен сделать выбор (чтобы предотвратить описанное выше срабатывание по нулевому значению button)
в) выровнять строки скрипта, непросто ориентироваться в коде, когда блоки не выровнены.
P.S. Щит, надо смотреть на даты сообщений *бьется об стену*. Ладно, оставлю, вдруг кому пригодится.
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 скрытых