![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]() ![]()
Сообщение
#2411
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Neutral Good Раса: Человек ![]() |
Мне нужно чтобы после смерти всех врагов в области заработал нужный мне скрипт.
Может, кто выложите, если нетрудно? |
![]()
Сообщение
#2412
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
После убийства 10 врагов, открывается нужный скрипт. (Число измени, по желанию)
На onDeath мобов: NSS void main() { object oKiller = GetLastKiller(); // Проверка, если НПЦ убил игрок, или хенч, if (GetIsPC(oKiller) || GetIsPC(GetHenchman(oKiller))) { if (GetLocalInt(oKiller, "Death_hostile") == 10) { ExecuteScript("Название нужного скрипта", Тот кто открывает его); } SetLocalInt(oKiller, "Death_hostile", GetLocalInt(oKiller, "Death_hostile")+1); } } ЗЫ: не проверял, но по идеи все должно работать. (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2413
|
|
Level 6 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить NWN: Скриптинг [PW] ![]() |
QUOTE Мне нужно чтобы после смерти всех врагов в области заработал нужный мне скрипт. QUOTE После убийства 10 врагов, открывается нужный скрипт. (Число измени, по желанию) геморой(а если динамичное число? О_о)..GetFirstObjectInArea,GetNextObjectInArea проще Сообщение отредактировал [MoF]Darth_Nick - Jul 31 2006, 20:11 |
![]()
Сообщение
#2414
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
лучше на он_спавн всех врагов добавлять в какой-то список, и потом проверять их существование..
а не GetFirstObjectInArea ./ GetObjectByTag / ets особенно для PW o_O загрузка проца прыгает до <цензура> (IMG:style_emoticons/kolobok_light/shok.gif) |
![]()
Сообщение
#2415
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
на onspawn мобов в локе
NSS object oArea = GetArea(OBJECT_SELF); SetLocalInt(oArea, "mob_count", GetLocalInt(oArea, "mob_count")+1); на ondeath моба NSS object oArea = GetArea(OBJECT_SELF); int mob_count = GetLocalInt(oArea, "mob_count")-1; // 1 was killed now SetLocalInt(oArea, "mob_count", mob_count); if(mob_count <= 0) SendMessageToPC(GetLastDamager(OBJECT_SELF), "You killed all!"); |
![]()
Сообщение
#2416
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
Всем доброго времени суток! Делая свой модуль сегодня, я столкнулся с проблемкой..
В самом модуле у меня идёт стандартное пенальти на экспу и деньги при смерти, но мне нужно, чтоб в определеннойй арее за смерть ничего не снимали. Сколько не парился, никак не получилось, чар респавнится с потерей опыта и денег и в стандартном месте (мне нужно, чтоб он воскресал в той арее где смерть не дает пенальти). По сему решил я к вам обратиться, может наставите на путь истинный (IMG:style_emoticons/kolobok_light/declare.gif) ))) Вот собственно финальный вариант того, что у меня получилось (вернее не получилось!) NSS void main()
{ object oRespawner = GetLastRespawnButtonPresser(); object oSpawnPoint = GetObjectByTag("portal"); object oSpawnPoint2 = GetObjectByTag("soznanie_portal"); object oArea = GetArea(oSpawnPoint2); if (GetArea(oRespawner) == oArea) { AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint2))); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner); RemoveEffect(oRespawner, EffectDeath()); } else; int nXP = GetXP(oRespawner); int nPenalty = 50 * GetHitDice(oRespawner); int nHD = GetHitDice(oRespawner); int nMin = ((nHD * (nHD - 1)) / 2) * 1000; int nNewXP = nXP - nPenalty; if (nNewXP < nMin) nNewXP = nMin; SetXP(oRespawner, nNewXP); int nGoldToTake = FloatToInt(0.10 * GetGold(oRespawner)); if (nGoldToTake > 10000) { nGoldToTake = 10000; } AssignCommand(oRespawner,JumpToLocation(GetLocation(oSpawnPoint))); AssignCommand(oRespawner, TakeGoldFromCreature(nGoldToTake, oRespawner, TRUE)); DelayCommand(4.0, FloatingTextStrRefOnCreature(58299, oRespawner, FALSE)); DelayCommand(4.8, FloatingTextStrRefOnCreature(58300, oRespawner, FALSE)); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectResurrection(),oRespawner); ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(oRespawner)), oRespawner); RemoveEffect(oRespawner, EffectDeath()); } |
![]()
Сообщение
#2417
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
NSS RemoveEffect(oRespawner, EffectDeath()); } else; //^(IMG:style_emoticons/kolobok_light/i-m_so_happy.gif) ^ мдя обрами скобочками блок скрипта с выдачей пенальти и убери ";" после else. либо в первом блоке после RemoveEffect(..) поставь "return;". морду какую-то самодовольную вставило вместо пары галочек(^)... |
![]()
Сообщение
#2418
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
Первое что увидал:
NSS else; Делай так: NSS else { // Выражение } dumbo, пардон не заметил. (IMG:style_emoticons/kolobok_light/pleasantry.gif) (IMG:style_emoticons/kolobok_light/biggrin.gif) Сообщение отредактировал Waromon - Aug 3 2006, 21:04 |
![]()
Сообщение
#2419
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
NSS RemoveEffect(oRespawner, EffectDeath()); - лишнееа так - вместо елсе лучше поставь NSS if (GetArea(oRespawner) == oArea) {
... return; } // тут было else; |
![]()
Сообщение
#2420
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
От спасибо вам, все работает! Ещё один маленький шажок для меня в познаниях скриптинга))
А, вот ещё никак не могу разобраться: Скрипт на ОнДэф одного перца. Когда он умирает, должны исчезнуть плэйсеблы лучи (иметируют своего рода клетку) и ловушка. Так же другой перец, находящийся в самой как бы клетке должен подбежать ко мне и сдестроиться. Из этого всего почему-то работает только ActionForceMoveToObject и DestroyObject oRad.. Ну и переменная начисляется. NSS void main()
{ object oKiller = GetLastKiller(); object oRays = GetObjectByTag("gore_ray"); object oTrap = GetObjectByTag("gore_trap"); object oRad = GetObjectByTag("radost"); AssignCommand(oRays, ActionDoCommand(DestroyObject(oRays))); AssignCommand(oTrap, ActionDoCommand(DestroyObject(oTrap))); AssignCommand(oRad, ActionForceMoveToObject(oKiller, TRUE, 1.0, 5.0)); AssignCommand(oRad, ActionDoCommand(DestroyObject(oRad))); DelayCommand(0.5, SetCommandable(FALSE, oRad)); DelayCommand(0.5, SetCommandable(FALSE, oRays)); DelayCommand(0.5, SetCommandable(FALSE, oTrap)); SetLocalInt(oKiller, "cleanmind", GetLocalInt(oKiller, "cleanmind") + 1); } Сообщение отредактировал xHageN - Aug 4 2006, 12:11 |
![]()
Сообщение
#2421
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
NSS void main() { object oKiller = GetLastKiller(); object oRays = GetObjectByTag("gore_ray"); object oTrap = GetObjectByTag("gore_trap"); object oRad = GetObjectByTag("radost"); DestroyObject(oRays); DestroyObject(oTrap); AssignCommand(oRad, ActionForceMoveToObject(oKiller, TRUE, 1.0, 5.0)); DelayCommand(10.0f, DestroyObject(oRad)); // 10.0 заменить на время, за которое он добегает. SetLocalInt(oKiller, "cleanmind", GetLocalInt(oKiller, "cleanmind") + 1); } P.S. NSS AssignCommand(oRays, ActionDoCommand(DestroyObject(oRays))); - не надо. Достаточно NSS DestroyObject(oRays); |
![]()
Сообщение
#2422
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
[quote name='kreon' date='Aug 4 2006, 15:19' post='89089']
NSS DelayCommand(10.0f, DestroyObject(oRad)); // 10.0 заменить на время, за которое он добегает. Команда идет из стека трупа, то бишь, ничего не получится. Время нужно указывать в DestroyObject(oRad, 10.0f) Сообщение отредактировал Waromon - Aug 4 2006, 15:29 |
![]()
Сообщение
#2423
|
|
Level 3 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
NSS #include "X0_I0_SPELLS" #include "x2_inc_spellhook" void main() { object oPC = GetFirstPC(); int nDamage; float fDelay; effect eDam; string sArea = GetTag(GetArea(oPC)); effect eVis = EffectVisualEffect(VFX_IMP_FROST_S); object oCampfire = GetObjectByTag("CAMPFIRE101"); if((GetIsDay())== FALSE) { if ((GetDistanceBetween(oCampfire, oPC))> 2.0) { if (sArea == "highmounts001" || sArea == "highmounts002" || sArea == "highmounts003"|| sArea == "capitolofgom" || sArea == "ncapitolspart" || sArea == "narnpass001" ||sArea == "iceland001") { nDamage = Random(15) + 1; if(/*Fort Save*/ MySavingThrow(SAVING_THROW_FORT, oPC, 25, SAVING_THROW_TYPE_COLD, OBJECT_SELF, fDelay)) { nDamage = 0; } eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD); DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC)); //ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oPC, 1.7); } } } oPC = GetNextPC(); } Такая ситуация: Когда игрок находится в некоторых особо "холодных локациях" , он должен делать чек на стойкость против холода, или же будет получать урон. Недавно хотел внести проверку, на наличие костра рядом(тогда урон не наносится), но получил следующее. Чек на форту не делается, только с костром, который стоял ближе к игроку, во время его появления на локации, а рядом с другими желаемый результат не происходит. Пробывал через функцию GetNearestObjectByTag(), но результат тот же, подскажите пожалуйста, как научить скрипт брать в расчет и другие костры. Скрипт стоит на ХБ локации, если что. |
![]()
Сообщение
#2424
|
|
Level 8 ![]() Класс: Некромант Характер: Chaotic Evil Раса: Дракон NWN: Скриптинг [PW] ![]() |
2Waromon: afair, команды создания\уничтожения объектов не идут в стек, как и DelayCommand.
В стек их пихает только AssignCommand. А Delay все равно выполняется после(!) окончания скрипта. Надо проверить будет. 2Mandrake: NSS #include "X0_I0_SPELLS"
#include "x2_inc_spellhook" void DmgColdIfNotNearCampfire(object oPC) { object oCamp = GetFirstObjectInShape(SHAPE_SPHERE, 2.0, GetLocation(oPC), FALSE, OBJECT_TYPE_PLACEABLE); while(GetIsObjectValid(oCamp)) { if(GetTag(oCamp) == "CAMPFIRE101") return; oCamp = GetNextObjectInShape(SHAPE_SPHERE, 2.0, GetLocation(oPC), FALSE, OBJECT_TYPE_PLACEABLE); } int nDamage = Random(15) + 1; if(MySavingThrow(SAVING_THROW_FORT, oPC, 25, SAVING_THROW_TYPE_COLD, OBJECT_SELF, 0.0)) nDamage = 0; effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_COLD); ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oPC); } void main() { object oPC = GetFirstPC(); string sArea = GetTag(GetArea(oPC)); if(!GetIsDay() && (sArea == "highmounts001" || sArea == "highmounts002" || sArea == "highmounts003"|| sArea == "capitolofgom" || sArea == "ncapitolspart" || sArea == "narnpass001" ||sArea == "iceland001")) DmgColdIfNotNearCampfire(oPC); } |
![]()
Сообщение
#2425
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
QUOTE(kreon @ Aug 4 2006, 16:40) [snapback]89102[/snapback] 2Waromon: afair, команды создания\уничтожения объектов не идут в стек, как и DelayCommand. В стек их пихает только AssignCommand. А Delay все равно выполняется после(!) окончания скрипта. Надо проверить будет. Просто, если NPC умрет - то и DelayCommand пропадет вместе с ним, проверь. (IMG:style_emoticons/kolobok_light/wink3.gif) По поводу стека ошибся, не так выразился. QUOTE Начинающий скриптер. (IMG:style_emoticons/kolobok_light/friends.gif) |
![]()
Сообщение
#2426
|
|
Level 3 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
kreon, большое спасибо (IMG:style_emoticons/kolobok_light/thank_you.gif)
|
![]()
Сообщение
#2427
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
QUOTE(kreon @ Aug 4 2006, 16:19) [snapback]89089[/snapback] NSS void main() { object oKiller = GetLastKiller(); object oRays = GetObjectByTag("gore_ray"); object oTrap = GetObjectByTag("gore_trap"); object oRad = GetObjectByTag("radost"); DestroyObject(oRays); DestroyObject(oTrap); AssignCommand(oRad, ActionForceMoveToObject(oKiller, TRUE, 1.0, 5.0)); DelayCommand(10.0f, DestroyObject(oRad)); // 10.0 заменить на время, за которое он добегает. SetLocalInt(oKiller, "cleanmind", GetLocalInt(oKiller, "cleanmind") + 1); } P.S. NSS AssignCommand(oRays, ActionDoCommand(DestroyObject(oRays))); - не надо. Достаточно NSS DestroyObject(oRays); Пробовал.. Таким оброзам лучи не дестроятся и не дестроится oRad. Вобщем я переписал скрипт, остались только эти лучи, незнаю как их заставить исчезнуть.. Может визуальные плэйсеблы не поддаются обычным командам типа дестроя? Или в свойствах их надо поковыряться.. я вот думаю насчет пункта Шум(статик) влияет он на скрипты или нет.. --- Ага, не влияет. Дело в самом обьекте чтоли? Не берёт его ничё... Их захайдить какнить можно? Сообщение отредактировал xHageN - Aug 4 2006, 18:02 |
![]()
Сообщение
#2428
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Хех, распространенная проблема. Убери галку "статик" с объекта и будет счастье. (IMG:style_emoticons/kolobok_light/wink3.gif)
|
![]()
Сообщение
#2429
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
QUOTE(-fenix- @ Aug 4 2006, 19:27) [snapback]89117[/snapback] Хех, распространенная проблема. Убери галку "статик" с объекта и будет счастье. (IMG:style_emoticons/kolobok_light/wink3.gif) Так я в предыдушем посте написал свою мысль про статик... Включал, убирал - не дестоится луч! ----- Я понял свою ошибку. Действительно, без статика обьект дестроится.. Просто я задал один таг группе лучей и они не исчезали. Попробовал сейчас одному поставить и он исчес. Похоже придется всем этим лучам уникальные теги писать и утолщать скрипт... ё моё (IMG:style_emoticons/kolobok_light/nea.gif) Сообщение отредактировал xHageN - Aug 4 2006, 18:37 |
![]()
Сообщение
#2430
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(xHageN @ Aug 4 2006, 19:30) [snapback]89118[/snapback] Похоже придется всем этим лучам уникальные теги писать и утолщать скрипт... ё моё (IMG:style_emoticons/kolobok_light/wizard.gif) NSS //--- удалить все объекты с тэгом "gore_ray"
object oObj; int nIdx = 0; while (GetIsObjectValid(oObj = GetObjectByTag("gore_ray", nIdx))) { DestroyObject(oObj); nIdx++; } //--- |
![]()
Сообщение
#2431
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
Перед основной фун-цией поставь:
NSS void DestroyRays()
{ int i=0; object oObject = GetObjectByTag("gore_ray", i); while (GetIsObjectValid(oObject)) { DestroyObject(oObject); ++i; oObject = GetObjectByTag("gore_ray", i); } } Сообщение отредактировал Waromon - Aug 7 2006, 20:06 |
![]()
Сообщение
#2432
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
Эээх, а я уже все по геморному сделал, поторопился видать.. А эти скриптины я на будущее учту (IMG:style_emoticons/kolobok_light/declare.gif) Спасибо за помощь, столько нового сегодня узнал! (IMG:style_emoticons/kolobok_light/yahoo.gif)
|
![]()
Сообщение
#2433
|
|
Level 1 Класс: Монах Характер: Lawful Neutral Раса: Человек ![]() |
Помогите!
Первое : Обновил игру до версии 1.62. Скачал конвертер MP3 to BMU - запускаю - пишет, что не может запустить, нужен какой-то патч 76. Что странно - до этого я его запускал, потом игру переустановил - и не запускается. Второе : Как покрасить текст в меню диалога в : Синий, зеленый, красный. Третье : У меня в редакторе не хватает много фоновых звуков (гроза, ливень и т.д.) Где их можно найти? Заранее спасибо. Извините, если такие вопросы были - найти на 98 страницах уже ничего невозможно... |
![]()
Сообщение
#2434
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Noob_scripter, не 76, а 67. Если быть точным, то 1.67. Обнови игру до версии 1.67, тогда утилита у тебя должна заработать.
В диалоговом редакторе есть токены, которые можно ставить в любой части текста, чтобы выделить его другим цветом (<StartAction><StartHighlight><StartCheck>). Все они закрываются токеном "</Start>". <StartAction> - красный <StartHighlight> - синий <StartCheck> - зеленый Пример: <StartCheck>Убеждение</Start> Я думаю, что вы все же согласитесь на мое предложение! А у тебя в каком порядке установлена игра? Есть ли в наличие Sou (первый аддон к игре)? Сообщение отредактировал Zirrex - Aug 9 2006, 16:17 |
![]()
Сообщение
#2435
|
|
Level 1 Класс: Некромант Характер: Chaotic Good Раса: Полуэльф ![]() |
Скажите пожалуйста:
1. Решил в модуле сделать эпизод тюремного заключения. В сявязи с этим появился вопрос - можно ли из инвентаря перса как бы "скопировать" все шмотки, чтобы при попадании в тюрьму можно было очистить инвентарь, а потом перекинуть все, что было на персе в какойнить сундук (типа покидать в комнату отобранных вещей, чтоб их забрать можно было при побеге))? Если можно, пару команд скрипта. На запоминание вещей и закидвание их в сундук (ну или просто на землю). 2. Хотел еще сделать турнир. Нужно чтобы при смерти перса все начиналось заного. То есть появлялись все мобы, запирались все двери, кароче все приводилось к первоначальному виду. Можно такое провернуть? Если да, то подскажите опять же команды. (IMG:style_emoticons/kolobok_light/bb.gif) Сообщение отредактировал xHageN - Aug 10 2006, 18:10 |
![]() ![]() |
Текстовая версия | Сейчас: 28th April 2025 - 20:36 |