![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2436
|
|
Level 4 ![]() ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Можно ли сделать так, чтобы нужную мне броню смог надеть любой перс, т. е. без всяких там ограничений на навыки?
|
![]()
Сообщение
#2437
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
конкретную броню - нет
|
![]()
Сообщение
#2438
|
|
Level 4 ![]() ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Vhall, а, вообще, броню?
Имеется телепорт, который ведет в другую локацию Мне хотелось бы, чтобы им можно было воспользоваться, только поговорив с одним NPC (типа, до диалога он не "используется" - не активен) Как сие сделать? |
![]()
Сообщение
#2439
|
|||
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Цитата(Vitalist @ Сегодня, 16:41) [snapback]71327[/snapback] Можно ли сделать так, чтобы нужную мне броню смог надеть любой перс, т. е. без всяких там ограничений на навыки? В принципе можно, но опять же это ковырять 2Да. Посомтри какие шмотки были в ПЛ. Там один плащ "Покровительства Селун" чего стоит. Таскать такую шмотку мона с 40 левела наверное. А в ПЛ может любой даже комманер. И тапорик +4 Ледяной Вампир, тоже... Посмотри свойства, из Айс редактировал. Там просто как магические св-ва добавляешь в предмет и вся цена сбрасывается на 0. Соотвесвенно и левел для использования. Цитата(Vitalist @ Сегодня, 20:32) [snapback]71350[/snapback] Имеется телепорт, который ведет в другую локацию Мне хотелось бы, чтобы им можно было воспользоваться, только поговорив с одним NPC (типа, до диалога он не "используется" - не активен) Как сие сделать? Насмешил (IMG:style_emoticons/kolobok_light/smile.gif)
|
||
![]()
Сообщение
#2440
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
2Vitalist
Смотря какие ограничения имеются в виду. Если уровень, то это проще простого - есть такие 2da, как сказал Айв, - iprp_<параметр_вещи>.2da. В каждой из них есть столбец Cost. Он в десятичной вычисляет требуемый уровень вещи (Value смотри не меняй). Если не уровень, а какой либо фит - смотри baseitems.2da, столбцы ReqFeat#. Но это относится не к конкретной вещи, а к параметрам (в первом случае) и ее типу (во втором). |
![]()
Сообщение
#2441
|
|
Level 10 ![]() ![]() ![]() Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Небольшой вопрос. Точнее, два.
1. Наверное, все видели в списке плейсов такой предмет - Круг Призыва. Но если его поставить на мапу, он не виден. В комментариях написано, что для того, чтобы его увидеть, его нужно активировать. Скорее всего, это выполняется с помощью функции EventActivateObject, но я никак не могу настроить эту функцию.. Никак не компилируется. Поясните пожалуйста, кто нибудь, за что отвечает каждый параметр, ибо в хэлпе не написано... 2. Как бы создать такой эффект, чтобы над определённым местом постоянно летали огненные черепушки (в НвН есть такое заклинание)? (IMG:style_emoticons/kolobok_light/bad.gif) |
![]()
Сообщение
#2442
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Цитата 2. Как бы создать такой эффект, чтобы над определённым местом постоянно летали огненные черепушки (в НвН есть такое заклинание)? Находишь в "Секретные объекты" "труп"(он невидимый) и накладываешь на него EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR). Цитата 1. Наверное, все видели в списке плейсов такой предмет - Круг Призыва. Неа, не видел (IMG:style_emoticons/kolobok_light/unknw.gif) |
![]()
Сообщение
#2443
|
|
Level 10 ![]() ![]() ![]() Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
-fenix-
Извини за наитупейший вопрос, но каким образом можно наложить на предмет такой эффект? На хартбит, что ли? |
![]()
Сообщение
#2444
|
|||||
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Цитата каким образом можно наложить на предмет такой эффект? На хартбит, что ли? Не на предмет, а на плейс! Можешь вот так на хертбит.
Ну а можешь откуда угодно наложить эффект с помощью
Только тогда вместо OBJECT_SELF укажи объект на который накладывается эффект. А что там с кругом призыва, уже разобрался? Мож ты портал какой так обозвал, я че та не помню такого? (IMG:style_emoticons/kolobok_light/unknw.gif) Сообщение отредактировал -fenix- - Mar 4 2006, 02:26 |
||||
![]()
Сообщение
#2445
|
|
Level 10 ![]() ![]() ![]() Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
Спасибо большущее.
А круг призыва - это такая бошльшая пентограмма, которую, можно расположить на земле. Расположен в группе "визуальные эффекты". |
![]()
Сообщение
#2446
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
А..., усе, вспомнил. (IMG:style_emoticons/kolobok_light/smile.gif)
1)Снимаешь галку "статик". 2)Ставешь первичное состояние "деактивировано". 3) Включаешь/отключаешь анимацию с помощью функции NSS // Cause the action subject to play an animation // - nAnimation: ANIMATION_* // - fSpeed: Speed of the animation // - fDurationSeconds: Duration of the animation (this is not used for Fire and // Forget animations) void ActionPlayAnimation(int nAnimation, float fSpeed=1.0, float fDurationSeconds=0.0) QUOTE Скорее всего, это выполняется с помощью функции EventActivateObject, но я никак не могу настроить эту функцию.. Никак не компилируется. Откуда ты вообще это взял? |
![]()
Сообщение
#2447
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
Доброго всем времени суток.
У меня на повестке вопрос. Ситуация: чар набрал опыта для левел апа. Мне надо сделать так, что бы ему больше не давалась экспа, пока он не сделает ап. Что и де мне надо написать? Заранее спасибо. |
![]()
Сообщение
#2448
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Dana, тебе надо в скрипте обработки опыта создать формулу, по которой проверять опыт персонажа. Если он равен следующему уровню, то не давать опыт вообще. Например, персонаж поднялся до 3-го уровня, берем формулу:
((((Уровень + 1) * Уровень) / 2 * 1000) - 1) и подставляем в нее текущий уровень персонажа. В расчете у нас получится цифра 2999. Далее делаем условие: NSS if (GetXP(oPlayer) > ((((nLevel + 1) * nLevel) / 2 * 1000) - 1))
{ SetXP(oPlayer, (((nLevel + 1) * nLevel) / 2 * 1000) - 1); } |
![]()
Сообщение
#2449
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
QUOTE(Zirrex @ Mar 5 2006, 03:08) [snapback]71718[/snapback] Dana, тебе надо в скрипте обработки опыта создать формулу, по которой проверять опыт персонажа. Спасибо. А где именно написать? на OnDeath мобов? если да, то как быть с другими участниками пати? Похожий скрипт я видела на Амене (IMG:style_emoticons/kolobok_light/smile.gif) там кааааак раз Зирекс заправляет )) |
![]()
Сообщение
#2450
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Dana, да, именно там. Опыт распределяется по всей партии! У кого опыт выше уровня, те опыт получат, а у кого он равен 2999, то не получат. На Амене выводится сообщение, дескать, вы достигли предела, обратитесь к мастеру тренировки.
З.Ы. Так это я и есть (IMG:style_emoticons/kolobok_light/wink3.gif) |
![]()
Сообщение
#2451
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
Продолжаем разбор: =)
Написанное мной на OnDeath: NSS #include "NW_I0_GENERIC" void main() { object oKiller = GetLastKiller(); int nLevel = GetCharacterLevel(oKiller); if (GetXP(oKiller) > ((((nLevel + 1) * nLevel) / 2 * 1000) - 1)) { SetXP(oKiller, (((nLevel + 1) * nLevel) / 2 * 1000) - 1); SendMessageToPC(oKiller, "Your must LEVEL UP!!!"); } else { ExecuteScript("nw_c2_default7", OBJECT_SELF); } } Для мобов есть стандартная функция - "nw_c2_default7" NSS #include "x2_inc_compon" #include "x0_i0_spawncond" void main() { int nClass = GetLevelByClass(CLASS_TYPE_COMMONER); int nAlign = GetAlignmentGoodEvil(OBJECT_SELF); object oKiller = GetLastKiller(); // If we're a good/neutral commoner, // adjust the killer's alignment evil if(nClass > 0 && (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_NEUTRAL)) { AdjustAlignment(oKiller, ALIGNMENT_EVIL, 5); } // Call to allies to let them know we're dead SpeakString("NW_I_AM_DEAD", TALKVOLUME_SILENT_TALK); //Shout Attack my target, only works with the On Spawn In setup SpeakString("NW_ATTACK_MY_TARGET", TALKVOLUME_SILENT_TALK); // NOTE: the OnDeath user-defined event does not // trigger reliably and should probably be removed if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1007)); } craft_drop_items(oKiller); } Ничего не пойму (IMG:style_emoticons/kolobok_light/sad.gif) Вроде бы все работает. Сообщение о поднятии уровня появляется, но...опыт продолжает даваться. При наступлении следующего OnDeath опыт опять приходит в норму (т.е. -1 до след. апа), а затем опять дается. Млин! (IMG:style_emoticons/kolobok_light/sad.gif) 1) прошу объяснить что не так 2) прошу исправить 3) либо... уважаемый Zirrex выложит версию исправленную и дополненную...(вариант: свою с Амена)... (IMG:style_emoticons/kolobok_light/angel.gif) 4) может я что не так поняла, но опыт-то проверяется только у "object oKiller = GetLastKiller();"? и коим образом тут остальные участники пати? Aiwan: Дана, у нас есть специальный BBкод который вставляется нажатием на букву N [nss]. Это как раз код для скриптов НВН. Добро пожаловать. (IMG:style_emoticons/kolobok_light/biggrin.gif) Сообщение отредактировал Aiwan - Mar 5 2006, 22:13 |
![]()
Сообщение
#2452
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Dana, а, стоп, в данном случае опыт будет даваться только тому, кто убил это существо. Для распределения опыта по партии, нужен скрипт иного профиля. Я так написал, потому что не знаю, как у тебя работает скрипт в самом модуле. Может быть уже есть система распределения опыта (IMG:style_emoticons/kolobok_light/smile.gif)
Не надо ExecuteScript делать, лучше уж так: NSS #include "x0_i0_spawncond" void main() { object oKiller = GetLastKiller(); int nLevel = GetHitDice(oKiller); if (GetXP(oKiller) > ((((nLevel + 1) * nLevel) / 2 * 1000) - 1)) { SetXP(oKiller, (((nLevel + 1) * nLevel) / 2 * 1000) - 1); SendMessageToPC(oKiller, "Your must LEVEL UP!!!"); } else { // Это лишь для примера, по-настоящему нужна система распределения опыта, и желательно своя, а не стандартная SendMessageToPC(oKiller, "О боги, меня наградили"); SetXP(oKiller, 100); } if (GetSpawnInCondition(NW_FLAG_DEATH_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1007)); } } Остальное из скрипта "nw_c2_default7", я выкинул, потому что лишнее, и подходит больше для одиночной игры, чем для сетевого модуля. Тем более понижать мировоззрение за убийство фракции Commoner - это гм... не очень весело (IMG:style_emoticons/kolobok_light/smile.gif) Что это - GetCharacterLevel? Есть функция - int GetHitDice(object oCreature) Да, и не забудь поставить в модульных настройках опцию "XP Scale" в 0, если ты используешь свою систему распределения опыта. Пока она у тебя будет стоять не в 0, то скрипт выдачи опыта на действии "OnDeath" монстра работать будет не совсем верно. Он тебя ограничивает по опыту, а стандартный скрипт игры выдает опыт, минуя это условие. |
![]()
Сообщение
#2453
|
|
Level 10 ![]() ![]() ![]() Класс: Мастер Оружия Характер: Lawful Good Раса: Человек ![]() |
-fenix-
Спасибо. Скоро проверю. По поводу EventActivate - там было написано, что этот объект надо активировать, вот я и подумал на него... |
![]()
Сообщение
#2454
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
продолжим:
Допустим у меня система распределения опыта - всем поровну. в представленном коде OnDeath моба, как я понимаю, происходит проверка ТОЛЬКО его oKillera. NSS if (GetXP(oKiller) > ((((nLevel + 1) * nLevel) / 2 * 1000) - 1)) { SetXP(oKiller, (((nLevel + 1) * nLevel) / 2 * 1000) - 1); SendMessageToPC(oKiller, "Your must LEVEL UP!!!"); } следовательно надо сделать это для каждого участников пати? иначе получается, можно просто поставить чарf рядом, самому уйти спать, а в это врtмя будет идти прокач. Так? |
![]()
Сообщение
#2455
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Можно проверить кто убил. Если я уловил нить вопроса (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif)
NSS if (GetXP(oKiller) > ((((nLevel + 1) * nLevel) / 2 * 1000) - 1))
{ if(GetIsPC(oKiller) { SetXP(oKiller, (((nLevel + 1) * nLevel) / 2 * 1000) - 1); SendMessageToPC(oKiller, "Your must LEVEL UP!!!"); } } |
![]()
Сообщение
#2456
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
Aiwan, не, не уловил. (IMG:style_emoticons/kolobok_light/pardon.gif)
Dana, кусок прямо из Lexicon'a(с легким тюнингом): NSS // Get the first PC party member
object oPartyMember = GetFirstFactionMember(oKiller, TRUE); // We stop when there are no more valid PC's in the party. while(GetIsObjectValid(oPartyMember) == TRUE) { // Do something to party member if (GetXP(oPartyMember) > ((((nLevel + 1) * nLevel) * 500) - 1)) { SetXP(oPartyMember, (((nLevel + 1) * nLevel) * 500) - 1); SendMessageToPC(oPartyMember, "Your must LEVEL UP!!!"); } // Get the next PC member of oPC's faction. // If we put anything but oPC into this, it may be a totally // unreliable loop! oPartyMember = GetNextFactionMember(oKiller, TRUE); } |
![]()
Сообщение
#2457
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
dumbo, интересно, а можно еще больше эту формулу упростить? В принципе, я видел, что деление на 2, а потом умножение на 1000, лишнее, но оставил так.
Dana, я же тебе дал ссылку в ICQ. Подобный код, который написал dumbo, можно вставить внутрь такой системы распределения опыта. В скрипте "nw_c2_default7" лишь добавится: NSS ExecuteScript("xp_system", oKiller); Сама же система полностью разбирается в скрипте "xp_system". Посмотри эту систему. |
![]()
Сообщение
#2458
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
Продолжим извечные «что» да «как». На повестке 2 вопроса.
1)ситуация. Как мне сделать проверку, находится ли в данной локации хотя бы один PC? 2)Посмотрите и исправьте если это требуется мой код (прыжок к лидеру). Это кольцо с уникальной силой для себя. На OnActvateItem модуля. Еще идет проверка на то, у кого находится кольцо. То есть у другого игрока оно не должно работать. (если выпадет в луте) NSS void main()
{ object oItem = GetItemActivated(); string sTag = GetTag(oItem ); object oPC = GetItemActivator(); object oLeader = GetFactionLeader(oPC); location locTarget = GetLocation(oPC); string sPlayerName = GetPCPlayerName(oPC); //CALL_LEADER - is a tag of teleport ring with unique power for himself if (( sTag == "CALL_LEADER" ) && (sPlayerName == "vasya pupkin")) { if(GetIsObjectValid(oLeader) == TRUE && oLeader != oPC) { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), locTarget); ActionWait(2.0); ActionJumpToObject(oLeader); } } } |
![]()
Сообщение
#2459
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. Тут надо бы больше параметров. Например когда проверяем? При входе, выходе, триггер... Это просто.
2. В чем проблема? Вопрос от меня. Что делашь? Шард? Можно перебрать всех в локации, а можно посмотреть как делает биовар. NSS object GetNearestPC(object oTarget=OBJECT_SELF)
{ object oNearestPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, oTarget); string sPCName = GetName(oNearestPC); return oNearestPC; } |
![]()
Сообщение
#2460
|
|
Level 2 ![]() Класс: Друид Характер: Lawful Neutral Раса: Полуэльф ![]() |
1) проверка, когда выходит PC из локации. на OnExit наверно
2) вроде как разобралась. Надо было через AssignCommand() делать 3) да, шард. По мирам Ю.Никитина. Скриптер пока тока я, да и то начинающий (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 23rd July 2025 - 03:55 |