![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#201
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Подскажите, пожалуйста, как можно сделать так, чтобы мертвый НПС лежал не в дефолтовой скрюченной позе, а в положении лежа на спине? Пытаюсь делать так:
Код object oPC = GetFirstEnteringPC(); //Здесь непись еще живой object oNPC = GetNearestObjectByTag("DEAD_NPC",oPC); // убиваем его effect eF1 = EffectDeath(); ApplyEffectToObject( DURATION_TYPE_INSTANT,eF1, oNPC); // потом пытаемся перевернуть на спину - и не выходит PlayCustomAnimation(oNPC, "proneB",TRUE, 1.f); Есть альтернативный вариант - втихую оставить его живым, но симитировать смерть. Код // делаем так, чтобы живой НПС совсем не шевелился effect eF3 = EffectPetrify(); ApplyEffectToObject( DURATION_TYPE_INSTANT,eF3, oNPC); // переворачиваем на спину - работает PlayCustomAnimation(oNPC "proneB", TRUE, 1.f); Второй вариант выглядит замечательно, пока не навести на НПС курсор - он показывает, что клиент жив! Млжно ли как-то обмануть курсор в этом случае? Сообщение отредактировал Zmeika - Jun 12 2008, 17:00 |
![]()
Сообщение
#202
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Zmeika, попробуй поэкспериментировать со свойствами NPC, такими как Non permanent death и Lootable corpse. Попробуй выставить второе свойство в true и после применения анимации нанести ему смертельные повреждения.
Лично я бы просто добавил к имени этого НПСа приставку "МЕРТВЫЙ" и успокоился бы. Imho, и так все хорошо, совершенства не бывает. |
![]()
Сообщение
#203
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Lorendroll, спасибо. После долгих экспериментов с трупами мне все же удалось добиться нужного результата. (IMG:style_emoticons/kolobok_light/smile.gif) Нужно делать так:
Код // Создаем эффект смерти. Внимание - важно, чтобы последний параметр был false! effect eDeath = EffectDeath(FALSE, FALSE,TRUE, FALSE); // Создаем эффект неподвижности effect ePetrify = EffectPetrify(); PlayCustomAnimation(oNPC, "proneB",TRUE, 1.f); ApplyEffectToObject(DURATION_TYPE_INSTANT, ePetrify, oNPC); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oNPC); Т.е. перед смертью нужно применить неподвижность, и эффект смерти должен быть соответствующе настроен. Но это еще не все. Надо удалить у NPC скрипты, которые выполняются по дефолту на различные события. Разумеется не все, но какие именно я пока сама не знаю. Какой-то из них все портит. on Conversation или on Spawn In точно можно оставить. Только при соблюдении всех этих условий тушка после смерти остается в нужной позе. (IMG:style_emoticons/kolobok_light/rolleyes.gif) |
![]()
Сообщение
#204
|
|
Level 3 ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
Как можно создавать или менять переменную типа location? Знаю, как ее получить из уже существующего объекта. Но мне надо создать новый объект (существо) на некотором расстоянии от игрока и по событию, которое может спровоцировать сам игрок в любой момент времени (например - вызвать джина из бутылки).
Т.е. locаtion игрока - я определить могу. Но затем мне нужно ее поменять каким-то образом, чтобы нужная тварюка появилась на некотором расстоянии от игрока. Вопрос - как это сделать? Update: Сорри, вопрос снимается - узнала, что есть такой метод Location(....) Сообщение отредактировал Zmeika - Jun 27 2008, 12:45 |
![]()
Сообщение
#205
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Никто случайно не разобрался как превратить игрока в виспа? (наложить на него fx эффект)
Сообщение отредактировал Lorendroll - Jul 27 2008, 12:01 |
![]()
Сообщение
#206
|
|
Level 9 ![]() Класс: Вор Характер: Chaotic Good Раса: Эльф МАСТЕР Переводов ![]() |
Пытаюсь написать скрипт, который должен сработать из диалога, но при этом работать еще и в том случае, если перс прекратил этот самый диалог и отошел от собеседника. Получается вот что:
Neverwinter Script void main(); { object oPC = GetPCSpeaker(); ClearAllActions(); ActionPlayAnimation(ANIMATION_LOOPING_DANCE02, 1.0, 4,0); ActionPlayAnimation(ANIMATION_LOOPING_DANCE03, 1.0, 4.0); ActionPlayAnimation(ANIMATION_LOOPING_DANCE02, 1.0, 4.0); ActionPlayAnimation(ANIMATION_FIREFORGET_BOW); } Не срабатывает. При компиляции выдает какой-то бред - название, путь сохранения и неизвестно что еще. Причем, непонятно, на какую строчку плюется и где непосредственно ошибка... Подскажите, плз, что с этим делать... (IMG:style_emoticons/kolobok_light/sad.gif) |
![]()
Сообщение
#207
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
shadowdweller, я в свое время делал различные эффекты, которые нельзя было бы снять простым действием, и вот что получилось. Можешь отсюда использовать скрипт танца:
Neverwinter Script // Персонаж танцует void ChatDance(object oPC, int n, float fTime); void main() { object oPC = GetPCSpeaker(); object oTarget = GetItemActivatedTarget(); int nDialogLine = GetLocalInt(oPC, "DIALOGSTMLINE"); int nAnimation; float fTime = 999999.0; SetCommandable(TRUE, oTarget); AssignCommand(oTarget, ClearAllActions()); SetLocalInt(oTarget, "DIALOGSTMLINE", nDialogLine); switch (nDialogLine) { case 1: nAnimation = ANIMATION_LOOPING_SIT_CROSS; break; // Сесть case 2: nAnimation = ANIMATION_LOOPING_MEDITATE; break; // Медитация case 3: nAnimation = ANIMATION_LOOPING_WORSHIP; break; // Молитва case 4: nAnimation = ANIMATION_LOOPING_DEAD_BACK; break; // Упасть назад case 5: nAnimation = ANIMATION_LOOPING_DEAD_FRONT; break; // Упасть вперед case 6: nAnimation = ANIMATION_LOOPING_SPASM; break; // Спазм case 7: ChatDance(oTarget, 1, fTime); break; // Танец } DeleteLocalInt(oPC, "DIALOGSTMLINE"); DelayCommand(0.2, SetCommandable(FALSE, oTarget)); // убери эту строчку, если нужно, чтобы эффект был снимаемым if (nDialogLine < 7) { DelayCommand(0.1, AssignCommand(oTarget, ActionPlayAnimation(nAnimation, 1.0, fTime))); } else if (nDialogLine == 8) // Парализация { effect eDur = EffectVisualEffect(VFX_DUR_PARALYZED); effect eLink = EffectLinkEffects(eDur, EffectCutsceneParalyze()); DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eLink), oTarget))); } else if (nDialogLine == 9) // Ошеломление { effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATE D); effect eLink = EffectLinkEffects(eMind, EffectStunned()); DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eLink), oTarget))); } else if (nDialogLine == 10) // Окаменение { DelayCommand(0.1, AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectPetrify()), oTarget))); } DelayCommand(fTime, SetCommandable(TRUE, oTarget)); // убери эту строчку, если нужно, чтобы эффект был снимаемым } void ChatDance(object oPC, int n, float fTime) { int nDialogLine = GetLocalInt(oPC, "DIALOGSTMLINE"); if (IntToFloat(n) < fTime && nDialogLine == 7) { object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); AssignCommand(oPC, ActionUnequipItem(oRightHand)); AssignCommand(oPC, ActionUnequipItem(oLeftHand)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0)); AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC ))); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN G, 2.0, 2.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3,2.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 3.0, 1.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_FORCEFU L,1.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0)); AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC ))); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_TALK_LAUGHIN G, 2.0, 2.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1,1.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY3,2.0)); AssignCommand(oPC, ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC ))); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID, 3.0, 1.0)); AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY2,1.0)); AssignCommand(oPC, ActionDoCommand(ActionEquipItem(oLeftHand,INVENTOR Y_SLOT_LEFTHAND))); AssignCommand(oPC, ActionDoCommand(ActionEquipItem(oRightHand,INVENTO RY_SLOT_RIGHTHAND))); n++; DelayCommand(20.0, ChatDance(oPC, n, fTime)); } } Чтобы скрипт заработал, необходимо вначале на использующего диалог, предмет и т.п. наложить переменную: Neverwinter Script void main() { SetLocalInt(GetPCSpeaker(), "DIALOGSTMLINE", 1); } Так как у меня эффектов 10, то я использовал 10 мелких скриптов. Можно сделать иначе, но я не стал возиться, чтобы укоротить количество скриптов. |
![]()
Сообщение
#208
|
|
Level 6 ![]() ![]() Класс: Варвар Характер: Chaotic Good Раса: Полуорк ![]() |
Дело такое:
Есть необходимость иметь глобальную переменную. Нужно, чтобы эта переменная, в зависимости от действий производимых персонажем, менялась и сохранялась поверх себя, чтобы с уже новым значением скрипты могли взаимодействовать дальше. В принципе я себе представляю как это сделать, но запоролся в самом начале, видимо что-то с синтаксисом напутал. Вобщем, не могу вызвать глобальную переменную. Перед этим эту переменную я прописал в свойствах модуля. Если не ошибаюсь вызывается она в скриптах при помощи GetGlobalInt()(сейчас тула под рукой нет, точно не вспомню чего я там вчера ваял), но при компиляции тул ругается на эту строчку, так как я очевидно задаю неверные параметры. Вобщем сама просьба такова - привидите пожалуйста какой-нибудь пример с назначением и последующим вызовом глобальных переменных, разжовывать не надо, сам расковыряю, лишь бы пример рабочий был. Буду очень признателен. |
![]()
Сообщение
#209
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
KoYuKi, чтобы при компиляции выдавал не какой нибудь бред а реальную ошибку - поставь английский Dialog.tlk и перезапусти тулсет. Иногда скрипты даже не компилируются из за русского диалог.тлк. А уж если русские буквы в код попадут то и весь тулсет бывает падает. Перезапустишь - напиши что за ошибка компиляции выдается.
А SetGlobalInt'ом, кстати, за всю свою нвн-программерскую деятельность мне пользоваться не приходилось. Кстати, почему бы не сохранить эту глобальную переменную на самом персонаже - SetLocalInt(oPC, sIntName, N)? |
![]()
Сообщение
#210
|
|
Level 6 ![]() ![]() Класс: Варвар Характер: Chaotic Good Раса: Полуорк ![]() |
Цитата KoYuKi, чтобы при компиляции выдавал не какой нибудь бред а реальную ошибку - поставь английский Dialog.tlk и перезапусти тулсет. Иногда скрипты даже не компилируются из за русского диалог.тлк. А уж если русские буквы в код попадут то и весь тулсет бывает падает. Перезапустишь - напиши что за ошибка компиляции выдается. NWN у меня английский, так что мне там вполне конкретную ошибку компилятор выдал, я сейчас просто не помню какую, с работы пишу. Цитата А SetGlobalInt'ом, кстати, за всю свою нвн-программерскую деятельность мне пользоваться не приходилось. Кстати, почему бы не сохранить эту глобальную переменную на самом персонаже - SetLocalInt(oPC, sIntName, N)? Lorendroll, этот вариант мне плохо представляется, вероятно в связи с маленьким багажом знаний. То есть я сохраняю на игроке локальную переменную. Он ходит, взаимодействует с предметами, в связи с чем эта локалка меняется и сохраняется на игроке. Но возможно ли мне при таком подходе сделать так, чтобы значение переменной уменьшалось без каких либо взаимодействий, просто по прошествии времени? Если не трудно приведи какой-нибудь пример, буду признателен. |
![]()
Сообщение
#211
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
KoYuKi, да меняй ее откуда хочешь, из любого скрипта вызывай функцию SetLocalInt (oPC, sIntName, N) где object oPC = GetFirstPC(); (первый попавшийся PC, ведь ты делаешь сингл?), string sIntName = "имя твоей переменной"; int N = "значение переменной". Это в точности также как и с GlobalInt только Local в отличие от нее надо где то хранить, на каком то объекте. Откуда надо, оттуда и меняй эту переменную. Например как только игрок дергает за рычаг поставь на действии SetLocalInt(oPC, sIntName, GetLocalInt(oPC, sIntName)+N); где N - то значение которое ты хочешь прибавить к старому значению переменной.
Чтобы переменная уменьшалась или увеличивалась, или еще как-нибудь изменялась со временем, нужно написать таймер который будет, опять таки, работать либо на PC, либо еще где-то. Это сложнее. Для этого нужно зациклить скрипт таймера, не помню точно название функции запуска скрипта, кажется ExecuteScript. Скрипт таймера надо запускать раз, допустим, в 6 секунд (игровой раунд) с помощью функции DelayCommand, и вызывать снова этот делэй-команд по окончании работы скрипта-таймера. В скрипте-таймере же нужно написать то что будет происходить каждые 6 секунд. Я так подозреваю, какая-то проверка. Например проверка того, не прошло ли еще 10 минут, или 60 раундов. Для этого нужно в таймер поставить счетчик раундов или проверку текущего времени... Отдельная песня... Я напишу, если не забуду, пример когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр. Сообщение отредактировал Lorendroll - Aug 8 2008, 12:08 |
![]()
Сообщение
#212
|
|
Level 6 ![]() ![]() Класс: Варвар Характер: Chaotic Good Раса: Полуорк ![]() |
Lorendroll спасибо большое, теперь все ясно =) Прийду домой, буду пробовать.
Цитата Я напишу, если не забуду, пример, когда приеду домой и включу невер, у меня полно таймеров в модуле для расчета голода, погоды и пр. Обязательно гляну, если напишешь, пример бы не помешал. |
![]()
Сообщение
#213
|
|
Level 9 ![]() ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Эльф ![]() |
Этот скрипт надо вызвать командой ExecuteScript("this_script", oPC) из любого другого. object oPC = GetFirstPC() к примеру.
Neverwinter Script void main()
{ int iTime = 10; /*Количество раундов перед тем как переменная изменится*/ int iTimer = GetLocalInt (OBJECT_SELF, "TIMER"); /*Смотрим сколько раундов уже прошло*/ SetLocalInt (OBJECT_SELF, "TIMER", iTimer+1); /*Прибавляем к таймеру единичку*/ if (iTimer+1 >= iTime) /*Проверяем не прошло ли уже достаточно времени*/ { FloatingTextStringOnCreature("Something happened!", OBJECT_SELF); /*Если условие выполнено то пишем что произошло (сообщаем игроку если надо)*/ SetLocalInt (OBJECT_SELF, "INTEGER", GetLocalInt(OBJECT_SELF, "INTEGER")+1); /*Выставляем нужную переменную, или увеличиваем ее значение на 1 или еще что угодно. Еще полезно тут же написать второе условие при котором останавливать таймер после того как он становится ненужным, с помощью команды "return;"*/ SetLocalInt (OBJECT_SELF, "TIMER", 0); /*обнуляем таймер*/ } DelayCommand(6.0, ExecuteScript("this_script", OBJECT_SELF)); /*Перезапускаем скрипт через 6 секунд. */ } Сообщение отредактировал Lorendroll - Aug 9 2008, 14:58 |
![]()
Сообщение
#214
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек ![]() |
Вот в кои-то веки не обошелся своими силами...
Значит, существует триггер, описанный около блупринта травы, являющегося по факту "Tree". По факту триггер является трапом, процовоцирующим АОЕ спелл. Т.к. с "Tree" спеллы не пускаются, должен создаться другой блупринт, желательно невидимый. Вариантов решения 3: 1) ActionCastSpellAtObject - не подходит, нормальный кастер лвл он имеет только с криче блупринта, а со скриптхидден кричи не запускается. В ином случае кастер лвл = 0. 2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком. 3) TriggerProjectileTrap - не удалось заставить работать. Делал путем задания правельного тэга запускающему блупринту. Опять же работает только с кричи. Разницы между моей версией и скриптом проджектил эрроу трапов из ОС нет практически, но мой скрипт не работает... Именно проджектил эрроу пока не делал... |
![]()
Сообщение
#215
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
2) Эмулировать заклинание собственным псевдо эффектом. АОЕ эффект почему-то мгновенно уничтожается, даже не появившись толком. В Nwn2 AOE-объекты можно создавать только скриптом с существа. Иначе AOE-объект запускает скрипты OnEnter и OnExit для всех попавших в него существ и сразу исчезает. Пример. Вот такой скрипт, висящий на каком-нибудь рычаге или триггере, заработает криво (как описано выше). Neverwinter Script void main() А вот так — нормально:{ effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC()); } Neverwinter Script void func()
{ effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eEff, GetFirstPC()); } void main() { object oCreature = GetFirstPC(); AssignCommand(oCreature, func()); } |
![]()
Сообщение
#216
|
|
Level 2 ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек ![]() |
Тогда это актуально для всех 3 пунктов. То есть то, что я хочу сделать - вообще в принципе нереализуемо... Спасибо.
Можно попробовать сделать это с катсцен инвизибилити... Хотя не стоит, слишком много там будет лишних объектов, лучше другое что-нибудь сделать. С диспеллом, как я понял, нечто похожее. Ну это хотя бы можно без проблем эмулировать... Хотя стоп, я же не делаю ActionCastSpellAtLocation, можно и с игрока... Но скрипт этот для PW, к слову. Тогда еще не все потеряно. Кстати, в случае выше АОЕ эффект будет бегать вместе с игроком, LOL. Neverwinter Script void func(location lTarget) { effect eEff = EffectAreaOfEffect(AOE_PER_CUSTOM_AOE, "OnEnter", "OnHeartbeat", "OnExit", "tag"); DelayCommand *проджектил анимация* DelayCommand *ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eEff, GetFirstPC());* - кхм, жгу, xD. } void main() { object oCreature = GetFirstPC(); location lTarget = GetLocation (oCreature); AssignCommand(oCreature, func(lTarget)); } В общем, никак не получится. Блин, туплю... А также не могу редактировать посты... Наверное, их мало... В общем, не нужна тут проджектил анимация и т.д. Вполне реально сделать. |
![]()
Сообщение
#217
|
|
Level 2 ![]() Класс: Рейнджер Характер: True Neutral Раса: Эльф ![]() |
Есть ли способ намертво прицепить одну модельку к другой - например чтоб над плечем игрока летала фигурка демилича (череп)
|
![]()
Сообщение
#218
|
|
Level 4 ![]() Класс: Обыватель Характер: True Neutral Раса: Человек NWN2: Маппинг ![]() |
DarkPhoenix, это вполне реально, но практически не относится к скриптингу. Делается через кастомный vfx.
Посмотри вот этот хак и сделай по аналогии: http://nwvault.ign.com/View.php?view=NWN2V...etail&id=37 |
![]()
Сообщение
#219
|
|
Level 2 ![]() Класс: Рейнджер Характер: True Neutral Раса: Эльф ![]() |
Спасибо! А каких нибудь гидов по этому не знаеш?
|
![]()
Сообщение
#220
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Очень интересует вопрос - как вернуть Школу магии, на которой специализируется волшебник? Есть мнение, что оная может храниться в локальных переменных персонажа...
|
![]()
Сообщение
#221
|
|
Отверженный ![]() ![]() ![]() ![]() Класс: Теневой Танцор Характер: Neutral Good Раса: Баатезу ![]() |
да
в файле *.bic (персонажа) есть переменная School типа byte (которая находится в ветке ClassList) значения переменной: Цитата 0: General 1: Abjuration 2: Conjuration 3: Divination 4: Enchantment 5: Evocation 6: Illusion 7: Necromancy 8: Transmutation а вот как попасть в этот файл персонажа через скрипты - это уже не ко мне (IMG:style_emoticons/kolobok_light/wacko.gif) Сообщение отредактировал virus_found - Dec 23 2008, 01:06 |
![]()
Сообщение
#222
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Спасибо!
Вопрос логически продолжается: кто знает - как добыть эту школу из файла персонажа через скрипты? ^_^ |
![]()
Сообщение
#223
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Сингл или шард? Если сингл, то никак, если шард, то можно, но сложно.
|
![]()
Сообщение
#224
|
|
Level 2 ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как?
|
![]()
Сообщение
#225
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Вообще, желательно, сингле... А почему нельзя? Вернее, почему можно на шарде? И как? Потому что в сингле доступны только стандартные функции НВН, которыми нельзя получить школу магии. На шардах же возможно использование NWNX с плагином NWNX-Leto, который позволяет редактировать файлы персонажей.
|
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 03:15 |