Сделанный демо-модуль:
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 //Ну, а если "жертва" еще не заражена
, то {
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"));
// выкидывает булыжник из инвента 
}
}
}
//конец}
Neverwinter Script
/* Автор: Lamonde, aka Veliant (nordock.ru)
Дата: 09/08/2008
Скрипт вешается на on_heart_beat модуля
Цель скрипта: превращать днем перса обратно в "себя", а ночью в "волка"
Скрипт большей, но не боимся и читаем коментарии, тут все просто
*/void main()
{
//Банальная распальцовка, кто где, что и зачем object oPC = GetFirstPC();
//первый в списке игрок (в сингле он же и последний
) object oMoonStone = GetItemPossessedBy(oPC,
"moon_stone000");
//лунный камень //Строчки
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(
"Мне снился кошмарный сон..."));
//ха! ему снился кошмар? да неужели 
}
}
//конец дня //тут начинается код, который будет, что то делать ночью if (GetTimeHour() <
5)
//если время между 00.00 и 5.00 утрами {
//начало if (nStatus ==
0)
//если наш кадр еще невинен, как овца
(не вольф) {
//тут делиться все на две части: а) есть амулет, б) без амулета 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);
//прибавляем к отсчитанным дням еще денек другой, точнее ночку 
}
else// если прошло 7 дней (параметр Куре 7), то {
AssignCommand(oPC, ActionSpeakString(
"Болезнь отступила!..."));
// на радостях DestroyObject(GetItemPossessedBy(oPC,
"moon_stone000"));
// перс избавляется от булыжника 
}
}
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, больше к нему обращаться не будут 
}
}
SetCreatureAppearanceType(oPC, APPEARANCE_TYPE_WEREWOLF);
//преврашаемся в вольфа SetLocalInt(oMoonStone, sStatus,
1);
//включаем переменную вольфа (1=значит волк - помните?) }
}
}
//конец}