![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2261
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
gennady
QUOTE DestroyObject(oByTag); // удалим триггер ИМХО, стоит ввести небольшую задержку в 0.3, 0.5 - вдруг триггер удалится раньше. (IMG:style_emoticons/kolobok_light/smile.gif) Nashman Если не ошибаюсь, то стандартными средствами игроку никак нельзя получить иммунитет к замедлению, т.е его можно только наложить на игрока, соответственно можно удалить, например так: NSS void RemoveEffectImmunity(object oCreature){ effect eEffect = GetFirstEffect(oCreature); while (GetEffectType(eEffect) == EFFECT_TYPE_IMMUNITY){ eEffect = GetNextEffect(oCreature); if (GetIsEffectValid(eEffect)){ RemoveEffect(oCreature, eEffect);}}} PS: код ставь перед основной фун-цией. (void main() ), заместо oCreature ставь игрока. Сообщение отредактировал Dik Morris - May 16 2006, 18:14 |
![]()
Сообщение
#2262
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Nashman @ May 16 2006, 20:06) [snapback]81970[/snapback] Как убрать имунитет к замедлению? Если он есть Вот тебе функция. Узнай есть ли на нем такой эффект и убери. Уберешь так: NSS RemoveTypeEffect(oPC, EFFECT_TYPE_SLOW); NSS // УДАЛЯЕМ ВЫБРАННЫЙ ТИП ЕФФЕКТОВ iType(EFFECT_TYPE_ ) НА ОБЪЕКТЕ oCreature void RemoveTypeEffect(object oCreature, int iType); void RemoveTypeEffect(object oCreature, int iType) { effect eEffect = GetFirstEffect(oCreature); while(GetIsEffectValid(eEffect)) { if (GetEffectType(eEffect) == iType) { RemoveEffect(oCreature, eEffect); } eEffect = GetNextEffect(oCreature); } } Блин я не совсем вкурил вопрос, но думаю ты разберешься с кодом. Тебе ИММУН надо... |
![]()
Сообщение
#2263
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
нееее... Айв, речь совсем не о том.
Вот, нашел в закромах NSS //******************************************************************************
// inc_effects // Effects Library // Lex, -=WRG!=- Team 2004 //****************************************************************************** // удаление всех эффектор по длительности (DURATION_TYPE) void E_DeleteEffectsByDuration(object oObject, int nDuration); // удаление всех эффектов, наложенных oCreator'ом void E_DeleteEffectsByCreator(object oObject, object oCreator); // удаление всех эффектов определенного типа (EFFECT_TYPE_*) void E_DeleteEffectsByType(object oObject, int nType); // удаление всех эффектов определенного подтипа (SUBTYPE_*) void E_DeleteEffectsBySubType(object oObject, int nSubType); // удаление особого эффекта, соотв. всем параметрам (создатель, длительность, тип, подтип) // nAllEffects = TRUE - будут удалены все эффекты, попадающие под условия. FALSE - только первый void E_DeleteSpecificEffect(object oObject, object oCreator = OBJECT_INVALID,int nEffectType = -1,int nEffectSubType = -1,int nEffectDurationType = -1, int nAllEffects = FALSE); //****************************************************************************** void E_DeleteEffectsByDuration(object oObject, int nDuration) { effect eOE = GetFirstEffect(oObject); while (GetIsEffectValid(eOE)) { if (GetEffectDurationType(eOE)==nDuration) { RemoveEffect(oObject,eOE); } eOE = GetNextEffect(oObject); } } //****************************************************************************** void E_DeleteEffectsByCreator(object oObject, object oCreator) { effect eOE = GetFirstEffect(oObject); while (GetIsEffectValid(eOE)) { if (GetEffectCreator(eOE)==oCreator) { RemoveEffect(oObject,eOE); } eOE = GetNextEffect(oObject); } } //****************************************************************************** void E_DeleteEffectsByType(object oObject, int nType) { effect eOE = GetFirstEffect(oObject); while (GetIsEffectValid(eOE)) { if (GetEffectType(eOE)==nType) { RemoveEffect(oObject,eOE); } eOE = GetNextEffect(oObject); } } //****************************************************************************** void E_DeleteEffectsBySubType(object oObject, int nSubType) { effect eOE = GetFirstEffect(oObject); while (GetIsEffectValid(eOE)) { if (GetEffectSubType(eOE)==nSubType) { RemoveEffect(oObject,eOE); } eOE = GetNextEffect(oObject); } } //****************************************************************************** void E_DeleteSpecificEffect(object oObject, object oCreator = OBJECT_INVALID,int nEffectType = -1,int nEffectSubType = -1,int nEffectDurationType = -1, int nAllEffects = FALSE) { effect eEffect = GetFirstEffect(oObject); int PassCreator = (oCreator==OBJECT_INVALID); int PassEffectType = (nEffectType==-1); int PassEffectSubType = (nEffectSubType==-1); int EffectDurationType = (nEffectDurationType==-1); while (GetIsEffectValid(eEffect)) { if ((GetEffectCreator(eEffect)==oCreator)||(PassCreator)) { if ((GetEffectType(eEffect)==nEffectType)||(PassEffectType)) { if ((GetEffectSubType(eEffect)==nEffectSubType)||(PassEffectSubType)) { if ((GetEffectDurationType(eEffect)==nEffectDurationType)||(EffectDurationType)) { RemoveEffect(oObject,eEffect); if (!nAllEffects) return; } } } } eEffect = GetNextEffect(oObject); } } //****************************************************************************** |
![]()
Сообщение
#2264
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Dik Morris @ May 16 2006, 18:34) [snapback]81977[/snapback] ИМХО, стоит ввести небольшую задержку в 0.3, 0.5 - вдруг триггер удалится раньше. Дик, задержка не нужна - триггер уже свое отработал. Первый скрипт стоит на триггере, а второй в диалоге перса, и последние команды идут из стека этого перса. Вопрос к Aivan. Вы недавно приводили интересный скрипт секретного объекта. На версии 1.32, проверка локалки не работает, пробовал подобрать проверку на эффект GetEffectType(), не смог подобрать нужный. Замучили буквоеды! Так какая включается локалка в режиме обнаружения, или какой налагается эффект замедления на героя? NSS if(GetGameDifficulty() == GAME_DIFFICULTY_EASY || !GetLocalInt(GetModule(), "DEBAG_PC"))
SendMessageToPC(oPC, "<cу >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>"); |
![]()
Сообщение
#2265
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Генадий, это просто я сделал для своих тестеров для дебага. Вы можете удалить кусок кода с локалкой:
NSS if(GetGameDifficulty() == GAME_DIFFICULTY_EASY) SendMessageToPC(oPC, "<cу >ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.</c>"); Тогда предупреждение будет выдавать только игрокам играющим на сложности EASY. Можете вообще убрать. Если вы спрашиваете в каком режиме это происходит, то при спавне по умолчанию забанена кнопка F2. По поводу того что может не работать... Дело в том что написано это на 1.66, соотвесвенно может некоторые функции имеют другие внутренние механизмы движка или их вообще нет. Но это вряд ли, тогда бы не скомпелировался код. Насколько я понимаю, у вас СОУ, соотвественно вы задать локалки или стринги на триггере заранее НЕ МОЖЕТЕ. Значит скрипт настроить нормально вашими средствами нельзя. Ставьте ХОТУ. (IMG:style_emoticons/kolobok_light/yes3.gif) 2 Лекс. Сенькс, за код, надо библу себе добить будет (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2266
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Спасибо вам Aiwan за ответ. Скрипт конечно не компелировался, пришлось выкинуть все локалки и стринги, и заточить под собственные нужды. Фразу - «ВКЛЮЧИТЕ РЕЖИМ ОБНАРУЖЕНИЯ.», оставил при любом режиме, пусть колбасит игрока, но это немного некорректно, когда этот режим включен. Перейти на 1.66 нет возможности, да и нет необходимости, пока игра не дописана. Поэтому пробовал через эффект, но не нашел оный. Спасибо Лексу за библиотеку. Интересно, никто не делал библиотеку эффектов? Я попытался, описал полторы сотни, работает нормально, но не все еще внес. Если еще подключить библиотеку Лекса, то это облегчит работу по скриптам с эффектами. В общем идея такая:
NSS // *********** БИБЛИОТЕКА ЭФФЕКТОВ ************ #include "effect_one" effect e1i = EffectVisualEffect(VFX_FNF_DISPEL); // Воронка синего тумана 1 effect e2i = EffectVisualEffect(VFX_FNF_DISPEL_DISJUNCTION); // Воронка синего тумана 2 effect e3i = EffectVisualEffect(VFX_FNF_DISPEL_GREATER); // Воронка синего тумана 3 effect e4i = EffectVisualEffect(VFX_FNF_IMPLOSION); // ЖелтаЯ воронка effect e5i = EffectVisualEffect(VFX_FNF_LOS_EVIL_10); // НегативнаЯ энергиЯ Красный круг 1 effect e6i = EffectVisualEffect(VFX_FNF_LOS_EVIL_20); // НегативнаЯ энергиЯ Красный круг 2 effect e7i = EffectVisualEffect(VFX_FNF_LOS_EVIL_30); // НегативнаЯ энергиЯ Красный круг 3 effect e8i = EffectVisualEffect(VFX_FNF_LOS_HOLY_10); // круг желтый 1 effect e9i = EffectVisualEffect(VFX_FNF_LOS_HOLY_20); // круг желтый 2 effect e10i = EffectVisualEffect(VFX_FNF_LOS_HOLY_30); // круг желтый 3 effect e11i = EffectVisualEffect(VFX_FNF_NATURES_BALANCE); // Зеленый круг животных effect e12i = EffectVisualEffect(VFX_FNF_PWKILL); // Красный круг пентаграммы effect e13i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2); // ФиолетоваЯ спираль и круг effect e14i = EffectVisualEffect(VFX_FNF_HOWL_MIND); // Страх синий круг effect e15i = EffectVisualEffect(VFX_FNF_HOWL_ODD); // Страх фиолетовый круг effect e16i = EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY); // Страх белый круг effect e17i = EffectVisualEffect(VFX_IMP_PULSE_FIRE); // Огненный импульсный круг effect e18i = EffectVisualEffect(VFX_IMP_PULSE_COLD); // синий импульсный круг // *********** ИНТЕРЕСНЫЕ ********** effect e19i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3); // ГолубаЯ звезда под ногами effect e20i = EffectVisualEffect(VFX_FNF_WORD); // БольшаЯ желтаЯ звезда под ногами effect e21i = EffectVisualEffect(VFX_FNF_SUMMON_CELESTIAL); // Врата Призыва синий луч effect e22i = EffectVisualEffect(VFX_FNF_SUMMON_GATE); // Врата Призыва огненный взрыв effect e23i = EffectVisualEffect(VFX_FNF_WAIL_O_BANSHEES); // Девка effect e24i = EffectVisualEffect(VFX_FNF_WEIRD); // Змей двуглавый effect e25i = EffectVisualEffect(VFX_IMP_DISPEL); // Голубое облако effect e26 = EffectVisualEffect(VFX_DUR_PROT_PREMONITION); // Глазастое синее облако // *********** ВЗРЫВНЫЕ ********** effect e27i = EffectVisualEffect(VFX_FNF_FIREBALL); // Большой огненный взрыв effect e28i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID); // Взрыв газа зеленый effect e29i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_EVIL); // Взрыв газа красный effect e30i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_FIRE); // Огненный взрыв effect e31i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_GREASE); // Взрыв газа черный effect e32i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_MIND); // Взрыв газа синий effect e33i = EffectVisualEffect(VFX_FNF_BLINDDEAF); // Большой серебристый взрыв effect e34i = EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_NATURE); // Взрыв газа болотный effect e35i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_10); // Звуковой взрыв 1 effect e36i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_20); // Звуковой взрыв 2 effect e37i = EffectVisualEffect(VFX_FNF_LOS_NORMAL_30); // Звуковой взрыв 3 effect e38i = EffectVisualEffect(VFX_FNF_SOUND_BURST); // Большой звуковой взрыв effect e39i = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_1); // Серебристый взрыв effect e40i = EffectVisualEffect(VFX_FNF_SUMMON_UNDEAD); // Серебристый малый взрыв и голос страха effect e41i = EffectVisualEffect(VFX_COM_CHUNK_RED_LARGE); // Большой взрыв красные кости effect e42i = EffectVisualEffect(VFX_COM_CHUNK_RED_MEDIUM); // взрыв красные кости effect e43i = EffectVisualEffect(VFX_COM_CHUNK_RED_SMALL); // взрыв красные кости effect e44i = EffectVisualEffect(VFX_COM_CHUNK_GREEN_MEDIUM); // Взрыв зеленые кости effect e45i = EffectVisualEffect(VFX_COM_CHUNK_GREEN_SMALL); // Взрыв зеленые кости effect e46i = EffectVisualEffect(VFX_COM_CHUNK_YELLOW_MEDIUM); // Взрыв желтые кости effect e47i = EffectVisualEffect(VFX_COM_CHUNK_YELLOW_SMALL); // Взрыв желтые кости effect e48i = EffectVisualEffect(VFX_COM_CHUNK_BONE_MEDIUM); // Взрыв костей нежить effect e49i = EffectVisualEffect(VFX_COM_HIT_ACID); // Малый зеленый взрыв effect e50i = EffectVisualEffect(VFX_COM_HIT_FIRE); // МалаЯ огненнаЯ вспышка effect e51i = EffectVisualEffect(VFX_DUR_CALTROPS); // Взрыв ежиков // *********** ЗАКЛИНАНИЕ *********** effect e52i = EffectVisualEffect(VFX_FNF_HORRID_WILTING); // Увeдание Аб-ма effect e53i = EffectVisualEffect(VFX_FNF_ICESTORM); // Ледeной шторм effect e54i = EffectVisualEffect(VFX_FNF_METEOR_SWARM); // Метеорный дождь effect e55i = EffectVisualEffect(VFX_FNF_FIRESTORM); // Огненный шторм effect e56i = EffectVisualEffect(VFX_FNF_TIME_STOP); // Часы effect e57 = EffectVisualEffect(VFX_DUR_BIGBYS_CLENCHED_FIST); // Рука Бигли effect e58 = EffectVisualEffect(VFX_DUR_BIGBYS_CRUSHING_HAND); // Захват Бигли effect e59 = EffectVisualEffect(VFX_DUR_BIGBYS_INTERPOSING_HAND); // Вращ рука Бигли effect e60 = EffectVisualEffect(VFX_DUR_WEB); // Паутина удержание effect e61 = EffectVisualEffect(VFX_DUR_WEB_MASS); // Паутина удержание под ногами effect e62 = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN); // Кожа кора effect e63 = EffectVisualEffect(VFX_DUR_PETRIFY); // КаменнаЯ кожа effect e64 = EffectVisualEffect(VFX_DUR_PROT_SHADOW_ARMOR); // ЧернаЯ кожа effect e65 = EffectVisualEffect(VFX_DUR_GHOSTLY_PULSE); // Теневой режим effect e66 = EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE); // Призрачный вид effect e67 = EffectVisualEffect(VFX_DUR_ETHEREAL_VISAGE); // Фиолетовый вид effect e68 = EffectVisualEffect(VFX_DUR_BLUR); // Телесное мерцание effect e69i = EffectVisualEffect(VFX_FNF_SCREEN_BUMP); // Толчки 1 effect e70i = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE); // Толчки 2 effect e71i = EffectVisualEffect(VFX_IMP_KNOCK); // ПульсирующаЯ голубаЯ звезда (взлом замка) // *********** ЛУЧИ *********** effect e72i = EffectVisualEffect(VFX_FNF_SUNBEAM); // Большой желтый луч effect e73i = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_FIRE); // Огненный луч effect e74i = EffectVisualEffect(VFX_IMP_HEALING_X); // Синий луч effect e75i = EffectVisualEffect(VFX_IMP_LIGHTNING_M); // Молнии луч // *********** ПОД НОГАМИ *********** effect e76i = EffectVisualEffect(VFX_IMP_SUPER_HEROISM); // Доспехи супер героЯ effect e77 = EffectVisualEffect(VFX_DUR_ANTI_LIGHT_10); // Чернота под ногами (тьма) effect e78 = EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD); // Огненный круг под ногами effect e79 = EffectVisualEffect(VFX_DUR_SPELLTURNING); // Синий круг под ногами effect e80 = EffectVisualEffect(VFX_DUR_FREEDOM_OF_MOVEMENT); // Зеленый круг под ногами effect e81i = EffectVisualEffect(VFX_COM_SPARKS_PARRY); // Искры у ног effect e82i = EffectVisualEffect(VFX_IMP_LIGHTNING_S); // Малый взрыв электричества под ногами effect e83 = EffectVisualEffect(VFX_DUR_TENTACLE); // Черные нити effect e84 = EffectVisualEffect(VFX_DUR_ENTANGLE); // Папоротник effect e85i = EffectVisualEffect(VFX_FNF_SMOKE_PUFF); // Пар effect e86 = EffectVisualEffect(VFX_DUR_FLAG_BLUE); // Флаг синий effect e87 = EffectVisualEffect(VFX_DUR_FLAG_GOLD); // Флаг фиолетовый effect e88 = EffectVisualEffect(VFX_DUR_FLAG_PURPLE); // Флаг желтый effect e89 = EffectVisualEffect(VFX_DUR_FLAG_RED); // Флаг красный // *********** У ГОЛОВЫ *********** effect e90 = EffectVisualEffect(VFX_DUR_BARD_SONG); // Музыка и ноты effect e91i = EffectVisualEffect(VFX_IMP_DOOM); // Гроза над головой effect e92i = EffectVisualEffect(VFX_IMP_HEAD_ACID); // Зеленый взрыв над головой effect e93i = EffectVisualEffect(VFX_IMP_HEAD_COLD); // Голубой взрыв над головой effect e94i = EffectVisualEffect(VFX_IMP_HEAD_ELECTRICITY); // Электрический взрыв над головой effect e95i = EffectVisualEffect(VFX_IMP_HEAD_EVIL); // Красный взрыв над головой effect e96i = EffectVisualEffect(VFX_IMP_HEAD_FIRE); // Огненный взрыв над головой effect e97i = EffectVisualEffect(VFX_IMP_HEAD_HEAL); // Сине-желтый взрыв над головой effect e98i = EffectVisualEffect(VFX_IMP_HEAD_HOLY); // Желтый взрыв над головой effect e99i = EffectVisualEffect(VFX_IMP_HEAD_MIND); // Фиолетовый взрыв над головой effect e100i = EffectVisualEffect(VFX_IMP_HEAD_NATURE); // Желто-зеленый взрыв над головой effect e101i = EffectVisualEffect(VFX_COM_HIT_FIRE); // Малый oгненный взрыв у головы effect e102i = EffectVisualEffect(VFX_COM_BLOOD_SPARK_LARGE); // Радужные брызги у головы effect e103i = EffectVisualEffect(VFX_COM_BLOOD_SPARK_MEDIUM); // Радужные брызги effect e104i = EffectVisualEffect(VFX_COM_BLOOD_CRT_RED); // Красный шар взрыв у головы effect e105i = EffectVisualEffect(VFX_COM_BLOOD_CRT_YELLOW); // Желтый шар взрыв у головы effect e106i = EffectVisualEffect(VFX_IMP_STUN); // Ледeной взрыв над головой effect e107i = EffectVisualEffect(VFX_IMP_HEALING_G); // Маг радужное облако effect e108 = EffectVisualEffect(VFX_DUR_MAGICAL_SIGHT); // Замешательство облако effect e109 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED); // Замешательство птички effect e110 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DOMINATED); // Замешательство нимб голубой effect e111 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_FEAR); // Страх effect e112 = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE); // Замешательство спираль effect e113 = EffectVisualEffect(VFX_DUR_PARALYZED); // Замешательство круг кинжалов // *********** ПРОЧИЕ *********** effect e114i = EffectVisualEffect(VFX_FNF_PWSTUN); // КраснаЯ спираль effect e115 = EffectVisualEffect(VFX_DUR_PARALYZE_HOLD); // БольшаЯ белаЯ спираль effect e116 = EffectVisualEffect(VFX_DUR_AURA_COLD); // Аура голубаЯ effect e117i = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY); // ОгненнаЯ спираль effect e118i = EffectVisualEffect(VFX_IMP_HEALING_L); // Фонтан голубой спиральный effect e119i = EffectVisualEffect(VFX_IMP_HEALING_M); // Малый столб света effect e120i = EffectVisualEffect(VFX_IMP_HEALING_S); // МалаЯ голубаЯ спираль effect e121 = EffectVisualEffect(VFX_DUR_DARKNESS); // МалаЯ тьма effect e122 = EffectVisualEffect(VFX_DUR_GLOBE_INVULNERABILITY); // Маг сфера effect e123 = EffectVisualEffect(VFX_DUR_GLOBE_MINOR); // ПризрачнаЯ маг сфера effect e124 = EffectVisualEffect(VFX_DUR_MAGIC_RESISTANCE); // Маг рваннаЯ сфера effect e125 = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MAJOR); // Красный дождь effect e126 = EffectVisualEffect(VFX_DUR_PROTECTION_EVIL_MINOR); // Малый красный дождь effect e127 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR); // Желтый дождь effect e128 = EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MINOR); // Малый желтый дождь effect e129 = EffectVisualEffect(VFX_DUR_SANCTUARY); // БольшаЯ синеЯ спираль effect e130 = EffectVisualEffect(VFX_DUR_PROTECTION_ELEMENTS); // Желтый маг дождь effect e131 = EffectVisualEffect(VFX_DUR_LIGHT_YELLOW_15); // Свет желтый effect e132 = EffectVisualEffect(VFX_DUR_LIGHT_WHITE_15); // Свет белый effect e133 = EffectVisualEffect(VFX_DUR_LIGHT_RED_15); // Свет красный effect e134 = EffectVisualEffect(VFX_DUR_LIGHT_BLUE_15); // Свет голубой effect e135 = EffectPetrify(); // Окаменение - статуЯ effect e136 = EffectAppear(); // Прыжок с неба effect e137 = EffectDisappear(); // Прыжок в небо и уничтожение объекта effect e138 = EffectCharmed(); // Эффект зачаровывает цель - (не может говорить) effect e139 = EffectCutsceneParalyze(); // Эффект парализации effect e140 = EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY); // ПолнаЯ невидимость effect e141i = EffectDeath(); // Эффект смерти effect e142 = EffectHaste(); // Эффект ускорение effect e143 = EffectEntangle(); // Эффект запутывание effect e144i = EffectResurrection(); // Эффект воскрешениe effect e145 = EffectSleep(); // Эффект сон effect e146 = EffectVisualEffect(VFX_IMP_SLEEP); // Эффект сон effect e147 = EffectSlow(); // Эффект замедление - цель затормаживает на 50% effect e148 = EffectCurse(3,3,3,3,3); // ПРОКЛЯТИЕ //************************** //=============== НАЛОЖИТЬ ЭФФЕКТ ============================================== void EffectOnPC(object oObject, effect eOne, float iTime, int iNUM) { location lEffect = GetLocation(oObject); if (iNUM == 1) ApplyEffectToObject(DURATION_TYPE_INSTANT, eOne, oObject); if (iNUM == 2) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eOne, oObject, iTime); if (iNUM == 3) ApplyEffectToObject(DURATION_TYPE_PERMANENT, eOne, oObject); if (iNUM == 4) ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eOne), oObject, iTime); if (iNUM == 5) ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(eOne), oObject); if (iNUM == 6) ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eOne, lEffect); } //=============== СНЯТЬ ВСЕ ЭФФЕКТЫ ============================================ void DelEffectOnPC(object oObject) { effect eOne = GetFirstEffect(oObject); while (GetIsEffectValid(eOne)) { RemoveEffect(oObject, eOne); eOne = GetNextEffect(oObject); } } //=============== СНЯТЬ ЭФФЕКТ ================================================= void DelOneEffectOnPC(object oObject, int iOne) { effect eEffect = GetFirstEffect(oObject); while (GetIsEffectValid(eEffect)) { if (GetEffectType(eEffect) == iOne) RemoveEffect(oObject, eEffect); eEffect = GetNextEffect(oObject); } // int iOne - EFFECT_TYPE_... } Эффекты сгруппировал по визуальному восприятию, если кого не устраивает описание, пишите свое. Если после номера эффекта стоит «i» - то этот эффект только «INSTANT» (может где и ошибся, извиняйте). Сообщение отредактировал gennady - May 21 2006, 06:08 |
![]()
Сообщение
#2267
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Привет!Пытаюсь сделать триггер для повышения навыка(любого),типа вы скрылись в тени бонус к hide+6,а когда выидешь,чтобы бонус исчезал. Кроме того нужно чтоб бонусы не складывались.Кто знает как напишите.
|
![]()
Сообщение
#2268
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Триггер скиловой модификации. Для всех, и игрока и НПС.
(по аналогии можно сделать и модификацую атаки, АС и прочее) lx_ten_skillmod - на ентер триггера NSS void main() { int mod = GetLocalInt(OBJECT_SELF,"MOD"); if (mod == 0) return; object oPC = GetEnteringObject(); int skill = GetLocalInt(OBJECT_SELF,"SKILL"); string Comment = GetName(OBJECT_SELF); effect eEffect; if (mod > 0) { eEffect = SupernaturalEffect(EffectSkillIncrease(skill,mod)); } else { eEffect = SupernaturalEffect(EffectSkillDecrease(skill,-mod)); } if (GetLocalInt(OBJECT_SELF,"MSG")) SendMessageToPC(oPC,"*"+Comment+"*"); ApplyEffectToObject(DURATION_TYPE_PERMANENT,eEffect,oPC); } lx_tex_skillmod на экзит триггера NSS #include "inc_effects" // библа написана выше на пару постов void main() { int mod = GetLocalInt(OBJECT_SELF,"MOD"); if (mod == 0) return; object oPC = GetExitingObject(); int TYPE = 0; if (mod > 0) { TYPE = EFFECT_TYPE_SKILL_INCREASE; } else { TYPE = EFFECT_TYPE_SKILL_DECREASE; } E_DeleteSpecificEffect(oPC,OBJECT_SELF,TYPE,SUBTYPE_SUPERNATURAL,DURATION_TYPE_PERMANENT); } делаем триггер, ставим эти 2 скрипта в слоты. Вешаем локалки MOD, которая хранит значение модификации. Модификация может быть как положительной так и отрицательной. MSG Это флаг того, будет ли выдаваться игроку сообщение (сообщение при входе это имя триггера). SKILL номер скила, который меняется int SKILL_ANIMAL_EMPATHY = 0; int SKILL_CONCENTRATION = 1; int SKILL_DISABLE_TRAP = 2; int SKILL_DISCIPLINE = 3; int SKILL_HEAL = 4; int SKILL_HIDE = 5; int SKILL_LISTEN = 6; int SKILL_LORE = 7; int SKILL_MOVE_SILENTLY = 8; int SKILL_OPEN_LOCK = 9; int SKILL_PARRY = 10; int SKILL_PERFORM = 11; int SKILL_PERSUADE = 12; int SKILL_PICK_POCKET = 13; int SKILL_SEARCH = 14; int SKILL_SET_TRAP = 15; int SKILL_SPELLCRAFT = 16; int SKILL_SPOT = 17; int SKILL_TAUNT = 18; int SKILL_USE_MAGIC_DEVICE = 19; int SKILL_APPRAISE = 20; int SKILL_TUMBLE = 21; int SKILL_CRAFT_TRAP = 22; int SKILL_BLUFF = 23; int SKILL_INTIMIDATE = 24; int SKILL_CRAFT_ARMOR = 25; int SKILL_CRAFT_WEAPON = 26; |
![]()
Сообщение
#2269
|
|
Level 8 ![]() ![]() ![]() Класс: Паладин Характер: Lawful Good Раса: Полуэльф ПОДМАСТЕРЬЕ ![]() |
Создаю скрипт для овцы, которая ночью должна баиньки ложиться.
Имеется следующая проблема: после пробуждения овца не желает выполнять действия, определенные ей как Action через скрипт. NSS //Событие, отправляющее овцу поближе к пастуху и укладывающее ее спать. if (nEvent==EVENT_S_SLEEP) { if (GetLocalInt(oSelf, "int_EVENT")==EVENT_S_SLEEP) return; SetLocalInt(oSelf, "int_EVENT", EVENT_S_SLEEP); float fDist=(Random(8)+1)*1.0; ActionMoveToObject(oPastuh, FALSE, fDist); effect eSleep=EffectSleep(); ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_PERMANENT, eSleep, oSelf)); }; //Событие, которое "будит" овцу. if (nEvent==EVENT_S_WAKEUP) { SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP); //Снимаем эффект сна. effect eEffect=GetFirstEffect(oSelf); while (GetIsEffectValid(eEffect)) { if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP) RemoveEffect(oSelf, eEffect); eEffect=GetNextEffect(oSelf); }; ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK))); }; //Событие, которое заставляет овцу шляться по локации (типа пастись). if (nEvent==EVENT_S_WALK) { SetLocalInt(oSelf, "int_EVENT", EVENT_S_WALK); ClearAllActions(); location lWalkTo=RandomLocation(oPastuh, 20.0, FALSE); ActionMoveToLocation(lWalkTo, FALSE); ActionWait(3.0); ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK))); }; При таком раскладе команд событие EVENT_S_WALK после пробуждения не наступает ВООБЩЕ. Т.е. строка "ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));" не срабатывает. Пробовал менять код вот так: NSS //Событие, которое "будит" овцу. if (nEvent==EVENT_S_WAKEUP) { SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP); //Снимаем эффект сна. SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)); effect eEffect=GetFirstEffect(oSelf); while (GetIsEffectValid(eEffect)) { if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP) RemoveEffect(oSelf, eEffect); eEffect=GetNextEffect(oSelf); }; }; При этом овца вскакивает после сна, пробегает до заданной location, а потом опять застывает и стоит. Т.е. строка "ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK)));" опять-таки не срабатывает, но на этот раз в событии EVENT_S_WALK. ClearAllActions() в разных местах не помогает. Что делать?.. ....................................... Блин, понял сам, в чем дело. Все симптомы навели на то, что блокирован стек действий персонажа. А посему исправил код вот так: NSS if (nEvent==EVENT_S_WAKEUP) { SetLocalInt(oSelf, "int_EVENT", EVENT_S_WAKEUP); effect eEffect=GetFirstEffect(oSelf); while (GetIsEffectValid(eEffect)) { if (GetEffectType(eEffect)==EFFECT_TYPE_SLEEP) RemoveEffect(oSelf, eEffect); eEffect=GetNextEffect(oSelf); }; SetCommandable(TRUE, oSelf);//Разблокируем командный стек. ActionDoCommand(SignalEvent(oSelf, EventUserDefined(EVENT_S_WALK))); }; Все заработало. Ларчик просто открывался... Но как-то странно. Это что, глюк движка?.. Сообщение отредактировал Kavin - May 17 2006, 14:36 |
![]()
Сообщение
#2270
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Тут такая трабла. Перс при заходе в модуль ничего не одевает, но все вещи есть в инвентаре, и он может все носить!
NSS void main() { object oMod = GetModule(); object oPC = GetEnteringObject(); if (!GetIsPC(oPC) || GetLocalInt(oMod, "START_GAME")) {return;} { SetLocalInt(oMod, "START_GAME", TRUE); //Only one use! TakeGoldFromCreature(GetGold(oPC),oPC,TRUE); //Get All Money object oItem = GetFirstItemInInventory(oPC); //Take off the hole inventory! while(GetIsObjectValid(oItem)) //If there is an object { DestroyObject(oItem); //Destroy it oItem = GetNextItemInInventory(oPC); //Next object! } int i=0;//destory amunition while(i<14) { DestroyObject(GetItemInSlot(i, oPC)); i++; } GiveGoldToCreature(oPC, 3000); //GiveGold CreateItemOnObject("LO", oPC, 1); //Objects CreateItemOnObject("DO", oPC, 1); CreateItemOnObject("HO", oPC, 1); CreateItemOnObject("MO", oPC, 1); CreateItemOnObject("AO", oPC, 72); object oItemCr = GetFirstItemInInventory(oPC); while(GetIsObjectValid(oItemCr)) { SetIdentified(oItemCr,TRUE); oItemCr = GetNextItemInInventory(oPC); } AssignCommand(oPC, ActionEquipMostEffectiveArmor());//Put on everything } } LEX: перенес в соот. тему. Но вообще ты должен сам понимать, что скрипты больше пары строк это уже не по скриптам вопрос, а не для новичков. По теме: одевая с задержкой и отчисть стек акций до этого. У тебя мб просто шмотки создаться не успевают. И оденется не все, а только армор. |
![]()
Сообщение
#2271
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Good Раса: Полуэльф ![]() |
Кто-нить знает, как можно сделать, чтобы труп, остающийся после смерти создания, реагировал на щелчок по нему мышью иначе, чем обычно? (не открывал лут, а исполнял какой-нить скрипт)
|
![]()
Сообщение
#2272
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
LokiJ_Tzn
Имхо, лучше сделать проще - после смерти NPC создавать невидимый плейс и уже ему вешать на onUsed нужный скрипт. ..::SERGO::.. Попробуй ввести задержку на создание предметов, например так: NSS // Перед началом оснв. фун-ции: (тобишь void main()) void ActionCreateItem(string sItemTemplate, object oTarget=OBJECT_SELF, int nStackSize=1) { CreateItemOnObject(sItemTemplate, oTarget, nStackSize); } Работает аналогично CreateItemOnObject(""), но может ставиться в очередь действий или делей. QUOTE Перс при заходе в модуль ничего не одевает Одевается только одежда, для оружия можно юзать, ActionEquipMostDamagingMelee и ActionEquipMostDamagingRanged. Сообщение отредактировал Dik Morris - May 23 2006, 13:39 |
![]()
Сообщение
#2273
|
|
Level 1 Класс: Страж Тьмы Характер: Chaotic Good Раса: Полуэльф ![]() |
QUOTE(Dik Morris @ May 23 2006, 16:27) [snapback]82548[/snapback] LokiJ_Tzn Имхо, лучше сделать проще - после смерти NPC создавать невидимый плейс и уже ему вешать на onUsed нужный скрипт. Спасибо, я уже разобрался (IMG:style_emoticons/kolobok_light/smile.gif) посидел ночью и модифицировал x0_i0_corpse, чтоб он создавал кастомный плейс невидимого объекта вместо лутабельного трупа. Это для скиннинга (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2274
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
В игре максимум 20 лвл. Как сделать чтобы был максимальный 100. Если скрипт скажите плиз. (IMG:style_emoticons/kolobok_light/declare.gif)
|
![]()
Сообщение
#2275
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
2DarkDeivel: это тебе это читать надо (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#2276
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(DarkDeivel @ May 24 2006, 15:44) [snapback]82630[/snapback] В игре максимум 20 лвл. Как сделать чтобы был максимальный 100. Если скрипт скажите плиз. начнем с того, что "в игре" уже давно(начиная с hotu) левел-кап для игроков - 40. это зашито в движок. чтобы сделать больше 40 нужно делать довольно нетривиальную систему, суть которой - куча скриптов + custom 2da + nwnx + leto. забудь вобщем. во всяком случае до тех пор, пока не повысишь свой скилл в нвн-строительстве на несколько порядков. (IMG:style_emoticons/kolobok_light/pardon.gif) |
![]()
Сообщение
#2277
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Ну все, блин, здаюсь. Все перепробывал(наверно не все, раз пишу сюда). Мне надо, чтобы можно было заговорить с дверью, чтобы одна ветка появлялась вслучае определенного предмета в инвенатре, чтобы после отдачи этого предмета двери, дверь уничтажалась. ух, все.
|
![]()
Сообщение
#2278
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
В диалоге делай проверку, на определенный предмет. (Используя скрипт визард)
Разрушай дверь либо дестроем, либо нужным эффектом. NSS // Text Appears When int StartingConditional() { if (GetItemPossessor(GetObjectByTag("таг_айтема")) == GetPCSpeaker()) {return TRUE;} return FALSE; } NSS // ActionTakens
void main(){DestroyObject(OBJECT_SELF);} Сообщение отредактировал Dik Morris - May 28 2006, 09:00 |
![]()
Сообщение
#2279
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
как не странно, но визардский скрипт мне немного другое дал, поэтому я припер сюды
|
![]()
Сообщение
#2280
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Этот скрипт не имеет особых различий с визардским, там используется фун-ция HasItem, которая схожа с GetItemPossessor.
PS: просто в HasItem, есть проверка на валидность объекта. (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2281
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Lex спасибо за помощь!Советую всем строителям добавить в локи триги с бонусами и т.П.Разнобразие боя!Теперь по делу,проблема слeдующая:в катсцене я сажу npc на стул(ActionSit),далее npc с него не встает,(а он должен идти на wp1) даже если стул убить!Катсцена становится вечной.Как сделать чтоб npc встал и пошел.
Сообщение отредактировал Noah - May 28 2006, 23:19 |
![]()
Сообщение
#2282
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
NSS SetCutsceneMode(oPC, TRUE); DelayCommand(1.0f, AssignCommand(oNPC, ClearAllActions(TRUE))); DelayCommand(1.1f AssignCommand(oNPC, ActionMoveToObject(GetObjectByTag("wp1")))); DelayCommand(3.0f, SetCutsceneMode(oPC, FALSE)); 1 строка - катсцена 2 - очистить стек (встанет со стула) 3 - пойдет к обьекту с тегом wp1 4 - конец катсцены |
![]()
Сообщение
#2283
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
..::SERGO::.., не пользуйся визардовскими скриптами, как правило, они пишут не совсем то, что хотелось бы, и часто в них больше мусора, чем нужного кода. Стоит учиться самому писать скрипты.
|
![]()
Сообщение
#2284
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Noah, тебе неплохо было бы прочесть мои статьи по авроре, я там разбирал такой аспект, как акция и просто действие. Возможно твой НПС выполняет не акцию сидения, а воспроизводит анимацию но не как акцию. И он может седеть так оооочень долго.
|
![]()
Сообщение
#2285
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Спасибо,теперь она встает.Айван,кинь ссылку на статьи,я с этого и начинал скриптинг,но мог что-то пропустить.А нет ли анимаций сидячим нпс?
|
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 00:27 |