Здравствуйте, гость ( Вход | Регистрация )
Отправлено: Aug 20 2006, 10:41 | |
Level 1 Группа: Newbie Сообщений: 5 Регистрация: 15.08.2006 Пользователь №: 2,669 |
Это мой скрипт для разных таверн.Официантка ходит по таверне подходит к разнам клиентам ,спрашивает заказ идет к стойке берерт заказ идет назад к тому же клиенту отдает ему заказ и берет плату.Время от времени отдыхает и жалуется на жизнь.Реплики впишете сами не хотелось париться. Что бы скрипты правильно работали следует создать следущие вай поинты: Bar1-сюда приходят за напитками Rest1-здесь отдыхает wt_return1-ставиться возле бара WP_TavernPatronXX_01-ставится возле клиентов у каждого клиент должен быть свой номер ХХ Zone1-ставится где нибудь не подалеку от клиентов Этот скрипт ставится на оnUserDef NSS //////////////////////////////////////////////////////////////////////////////// // Written by Angelelf 24.03.06 // Скрипт придаю щий реальную атмосферу таверне // требуются следующие вай поинты // WP_WTCommon_Bar - место где берутся заказы.Бар // WP_Rest1 - Здесь она будет отдыхать // ZoneX - этот вай поинт обозначает зону обслуживания // X это номер зоны обслуживания начинается с 1 //////////////////////////////////////////////////////////////////////////////// void DrinkOrderKid(); // Заказ ребенка void DrinkOrder(); // Заказ посетителей string CountPatrons(); // Счетчик посетителей void GetQueryString(); // void TakeBreak(); // перерыв void GetMyPay(); // получение пллаты int StartingConditional() { return TRUE; } void DrinkOrderKid() // Заказ ребенка { int nOrder= -1; string sOrder; // реплика официанта string sAmount; // Реплика при передаче заказа string sBarkeepR;// Реплика бармена nOrder= d4(); switch(nOrder) { case 1: sOrder = "Бармен,стакан молока для ребенка."; sAmount = "Вот твое молоко."; sBarkeepR = "Один стакан свежего молока готов."; break; case 2: sOrder = "Один стакан воды пожалуйста"; sAmount = "Вот вода которую вы заказывали"; sBarkeepR = "Держи."; break; case 3: sOrder = "Можешь себе представить ребенок попросил водки"; sAmount = "Простите мы не продаем водку лицам моложе 18 лет"; sBarkeepR = "Когда они поймут что водка это вредно."; break; case 4: sOrder = "________"; sAmount = "________"; sBarkeepR = "_______."; break; } SetLocalString(OBJECT_SELF, "WG_ORDER", sOrder); SetLocalString(OBJECT_SELF, "WG_AMOUNT", sAmount); SetLocalString(OBJECT_SELF, "WG_BARKEEP", sBarkeepR); } void DrinkOrder() // заказы посетителей { int nOrder= -1; string sOrder; string sAmount; string patronOrder; string sBarkeepR; nOrder= d8(); switch(nOrder) { case 1: patronOrder = "Принеси мне эля."; // заказ sOrder = ""; //реплика официанта sAmount = ""; //реплика при передачи заказа sBarkeepR = ""; //реплика бармена break; case 2: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 3: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 4: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 5: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 6: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 7: patronOrder = ""; sOrder = ""; sAmount = ""; sBarkeepR = ""; break; case 8: patronOrder = ""; sOrder = ""; sBarkeepR = ""; sAmount = ""; break; } SetLocalString(OBJECT_SELF, "PATRON_ORDER", patronOrder); SetLocalString(OBJECT_SELF, "WG_ORDER", sOrder); SetLocalString(OBJECT_SELF, "WG_AMOUNT", sAmount); SetLocalString(OBJECT_SELF, "WG_BARKEEP", sBarkeepR); } string CountPatrons() { int i=-1; int j=-1; int myZone = GetLocalInt(OBJECT_SELF,"MyZone"); float size; switch(myZone) { // Изменяйте величену size чтоб официант обслуживал разных клиентов за круг это увеличит реальность case 1: size=15.0; break; case 2: size=15.0; break; case 3: size=21.0; break; case 4: size=7.0; break; } string myTag = "Zone" + IntToString(myZone); string patronTag; object oJunk = GetFirstObjectInShape(SHAPE_CUBE, size, GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); if ((GetIsPC(oJunk) == TRUE) || (oJunk == OBJECT_SELF)) { oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } while (oJunk != OBJECT_INVALID) { while ((GetIsPC(oJunk) == TRUE) || (oJunk == OBJECT_SELF)) { oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } i++; oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } int bla=Random(i); oJunk = GetFirstObjectInShape(SHAPE_CUBE, size, GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); if ((GetIsPC(oJunk) == TRUE) || (oJunk == OBJECT_SELF)) { oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } while (oJunk != OBJECT_INVALID) { while ((GetIsPC(oJunk) == TRUE) || (oJunk == OBJECT_SELF)) { oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } j++; if (j == bla) { patronTag = GetTag(oJunk); } oJunk=GetNextObjectInShape(SHAPE_CUBE, size,GetLocation(GetWaypointByTag(myTag)), TRUE, CREATURE_TYPE_PLAYER_CHAR); } return patronTag; } void GetQueryString() // Спрашивает заказ у PC { switch(Random(4)) { case 0: ActionSpeakString ("",TALKVOLUME_TALK); break; case 1: ActionSpeakString ("",TALKVOLUME_TALK); break; case 2: ActionSpeakString ("",TALKVOLUME_TALK); break; case 3: ActionSpeakString ("",TALKVOLUME_TALK); break; } } void TakeBreak() // реплики во время перерыва { switch(Random(4)) { case 0: ActionSpeakString ("",TALKVOLUME_TALK); break; case 1: ActionSpeakString ("",TALKVOLUME_TALK); break; case 2: ActionSpeakString ("I",TALKVOLUME_TALK); break; case 3: ActionSpeakString ("",TALKVOLUME_TALK); break; } } void GetMyPay() // gjctnbntkb jnlf.n gkfne { string payAmount; switch(d4()) { case 1: payAmount = "Вот твои деньги сдачи не надо"; break; case 2: payAmount = ""; break; case 3: payAmount = ""; break; case 4: payAmount = ""; break; } SetLocalString(OBJECT_SELF,"PAY_AMOUNT",payAmount); } void main() { int nUser = GetUserDefinedEventNumber(); string sQuery; string sOrder; int myZone = GetLocalInt(OBJECT_SELF,"MyZone"); string myPatron=CountPatrons(); string sAmount; string payAmount; string patronOrder; string sBarkeepR; int isKid; object oCustomer = GetLocalObject(OBJECT_SELF, "CUSTOMER"); object oBar; object oBar2; switch(myZone) { // Добавляйте или убирайте кол-во case в зависимости от того сколько зон вам надо обслуживать case 1: oBar = GetWaypointByTag("WP_WTCommon_Bar"); //Здесь официантка берет напитки oBar2 = GetWaypointByTag("Rest1"); //Сюда она возвращается когда разнесет напитки break; } if (nUser == 1001) { if (!GetIsObjectValid(oCustomer) && (GetLocalInt(OBJECT_SELF, "BARMAID_STATE") < 1)) { // идет к своему клиенту не игроку oCustomer = GetObjectByTag(myPatron); if (oCustomer != GetObjectByTag("Barkeeper") && oCustomer != OBJECT_SELF && GetIsObjectValid(oCustomer)) { // подходит к клиенту и спрашивает чего он хочет SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 1); SetLocalObject (OBJECT_SELF, "CUSTOMER", oCustomer); ActionForceMoveToObject(oCustomer, FALSE, 0.5, 60.0); GetQueryString(); isKid = GetLocalInt(oCustomer,"IAmAKid"); if (isKid == 1) { DrinkOrderKid(); } else { DrinkOrder(); } ActionWait(1.0); patronOrder = GetLocalString(OBJECT_SELF,"PATRON_ORDER"); ActionDoCommand(AssignCommand(oCustomer,SpeakString(patronOrder,TALKVOLUME_TALK))); ActionWait(3.0); //ждет 3 сек // идет к бару за напитками ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 2)); ActionForceMoveToObject(oBar, FALSE, 0.5, 60.0); sOrder = GetLocalString(OBJECT_SELF,"WG_ORDER"); sBarkeepR = GetLocalString(OBJECT_SELF, "WG_BARKEEP"); ActionSpeakString (sOrder); ActionWait(3.0); // проверяет к тому ли бару она идет if(myZone == 1) { ActionDoCommand(AssignCommand(GetObjectByTag("wt_Barkeeper1"), ActionSpeakString (sBarkeepR,TALKVOLUME_TALK))); } else { ActionDoCommand(AssignCommand(GetObjectByTag("wt_Barkeeper2"), ActionSpeakString (sBarkeepR,TALKVOLUME_TALK))); } ActionWait(3.0); // возвращается к клиенту и отдает напитки ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 3)); ActionForceMoveToObject (oCustomer, FALSE, 0.5, 60.0); sAmount = GetLocalString(OBJECT_SELF,"WG_AMOUNT"); GetMyPay(); payAmount = GetLocalString(OBJECT_SELF,"PAY_AMOUNT"); if (sAmount == "**") // реакция на выражения { PlaySound("cb_ht_critical"); //звук payAmount = ""; // фраза } ActionSpeakString (sAmount); ActionWait(2.0); ActionDoCommand(AssignCommand(oCustomer,SpeakString(payAmount,TALKVOLUME_TALK))); ActionDoCommand (SetLocalObject(OBJECT_SELF, "CUSTOMER", OBJECT_INVALID)); // возвращается к бару и берет перерыв ActionForceMoveToObject(oBar2, FALSE, 0.5, 60.0); ActionWait(1.0); TakeBreak(); ActionWait(2.0); ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 0)); } } } if (nUser == 1004) { SetLocalObject (OBJECT_SELF, "CUSTOMER", OBJECT_INVALID); SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 0); } } Этот на onSpawn официанта NSS //:://///////////////////////////////////////////// //:: Default: On Spawn In //:: NW_C2_DEFAULT9 //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Determines the course of action to be taken after having just been spawned in */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Oct 25, 2001 //::////////////////////////////////////////////// #include "NW_O2_CONINCLUDE" #include "NW_I0_GENERIC" void main() { SetLocalInt(OBJECT_SELF,"MyZone",1); // это значит что данный официант будет обслуживать зону 1.Создать вай поинт Zone1 // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); // This causes the creature to say a special greeting in their conversation file // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired // greeting in order to designate it. As the creature is actually saying this to // himself, don't attach any player responses to the greeting. //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); // This will set the listening pattern on the NPC to attack when allies call //SetSpawnInCondition(NW_FLAG_STEALTH); // If the NPC has stealth and they are a rogue go into stealth mode //SetSpawnInCondition(NW_FLAG_SEARCH); // If the NPC has Search go into Search Mode //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); // This will set the NPC to give a warning to non-enemies before attacking //SetSpawnInCondition(NW_FLAG_SLEEP); //Creatures that spawn in during the night will be asleep. //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); //SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); //This will play Ambient Animations until the NPC sees an enemy or is cleared. //NOTE that these animations will play automatically for Encounter Creatures. // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) // CUSTOM USER DEFINED EVENTS /* The following settings will allow the user to fire one of the blank user defined events in the NW_D2_DefaultD. Like the On Spawn In script this script is meant to be customized by the end user to allow for unique behaviors. The user defined events user 1000 - 1010 */ SetSpawnInCondition(NW_FLAG_HEARTBEAT_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1001 //SetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1002 //SetSpawnInCondition(NW_FLAG_ATTACK_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1005 //SetSpawnInCondition(NW_FLAG_DAMAGED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1006 //SetSpawnInCondition(NW_FLAG_DISTURBED_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1008 //SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003 SetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1004 //SetSpawnInCondition(NW_FLAG_DEATH_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1007 // DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) ***************************************************************************************** SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after // combat. // GenerateNPCTreasure(); //* Use this to create a small amount of treasure on the creature } Этот на onConvercation NSS //:://///////////////////////////////////////////// //:: SetListeningPatterns //:: NW_C2_DEFAULT4 //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Determines the course of action to be taken by the generic script after dialogue or a shout is initiated. */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Oct 24, 2001 //::////////////////////////////////////////////// #include "NW_I0_GENERIC" void main() { int nMatch = GetListenPatternNumber(); object oShouter = GetLastSpeaker(); object oIntruder; if (nMatch == -1 && GetCommandable(OBJECT_SELF)) { ClearAllActions(); BeginConversation(); ActionWait(8.0); } else if(nMatch != -1 && GetIsObjectValid(oShouter) && !GetIsPC(oShouter) && GetIsFriend(oShouter)) { if(nMatch == 4) { oIntruder = GetLocalObject(oShouter, "NW_BLOCKER_INTRUDER"); } else if (nMatch == 5) { oIntruder = GetLastHostileActor(oShouter); if(!GetIsObjectValid(oIntruder)) { oIntruder = GetAttemptedAttackTarget(); if(!GetIsObjectValid(oIntruder)) { oIntruder = GetAttemptedSpellTarget(); if(!GetIsObjectValid(oIntruder)) { oIntruder = OBJECT_INVALID; } } } } RespondToShout(oShouter, nMatch, oIntruder); } if(GetSpawnInCondition(NW_FLAG_ON_DIALOGUE_EVENT)) { SignalEvent(OBJECT_SELF, EventUserDefined(1004)); } } Этот на onDistr NSS //:://///////////////////////////////////////////// //:: Default: On Disturbed //:: NW_C2_DEFAULT8 //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Calls the end of combat script every round */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Oct 16, 2001 //:://///////////////////////////////////////// // * Make me hostile the faction of my last attacker (TEMP) // AdjustReputation(OBJECT_SELF,GetFaction(GetLastAttacker()),-100); // * Determined Combat Round #include "NW_I0_GENERIC" void main() { object oTarget = GetLastDisturbed(); if(!GetIsObjectValid(GetAttemptedAttackTarget()) && !GetIsObjectValid(GetAttemptedSpellTarget())) { if(GetIsObjectValid(oTarget)) { DetermineCombatRound(oTarget); } } if(GetSpawnInCondition(NW_FLAG_DISTURBED_EVENT)) { ActionWait(8.0); } } Этот сиавится на onSpawn клиента таверны NSS //:://///////////////////////////////////////////// //:: Default: On Spawn In //:: NW_C2_DEFAULT9 //:: Copyright © 2001 Bioware Corp. //::////////////////////////////////////////////// /* Determines the course of action to be taken after having just been spawned in */ //::////////////////////////////////////////////// //:: Created By: Preston Watamaniuk //:: Created On: Oct 25, 2001 //::////////////////////////////////////////////// #include "NW_O2_CONINCLUDE" #include "NW_I0_GENERIC" void main() { // OPTIONAL BEHAVIORS (Comment In or Out to Activate ) **************************************************************************** //SetSpawnInCondition(NW_FLAG_SPECIAL_CONVERSATION); //SetSpawnInCondition(NW_FLAG_SPECIAL_COMBAT_CONVERSATION); // This causes the creature to say a special greeting in their conversation file // upon Perceiving the player. Attach the [NW_D2_GenCheck.nss] script to the desired // greeting in order to designate it. As the creature is actually saying this to // himself, don't attach any player responses to the greeting. //SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); // This will set the listening pattern on the NPC to attack when allies call //SetSpawnInCondition(NW_FLAG_STEALTH); // If the NPC has stealth and they are a rogue go into stealth mode //SetSpawnInCondition(NW_FLAG_SEARCH); // If the NPC has Search go into Search Mode //SetSpawnInCondition(NW_FLAG_SET_WARNINGS); // This will set the NPC to give a warning to non-enemies before attacking //SetSpawnInCondition(NW_FLAG_SLEEP); //Creatures that spawn in during the night will be asleep. //SetSpawnInCondition(NW_FLAG_DAY_NIGHT_POSTING); //SetSpawnInCondition(NW_FLAG_APPEAR_SPAWN_IN_ANIMATION); //SetSpawnInCondition(NW_FLAG_IMMOBILE_AMBIENT_ANIMATIONS); //SetSpawnInCondition(NW_FLAG_AMBIENT_ANIMATIONS); //This will play Ambient Animations until the NPC sees an enemy or is cleared. //NOTE that these animations will play automatically for Encounter Creatures. // NOTE: ONLY ONE OF THE FOLOOWING ESCAPE COMMANDS SHOULD EVER BE ACTIVATED AT ANY ONE TIME. //SetSpawnInCondition(NW_FLAG_ESCAPE_RETURN); // OPTIONAL BEHAVIOR (Flee to a way point and return a short time later.) //SetSpawnInCondition(NW_FLAG_ESCAPE_LEAVE); // OPTIONAL BEHAVIOR (Flee to a way point and do not return.) //SetSpawnInCondition(NW_FLAG_TELEPORT_LEAVE); // OPTIONAL BEHAVIOR (Teleport to safety and do not return.) //SetSpawnInCondition(NW_FLAG_TELEPORT_RETURN); // OPTIONAL BEHAVIOR (Teleport to safety and return a short time later.) // CUSTOM USER DEFINED EVENTS /* Вот и все вроде бы скрипт работает без багов но если такие найдутся попытаесь разобраться в чем дело. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #90112 · Ответов: 111 · Просмотров: 460,187 |
Отправлено: Aug 20 2006, 08:14 | |
Level 1 Группа: Newbie Сообщений: 5 Регистрация: 15.08.2006 Пользователь №: 2,669 |
Люди и все остальные тоже помогите со скриптом nq_c2_default9 как присвоить НПС разные возможности поведения. |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #90106 · Ответов: 5109 · Просмотров: 865,424 |
Отправлено: Aug 15 2006, 09:27 | |
Level 1 Группа: Newbie Сообщений: 5 Регистрация: 15.08.2006 Пользователь №: 2,669 |
подскажите как сделать скрипт чтоб NPc по ночам заходил домой и делал вид что он спит? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #89624 · Ответов: 5109 · Просмотров: 865,424 |
Отправлено: Aug 15 2006, 09:23 | |
Level 1 Группа: Newbie Сообщений: 5 Регистрация: 15.08.2006 Пользователь №: 2,669 |
Вопрос.Можно ли в тулсете заставить NPc спать по ночам? |
Форум: Neverwinter Nights Aurora Toolset · Просмотр сообщения: #89622 · Ответов: 5109 · Просмотров: 865,424 |
Открытая тема (есть новые ответы) Открытая тема (нет новых ответов) Горячая тема (есть новые ответы) Горячая тема (нет новых ответов) |
Опрос (есть новые голоса) Опрос (нет новых голосов) Закрытая тема Тема перемещена |
Текстовая версия | Сейчас: 28th April 2024 - 20:06 |