
Ставь желательно нивидемый обьект, скриптик на OnHeartbeat и вперед.
PS: феникс ведь все расписал...
QUOTE |
//это вейпы. они обозначают место, на котором создаются плейсы ночью object oWP_1 = GetWaypointByTag("ТАГ первого"); object oWP_2 = GetWaypointByTag("ТАГ второго"); object oWP_3 = GetWaypointByTag("ТАГ третьего"); |
Neverwinter Script Source |
//это вейпы. они обозначают место, на котором создаются плейсы ночью object oWP_1 = GetWaypointByTag("ТАГ первого"); object oWP_2 = GetWaypointByTag("ТАГ второго"); object oWP_3 = GetWaypointByTag("ТАГ третьего"); |
QUOTE |
И что такое "ResRes_плейса1"? |
Neverwinter Script Source |
void main() { CreateItemOnObject("nw_it_gem012", GetPCSpeaker(), 1); //Выдаем предмет по ResRes. } |
QUOTE |
object oObject_1 = GetObjectByTag("ТАГ первого"); |
QUOTE |
object oWP_1 = GetWaypointByTag("ТАГ первого"); |
QUOTE |
CreateObject(OBJECT_TYPE_PLACEABLE, "ResRes_Плейса1", GetLocation(oWP_1)); |
Neverwinter Script Source |
//::////////////////////////////////////////////// //:: OnUserDefaine am_cud_spawn //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* СКРИПТ НЕПОСРЕДСТВЕННО ИСПОЛНЯЕТ ОБМЕН PLC_ ОБЪЕКТОВ В ЛОКАЦИЯХ В СЛУЧАЕ РАЗРУШЕНИЯ И В СЛУЧАЕ ВХОДА РС В ЛОКАЦИЮ ПО СИГНАЛУ Скрипт спавнящий разных PLC объекты на локациях. AM_PLC_SP_[+ТАГ OBJECT_SELF] - наши объекты. */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 28.11.2005 //::///////////////////////////////////////////// location CreateRandomLocation(object oTarget, float fRadius, int bOnLine = TRUE) { if(!bOnLine) fRadius=IntToFloat(Random(FloatToInt(fRadius))); float iXO=VectorMagnitude(GetPosition(oTarget))*cos(VectorToAngle(GetPosition(oTarget))); float iYO=VectorMagnitude(GetPosition(oTarget))*sin(VectorToAngle(GetPosition(oTarget))); float fRndomAngle=IntToFloat(Random(360)); location lNEW=Location(GetArea(oTarget),Vector(iXO+fRadius*cos(fRndomAngle),iYO+fRadius*sin(fRndomAngle)),360.0); return lNEW; } void Debug(string message) { object oPC = GetFirstPC(); if (!GetLocalInt(GetModule(), "DEBAG_PC")) { SendMessageToPC(oPC, "Debag message: "+message); } if (!GetLocalInt(GetModule(), "DEBAG_DM")) { SendMessageToAllDMs("Debag message to DMs: "+message); } } void main() { int nEvent = GetUserDefinedEventNumber(); if (GetLocalInt(OBJECT_SELF, "STOP")) return; // Отключаем, если надо if (GetLocalInt(OBJECT_SELF, "DAYS_WAITING")>0) return; //======================== USER DEFINED EVENT=================================== if (nEvent == 7000) // nEvent == 7000 - сигнализируем скриптом. У меня так, у тебя может быть другое { if (GetLocalInt(OBJECT_SELF, "STOP")) return; object oSelf = OBJECT_SELF; string sTag = GetTag(oSelf); // Таг невидимого объекта (Общий таг группы) object oPlc = GetNearestObjectByTag("AM_PLC_SP_"+sTag); int i=1; string sResRef = GetLocalString(oSelf, "ResRef_PLC_"+IntToString(i)); object oNext; // Следующий объект на это место location lLoc; // Место где появляется наш объект // Задержка для стандартных объектов, зависит от имени OBJECT_SELF if(GetName(oSelf)=="Spawn PLC System") SetLocalInt(oNext, "DAYS_WAITING", Random(5)+1); float f = GetLocalFloat(oSelf, "RandomLocation"); if(f!=0.0)lLoc = CreateRandomLocation(oSelf, f); // Если установить на скрытый объект LocalFloat == "RandomLocation" // то ее значение будет радиусом на которм будет пояляться объект. // Если поставить один объект в точку, то все следующие будут // появляться на его месте. Если не ставить НИЧЕГО, то все объекты // будут создаваться на этом невидимом объекте. if(f==0.0) { if(!GetLocalInt(oSelf, "DO_THIS")) { if(oPlc != OBJECT_INVALID) { SetLocalLocation(oSelf, "SPAWN", GetLocation(oPlc)); } else { SetLocalLocation(oSelf, "SPAWN", GetLocation(oSelf)); } SetLocalInt(oSelf, "DO_THIS", TRUE); } lLoc = GetLocalLocation(oSelf, "SPAWN"); } while(sResRef!="") { i++; sResRef=GetLocalString(oSelf, "ResRef_PLC_"+IntToString(i)); } // Так, как вверху, условие было для первого пустого значения // то один порядковый номер мы отнимаем из результата i = i-1; Debug("Общее число объектов - "+IntToString(i)); int iNext = Random(i)+1; sResRef = GetLocalString(oSelf, "ResRef_PLC_"+IntToString(iNext)); Debug("Следующий - "+IntToString(iNext)); //---------------------------------------------------------------------- // Если выпал тот же ResRef, что стоит здесь //---------------------------------------------------------------------- if(sResRef == GetResRef(oPlc)) { Debug(IntToString(iNext)+" - этому PLC выпало опять быть здесь."); iNext++; // Увеличиваем его номер на еденицу if(iNext > i) iNext = 1; // Если номер больше общего кол-ва PLC, то начинаем с первого. Debug(IntToString(iNext)+" - сменим номер на еденицу больше."); } oNext = CreateObject(OBJECT_TYPE_PLACEABLE, GetLocalString(oSelf, "ResRef_PLC_"+IntToString(iNext)), lLoc,0, "AM_PLC_SP_"+sTag); DestroyObject(oPlc); } //------------------------------------------------------------------------------ } |
QUOTE (Sayran @ Dec 27 2005, 16:53) |
чтото типа линки |
QUOTE (SeDAl @ Dec 26 2005, 19:20) |
Так ResRes и ResRef - это одно и тоже? В скрипт нельзя писать ResRef заместо ResRes? |
QUOTE (Sayran @ Dec 27 2005, 17:27) |
неполучаится ничего и все тут..... |
QUOTE (Sayran @ Dec 27 2005, 18:27) |
Со встречами случайными я разобрался,это просто,мне нужен такой скрипт,что б например герой появился на карте убил моба,а он допустим через минуту респаунился,на этой же карте в этом же месте,неполучаится ничего и все тут..... |
Neverwinter Script Source |
//это мы написали функцию, чтобы можно было CreateObject использовать в функции DelayCommand void ActionCreateObject(int iIbjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag=""); void ActionCreateObject(int iIbjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag="") { CreateObject(iIbjectType, sTemplate, lLocation, bUseAppearAnimation, sNewTag); } //это само действие void main() { location lLoc = GetLocation(OBJECT_SELF);//место, где умер моб string sString = "deer002";//тут указываешь его РесРеф в палитре //создаем его на месте смерти. 3.0 - это время, через которое создастся моб DelayCommand(3.0, ActionCreateObject(OBJECT_TYPE_CREATURE, sString, lLoc)); } |
QUOTE (Lex @ Dec 27 2005, 19:32) |
1. ты даешь тело функции над void main() так что описание функции не нужно. |
QUOTE |
//это мы написали функцию, чтобы можно было CreateObject использовать в функции DelayCommand |
QUOTE (Lex @ Dec 27 2005, 19:32) |
2. ты сам проверял? Если труп исчезает, то твой DelayCommand пропадет вместе с ним. |
QUOTE (-fenix- @ Dec 27 2005, 18:21) |
//это мы написали функцию, чтобы можно было CreateObject использовать в функции DelayCommand void ActionCreateObject(int iIbjectType, string sTemplate, location lLocation, int bUseAppearAnimation=FALSE, string sNewTag=""); |
Neverwinter Script Source |
void main() // Cкрипт на onUsed рычага. { object oPC = GetLastUsedBy();//Определяем игрока, в данном случаее ето тот кто юзает обьект. object oBa = OBJECT_SELF;//Так все упрощается. object oCel = GetObjectByTag("CEL");//Объект на который должен быть скастован спелл. int nSpell = SPELL_FIREBALL;//Определяем переменную скастованного спелла, сейчас это фаербол //Но может быть и другой (набери в фильтре констант: SPELL_*) if (((GetIsObjectValid(oCel)) && GetDistanceToObject(oCel)<=40.0f) && GetLocalInt(OBJECT_SELF,"BALL")==!1) //Длинная проверка. Если обьект "живой" и находится на дистанции больше или равной 40, а так же проверка на локалку (сейчас поймешь зачем) { AssignCommand(oBa, PlayAnimation(ANIMATION_PLACEABLE_ACTIVATE));//Активируем плейс AssignCommand(oBa, DelayCommand(0.6, ActionCastFakeSpellAtObject(nSpell,oCel, PROJECTILE_PATH_TYPE_DEFAULT)));//Запускаем снаряд. НО! Снаряд "пустышка", вреда не наносит, если нужен боевой снаряд то замени фун=цию на: ActionCastSpellAtObject SetLocalInt(OBJECT_SELF,"BALL",1);//Уст. локальную переменную для эффекта перезарядки баллисты. DelayCommand(5.0, SetLocalInt(OBJECT_SELF,"BALL",0));//Снимаем локалку, типа перезарядилась DelayCommand(5.3, AssignCommand(oBa, PlayAnimation(ANIMATION_PLACEABLE_DEACTIVATE))); } else if(GetLocalInt(OBJECT_SELF,"BALL")==1)//Думаю по спиакам понятно. { FloatingTextStringOnCreature("Баллиста перезаряжается...",oPC); } else if(!GetIsObjectValid(oCel))//Думаю по спиакам понятно. { FloatingTextStringOnCreature("Обьект уничтожен...",oPC); } else if(GetDistanceToObject(oCel)>40.0f)//Думаю по спиакам понятно. { FloatingTextStringOnCreature("Обьект слишком далеко!",oPC); } } |
Neverwinter Script Source |
void main() { object oEnter = GetEnteringObject();//Тот кто наступил на триггер. object oBall = GetNearestObjectByTag("BALLISTA");//Таг ближайшей баллисты. object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);//Игрок if ((GetTag(oEnter)=="TAG_ENTER") || GetIsPC(oPC)) /* Проверка на таг, если таг вошедшего равен: TAG_ENTER или вошедший игрок, ТО: (Можешь добавить проверку на другие таги, в этом помогут операторы && - И, || - или) */ { AssignCommand(oBall, ActionCastSpellAtObject(SPELL_FIREBALL,oEnter,PROJECTILE_PATH_TYPE_DEFAULT)); //Кастуем фаерболл. } } |
QUOTE (Dik Morris @ Jan 2 2006, 09:50) |
AssignCommand(oBa, DelayCommand(0.6, ActionCastFakeSpellAtObject(nSpell,oCel, PROJECTILE_PATH_TYPE_DEFAULT)));// |
QUOTE (NedWarN @ Jan 2 2006, 06:19) |
Всем Сорри >> нет Возможности Использовать NSS! |
QUOTE (Lex @ Jan 2 2006, 23:49) |
не PROJECTILE_PATH_TYPE_DEFAULT а PROJECTILE_PATH_TYPE_BALLISTIC. |
QUOTE (justshurik @ Jan 3 2006, 00:39) |
И с DEFAULT и с BALLISTIC нормально работает |
QUOTE (justshurik @ Jan 3 2006, 00:39) |
Обьясните пожалуйста, что значит сообщение: СКРИПТ ххххх, СЛИШКОМ МНОГО ИНСТРУКЦИЙ. |
Neverwinter Script Source |
//Скрипт на onHeartBeat баллисты. //Баллиста будет палит по игроку или НПС каждые шесть секунд, вплоть до смерти, //мишени. void main() { object oBal = OBJECT_SELF;//Сама баллиста object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);//Игрок object oNPC = GetNearestObjectByTag("");//НПС (выше ты писал что нужна проверка по тагу) if ((GetIsObjectValid(oPC)) && GetDistanceToObject(oBal)<=30.0f) //Приверка, если игрок жив и находится на дистанции 30 метров то: { AssignCommand(oBal, ActionCastSpellAtObject(SPELL_FIREBALL,oPC,PROJECTILE_PATH_TYPE_DEFAULT)); //Шарахнем фаербольчиком : D } else if ((GetIsObjectValid(oNPC)) && GetDistanceToObject(oBal)<=30.0f) /* А если жив нпс то: (можно легко добавить еще проверку на НПС, юзая операторы || (или) выглядеть будет примерно так ![]() else if ((GetIsObjectValid(oNPC)) || GetIsObjectValid(GetNearestObjectByTag("ТАГ ВТОРОГО НЕПИСЯ"))) */ { AssignCommand(oBal, ActionCastSpellAtObject(SPELL_FIREBALL,oPC,PROJECTILE_PATH_TYPE_DEFAULT)); //Шарахнем фаербольчиком : D } } |
QUOTE |
Спасибо за ответ. Только я не совсем понял, что такое ХБ? |
QUOTE (justshurik @ Jan 3 2006, 17:53) |
Спасибо за ответ. Только я не совсем понял, что такое ХБ? |
Neverwinter Script Source |
void CreateObjectVoid(int nObjectType, string sTemplate, location lLoc, int bUseAppearAnimation = FALSE) { CreateObject(nObjectType, sTemplate, lLoc, bUseAppearAnimation); } void main() { object NPC = OBJECT_SELF;//Ето наш NPC... object PLE = GetWaypointByTag("my_ast_oldw001");//Таг вейпа к которому нада подойти... location lLocation = GetLocation(GetObjectByTag("item008")); if(GetLocalInt(NPC,"NPC")==!TRUE)//Проверка на локалку... { ActionDoCommand(AssignCommand(NPC, ActionMoveToObject(PLE,FALSE)));//подойдем к плейсу... ActionDoCommand(AssignCommand(NPC, ActionPlayAnimation(ANIMATION_LOOPING_GET_MID))); DelayCommand(4.0f,AssignCommand(NPC, CreateObjectVoid(OBJECT_TYPE_PLACEABLE,"item008",lLocation))); ActionDoCommand(SetLocalInt(NPC,"NPC",TRUE));//Локалку ставим... } } |
Neverwinter Script Source |
void main() { object oHPC = GetNearestObjectByTag("o_HPC001", OBJECT_SELF, 1); object olABKA = GetObjectByTag("o_laBka001", 0); object oast = GetObjectByTag("o_piut001", 0); if (GetIsDay) { ActionMoveToObject(olABKA, FALSE, 1.0f); } else (GetIsNight) { ActionMoveToObject(olABKA, FALSE, 1.0f); } } |
Neverwinter Script Source |
void main() { object oHPC = GetNearestObjectByTag("o_HPC001", OBJECT_SELF, 1); object olABKA = GetObjectByTag("o_laBka001", 0); object oast = GetObjectByTag("o_piut001", 0); if (GetIsDay()) { ActionMoveToObject(olABKA, FALSE, 1.0f); } else if (GetIsNight()) { ActionMoveToObject(olABKA, FALSE, 1.0f); } } |
QUOTE (Nashman @ Jan 4 2006, 03:21) |
Проигрывается анимация, возле стола, и старуха как будто бы ставит на стол пирог(o_pie001), на самом деле перед этим, пирог нужно сделать невидимым, а потом когда проиграет анимация – видимым. |
Neverwinter Script Source |
if(GetLocalInt(NPC,"NPC")==!TRUE) //Шо за отсебятина? if(GetLocalInt(NPC,"NPC")==FALSE) // Тоды так if(!GetLocalInt(NPC,"NPC")) // Или так проверь. |
QUOTE |
-Вариант 1: Проигрывается анимация, возле стола, и старуха как будто бы ставит на стол пирог(o_pie001), на самом деле перед этим, пирог нужно сделать невидимым, а потом когда проиграет анимация – видимым. |
Neverwinter Script Source |
ApplyEffectToObject |
Neverwinter Script Source |
RemoveEffect |
QUOTE |
Вариант 2: Вместо невидимого пирога, просто создать свой пирог из тегом o_pie001. |
QUOTE |
Просто из инвентаря старухи передать пирог в мой инвентарь. |
Neverwinter Script Source |
CreateItemOnObject |
QUOTE |
- Где почитать об рандомных разговорах статических Неписей? |
Neverwinter Script Source |
void main() { switch (Random(3)+1) { case 1: SpeakString("ФРАЗА_1"); break; case 2: SpeakString("ФРАЗА_2"); break; case 3: SpeakString("ФРАЗА_3"); break; }//В общем что то в этом духе : ). } |
QUOTE |
- Есть неписи, и когда на улице день, они идут на улицу к лавке, когда ночь – в дом? |
QUOTE |
Сделать PLC объект невидимым нельзя. |
Neverwinter Script Source |
EffectVisualEffect(VFX_DUR_CUTSCENE_INVISIBILITY) |
QUOTE (Dik Morris @ Jan 4 2006, 12:25) |
Можно 100%. |
QUOTE (Nashman @ Jan 4 2006, 16:33) |
Нужно не контролировать День и Ночиь и Вечер, а что бы они сами по сибе шли. |
Neverwinter Script Source |
// The subject will jump to lLocation instantly (even between areas). // If lLocation is invalid, nothing will happen. void ActionJumpToLocation(location lLocation) // Jump to an object ID, or as near to it as possible. void ActionJumpToObject(object oToJumpTo, int bWalkStraightLineToPoint=TRUE) // Jump to lDestination. The action is added to the TOP of the action queue. void JumpToLocation(location lDestination) // Jump to oToJumpTo (the action is added to the top of the action queue). void JumpToObject(object oToJumpTo, int nWalkStraightLineToPoint=1) |
Neverwinter Script Source |
void main() { object oPC = GetPCSpeaker(); // это герой object oNPC = OBJECT_SELF; //это НПС object oWP_PC = GetWaypointByTag("ТАГ ВЕЙПОИНТА ИГРОКА"); object oWP_NPC = GetWaypointByTag("ТАГ ВЕЙПОИНТА НПС"); AssignCOmmand(oPC, ClearAllActions());//почистим акции на всякий пожарный AssignCommand(oPC, JumpToObject(oWP_PC));//герой прыгает к вейпоинту AssignCommand(oNPC, JumpToObject(oWP_NPC));//НПС прыгает к вейпоинту } |
Neverwinter Script Source |
#include "nw_i0_tool" int StartingConditional() { object oPC = GetPCSpeaker(); if(!HasItem(oPC, "ТАГ_ПРЕДМЕТА")) return FALSE; return TRUE; } |
Neverwinter Script Source |
/* :: Скрипт на onDamaget Npc. :: Когда игрок, атакует Npc, происход. проверка, если HP у Npcменьше 10 :: то он становится дружественным, и начинаег диалог с игроком. */ void main() { object NPC = OBJECT_SELF;//Сам НПС object oPC = GetLastDamager();//Игрок. (А точнее тот кто атакует Npc) if (GetCurrentHitPoints(NPC)<=10)//Проверка на HP { SetImmortal(NPC,TRUE);//Делаем НПС бессмертным; AssignCommand(oPC, ClearAllActions(TRUE));//Чистим актионы у игрока; AssignCommand(NPC, ClearAllActions(TRUE));//Чистим актионы у Npc; AssignCommand(NPC, SpeakString("Стой! Я не хочу больше дратся!"));//Думаю понятно; ClearPersonalReputation(oPC, NPC);//Чистим репутацию; ClearPersonalReputation(NPC, oPC);//Чистим репутацию; ChangeToStandardFaction(NPC, STANDARD_FACTION_COMMONER);//Меняем фракцию на простолюдин; //(можешь сам настроить на какую именно, набери в фильтре конст. STANDARD_FACTION*) DelayCommand(1.0f, AssignCommand(NPC, ActionStartConversation(oPC))); //Заставляем Npc говорить с игроком. } } |
QUOTE (Dik Morris @ Jan 6 2006, 12:33) |
AssignCommand(oPC, ClearAllActions());//Чистим актионы у игрока; AssignCommand(NPC, ClearAllActions());//Чистим актионы у Npc; |
QUOTE |
дрался с ним и у НПС осталось 10 |
QUOTE (Lex @ Jan 7 2006, 14:17) |
скриптами триггер не сделаеть. |
Neverwinter Script Source |
void main() { object oW1 = GetWaypointByTag("ast_tavern1_001"); object oW2 = GetWaypointByTag("ast_tavern1_002"); object oW3 = GetWaypointByTag("ast_tavern1_003"); object oW4 = GetWaypointByTag("ast_tavern1_004"); object oNC = OBJECT_SELF; string speek1 = "Что будете заказывать?"; string speek2 = "Вот Ваш заказ. Еще что-то?"; string speek3 = "Ваше пиво."; string speek4 = "Извените, но мы такого не продаем."; ActionDoCommand(ActionMoveToObject(oW1, FALSE, 1.0f)); ActionWait(2.0); switch (Random(4)+1) { case 1: ActionDoCommand(ActionSpeakString(speek1, TALKVOLUME_TALK)); break; case 2: ActionDoCommand(ActionSpeakString(speek2, TALKVOLUME_TALK)); break; case 3: ActionDoCommand(ActionSpeakString(speek3, TALKVOLUME_TALK)); break; case 4: ActionDoCommand(ActionSpeakString(speek4, TALKVOLUME_TALK)); break; } ActionWait(4.0); ActionDoCommand(ActionMoveToObject(oW2, FALSE, 1.0f)); ActionWait(2.0); switch (Random(4)+1) { case 1: ActionDoCommand(ActionSpeakString(speek1, TALKVOLUME_TALK)); break; case 2: ActionDoCommand(ActionSpeakString(speek2, TALKVOLUME_TALK)); break; case 3: ActionDoCommand(ActionSpeakString(speek3, TALKVOLUME_TALK)); break; case 4: ActionDoCommand(ActionSpeakString(speek4, TALKVOLUME_TALK)); break; } ActionDoCommand(ActionMoveToObject(oW3, FALSE, 1.0f)); ActionWait(4.0); ActionDoCommand(ActionMoveToObject(oW4, FALSE, 1.0f)); ActionWait(2.0); } |