Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге |
Здравствуйте, гость ( Вход | Регистрация )
Скрипты: Все вопросы, Алгоритмы, оптимизация, особености и хитрости в скриптинге |
Jun 24 2010, 23:22
Сообщение
#276
|
|
Level 2 Класс: Волшебник Характер: Neutral Good Раса: Человек |
Цитата Все это довольно подробно описано в разделе Кастом Контент в категории тулсета первого НВН А где именно? |
Jun 27 2010, 01:21
Сообщение
#277
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
где-то в этой теме: 2ДА таблицы
|
Jul 15 2010, 10:20
Сообщение
#278
|
|
Level 8 Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг |
Хотел поделится скриптом строкового массива, может мне бы его оптимизировали..
Neverwinter Script
Сообщение отредактировал PaiNt - Sep 24 2010, 06:44 |
Jul 15 2010, 18:40
Сообщение
#279
|
|
Level 12 Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] |
Neverwinter Script if(GetStringLength(sDevider)!=1) sDevider=","; Ага, незадокумментированная фича! |
Jul 16 2010, 01:53
Сообщение
#280
|
|
Level 8 Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг |
Neverwinter Script if(GetStringLength(sDevider)!=1) sDevider=","; Ага, незадокумментированная фича! Да, (IMG:style_emoticons/kolobok_light/smile.gif) вот бы вспомнить как вообще все это работает (IMG:style_emoticons/kolobok_light/smile.gif) Поидее функция позволяяет добавлять элемент в конец массива (удлинять массив). Как и было замечено разделитель предусматривается только односимвольный. |
Jul 16 2010, 08:35
Сообщение
#281
|
|
Level 12 Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] |
Цитата вот бы вспомнить как вообще все это работает ну уж даже если ты не вспомнишь, то вряд ли тут найдутся добровольцы сами разобраться и ещё оптимизировать. |
Aug 11 2010, 12:51
Сообщение
#282
|
|
Level 1 Класс: Обыватель Характер: Lawful Good Раса: Человек |
у меня твердое намеренье, ввести в свою компанию что-то типа замка из офф компании...
если это возмоно силами одного человека ( а в этом я не сомневаюсь) подкиньте идей, а еще лучше подскажите где найти грамотный гайд именно по скриптописанию. все остальный что я встречал, ничего путного на эту тему не говорят. п.с. я не чужд программированию и т.д. т.п., но синтаксиса тулсета не знаю. И на русском ничего не нашел. (А с английским я провожусь не один месяц...) |
Aug 12 2010, 08:44
Сообщение
#283
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
на русском есть лишь пара совсем нубских гайдов и пару глав про скрипты в НВН1. Если не чужд программированию, то тебе по сути только функции изучить (циклы, условия, объявление переменных и тд тебе должно быть знакомо, синтаксис си тоже не должен вызвать трудностей). А тут никакой гайд не поможет, только ковыряние.
Более менее приличные гайды есть на английском. Но тоже не фонтан, если честно. Начни изучение с ковыряния уже готовых скриптов (точно зная что они делают), потом пробуй крутить параметры и оценивать результаты. Потом небольшая переделка. И тд. Функции лучше всего изучаются именно так, когда их использовать пытаешься. |
Aug 12 2010, 17:04
Сообщение
#284
|
|
Level 9 Класс: Волшебник Характер: Neutral Good Раса: Эльф |
Мне в своё время очень помогли ресурсы www.nwnlexicon.com / nwn1.nwn2lexicon.com и nwn2.wikia.com. Легко переводятся при помощи Google Translate, хотя там довольно просто все написано и так.
А в самом начале мне жутко помогла тулза под названием ScriptGen. Разбирая то, как она генерит скрипты, можно быстро научиться приемам работы. Сообщение отредактировал Lorendroll - Aug 12 2010, 17:05 |
Aug 14 2010, 15:35
Сообщение
#285
|
|
Level 2 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек |
Есть у Священника заклинание 4-го круга, называется "Декламация". Действует на всех союзников, давая бонус к атаке, спасброскам и КЗ +2, если божество у цели то же, что у заклинателя, то +3.
Выглядит так: Neverwinter Script #include "nwn2_inc_spells" #include "x2_inc_spellhook" void main() { if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // Declare major variables object oCaster = OBJECT_SELF; int nCasterLvl = GetCasterLevel(oCaster); float fDuration = RoundsToSeconds(nCasterLvl); fDuration = ApplyMetamagicDurationMods(fDuration); int nDurType = ApplyMetamagicDurationTypeMods(DURATION_TYPE_TEMPO RARY); location lTarget = GetLocation(oCaster); // effects effect eAC; effect eAttack; effect eSave; effect eVis = EffectVisualEffect(VFX_DUR_SPELL_RECITATION); effect eLink; // find the first target object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE); while (GetIsObjectValid(oTarget)) { if (spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, oCaster)) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(oCaster, GetSpellId(), FALSE)); int nBonus = 2; if (GetStringLowerCase(GetDeity(oTarget)) == GetStringLowerCase(GetDeity(oCaster))) { nBonus = 3; } eAC = EffectACIncrease(nBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); eAttack = EffectAttackIncrease(nBonus); eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_ALL); eLink = EffectLinkEffects(eAC, eAttack); eLink = EffectLinkEffects(eLink, eSave); eLink = EffectLinkEffects(eLink, eVis); RemoveEffectsFromSpell(oTarget, GetSpellId()); //Apply the VFX impact and effects ApplyEffectToObject(nDurType, eLink, oTarget, fDuration); } oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE); } } Помогите поправить, пожалуйста. Нужно чтобы под действие заклинания попадали только дружественные аутсайдеры, плюс чтобы не было бонуса для них, если божество совпадает с божеством заклинателя. Как это сделать? Сообщение отредактировал DilanZendal - Aug 14 2010, 15:46 |
Aug 14 2010, 19:44
Сообщение
#286
|
|
Level 7 Класс: Обыватель Характер: True Neutral Раса: Человек NWN: Модмейкер Начало Войны |
Помогите поправить, пожалуйста. Нужно чтобы под действие заклинания попадали только дружественные аутсайдеры, плюс чтобы не было бонуса для них, если божество совпадает с божеством заклинателя. Как это сделать? вроде так Neverwinter Script #include "nwn2_inc_spells"
#include "x2_inc_spellhook" void main() { if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // Declare major variables object oCaster = OBJECT_SELF; int nCasterLvl = GetCasterLevel(oCaster); float fDuration = RoundsToSeconds(nCasterLvl); fDuration = ApplyMetamagicDurationMods(fDuration); int nDurType = ApplyMetamagicDurationTypeMods(DURATION_TYPE_TEMPO RARY); location lTarget = GetLocation(oCaster); // effects effect eAC; effect eAttack; effect eSave; effect eVis = EffectVisualEffect(VFX_DUR_SPELL_RECITATION); effect eLink; // find the first target object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE); while (GetIsObjectValid(oTarget)) { if (spellsIsTarget(oTarget, SPELL_TARGET_ALLALLIES, oCaster)) { //Fire cast spell at event for the specified target SignalEvent(oTarget, EventSpellCastAt(oCaster, GetSpellId(), FALSE)); int nBonus = 2; /*if (GetStringLowerCase(GetDeity(oTarget)) == GetStringLowerCase(GetDeity(oCaster))) { nBonus = 3; } */ eAC = EffectACIncrease(nBonus, AC_DODGE_BONUS, AC_VS_DAMAGE_TYPE_ALL); eAttack = EffectAttackIncrease(nBonus); eSave = EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_ALL); eLink = EffectLinkEffects(eAC, eAttack); eLink = EffectLinkEffects(eLink, eSave); eLink = EffectLinkEffects(eLink, eVis); RemoveEffectsFromSpell(oTarget, GetSpellId()); //Apply the VFX impact and effects if ((GetRacialType(oTarget)==RACIAL_TYPE_OUTSIDER)&&(!GetIsEnemy(oTarget))) ApplyEffectToObject(nDurType, eLink, oTarget, fDuration); } oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_VAST, lTarget, TRUE, OBJECT_TYPE_CREATURE); } } |
Sep 9 2010, 12:54
Сообщение
#287
|
|
Level 2 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек |
Несложный скрипт, эффект схож с эпическим "Пламенная аура", но есть еще усиления. Вроде написал все правильно, однако редактор напрочь отказывается компилировать. Помогите, пожалуйста, понять, где я ошибся.
Neverwinter Script void main()
{ int nWisdomBonus = GetAbilityModifier(ABILITY_WISDOM); int nDuration = 5 + GetAbilityModifier(ABILITY_WISDOM); int nBonus = nWisdomBonus; effect eBonAttack = EffectAttackIncrease(nBonus); effect eBonDamFire = EffectDamageIncrease(nBonus, DAMAGE_TYPE_FIRE); effect eDodgeAc = EffectACIncrease(nBonus, AC_DODGE_BONUS) effect eFists = EffectVisualEffect(VFX_DUR_SACRED_FLAMES); effect eBody = EffectVisualEffect(VFX_DUR_INNER_ARMOR); effect eLink = EffectLinkEffects(eBonAttack, eBonDamPhysic); eLink = EffectLinkEffects(eLink, eDodgeAc); eLink = EffectLinkEffects(eLink, eFists); eLink = EffectLinkEffects(eLink, eBody); ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nDuration)); } |
Sep 9 2010, 14:03
Сообщение
#288
|
|
Level 3 Класс: Воин Характер: Chaotic Good Раса: Человек |
А у тебя редактор разве не указывает строчку, в которой допущена ошибка? Всего-то точки с запятой нет вот здесь: effect eDodgeAc = EffectACIncrease(nBonus, AC_DODGE_BONUS)
|
Sep 9 2010, 21:18
Сообщение
#289
|
|
Level 2 Класс: Обыватель Характер: Chaotic Neutral Раса: Человек |
блин, точно. Вот это называется "невнимательность". Кажется, пора выспаться.
Merkuta, спасибо. |
Sep 19 2010, 15:07
Сообщение
#290
|
|
Level 3 Класс: Маг Характер: True Neutral Раса: Нежить |
Где в 2d прописывать свои названия расс и классов?
|
Sep 21 2010, 13:03
Сообщение
#291
|
|
Level 3 Класс: Маг Характер: True Neutral Раса: Нежить |
|
Sep 21 2010, 13:18
Сообщение
#292
|
|
Level 19 Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф |
Бэ. Когда же вы научитесь искать по форуму, писать в соответствующих темах и не флудить? (IMG:style_emoticons/kolobok_light/sad.gif)
|
Sep 22 2010, 15:02
Сообщение
#293
|
|
Level 3 Класс: Маг Характер: True Neutral Раса: Нежить |
Чувак,ответь на все мои вопросы и я больше не буду писать не в тему,ОК? (IMG:style_emoticons/kolobok_light/rolleyes.gif)
|
Sep 22 2010, 18:55
Сообщение
#294
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Извините, не удержался. "Чувак" - это кастрированный баран. А "чувиха" - "проститутка" на воровском жаргоне начала 20го века.
|
Sep 22 2010, 19:11
Сообщение
#295
|
|
Level 19 Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф |
Чувак,ответь на все мои вопросы и я больше не буду писать не в тему,ОК? (IMG:style_emoticons/kolobok_light/rolleyes.gif) Ооо... На "все"(!) ваши вопросы отвечать это дело неблагодарное. И дело даже не в том что я и сам многого не знаю. Вы задали вопрос не по теме, я указал нужную тему где "возможно" эта проблема уже обсуждалась, но Вам мало... Разжевать и в рот положить? Уж пардон за слегка резкий тон... Хотя если честно вообще не вижу с чего вдруг мне оправдываться. Извините, не удержался... Забавно. (IMG:style_emoticons/kolobok_light/smile.gif) Не знал этого. Но так уж и быть, разрешаю администрации и модераторам не бить банхаммером товарища за оскорбление меня. (IMG:style_emoticons/kolobok_light/smile.gif) |
Sep 23 2010, 15:14
Сообщение
#296
|
|
Level 5 Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени |
|
Sep 23 2010, 16:40
Сообщение
#297
|
|
Level 9 Класс: Фея Характер: Chaotic Evil Раса: Фея |
Здрасте, мастера.
Либо я вконец отупел за лето, либо садиться за тулсет после сурового рабочего дня не такая уж и хорошая идея. Суть вот в чем, нужен скрипт, который вешается на хартбит и заставляет непися вещать каждые две минуты какую-нибудь стринговую строку. Neverwinter Script void main() { if (GetLocalInt(OBJECT_SELF, "script_fired") != TRUE) { SetLocalInt(OBJECT_SELF, "script_fired", TRUE); ClearAllActions(); //AssignCommand(OBJECT_SELF, (ActionWait(2.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка1"))); AssignCommand(OBJECT_SELF, (ActionWait(120.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка2"))); AssignCommand(OBJECT_SELF, (ActionWait(120.0))); AssignCommand(OBJECT_SELF, (ActionSpeakString("строка3"))); SetLocalInt(OBJECT_SELF, "script_fired", FALSE); } } Проблема в том, что несмотря на проверку в начале, непись все равно говорит лишь только первую строку каждые шесть секунд... |
Sep 23 2010, 18:47
Сообщение
#298
|
|
Level 19 Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов |
Wait-ы тормозят непися, а не исполнение скрипта. Флаг запуска скидывается сразу же после установки, поэтому через 6 сек скрипт срабатывает по новой.
|
Sep 24 2010, 05:31
Сообщение
#299
|
|
Level 9 Класс: Фея Характер: Chaotic Evil Раса: Фея |
Ну и как же мне тогда поступить?
А то я хз вообще. |
Sep 24 2010, 06:15
Сообщение
#300
|
|
Level 8 Класс: Псионик Характер: Chaotic Neutral Раса: Хафлинг |
Делай удаление переменной таймера с какии-то периодом. Типа
Neverwinter Script void main() { if(GetLocalInt(OBJECT_SELF, "TIMEOUT")) return; SetLocalInt(OBJECT_SELF, "TIMEOUT", TRUE); DelayCommand(3600.0, DeleteLocalInt(OBJECT_SELF, "TIMEOUT")); ...Твой код } Правда проверки сердцебиения проводятся раз в 6с так что действия не кратные этому промежутку сделать проблематично. Сообщение отредактировал PaiNt - Sep 24 2010, 06:16 |
Текстовая версия | Сейчас: 6th May 2024 - 03:53 |