![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]() ![]()
Сообщение
#1
|
|
Level 4 ![]() ![]() Класс: Друид Характер: True Neutral Раса: Человек ![]() |
Здравствуйте уважаемые сограждане!
Я тут думал и пришел к выводу, что игрок слишком жёстко заключён в рамки классов в невервинтере, поэтому у меня появились некоторые идеи как сделать игру интереснее и добавить некоторые фишки, такие как оборотничество(не класс), вампиричество и т. п и др. Моя проблема в том что я совершенно не разбираюсь в скриптах и поэтому надеюсь что вы поможите воплотить мои идеи. Если кому эти самы идеи интересны, отпишитесь, я с радостью предьявлю 2 из них в развернутом варианте, а пока подумаю над другими (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]() |
![]() ![]()
Сообщение
#2
|
|
Level 3 ![]() Класс: Псионик Характер: Neutral Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Сделанный демо-модуль: http://www.1-clickshare.com/download.php?f...0b343ed9b3_7482
Если есть баги, недочеты - дай знать, исправлю. Реализованно: Заражение Исцеление Как сделал? Прописал спелл "укуса" в 2да. Создал кастом тлк. Кинул спел на он_хит укуса волка. Укус закидывает булыжник в инвент персонажу. После второго укуса, када до волка доходит, что ты уже заражен - он дает стрикача (в течении 2 сек.). Теперь, если с 00.00 до 5.00 утра на персонаже не будет амулета, то Он будет на шаг ближе к излечению, но все еще будет превращаться в вольфа. Если проносит амулет 7 "превращений" (7 ночей), то болезнь отступает (булыжник удаляется из инвента). Если в течении 3х ночей, персонаж не носил амулет и не выпил лекарство, то лекарство ему уже не поможет, но (!) амулет по прежнему сможет исцелить после 7 дней его ношения. ===== Вот 3 важных кода (скрипты таймченджеров не нуждаются в коментах, там все просто) Neverwinter Script /* Автор: Lamonde, aka Veliant (nordock.ru) Дата: 09/08/2008 Спелл: "Заражение: Ликантропия" */ void main() { // тут думаю все понятно, обычная распальцовка, что да где // объекты: object oItem = GetSpellCastItem(); object oTarget = GetSpellTargetObject(); object oPlayer = GetAttackTarget(OBJECT_SELF); object oMoonStone = GetItemPossessedBy(oPlayer, "moon_stone000"); // эфекты: effect eVis = EffectVisualEffect(VFX_DUR_GLOW_RED); if (GetIsPC(oPlayer)) //Если "жертва" игрок и, {//открытие "ифов" if (GetIsObjectValid(oMoonStone)) //если он уже заражен, то { AssignCommand(OBJECT_SELF, ClearAllActions(TRUE)); //просаем все дела и AssignCommand(OBJECT_SELF, SpeakString("*Убегает, поджав хвост*")); //поджав хвост AssignCommand(OBJECT_SELF, ActionMoveAwayFromObject(oPlayer, TRUE, 50.0f)); //убегаем от него DelayCommand(2.0f, DestroyObject(OBJECT_SELF)); //после чего самоуничтожаемся } else //Ну, а если "жертва" еще не заражена (IMG:style_emoticons/kolobok_light/smile.gif) , то { if (FortitudeSave(oPlayer, 26)) //если пробили ДС 26, то { FloatingTextStringOnCreature("Вас попытались заразить ликантропией", oPlayer); //инфа о том, что вас пытались заразить } else // если не выдержал укуса в ДС 26, то { FloatingTextStringOnCreature("Вас заразили ликантропией", oPlayer); // инфа о том, что вас таки заразили CreateItemOnObject("moon_stone000", oPlayer, 1); //кидаем в сумку мун-стоун ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oTarget, 10.0f); // не большей визуальный эфект } } }//закрытие "ифов" } Neverwinter Script /* Автор: Lamonde, aka Veliant (nordock.ru) Дата: 09/08/2008 Код вешается на on_activate модуля */ void main() { object oPC = GetItemActivator(); // "кто" активировал object oItem = GetItemActivated(); // "что" активировал if (GetTag(oItem) == "pot_were_cure000") //если активированный предмет был лекарством, то {//начало object oMoonStone = GetItemPossessedBy(oPC, "moon_stone000"); //булыжник string sTime = "Time"; //время (строчка) int nTime = GetLocalInt(oMoonStone, sTime); //значение числовой переменной "Time" на булужнике //"Time" отвечает за кол-во прошедших ночей после заражения if(nTime >= 3)//если прошло 3 ночи { AssignCommand(oPC, ActionSpeakString("Это мне уже не поможет..."));//лекарство уже не поможет } else//если же еще не прошло 3 ночи { if (GetItemPossessedBy(oPC, "moon_stone000")==OBJECT_INVALID)//если игрок не заражен { AssignCommand(oPC, ActionSpeakString("Что за гадкий отвар?!..."));//лекарство ему ничего не сделает } else// но, если все таки заражен, то { AssignCommand(oPC, ActionSpeakString("Болезнь отступила!...")); //на радостях DestroyObject(GetItemPossessedBy(oPC, "moon_stone000"));// выкидывает булыжник из инвента (IMG:style_emoticons/kolobok_light/smile.gif) } } }//конец } Neverwinter Script /* Автор: Lamonde, aka Veliant (nordock.ru)
Дата: 09/08/2008 Скрипт вешается на on_heart_beat модуля Цель скрипта: превращать днем перса обратно в "себя", а ночью в "волка" Скрипт большей, но не боимся и читаем коментарии, тут все просто (IMG:style_emoticons/kolobok_light/smile.gif) */ void main() { //Банальная распальцовка, кто где, что и зачем object oPC = GetFirstPC(); //первый в списке игрок (в сингле он же и последний (IMG:style_emoticons/kolobok_light/smile.gif) ) object oMoonStone = GetItemPossessedBy(oPC, "moon_stone000"); //лунный камень //Строчки (IMG:style_emoticons/kolobok_light/smile.gif) string sStatus = "Status"; string sTime = "Time"; string sCure = "Cure"; //привязываем к инт'ам константы рас, это нам понадобиться, для того //чтобы вернуть кадра после "ночной гулянки" int nHuman = IP_CONST_RACIALTYPE_HUMAN; int nElf = IP_CONST_RACIALTYPE_ELF; int nDwarf = IP_CONST_RACIALTYPE_DWARF; int nGnome = IP_CONST_RACIALTYPE_GNOME; int nHalfling = IP_CONST_RACIALTYPE_HALFLING; int nHalf_Elf = IP_CONST_RACIALTYPE_HALFELF; int nHalf_Orc = IP_CONST_RACIALTYPE_HALFORC; //переменные на камне int nStatus = GetLocalInt(oMoonStone, sStatus);//отвечает за внешний вид, 1=оборотень, 0=человек int nTime = GetLocalInt(oMoonStone, sTime);//отвечает за время "отсидки" в образе вольфа (сколько ночей прошло) int nCure = GetLocalInt (oMoonStone, sCure);//отвечает за амулет на шее, если nCure=7, то игрок излечиться, но об этом позже //тут начинается код, который будет, что то делать днем if (GetTimeHour() > 5)// итак начнемс! Если время больше 5.00 утра, то {//начало if (nStatus == 1)//проверяем, если перед нам вольф или человек. если вольф, то { //смотрим кем наш товарищ был ранее if (GetRacialType(oPC) == nHuman) //если человек, то { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HUMAN); //меняем его апперку на человека } if (GetRacialType(oPC) == nElf) //если эльф, то { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_ELF); //меняем его апперку на эльфа } //ну и т.д. в том же духе if (GetRacialType(oPC) == nDwarf) { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_DWARF); } if (GetRacialType(oPC) == nGnome) { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_GNOME); } if (GetRacialType(oPC) == nHalfling) { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HALFLING); } if (GetRacialType(oPC) == nHalf_Elf) { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HALF_ELF); } if (GetRacialType(oPC) == nHalf_Orc) { SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_HALF_ORC); } //када он в себя превратится SetLocalInt(oMoonStone, sStatus, 0);//ставим переменную 0, обозначающую, что он не вольф и AssignCommand(oPC, ActionSpeakString("Мне снился кошмарный сон..."));//ха! ему снился кошмар? да неужели (IMG:style_emoticons/kolobok_light/smile.gif) } }//конец дня //тут начинается код, который будет, что то делать ночью if (GetTimeHour() < 5)//если время между 00.00 и 5.00 утрами {//начало if (nStatus == 0)//если наш кадр еще невинен, как овца (IMG:style_emoticons/kolobok_light/smile.gif) (не вольф) { //тут делиться все на две части: а) есть амулет, б) без амулета if (GetTag(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)) == "am_were_cure000")//а) если амулет одет { if (nCure < 7)//смотрим на сколько продвинулось лечение и, если еще не прошло 7 "целительных" ночей, то { AssignCommand(oPC, ActionSpeakString("Я не сорву этот амулет со своей шеи!"));//перс заявляет, что не снимет амулет SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_WEREWOLF);//превращается в вольфа SetLocalInt(oMoonStone, sStatus, 1);//включаем переменную вольфа (1=значит волк - помните?) SetLocalInt(oMoonStone, sCure, nCure + 1);//прибавляем к отсчитанным дням еще денек другой, точнее ночку (IMG:style_emoticons/kolobok_light/smile.gif) } else// если прошло 7 дней (параметр Куре 7), то { AssignCommand(oPC, ActionSpeakString("Болезнь отступила!..."));// на радостях DestroyObject(GetItemPossessedBy(oPC, "moon_stone000"));// перс избавляется от булыжника (IMG:style_emoticons/kolobok_light/smile.gif) } } else // б) если амулета нет { if(nTime < 3)//если прошло меньше трех ночей { SetLocalInt(oMoonStone, sTime, nTime + 1);//добавляем к счету еще ночьку другую } if(nTime == 3)//если прошло ровно 3 дня, то каждую ночь { if (WillSave(oPC, 47))//перс будет делать спас брасок против ДС 47 на волю { AssignCommand(oPC, ActionSpeakString("Нет! Я выстою против тебя!..."));//если выстоит, то тоже самое повториться на следущую ночь } else//если нет (не выстоит) { AssignCommand(oPC, ActionSpeakString("Похоже обратной дороги уже нет..."));//перс заявит, что назад уже дороги нет и... SetLocalInt(oMoonStone, sTime, nTime + 1);;//параметр Тайм гордо захлопнит за собой дверь со значением 4, больше к нему обращаться не будут (IMG:style_emoticons/kolobok_light/smile.gif) } } SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_WEREWOLF);//преврашаемся в вольфа SetLocalInt(oMoonStone, sStatus, 1);//включаем переменную вольфа (1=значит волк - помните?) } } }//конец } Сообщение отредактировал Lamonde - Aug 9 2008, 20:20 |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 15:25 |