/* //////////////////////////////// //////Created By: Avaddon////// //////Date: 04. 12. 2004////// ///////////////////////////// \\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \\\\\INN ROOM FREE REST\\\\\\\ \\\\\\Put this script:\\\\\\\\\ \\\\\\\"OnPlayerRest"\\\\\\\\\\\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ */ void main() { //Эффекты сна effect eBlack = EffectVisualEffect(VFX_DUR_BLACKOUT); effect eZzz = EffectVisualEffect(VFX_IMP_SLEEP); effect eSlow = EffectSlow();
object oPC = GetLastPCRested();
//Вейпоинт с тэгом "BED" должен находитсЯ перед кроватью на полу object oBed = GetNearestObjectByTag("BED",oPC);
/*Вейпоинт с тегом "SLEEP" должен находитсЯ на самой кровати (Я надеюсь вы скачали хак с фиксом кровати на nwvault.ign.com)*/ object oSleep = GetNearestObjectByTag("SLEEP",oPC);
//Берем предметы в слотах object oArmor =GetItemInSlot(INVENTORY_SLOT_CHEST,oPC); object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); object oBoots = GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC); object oHelmet = GetItemInSlot(INVENTORY_SLOT_HEAD,oPC); object oBelt = GetItemInSlot(INVENTORY_SLOT_BELT,oPC); object oCloak = GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC); object oArms = GetItemInSlot(INVENTORY_SLOT_ARMS,oPC);
//В качестве тэгов предметов читаем переменные с игрока string sFree = GetTag(GetArea(oPC)); string sArmor = GetLocalString(oPC,"armor"); string sRightHand = GetLocalString(oPC,"right"); string sLeftHand = GetLocalString(oPC,"left"); string sHelmet = GetLocalString(oPC,"helmet"); string sBoots = GetLocalString(oPC,"boots"); string sBelt = GetLocalString(oPC,"belt"); string sCloak = GetLocalString(oPC,"cloak"); string sArms = GetLocalString(oPC,"arms");
/*Проверка арены в которой находитсЯ игрок решивший отдохнуть. Если тег арены начинаетсЯ с "free" (например "free_inn_rooms"), то наш скрипт начинает работу*/ if(GetStringLeft(sFree,4)=="free") { //Если игрок еще не на кровати то... if(GetLocalInt(GetLastPCRested(),"on_bed")!=1) { //Записываем на игрока переменные с тегами одетых на него вещей SetLocalString(oPC,"armor",GetTag(oArmor)); SetLocalString(oPC,"right",GetTag(oRightHand)); SetLocalString(oPC,"left",GetTag(oLeftHand)); SetLocalString(oPC,"helmet",GetTag(oHelmet)); SetLocalString(oPC,"boots",GetTag(oBoots)); SetLocalString(oPC,"belt",GetTag(oBelt)); SetLocalString(oPC,"cloak",GetTag(oCloak)); SetLocalString(oPC,"arms",GetTag(oArms));
/*За 2 секунды он уже должен быть у кровати(расчитано на маленькую комнату с кроватью. Раздеваем игрока. Снимаем все кроме колец, боеприпасов, и амулета.*/ DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oArmor))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oRightHand))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oLeftHand))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oHelmet))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oBoots))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oBelt))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oCloak))); DelayCommand(2.0,AssignCommand(oPC,ActionUnequipItem(oArms)));
//При событии отдых начат (в гостинице соответственно)... if (GetLastRestEventType()==REST_EVENTTYPE_REST_STARTED) { //ОтменЯем отдых и выполнЯем следущие действиЯ AssignCommand(oPC,ClearAllActions());
//Подходим к кровати(как он подойдет - тут же разденетсЯ) AssignCommand(oPC,ActionMoveToObject(oBed));
//Когда разденетсЯ - забираемсЯ на кровать DelayCommand(2.0,AssignCommand(oPC,ActionJumpToObject(oSleep)));
//ВыставлЯем переменную "Игрок уже на кровати" DelayCommand(2.5,SetLocalInt(oPC,"on_bed",1));
//Начинаем отдых DelayCommand(3.0,AssignCommand(oPC,ActionRest()));
//Накладываем эффекты сна DelayCommand(3.5,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZzz,oPC,10.0)); DelayCommand(4.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eBlack,oPC,60.0)); }//Заканчиваем условие "Если Отдых Начат" }//Заканчиваем условие "Если игрок не на кровати" }//Заканчиваем условие "Если тег арены начинаетсЯ с 'free' " else { /*Здесь - действие которое происходит если тег арены в которой игрок находитсЯ не начинаетсЯ с "free". Тут "AssignCommand(oPC,ClearAllActions()" - отменЯет отдых. Вы же, можете вставить любой другой скрипт, или команды длЯ другого типа отдыха, например на природе.*/ AssignCommand(oPC,ClearAllActions()); }
////////////////////////////////////////////////////////////////////// /*Если Отдых Окончен или Прерван в арене с тегом начинающимсЯ с "free" и игрок находитсЯ на кровати.*//////////////////////////////////////
if(GetStringLeft(sFree,4)=="free" && GetLocalInt(oPC,"on_bed")==1) { //Если Отдых Завершен if (GetLastRestEventType()==REST_EVENTTYPE_REST_FINISHED) { //Одеваем игрока обратно (теги предметов бывших на нем одетыми читаем из локалок игрока) DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sArmor), INVENTORY_SLOT_CHEST))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sRightHand), INVENTORY_SLOT_RIGHTHAND))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sLeftHand), INVENTORY_SLOT_LEFTHAND))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sBoots), INVENTORY_SLOT_BOOTS))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sHelmet), INVENTORY_SLOT_HEAD))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sBelt), INVENTORY_SLOT_BELT))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sCloak), INVENTORY_SLOT_CLOAK))); DelayCommand(2.0,AssignCommand(oPC, ActionEquipItem(GetItemPossessedBy(oPC,sArms), INVENTORY_SLOT_ARMS)));
//Встаем с кровати AssignCommand(oPC,ActionJumpToObject(oBed));
//Стираем с игрока все локалки предметов и того что он был на кровати. DeleteLocalInt(oPC,"on_bed"); DeleteLocalString(oPC,"armor"); DeleteLocalString(oPC,"right"); DeleteLocalString(oPC,"left"); DeleteLocalString(oPC,"helmet"); DeleteLocalString(oPC,"boots"); DeleteLocalString(oPC,"belt"); DeleteLocalString(oPC,"cloak"); DeleteLocalString(oPC,"arms");
//Убираем эффекты сна RemoveEffect(oPC,eBlack); }//Заканчиваем условие "Если Отдых Завершен
/*Если Отдых Прерван То одевать игрока не будем (он проснулсЯ с перепугу, или разбудили там.. Не дали спокойно собратьсЯ вобщем.*/ if (GetLastRestEventType()==REST_EVENTTYPE_REST_CANCELLED) { //Встаем с кровати AssignCommand(oPC,ActionJumpToObject(oBed));
//Стираем с игрока все локалки предметов и того что он был на кровати. DeleteLocalInt(oPC,"on_bed"); DeleteLocalString(oPC,"armor"); DeleteLocalString(oPC,"right"); DeleteLocalString(oPC,"left"); DeleteLocalString(oPC,"helmet"); DeleteLocalString(oPC,"boots"); DeleteLocalString(oPC,"belt"); DeleteLocalString(oPC,"cloak"); DeleteLocalString(oPC,"arms");
/*Эффекты сна не снимаем И накладываем Blackout и эффект замедлениЯ, чтобы игрок 30 секунд приходилв себЯ.*/
ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eSlow,oPC,30.0); //Периодически игрок полусонный подхрапывает ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZzz,oPC,10.0); DelayCommand(10.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZzz,oPC,10.0)); DelayCommand(20.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eZzz,oPC,10.0)); } } } |