Форум «Лабортории Mod-Tec»

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas


Помощь по скриптам Fallout 3 и Fallout: New Vegas

Сообщений 211 страница 240 из 350

211

Gensher, Привет!
А нельзя поподробнее.
Если ты имеешь ввиду, как узнать ID объекта, модели из игры и не важно где она находиться в контейнере или инвентаре, мире - то надо просто посмотреть её имя. Это и есть ID уникальное имя. Оно только одно среди всех моделей игры. GECK (редактор) просто не позволяет создавать новый объект с уже имеющимся именем.
А насчёт перебора в инвентаре - это как? Посчитать, проверить наличие, сделать отбор или что.
Опиши свою задачу поточнее пожалуйста.
Пока.

0

212

В общем - цель такая. В ГЕККЕ создан уникальный контейнер (шкаф), в который игрок может складывать вещи. Скриптом в определенный момент (при активации активатора) необходимо проверить ЧТО именно лежит в шкафу, после чего вещи модифицируются этим скриптом. Например, ремонтируются. В общем, узнавать, что надо модифицировать, можно и при загрузке в контейнер (если есть такой способ, конечно), а модифицировать уже при активации. Хочу сделать автоматического ремонтника, который будет ремонтировать что угодно без запчастей, но и не мгновенно. Типа, сдал ему вещи, через время забрал отремонтированные.

Отредактировано Gensher (13.06.11 04:43:24)

0

213

Несколько часов над туториалами показали, что, похоже, скриптом вернуть ID объекта:
1. Невозможно, ибо нет такой функции
2. Некуда, ибо среди типов переменных нет стринга, а ID - явно стринг

Так что в моем случае я обошелся тупым перебором типа

ref CurrentObject
Set currentObject to BlaBlaRifle
If Cont.GetItemCount currentObject > 0
    ;модификация объекта
EndIf

и таких блоков столько, сколько есть объектов. Неуклюже, но работает.

0

214

Но есть одно НО. В случае, если используется больше 1-го большого дополнения (например, Анкоридж и Брокен Стил) одновременно, то ГЕКК не желает загружать их, под предлогом "открыто более 1 мастер-файла". А если их открывать поочередно, то будет невозможно сохранить скрипт, поскольку он ругается на несуществующие объекты (поскольку не загружен мастер-файл). Может быть есть возможность загрузить несколько мастер-файлов одновременно?
ГЕКК 1.1.036

0

215

Gensher, чтобы загрузить несколько .esm в G.E.C.K. нужно в файле GECKCustom.ini изменить строку:

Код:
bAllowMultipleMasterLoads=0

на

Код:
bAllowMultipleMasterLoads=1

0

216

Gensher, Привет!
Я второй день над скриптом бьюсь - знаний явно не хватает.
Но я пощёл по другому пути - три контейнера.
Первый приём и закрытие. Второй постоянно закрыт. Третий ремонт и выдача - постоянно открыт.
Через Disable - Enable подмена. На втором таймер - запуск при наличии вещи в первом контейнере. По окончании подмена на третий.
Мы лёгких путей не ищем!
Пока не могу, хотя теоретически должно работать.
Сам ремонт не получаться, где то видел про ремонт унитазов с подменой и связью. Найти не могу. Может в помощи по GECK.
Пойду искать.
Пока.

Отредактировано K.A.I.N.48 (15.06.11 13:38:45)

0

217

Sergey_Ros, большое спасибо. Наверняка, тут где-то написано, но я пропустил, потому что было не надо. Столкнулся с необходимостью только сейчас.
K.A.I.N.48, я еще особо не бился над самим процессом ремонта, растянутом во времени, но планировал сделать проще - на время ремонта закрывать контейнер наглухо - lock 255. Ключа, конечно, не будет.
Что касается самого ремонта - сделал удаление вещи и тут же добавление обратно. Добавляется совершенно новая вещь. Единственная сложность, возникающая с таким подходом - если время ремонта должно зависеть от степени повреждения, то трудно оценить повреждение для нескольких одинаковых вещей с разным уровнем повреждений. т.к. удалить и добавить их получается только оптом.

Отредактировано Gensher (15.06.11 15:37:50)

0

218

С процессом ремонта все получилось достаточно просто: один контейнер, процесс управляется с кнопки
Скрипт:

Текст скрипта|Текст скрипта
Код:
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)

0

219

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
Я не пробовал сейчас попробую в твой скрипт это добавить. Вдруг сработает!
Пока.

0

220

K.A.I.N.48, привет. Не до конца понимаю идею со списком оружия. Множество блоков IF позволяет проверить каждый из объектов в инвентаре. Это работает примерно по тому же принципу, что и цикл, с той лишь разницей, что в цикле объекты выбираются в порядке выборки, а тут - в порядке следования блоков IF-ENDIF. Каким образом при единственном проходе состояние поменяется у всех предметов в инвентаре - мне непонятно. Опиши, пожалуйста, подробнее схему.

Я вот прочитал про функционал FOSE. Там есть необходимый функционал, только сделан он как-то недружелюбно :)
1. Есть способ выбрать предметы в локации. Отсюда следует логичный вопрос - если в локации шкаф, а в нем уже предметы - они (эти предметы) в локации или нет?
2. Есть способ заполнить форм-лист в ГЕККе, после чего выбрать в цикле по индексу. Это вообще шикарный вариант, просто саму процедуру ремонта придется перенести в GameMode, там пробегать ФормЛист, вытаскивать из него рефы, проверять есть ли реф в контейнере и если есть - чинить. По получению последнего элемента в ФормЛисте - прекращать обработку GameMode.

Но с FOSE дел никогда не имел, как-то не очень хочется его использовать. Он, насколько я понял, имеет прелоадер, который уже запускает Фол сам. Как-то не очень...

Отредактировано Gensher (16.06.11 08:26:51)

0

221

Gensher написал(а):

мне непонятно

А мне и самому непонятно!
Я рассуждал так.
А какая разница  какой именно объект находиться в контейнере.
Если есть список Set MYWEAP to DLC02WeapGaussRifleWasteland || Weap10mmPistol ||
то любой объект из этого списка помещённый в контейнер запускает процесс ремонта
И почему то думал, что проверка
if AAARepairBox.GetItemCount MYWEAP == 1 допустим (пистолет)
не позволит начать процесс, если в контейнер положили что то другое.
Но если процесс начался, то в итоге будет удалён именно пистолет, и возвращён то же именно он.
AAARepairBox.AddItem MYWEAP 1
Наверное здесь ошибка. Я то знаю, что в контейнере пистолет. А вот программа знает ли это?
Гадание на кофейной гуще.
Пойду спрашивать к SpalnyVagon - вот сюда Вопросы по скриптам
Правда он надомной  там подсмеивается из-за моей безграмотности в скриптах! Как сенсей гнобит своего ученика, что бы нос не задирал.
Пока.

0

222

Я вообще даже не представлял, что возможна такая конструкция
Set MYWEAP to DLC02WeapGaussRifleWasteland || Weap10mmPistol || ; дальше весь список оружия
в блоке IF понятно, а в присваивании???

PS "/" - это делить, != это "не равно"

Отредактировано Gensher (16.06.11 10:34:36)

0

223

А тема ещё активна? Так или иначе всем привет. Но мне просто очень нужен скрипт. Цель скрипта такова, что после диалога ГГ не мог не чего делать (думаю скрипт DisablePlayerControls 1 0 0 0 0 0 0 подойдёт ) и  по истечении примерно 3 секунд (тут наверно нужен скрипт на таймер в котором я вообще не бум бум) у ГГ медленно становился чёрный экран и проигрывается какай ни будь анимация падения на пол от 1 лица и он телепортируется туда где маркер (который зарание поставлен конечно) и опять мог нормально всё видеть. Это возможно? И всё это надо как то вставить в окно Результирующего скрипта который исполняется в конце диалога.

Отредактировано Musstafar (20.06.11 16:03:32)

0

224

Musstafar написал(а):

А тема ещё активна?

Да.

Musstafar написал(а):

(думаю скрипт DisablePlayerControls 1 0 0 0 0 0 0 подойдёт )

Вполне, но можно и без цифр.

Musstafar написал(а):

тут наверно нужен скрипт на таймер

Да, именно.

Musstafar написал(а):

Это возможно?

Это есть даже в самой игре (F3 и F:NV). Так-то!

Musstafar написал(а):

всё это надо как то вставить в окно Результирующего скрипта

Таймер в резалтах не работает. Нужно создать обычный скрипт на каком-то объекте (вещь в инвентаре ГГ, комод рядом с местом телепортации и т.д.), а затем запустить его обработку через диалог. Делается все элементарно.

Для скрипта пригодятся:
- Имя игры (F3 или F:NV)
- Имя маркера, к которому мы перемещаем ГГ (Ref)

Я бы посоветовал добавить предмет со скриптом ГГ в карман, а после выполнения всех процедур убрать его.

0

225

Gensher,

Gensher написал(а):

Отсюда следует логичный вопрос - если в локации шкаф, а в нем уже предметы - они (эти предметы) в локации или нет?

Нет, вряд ли. Когда предмет попадает в шкаф, из списка предметов локации он удаляется.

Gensher написал(а):

Но с FOSE дел никогда не имел, как-то не очень хочется его использовать.

А без него кошерно (качественно) сделать вряд ли получится. Лучше поискать моды под F3 и F:NV с похожим функционалом. Я думаю, такое уже делали.

0

226

F:NV
А ключик подойдёт в качестве предмета?
ElRayKeyDoorMormFortREF (id ключа)
а ещё вопрос если напремер поставить маркер FFCaptiveMarker ( это когда НПС сидит со связными руками)

Открыть|Закрыть

http://s006.radikal.ru/i215/1106/20/77da3e866f23.jpg

то когда ГГ переместится то он будет сидеть со связанными руками как и НПС?
Если да то вот ID этого маркера -
FFCaptiveMarkerPlayerREF
Если нет то вот ID  XMarkerHeading маркера -
XMarkerHeadingPlayerREF

Отредактировано Musstafar (20.06.11 15:40:36)

0

227

Musstafar написал(а):

А ключик подойдёт в качестве предмета?

Да, должен. Скрипт не него повесить можно, значит подойдет.

Musstafar написал(а):

он будет сидеть со связанными руками как и НПС?

К сожалению, нет, не будет.

Код скрипта (сам не проверял):

Код:
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

0

228

скрипт работает прекрасно почти как нужно) Но Мне бы ещё анимацию падения (сойдёт даже анимация смерти) от 1 лица и что бы скрипт работал не после получения ключа а всё таки после диалога, было бы просто здорово, также нужно как то сделать что бы после как ГГ очнулся он не смог ещё секунд 5 не чего делать а только наблюдать (не обязательно секунд 5 думаю нужно просто убрать строчку EnablePlayerControls вообщем мне будет проще её самому дописать когда нужно будет)... Я так понимаю придётся заново переделать весь скрипт?

Отредактировано Musstafar (20.06.11 17:17:32)

0

229

Musstafar написал(а):

Я так понимаю придётся заново переделать весь скрипт?

Придется его доделывать. Ждите.

Musstafar написал(а):

что бы скрипт работал не после получения ключа а всё таки после диалога

Просто дайте ГГ ключ в конце диалога.

0

230

Musstafar написал(а):

что бы после как ГГ очнулся он не смог ещё секунд 5 не чего делать а только наблюдать (не обязательно секунд 5 думаю нужно просто убрать строчку EnablePlayerControls вообщем мне будет проще её самому дописать когда нужно будет)

окей?) И мне удобней и вам меньше работы

0

231

Доработанный код:

Код:
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

Проверяйте.

0

232

Супер!) а можно ещё как нибудь запретить ГГ переключатся с 1 лица на 3 а то падение от 3 лица выглядит не много забавно)

0

233

Musstafar, замените строку

Код:
DisablePlayerControls

на

Код:
DisablePlayerControls 1 1 1 1 0 1 1
K.A.I.N.48 написал(а):

Так что остаётся твой вариант с перечислением в блоках.

Что тоже "геморройное занятие". Ибо все равно все варианты не перебрать. Моды и DLC вносят свои коррективы.

0

234

Большое спасибо, всё работает как и было задумано.

0

235

Здравствуйте, на этот раз мне понадобилось сделать броню кое с каким скриптом. (броня заранее готова разумеется)
Скрипт должен заключаться на той основе что допустим броня легиона цезаря... Создана отдельная фракция (maksFaction - id этой отдельной фракции) это фракция атакует всё и вся кроме тех кто принадлежит этой фракции (maksFaction) или в  броне это фракции. Эту броню со скриптом и нужно сделать. Вроде такое уже есть в игре, вот тот же легион если я одену их броню то НКР начнёт по мне стрелять даже если я у них Кумир. Но как только я открыл скрипт брони цезаря он мне показался через чур сложным для меня (

Скрипт|Скрипт

scn CaesarsLegionFactionOutfitWarningScript

float fUpdatedNegNCR
float fUpdatedPosNCR

float fUpdatedNegCL
float fUpdatedPosCL

float fUpdatedNegBoS
float fUpdatedPosBoS

float fUpdatedNegGK
float fUpdatedPosGK

float fUpdatedNegPG
float fUpdatedPosPG

Begin 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 1

    set DisguiseFactionPulseQuest.fLegionNegReputation to GetReputation RepNVCaesarsLegion 0
    set DisguiseFactionPulseQuest.fLegionPosReputation to GetReputation RepNVCaesarsLegion 1

    set DisguiseFactionPulseQuest.fBoSNegReputation to GetReputation RepNVBrotherhood 0
    set DisguiseFactionPulseQuest.fBoSPosReputation to GetReputation RepNVBrotherhood 1

    set DisguiseFactionPulseQuest.fKhanNegReputation to GetReputation RepNVGreatKhans 0
    set DisguiseFactionPulseQuest.fKhanPosReputation to GetReputation RepNVGreatKhans 1

    set DisguiseFactionPulseQuest.fPowderNegReputation to GetReputation RepNVPowderGanger 0
    set DisguiseFactionPulseQuest.fPowderPosReputation to GetReputation RepNVPowderGanger 1

endif

if VFactionArmorTutorial == 0
    ShowMessage VFactionOutfitTutorial
    set VFactionArmorTutorial to 1
endif

ShowMessage 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.0

SetReputation RepNVCaesarsLegion 0 0.0
SetReputation RepNVCaesarsLegion 1 0.0

SetReputation RepNVBrotherhood 0 0.0
SetReputation RepNVBrotherhood 1 0.0

SetReputation RepNVGreatKhans 0 0.0
SetReputation RepNVGreatKhans 1 0.0

SetReputation RepNVPowderGanger 0 0.0
SetReputation RepNVPowderGanger 1 0.0

end

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.fNCRPosReputation

    set fUpdatedNegCL to GetReputation RepNVCaesarsLegion 0 + DisguiseFactionPulseQuest.fLegionNegReputation
    set fUpdatedPosCL to GetReputation RepNVCaesarsLegion 1 + DisguiseFactionPulseQuest.fLegionPosReputation

    set fUpdatedNegBoS to GetReputation RepNVBrotherhood 0 + DisguiseFactionPulseQuest.fBoSNegReputation
    set fUpdatedPosBoS to GetReputation RepNVBrotherhood 1 + DisguiseFactionPulseQuest.fBoSPosReputation

    set fUpdatedNegGK to GetReputation RepNVGreatKhans 0 + DisguiseFactionPulseQuest.fKhanNegReputation
    set fUpdatedPosGK to GetReputation RepNVGreatKhans 1 + DisguiseFactionPulseQuest.fKhanPosReputation

    set fUpdatedNegPG to GetReputation RepNVPowderGanger 0 + DisguiseFactionPulseQuest.fPowderNegReputation
    set fUpdatedPosPG to GetReputation RepNVPowderGanger 1 + DisguiseFactionPulseQuest.fPowderPosReputation

endif

;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 fUpdatedPosNCR

    SetReputation RepNVCaesarsLegion 0 fUpdatedNegCL
    SetReputation RepNVCaesarsLegion 1 fUpdatedPosCL

    SetReputation RepNVBrotherhood 0 fUpdatedNegBoS
    SetReputation RepNVBrotherhood 1 fUpdatedPosBoS

    SetReputation RepNVGreatKhans 0 fUpdatedNegGK
    SetReputation RepNVGreatKhans 1 fUpdatedPosGK

    SetReputation RepNVPowderGanger 0 fUpdatedNegPG
    SetReputation RepNVPowderGanger 1 fUpdatedPosPG
endif

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

Подозреваю что на основе этого скрипта можно сделать и мою бронь. Или есть есть какой нибудь на много меньше скрипт как то привязывающий броню к определённый фракции? Заранее спасибо

Отредактировано Musstafar (23.06.11 19:04:59)

0

236

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

Но здесь не учитывается репутация для разных фракций, нет сообщения "Вы одели броню Легиона" + еще нескольких вещей.
Есть лишь переключатель друг/враг и блокировка одевания брони на компаньонов.

0

237

Sergey_Ros написал(а):

Если вам нужно лишь сделать одну фракцию другом

Думаю да, этот скрипт мне подойдёт, спасибо.

0

238

Привет всем!

MuxauJl написал(а):

Проще всего сделать скрипт для мобов

Подскажите пожалуйста, а кто такие МОБЫ и как их создавать.
Мне нужно для мода организовать постоянные нападение врагов на пост охраны.
Я хотел создать в нужных местах местности - группы нападающих. До нужного времени отключить их (спрятать).
А затем после проверки расстояния до ГГ включить
Всех нападающих сделать с "респауном"
Но вот только не знаю, а где будет происходить респаун, в месте где поставил NPC или там где его убили!
Да и вообще не знаю, как лучше сделать.
1 Заставлять нападать повесив на одного NPC  из  нападающей группы скрипт с целью в блоке begin OnStartCombat IDОхранникa.( наверное в этом случае не нужна проверка на фракцию и её изменение на вражескую) и в нём перечислить всех членов группы нападения.
Или всё таки нужно быть во враждебных фракциях?
2 Или как обсуждалось на 1 странице темы использовать функцию PlaceAtMe и высыпать нападающих из небытия в указанные координаты.
3 Создать локацию с нападающими и при выполнении условия расстояния ГГ до охранника переносить нападающих на  маркеры.
И ещё, как лучше сделать таймер, для того что бы нападения шли как бы случайно.
Вот ГГ подходит до нужного расстояния к посту охраны, Условие расстояния в скрипте выполнено и враги из первой группы Enable,цель у них есть и они атакуют.
И вот в этом момент запускается таймер для второй группы и для третьей. Как сделать, в каком месте!
Понятие не имею!
Подскажите пожалуйста.

Отредактировано K.A.I.N.48 (26.06.11 12:51:22)

0

239

Привет всем!

K.A.I.N.48 написал(а):

Подскажите пожалуйста, а кто такие МОБЫ и как их создавать.

Узнал, что Mob - мобильные объекты, но всё равно не понял, а какая у них разница с существами из уровненных списков.

K.A.I.N.48 написал(а):

Мне нужно для мода организовать постоянные нападение врагов на пост охраны.

Это сделал используя скрипт предложенный MuxauJl для Deadellus - только цель для появления Xmarker.

K.A.I.N.48 написал(а):

наверное в этом случае не нужна проверка на фракцию и её изменение на вражескую

создал отдельную фракцию - враждебную ГГ и охране поста.

K.A.I.N.48 написал(а):

Вот ГГ подходит до нужного расстояния к посту охраны, Условие расстояния в скрипте выполнено и враги из первой группы Enable,цель у них есть и они атакуют.

Это сделал триггером и командой StartCombat Player - для первой группы нападающих (эта группа стоит в локации)
AAAKain188MercARef.StartCombat Player и так для остальных членов группы.
Но вот теперь новая проблема - вот эти NPC Ref копии - тех которые командой AAAKainXMarkerRef.PlaceAtMe AAAKain188MercA 1 5 0
(которые возникают после смерти первых - по скрипту MuxauJl) атакуют ГГ только если успели "увидеть" смерть одного из своих.
А вот если первую группу перебить быстро, пока не появился следующая. Они не атакуют.
Маркер стоит далеко! За домом.
А в скрипт MuxauJl не могу добавить строчку AAAKain188MercA.StartCombat Player - скрипт не сохраняеться.
Сохраняется только с AAAKain188MercARef.StartCombat Player ( но эти то уже убиты!)
Подскажите пожалуйста, как можно это решить.
Пока.

0

240

K.A.I.N.48 написал(а):

а какая у них разница с существами из уровненных списков.

Мобы = НПЦ. Неигровые персонажи, в общем. Вот тут подробнее: Моб (Википедия)

K.A.I.N.48 написал(а):

AAAKain188MercA.StartCombat Player - скрипт не сохраняеться.

Т.к. нельзя исполнить команду "StartCombat" на объекте, можно лишь на его Ref-копии.

K.A.I.N.48 написал(а):

Подскажите пожалуйста, как можно это решить.

Можно написать скрипт, заставляющий НПЦ атаковать ГГ и повесить его на всех НПЦ. Если они из уровневого списка, сделать это будет не сложно. В вашем случае лучше не использовать Ref'ы, потому что вы создаете повторяющееся событие, а не уникальное.

0


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas