![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#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 Раса: Полуэльф ![]() |
Спасибо,теперь она встает.Айван,кинь ссылку на статьи,я с этого и начинал скриптинг,но мог что-то пропустить.А нет ли анимаций сидячим нпс?
|
![]()
Сообщение
#2286
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
http://download.wrg.ru/public_wrg/toolset/...ra_tutorial.exe
QUOTE(Noah @ May 30 2006, 00:41) [snapback]83142[/snapback] А нет ли анимаций сидячим нпс? Вот скрипт, думаю разберешься. NSS //::////////////////////////////////////////////// //:: OnUserDefaine am_cud_sit //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Скрипт садит НПС на стул или на землю. SIT_CHAIR - таг стула для сидения. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 07.07.2005 //::///////////////////////////////////////////// void main() { object oPC = GetFirstPC(); if (GetIsDead(OBJECT_SELF)==TRUE) return; // Если он помер, то пусть молчит if (GetArea(OBJECT_SELF)!=GetArea(oPC)) return; if (GetLocalInt(OBJECT_SELF, "STOP")) return; // Отключаем если нам это надо if (GetIsInCombat(OBJECT_SELF)) return; if (IsInConversation(OBJECT_SELF)) return; int nEvent = GetUserDefinedEventNumber(); //=========================== HEARTBEAT EVENT ================================== if (nEvent == EVENT_HEARTBEAT) // Сигнал поступает с HeartBeat слота. { //------------------------------------------------------------------------------ if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CROSS") == TRUE) { if (GetLocalInt(OBJECT_SELF, "DISTURBED")) return; ClearAllActions(); SetLocalInt(OBJECT_SELF, "DISTURBED", TRUE); ActionMoveToLocation(GetLocalLocation(OBJECT_SELF, "initLoc")); ActionDoCommand(SetFacing(GetLocalFloat(OBJECT_SELF, "initFacing"))); ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 99999.9); return; } //------------------------------------------------------------------------------ if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == TRUE) { if (GetLocalInt(OBJECT_SELF, "FLAG_SIT_CHAIR") == 2) return; if (GetCurrentAction() == ACTION_SIT) return; if (GetCurrentAction() == ACTION_MOVETOPOINT) return; object oChair = GetNearestObjectByTag("SIT_CHAIR"); if (GetIsObjectValid(oChair)) { ClearAllActions(); ActionSit(oChair); ActionDoCommand(SetLocalLocation(OBJECT_SELF, "initFacing", GetLocation(OBJECT_SELF))); } } } //============================= DIALOGUE EVENT ================================= if (nEvent == EVENT_DIALOGUE) // Стандартный сигнал { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } //============================= PERCIEVE EVENT ================================= if (nEvent == EVENT_PERCEIVE) // Стандартный сигнал { if (GetIsPC(GetLastPerceived())) { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } } //========================== END COMBAT ROUND EVENT ============================ if (nEvent == EVENT_END_COMBAT_ROUND) // Стандартный сигнал { SetLocalInt(OBJECT_SELF, "DISTURBED", FALSE); } //------------------------------------------------------------------------------ } Скрипт ставится на слот UserDef |
![]()
Сообщение
#2287
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Noah @ May 29 2006, 22:41) [snapback]83142[/snapback] А нет ли анимаций сидячим нпс? Если я правильно понял вопрос, то вам нужна дополнительная анимация сидящим персам? Недавно этот вопрос обсуждался, читайте статью Лекса ЗДЕСЬ. Если задействована ActionSit, то наложение анимации поднимет перса со стула. Можно совместить с ANIMATION_LOOPING_SIT_CHAIR кое-что из анимаций, но вот стул под перса не подставишь (или я это тупо делал). А вот на CROSS, можно все свободно вешать. Вот простой скрипт на ХБ-ит перса. Если нужно, чтобы перс смотрел в определенную сторону, то задайте точку "V_ + тэг перса." NSS void main() { object oWay = GetWaypointByTag("V_" + GetTag(OBJECT_SELF)); vector vFace = GetPosition(oWay); if(GetArea(GetFirstPC()) != GetArea(OBJECT_SELF)) return; // если ПС нет локе if (!IsInConversation(OBJECT_SELF)) { SetFacingPoint(vFace); switch (Random(3)+1) { case 1: if(Random(100) >= 50) ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS); else ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK); break; case 2: if(Random(100) >= 50) ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); else ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK); break; case 3: if(Random(100) >= 50 && GetAbilityScore(OBJECT_SELF, ABILITY_INTELLIGENCE) >= 17) ActionPlayAnimation(ANIMATION_FIREFORGET_READ); else { if (GetGender(OBJECT_SELF)==GENDER_MALE) PlaySound("as_pl_yawningm1"); else PlaySound("as_pl_yawningf1"); ActionPlayAnimation(ANIMATION_FIREFORGET_PAUSE_SCRATCH_HEAD); } break; } ActionPlayAnimation(ANIMATION_LOOPING_SIT_CROSS, 1.0, 6.0); } } /* Персонаж сидит на земле, пьет и чешет голову. Если интеллект выше 17, то еще и читает. Слот HB */ Спасибо метрам за подсказку! Учту в дальнейшем. (IMG:style_emoticons/kolobok_light/thank_you.gif) Сообщение отредактировал gennady - Jun 1 2006, 12:41 |
![]()
Сообщение
#2288
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок.
|
![]()
Сообщение
#2289
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
QUOTE(Aiwan @ Jun 1 2006, 09:23) [snapback]83448[/snapback] gennady, есть смысл добавить проверку РС в локации. Что бы НПС все это делал только если в локации есть игрок. Aiwan, если можно киньте оную. Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав? Тут у меня назрел вопрос по скриптам на OnSpawn, ведь насколько я понял локалки в вышеприведенном вами скрипте, вешаются именно там. Просто у меня было несколько проколов. Все работает 10-20 раз, а на тридцатом, бах висяк! Пришлось переписать и бросить все ХБ, т.к. с сюжетным персам это непозволительно. Теперь трижды думаю, стоит ли ставить что на OnSpawn. Непонятно…, или это только у меня такие приколы? (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]()
Сообщение
#2290
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(gennady @ Jun 1 2006, 12:49) [snapback]83468[/snapback] Вообще я подметил, что ХБ начинает работать в определенном радиусе от героя, или я не прав? хб работают везде, во всех локациях. Но там, где нет игрока - чуть медленнее (бывает 7-8-9 секунд 1 такт) NSS // если игрок не в одной локе с НПС - выйти из скрипта
if( GetArea(GetFirstPC())!=GetArea(OBJECT_SELF)) return; |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 18:22 |