Gensher, Привет!
А нельзя поподробнее.
Если ты имеешь ввиду, как узнать ID объекта, модели из игры и не важно где она находиться в контейнере или инвентаре, мире - то надо просто посмотреть её имя. Это и есть ID уникальное имя. Оно только одно среди всех моделей игры. GECK (редактор) просто не позволяет создавать новый объект с уже имеющимся именем.
А насчёт перебора в инвентаре - это как? Посчитать, проверить наличие, сделать отбор или что.
Опиши свою задачу поточнее пожалуйста.
Пока.
Помощь по скриптам Fallout 3 и Fallout: New Vegas
Сообщений 211 страница 240 из 350
Поделиться21113.06.11 03:31:48
Поделиться21213.06.11 03:41:28
В общем - цель такая. В ГЕККЕ создан уникальный контейнер (шкаф), в который игрок может складывать вещи. Скриптом в определенный момент (при активации активатора) необходимо проверить ЧТО именно лежит в шкафу, после чего вещи модифицируются этим скриптом. Например, ремонтируются. В общем, узнавать, что надо модифицировать, можно и при загрузке в контейнер (если есть такой способ, конечно), а модифицировать уже при активации. Хочу сделать автоматического ремонтника, который будет ремонтировать что угодно без запчастей, но и не мгновенно. Типа, сдал ему вещи, через время забрал отремонтированные.
Отредактировано Gensher (13.06.11 04:43:24)
Поделиться21315.06.11 11:16:34
Несколько часов над туториалами показали, что, похоже, скриптом вернуть ID объекта:
1. Невозможно, ибо нет такой функции
2. Некуда, ибо среди типов переменных нет стринга, а ID - явно стринг
Так что в моем случае я обошелся тупым перебором типа
ref CurrentObject
Set currentObject to BlaBlaRifle
If Cont.GetItemCount currentObject > 0
;модификация объекта
EndIf
и таких блоков столько, сколько есть объектов. Неуклюже, но работает.
Поделиться21415.06.11 13:07:33
Но есть одно НО. В случае, если используется больше 1-го большого дополнения (например, Анкоридж и Брокен Стил) одновременно, то ГЕКК не желает загружать их, под предлогом "открыто более 1 мастер-файла". А если их открывать поочередно, то будет невозможно сохранить скрипт, поскольку он ругается на несуществующие объекты (поскольку не загружен мастер-файл). Может быть есть возможность загрузить несколько мастер-файлов одновременно?
ГЕКК 1.1.036
Поделиться21515.06.11 13:34:27
Gensher, чтобы загрузить несколько .esm в G.E.C.K. нужно в файле GECKCustom.ini изменить строку:
bAllowMultipleMasterLoads=0
на
bAllowMultipleMasterLoads=1
Поделиться21615.06.11 13:35:35
Gensher, Привет!
Я второй день над скриптом бьюсь - знаний явно не хватает.
Но я пощёл по другому пути - три контейнера.
Первый приём и закрытие. Второй постоянно закрыт. Третий ремонт и выдача - постоянно открыт.
Через Disable - Enable подмена. На втором таймер - запуск при наличии вещи в первом контейнере. По окончании подмена на третий.
Мы лёгких путей не ищем!
Пока не могу, хотя теоретически должно работать.
Сам ремонт не получаться, где то видел про ремонт унитазов с подменой и связью. Найти не могу. Может в помощи по GECK.
Пойду искать.
Пока.
Отредактировано K.A.I.N.48 (15.06.11 13:38:45)
Поделиться21715.06.11 13:42:39
Sergey_Ros, большое спасибо. Наверняка, тут где-то написано, но я пропустил, потому что было не надо. Столкнулся с необходимостью только сейчас.
K.A.I.N.48, я еще особо не бился над самим процессом ремонта, растянутом во времени, но планировал сделать проще - на время ремонта закрывать контейнер наглухо - lock 255. Ключа, конечно, не будет.
Что касается самого ремонта - сделал удаление вещи и тут же добавление обратно. Добавляется совершенно новая вещь. Единственная сложность, возникающая с таким подходом - если время ремонта должно зависеть от степени повреждения, то трудно оценить повреждение для нескольких одинаковых вещей с разным уровнем повреждений. т.к. удалить и добавить их получается только оптом.
Отредактировано Gensher (15.06.11 15:37:50)
Поделиться21816.06.11 03:08:16
С процессом ремонта все получилось достаточно просто: один контейнер, процесс управляется с кнопки
Скрипт:
Код:scn zzRepairing Ref CurrentObject ;Переменная для объектов инвентаря контейнера Short cou ;Количество объектов данного вида в инвентаре контейнера Short DTO ;Переменная для вычисления оставшихся дней ремонта Begin onActivate If zzRepair.GetLocked == 1 ;Если контейнер закрыт, то вещи в данный момент на ремонте If TTO <= GameDaysPassed ;Проверяем пора ли открывать ShowMessage zzRepairingMessage ;Открывать пора Сообщение "Ваши вещи отремонтированы" zzRepairButton.Activate ;Меняем положение лампочки на кнопке zzRepair.UnLock ;Открываем контейнер Else ;Иначе открывать не пора Set DTO to TTO - GameDaysPassed ;Считаем сколько дней ремонта осталось ShowMessage zzRepairingMessageEarly DTO ;Сообщение "Вещи еще не готовы, осталось дней:" EndIf Else ;иначе контейнер открыт, значит надо начинать ремонт ;начинаем ремонт zzRepair.Lock 255 ;Закрываем контейнер Set TTO to GameDaysPassed + 2 ;TTO - TimeToOpen - Заранее созданная глобальная переменная, ;чтоб не терять значение при выходе из локации. В нее ;заносим день окончания ремонта Activate ;Зажигаем лампочку на кнопке Playsound3D AMBRoomtoneVaultUtility01LP1200 ;Контейнер начинает гудеть, эмулируя бурную деятельность ;начинаем перебирать объекты в инвентаре, перебирая вообще все объекты и проверяя их количество в контейнере If zzRepair.GetItemCount DLC02WeapGaussRifleWasteland > 0 ;например гаусс Set cou To zzRepair.GetItemCount DLC02WeapGaussRifleWasteland ;Вычисляем сколько гауссов в инвентаре zzRepair.RemoveItem DLC02WeapGaussRifleWasteland cou ;Удаляем объект zzRepair.AddItem DLC02WeapGaussRifleWasteland cou ;добавляем новый объект EndIf ;далее таких блоков в скрипте делаем столько, сколько видов оружия наш скрипт должен уметь ремонтировать. EndIf End
В данном случае ремонт занимает 2 игровых дня.
Игрок складывает вещи в контейнер, нажимает кнопку, контейнер закрывается, открыть его невозможно. По истечении срока ремонта игрок снова нажимает кнопку, контейнер открывается. Если время не пришло, выводится соответствующее сообщение и контейнер остается закрытым.
Осталось только прикрутить подсчет и сбор денег.
Ну и все никак мне не нравится процесс получения скриптом объектов. Может, есть способ как-то перебрать все объекты игрового мира (так как они идут в окне объектов ГЕККа)? Например по очереди получать их в ref-переменную? Меня бы это тоже устроило.
Отредактировано Gensher (16.06.11 04:02:46)
Поделиться21916.06.11 07:56:46
Gensher, Привет!
А такой принцип для отбора не подойдёт
Ref MYWEAP
Short Coun
Begin OnActivate
Set MYWEAP to DLC02WeapGaussRifleWasteland || Weap10mmPistol || ; дальше весь список оружия
if AAARepairBox.GetItemCount MYWEAP == 1 ;сделали проверку на наличие любого из стволов
А дальше по твоей схеме.
И в конце где ремонт
AAARepairBox.Remove MYWEAP 1
AAARepairBox.AddItem MYWEAP 1
Я не пробовал сейчас попробую в твой скрипт это добавить. Вдруг сработает!
Пока.
Поделиться22016.06.11 08:25:59
K.A.I.N.48, привет. Не до конца понимаю идею со списком оружия. Множество блоков IF позволяет проверить каждый из объектов в инвентаре. Это работает примерно по тому же принципу, что и цикл, с той лишь разницей, что в цикле объекты выбираются в порядке выборки, а тут - в порядке следования блоков IF-ENDIF. Каким образом при единственном проходе состояние поменяется у всех предметов в инвентаре - мне непонятно. Опиши, пожалуйста, подробнее схему.
Я вот прочитал про функционал FOSE. Там есть необходимый функционал, только сделан он как-то недружелюбно
1. Есть способ выбрать предметы в локации. Отсюда следует логичный вопрос - если в локации шкаф, а в нем уже предметы - они (эти предметы) в локации или нет?
2. Есть способ заполнить форм-лист в ГЕККе, после чего выбрать в цикле по индексу. Это вообще шикарный вариант, просто саму процедуру ремонта придется перенести в GameMode, там пробегать ФормЛист, вытаскивать из него рефы, проверять есть ли реф в контейнере и если есть - чинить. По получению последнего элемента в ФормЛисте - прекращать обработку GameMode.
Но с FOSE дел никогда не имел, как-то не очень хочется его использовать. Он, насколько я понял, имеет прелоадер, который уже запускает Фол сам. Как-то не очень...
Отредактировано Gensher (16.06.11 08:26:51)
Поделиться22116.06.11 09:27:21
мне непонятно
А мне и самому непонятно!
Я рассуждал так.
А какая разница какой именно объект находиться в контейнере.
Если есть список Set MYWEAP to DLC02WeapGaussRifleWasteland || Weap10mmPistol ||
то любой объект из этого списка помещённый в контейнер запускает процесс ремонта
И почему то думал, что проверка
if AAARepairBox.GetItemCount MYWEAP == 1 допустим (пистолет)
не позволит начать процесс, если в контейнер положили что то другое.
Но если процесс начался, то в итоге будет удалён именно пистолет, и возвращён то же именно он.
AAARepairBox.AddItem MYWEAP 1
Наверное здесь ошибка. Я то знаю, что в контейнере пистолет. А вот программа знает ли это?
Гадание на кофейной гуще.
Пойду спрашивать к SpalnyVagon - вот сюда Вопросы по скриптам
Правда он надомной там подсмеивается из-за моей безграмотности в скриптах! Как сенсей гнобит своего ученика, что бы нос не задирал.
Пока.
Поделиться22216.06.11 09:59:11
Я вообще даже не представлял, что возможна такая конструкция
Set MYWEAP to DLC02WeapGaussRifleWasteland || Weap10mmPistol || ; дальше весь список оружия
в блоке IF понятно, а в присваивании???
PS "/" - это делить, != это "не равно"
Отредактировано Gensher (16.06.11 10:34:36)
Поделиться22320.06.11 14:39:17
А тема ещё активна? Так или иначе всем привет. Но мне просто очень нужен скрипт. Цель скрипта такова, что после диалога ГГ не мог не чего делать (думаю скрипт DisablePlayerControls 1 0 0 0 0 0 0 подойдёт ) и по истечении примерно 3 секунд (тут наверно нужен скрипт на таймер в котором я вообще не бум бум) у ГГ медленно становился чёрный экран и проигрывается какай ни будь анимация падения на пол от 1 лица и он телепортируется туда где маркер (который зарание поставлен конечно) и опять мог нормально всё видеть. Это возможно? И всё это надо как то вставить в окно Результирующего скрипта который исполняется в конце диалога.
Отредактировано Musstafar (20.06.11 16:03:32)
Поделиться22420.06.11 15:19:32
А тема ещё активна?
Да.
(думаю скрипт DisablePlayerControls 1 0 0 0 0 0 0 подойдёт )
Вполне, но можно и без цифр.
тут наверно нужен скрипт на таймер
Да, именно.
Это возможно?
Это есть даже в самой игре (F3 и F:NV). Так-то!
всё это надо как то вставить в окно Результирующего скрипта
Таймер в резалтах не работает. Нужно создать обычный скрипт на каком-то объекте (вещь в инвентаре ГГ, комод рядом с местом телепортации и т.д.), а затем запустить его обработку через диалог. Делается все элементарно.
Для скрипта пригодятся:
- Имя игры (F3 или F:NV)
- Имя маркера, к которому мы перемещаем ГГ (Ref)
Я бы посоветовал добавить предмет со скриптом ГГ в карман, а после выполнения всех процедур убрать его.
Поделиться22520.06.11 15:26:09
Gensher,
Отсюда следует логичный вопрос - если в локации шкаф, а в нем уже предметы - они (эти предметы) в локации или нет?
Нет, вряд ли. Когда предмет попадает в шкаф, из списка предметов локации он удаляется.
Но с FOSE дел никогда не имел, как-то не очень хочется его использовать.
А без него кошерно (качественно) сделать вряд ли получится. Лучше поискать моды под F3 и F:NV с похожим функционалом. Я думаю, такое уже делали.
Поделиться22620.06.11 15:27:11
F:NV
А ключик подойдёт в качестве предмета?
ElRayKeyDoorMormFortREF (id ключа)
а ещё вопрос если напремер поставить маркер FFCaptiveMarker ( это когда НПС сидит со связными руками)
то когда ГГ переместится то он будет сидеть со связанными руками как и НПС?
Если да то вот ID этого маркера -
FFCaptiveMarkerPlayerREF
Если нет то вот ID XMarkerHeading маркера -
XMarkerHeadingPlayerREF
Отредактировано Musstafar (20.06.11 15:40:36)
Поделиться22720.06.11 16:58:28
А ключик подойдёт в качестве предмета?
Да, должен. Скрипт не него повесить можно, значит подойдет.
он будет сидеть со связанными руками как и НПС?
К сожалению, нет, не будет.
Код скрипта (сам не проверял):
scn aaaModTecTeleportationSCRIPT float Timer short Stage Begin onAdd set Stage to 1 End Begin GameMode if (Stage == 1) DisablePlayerControls set Timer to 3 set Stage to 2 elseif (Stage >= 2) if (Timer > 0) set Timer to Timer - GetSecondsPassed else if (Stage == 2) imod FadeToBlack5sISFX set Timer to 4 set Stage to 3 else set Stage to 0 EnablePlayerControls Player.MoveTo XMarkerHeadingPlayerREF RemoveMe endif endif endif End
Поделиться22820.06.11 17:09:45
скрипт работает прекрасно почти как нужно) Но Мне бы ещё анимацию падения (сойдёт даже анимация смерти) от 1 лица и что бы скрипт работал не после получения ключа а всё таки после диалога, было бы просто здорово, также нужно как то сделать что бы после как ГГ очнулся он не смог ещё секунд 5 не чего делать а только наблюдать (не обязательно секунд 5 думаю нужно просто убрать строчку EnablePlayerControls вообщем мне будет проще её самому дописать когда нужно будет)... Я так понимаю придётся заново переделать весь скрипт?
Отредактировано Musstafar (20.06.11 17:17:32)
Поделиться22920.06.11 17:15:47
Я так понимаю придётся заново переделать весь скрипт?
Придется его доделывать. Ждите.
что бы скрипт работал не после получения ключа а всё таки после диалога
Просто дайте ГГ ключ в конце диалога.
Поделиться23020.06.11 17:18:31
что бы после как ГГ очнулся он не смог ещё секунд 5 не чего делать а только наблюдать (не обязательно секунд 5 думаю нужно просто убрать строчку EnablePlayerControls вообщем мне будет проще её самому дописать когда нужно будет)
окей?) И мне удобней и вам меньше работы
Поделиться23120.06.11 17:54:18
Доработанный код:
scn aaaModTecTeleportationSCRIPT float Timer short Stage Begin onAdd set Stage to 1 End Begin GameMode if (Stage == 1) DisablePlayerControls set Timer to 3 set Stage to 2 elseif (Stage >= 2) if (Timer > 0) set Timer to Timer - GetSecondsPassed else if (Stage == 2) Player.AddScriptPackage GSPlayerPassesOut imod FadeToBlack5sISFX set Timer to 4 set Stage to 3 else set Stage to 0 Player.RemoveScriptPackage Player.MoveTo XMarkerHeadingPlayerREF endif endif endif End
Проверяйте.
Поделиться23220.06.11 18:00:26
Супер!) а можно ещё как нибудь запретить ГГ переключатся с 1 лица на 3 а то падение от 3 лица выглядит не много забавно)
Поделиться23320.06.11 20:48:46
Musstafar, замените строку
DisablePlayerControls
на
DisablePlayerControls 1 1 1 1 0 1 1
Так что остаётся твой вариант с перечислением в блоках.
Что тоже "геморройное занятие". Ибо все равно все варианты не перебрать. Моды и DLC вносят свои коррективы.
Поделиться23420.06.11 21:26:54
Большое спасибо, всё работает как и было задумано.
Поделиться23523.06.11 19:02:55
Здравствуйте, на этот раз мне понадобилось сделать броню кое с каким скриптом. (броня заранее готова разумеется)
Скрипт должен заключаться на той основе что допустим броня легиона цезаря... Создана отдельная фракция (maksFaction - id этой отдельной фракции) это фракция атакует всё и вся кроме тех кто принадлежит этой фракции (maksFaction) или в броне это фракции. Эту броню со скриптом и нужно сделать. Вроде такое уже есть в игре, вот тот же легион если я одену их броню то НКР начнёт по мне стрелять даже если я у них Кумир. Но как только я открыл скрипт брони цезаря он мне показался через чур сложным для меня (
scn CaesarsLegionFactionOutfitWarningScript
float fUpdatedNegNCR
float fUpdatedPosNCRfloat fUpdatedNegCL
float fUpdatedPosCLfloat fUpdatedNegBoS
float fUpdatedPosBoSfloat fUpdatedNegGK
float fUpdatedPosGKfloat fUpdatedNegPG
float fUpdatedPosPGBegin OnEquip Player
;Check to see if player was wearing faction armor.
if DisguiseFactionPulseQuest.bFactionArmorEquipped == 0;Set variable to track wearing faction armor
set DisguiseFactionPulseQuest.bFactionArmorEquipped to 1;Player was not wearing faction armor - so we store their reputation values, we don't need to clear it here, it'll get cleared below
;Store Reputations
set DisguiseFactionPulseQuest.fNCRNegReputation to GetReputation RepNVNCR 0
set DisguiseFactionPulseQuest.fNCRPosReputation to GetReputation RepNVNCR 1set DisguiseFactionPulseQuest.fLegionNegReputation to GetReputation RepNVCaesarsLegion 0
set DisguiseFactionPulseQuest.fLegionPosReputation to GetReputation RepNVCaesarsLegion 1set DisguiseFactionPulseQuest.fBoSNegReputation to GetReputation RepNVBrotherhood 0
set DisguiseFactionPulseQuest.fBoSPosReputation to GetReputation RepNVBrotherhood 1set DisguiseFactionPulseQuest.fKhanNegReputation to GetReputation RepNVGreatKhans 0
set DisguiseFactionPulseQuest.fKhanPosReputation to GetReputation RepNVGreatKhans 1set DisguiseFactionPulseQuest.fPowderNegReputation to GetReputation RepNVPowderGanger 0
set DisguiseFactionPulseQuest.fPowderPosReputation to GetReputation RepNVPowderGanger 1endif
if VFactionArmorTutorial == 0
ShowMessage VFactionOutfitTutorial
set VFactionArmorTutorial to 1
endifShowMessage CaesarsLegionFactionOutfitWarning
StartQuest DisguiseFactionPulseQuest ;Kicks the pulse placing quest
setally ArmorVCaesarsLegionFaction PlayerFaction 1 1
player.addtofaction ArmorVCaesarsLegionFactionEnemy 0;Clear Reputations
SetReputation RepNVNCR 0 0.0
SetReputation RepNVNCR 1 0.0SetReputation RepNVCaesarsLegion 0 0.0
SetReputation RepNVCaesarsLegion 1 0.0SetReputation RepNVBrotherhood 0 0.0
SetReputation RepNVBrotherhood 1 0.0SetReputation RepNVGreatKhans 0 0.0
SetReputation RepNVGreatKhans 1 0.0SetReputation RepNVPowderGanger 0 0.0
SetReputation RepNVPowderGanger 1 0.0end
Begin OnUnequip Player
if Player.GetEquipped FactionGearNVCaesar == 0
SetEnemy ArmorVCaesarsLegionFaction PlayerFaction 1 1
player.RemoveFromFaction ArmorVCaesarsLegionFactionEnemy
ShowMessage CaesarsLegionFactionOutfitWarningOff;Restore Factions
;Get Current Values and add stored values
set fUpdatedNegNCR to GetReputation RepNVNCR 0 + DisguiseFactionPulseQuest.fNCRNegReputation
set fUpdatedPosNCR to GetReputation RepNVNCR 1+ DisguiseFactionPulseQuest.fNCRPosReputationset fUpdatedNegCL to GetReputation RepNVCaesarsLegion 0 + DisguiseFactionPulseQuest.fLegionNegReputation
set fUpdatedPosCL to GetReputation RepNVCaesarsLegion 1 + DisguiseFactionPulseQuest.fLegionPosReputationset fUpdatedNegBoS to GetReputation RepNVBrotherhood 0 + DisguiseFactionPulseQuest.fBoSNegReputation
set fUpdatedPosBoS to GetReputation RepNVBrotherhood 1 + DisguiseFactionPulseQuest.fBoSPosReputationset fUpdatedNegGK to GetReputation RepNVGreatKhans 0 + DisguiseFactionPulseQuest.fKhanNegReputation
set fUpdatedPosGK to GetReputation RepNVGreatKhans 1 + DisguiseFactionPulseQuest.fKhanPosReputationset fUpdatedNegPG to GetReputation RepNVPowderGanger 0 + DisguiseFactionPulseQuest.fPowderNegReputation
set fUpdatedPosPG to GetReputation RepNVPowderGanger 1 + DisguiseFactionPulseQuest.fPowderPosReputationendif
;If the player is not wearing ANY faction armor, clear this variable.
if (Player.GetEquipped FactionGearNVNCR == 0) && (Player.GetEquipped FactionGearNVCaesar == 0) && (Player.GetEquipped FactionGearNVBrotherhood == 0) && (Player.GetEquipped FactionGearNVGreatKhans == 0) && (Player.GetEquipped FactionGearNVPowder == 0) && (player.GetEquipped VMS18WhiteGloveMask == 0 || (Player.GetEquipped OutfitFormalWear == 0 && player.GetEquipped ArmorWhiteGloveSociety == 0))
;Clear Wearing Faction Armor Variable
set DisguiseFactionPulseQuest.bFactionArmorEquipped to 0;Set Reputation Values to Updated
SetReputation RepNVNCR 0 fUpdatedNegNCR
SetReputation RepNVNCR 1 fUpdatedPosNCRSetReputation RepNVCaesarsLegion 0 fUpdatedNegCL
SetReputation RepNVCaesarsLegion 1 fUpdatedPosCLSetReputation RepNVBrotherhood 0 fUpdatedNegBoS
SetReputation RepNVBrotherhood 1 fUpdatedPosBoSSetReputation RepNVGreatKhans 0 fUpdatedNegGK
SetReputation RepNVGreatKhans 1 fUpdatedPosGKSetReputation RepNVPowderGanger 0 fUpdatedNegPG
SetReputation RepNVPowderGanger 1 fUpdatedPosPG
endifend
;Restriction on Companions
Begin OnAdd CraigBooneREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd RoseofSharonCassidyREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd VeronicaREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd LilyREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd RaulREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd ArcadeREF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd EDE1REF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd EDE2REF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd EDE3REF
ShowMessage CompanionFactionArmorMsg
DropMe
EndBegin OnAdd RexREF
ShowMessage CompanionFactionArmorMsg
DropMe
End
Подозреваю что на основе этого скрипта можно сделать и мою бронь. Или есть есть какой нибудь на много меньше скрипт как то привязывающий броню к определённый фракции? Заранее спасибо
Отредактировано Musstafar (23.06.11 19:04:59)
Поделиться23624.06.11 17:06:03
Musstafar, скрипт будет сильно зависеть от того, что именно вам нужно. Если вам нужно лишь сделать одну фракцию другом, когда ГГ одевает их одежду, то скрипт будет такой:
Код:scn aaaModTecMaksFactionOutfitSCRIPT Begin OnEquip Player setally maksFaction PlayerFaction 1 1 player.addtofaction maksFaction 0 end Begin OnUnequip Player SetEnemy maksFaction PlayerFaction 1 1 player.RemoveFromFaction maksFaction end ;Restriction on Companions Begin OnAdd CraigBooneREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd RoseofSharonCassidyREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd VeronicaREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd LilyREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd RaulREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd ArcadeREF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd EDE1REF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd EDE2REF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd EDE3REF ShowMessage CompanionFactionArmorMsg DropMe End Begin OnAdd RexREF ShowMessage CompanionFactionArmorMsg DropMe End
Но здесь не учитывается репутация для разных фракций, нет сообщения "Вы одели броню Легиона" + еще нескольких вещей.
Есть лишь переключатель друг/враг и блокировка одевания брони на компаньонов.
Поделиться23724.06.11 18:30:25
Если вам нужно лишь сделать одну фракцию другом
Думаю да, этот скрипт мне подойдёт, спасибо.
Поделиться23826.06.11 11:18:39
Привет всем!
Проще всего сделать скрипт для мобов
Подскажите пожалуйста, а кто такие МОБЫ и как их создавать.
Мне нужно для мода организовать постоянные нападение врагов на пост охраны.
Я хотел создать в нужных местах местности - группы нападающих. До нужного времени отключить их (спрятать).
А затем после проверки расстояния до ГГ включить
Всех нападающих сделать с "респауном"
Но вот только не знаю, а где будет происходить респаун, в месте где поставил NPC или там где его убили!
Да и вообще не знаю, как лучше сделать.
1 Заставлять нападать повесив на одного NPC из нападающей группы скрипт с целью в блоке begin OnStartCombat IDОхранникa.( наверное в этом случае не нужна проверка на фракцию и её изменение на вражескую) и в нём перечислить всех членов группы нападения.
Или всё таки нужно быть во враждебных фракциях?
2 Или как обсуждалось на 1 странице темы использовать функцию PlaceAtMe и высыпать нападающих из небытия в указанные координаты.
3 Создать локацию с нападающими и при выполнении условия расстояния ГГ до охранника переносить нападающих на маркеры.
И ещё, как лучше сделать таймер, для того что бы нападения шли как бы случайно.
Вот ГГ подходит до нужного расстояния к посту охраны, Условие расстояния в скрипте выполнено и враги из первой группы Enable,цель у них есть и они атакуют.
И вот в этом момент запускается таймер для второй группы и для третьей. Как сделать, в каком месте!
Понятие не имею!
Подскажите пожалуйста.
Отредактировано K.A.I.N.48 (26.06.11 12:51:22)
Поделиться23927.06.11 19:53:15
Привет всем!
Подскажите пожалуйста, а кто такие МОБЫ и как их создавать.
Узнал, что Mob - мобильные объекты, но всё равно не понял, а какая у них разница с существами из уровненных списков.
Мне нужно для мода организовать постоянные нападение врагов на пост охраны.
Это сделал используя скрипт предложенный MuxauJl для Deadellus - только цель для появления Xmarker.
наверное в этом случае не нужна проверка на фракцию и её изменение на вражескую
создал отдельную фракцию - враждебную ГГ и охране поста.
Вот ГГ подходит до нужного расстояния к посту охраны, Условие расстояния в скрипте выполнено и враги из первой группы Enable,цель у них есть и они атакуют.
Это сделал триггером и командой StartCombat Player - для первой группы нападающих (эта группа стоит в локации)
AAAKain188MercARef.StartCombat Player и так для остальных членов группы.
Но вот теперь новая проблема - вот эти NPC Ref копии - тех которые командой AAAKainXMarkerRef.PlaceAtMe AAAKain188MercA 1 5 0
(которые возникают после смерти первых - по скрипту MuxauJl) атакуют ГГ только если успели "увидеть" смерть одного из своих.
А вот если первую группу перебить быстро, пока не появился следующая. Они не атакуют.
Маркер стоит далеко! За домом.
А в скрипт MuxauJl не могу добавить строчку AAAKain188MercA.StartCombat Player - скрипт не сохраняеться.
Сохраняется только с AAAKain188MercARef.StartCombat Player ( но эти то уже убиты!)
Подскажите пожалуйста, как можно это решить.
Пока.
Поделиться24027.06.11 21:18:19
а какая у них разница с существами из уровненных списков.
Мобы = НПЦ. Неигровые персонажи, в общем. Вот тут подробнее: Моб (Википедия)
AAAKain188MercA.StartCombat Player - скрипт не сохраняеться.
Т.к. нельзя исполнить команду "StartCombat" на объекте, можно лишь на его Ref-копии.
Подскажите пожалуйста, как можно это решить.
Можно написать скрипт, заставляющий НПЦ атаковать ГГ и повесить его на всех НПЦ. Если они из уровневого списка, сделать это будет не сложно. В вашем случае лучше не использовать Ref'ы, потому что вы создаете повторяющееся событие, а не уникальное.