Initial upload
Initial upload. PRC8 has been added. Module compiles, PRC's default AI & treasure scripts have been integrated. Started work on top hak for SLA / Ability / Scripting modifications.
This commit is contained in:
138
_module/nss/sc_barmaid.nss
Normal file
138
_module/nss/sc_barmaid.nss
Normal file
@@ -0,0 +1,138 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Name
|
||||
//:: FileName
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
1. Yet Another Barmaid Script
|
||||
2. Barmaid Serves Patrons
|
||||
3. Notes:
|
||||
This is probably floating around here in many incarnations (some of which don't work) but since I didn't
|
||||
see it in this thread I thought I'd add my version I threw together. This script has been around for a while
|
||||
and is based on the lovely David Gaider's script of similar ilk. I also recall hearing there was one in the game,
|
||||
but I haven' come across it. At minimum you'll need a Barmaid NPC, a couple of friendly NPC patrons,
|
||||
and two waypoints(tags: WP_Bar and WP_Bar2). I also have a barkeeper with the tag "NW_BARTENDER".
|
||||
|
||||
This script should be attached to the OnUserDefined event of the Barmaid NPC. Remember to comment out these
|
||||
two lines in the Barmaid's OnSpawn script (make a copy of it first):
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By:
|
||||
//:: Created On:
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
// Barmaid NWScript based on David Gaider of BioWare's script
|
||||
void main()
|
||||
{
|
||||
int nUser = GetUserDefinedEventNumber();
|
||||
int nRandom = Random(5); //This number should be approx number of NPC patrons
|
||||
object oCustomer = GetLocalObject(OBJECT_SELF, "CUSTOMER");
|
||||
object oBar = GetWaypointByTag("WP_BAR"); //This waypoint is where she gets drinks from
|
||||
object oBar2 = GetWaypointByTag("WP_BAR2"); //This waypoint she returns to rest after delivering drinks
|
||||
|
||||
if (nUser == 1001) // This is a heartbeat event, every 6 sec
|
||||
{
|
||||
//SendMessageToAllDMs("Barmaid Heartbeat"); <-- I use this for debugging sometimes
|
||||
if (!GetIsObjectValid(oCustomer) && (GetLocalInt(OBJECT_SELF, "BARMAID_STATE") < 1))
|
||||
{
|
||||
// Randomly seek out up to the nRandom-nearest non-PC
|
||||
oCustomer = GetNearestCreature (CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_NOT_PC, OBJECT_SELF, nRandom);
|
||||
//Make sure she's not going to ask the Barkeeper if he wants a drink
|
||||
if (oCustomer != GetObjectByTag("NW_BARTENDER") && oCustomer != OBJECT_SELF && GetIsObjectValid(oCustomer) )
|
||||
{
|
||||
SendMessageToAllDMs("Barmaid: Found customer " + GetName(oCustomer));
|
||||
// Move to Customer and ask what he/she wants
|
||||
SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 1);
|
||||
SetLocalObject (OBJECT_SELF, "CUSTOMER", oCustomer);
|
||||
ActionMoveToObject(oCustomer);
|
||||
switch(Random(4))
|
||||
{
|
||||
case 0:
|
||||
ActionSpeakString ("Can I get you something?");
|
||||
break;
|
||||
case 1:
|
||||
ActionSpeakString ("What'll it be?");
|
||||
break;
|
||||
case 2:
|
||||
ActionSpeakString ("Some refreshment for you and your friends?");
|
||||
break;
|
||||
case 3:
|
||||
ActionSpeakString ("Another round?");
|
||||
break;
|
||||
}
|
||||
ActionWait(5.0); //Wait 5 secs.
|
||||
// Move to the Bar to get the Drinks
|
||||
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 2));
|
||||
ActionMoveToObject(oBar);
|
||||
switch(Random(4))
|
||||
{
|
||||
case 0:
|
||||
ActionSpeakString ("I need two Dragon Breath Ales and a Ilipur Bitter.");
|
||||
break;
|
||||
case 1:
|
||||
ActionSpeakString ("A Mindflayer with a twist and two bottles of Prespur Rum.");
|
||||
break;
|
||||
case 2:
|
||||
ActionSpeakString ("They want a basket of Crispy Ogre Ears");
|
||||
break;
|
||||
case 3:
|
||||
ActionSpeakString ("Three ales and a pony keg for the Half-Orc.");
|
||||
break;
|
||||
}
|
||||
ActionWait(8.0);//Wait 8 secs.
|
||||
|
||||
// Move back to the customer and give him/her the drinks
|
||||
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 3));
|
||||
ActionMoveToObject (oCustomer);
|
||||
switch(Random(4))
|
||||
{
|
||||
case 0:
|
||||
ActionSpeakString ("Enjoy.");
|
||||
break;
|
||||
case 1:
|
||||
ActionSpeakString ("That'll be 5 platinum. I'm just kidding. 15 copper, please.");
|
||||
break;
|
||||
case 2:
|
||||
ActionSpeakString ("You look like you could use this.");
|
||||
break;
|
||||
case 3:
|
||||
ActionSpeakString ("Ice brewed in Icewind Dale, friend. Enjoy.");
|
||||
break;
|
||||
}
|
||||
ActionWait(3.0);//Wait 3 secs.
|
||||
ActionDoCommand (SetLocalObject(OBJECT_SELF, "CUSTOMER", OBJECT_INVALID));
|
||||
// Move back to the other side of the bar to take a needed break
|
||||
ActionMoveToObject(oBar2);
|
||||
ActionWait(5.0);//Wait 5 secs.
|
||||
switch(Random(4))
|
||||
{
|
||||
case 0:
|
||||
ActionSpeakString ("Slow night tonight, eh Charlie?");
|
||||
break;
|
||||
case 1:
|
||||
ActionSpeakString ("My feet are killing me.");
|
||||
break;
|
||||
case 2:
|
||||
ActionSpeakString ("I can't live on these tips. Two copper?");
|
||||
break;
|
||||
case 3:
|
||||
ActionSpeakString ("He's kind of cute.");
|
||||
break;
|
||||
}
|
||||
ActionWait(5.0);//Wait 5 secs.
|
||||
ActionDoCommand (SetLocalInt(OBJECT_SELF, "BARMAID_STATE", 0));
|
||||
}
|
||||
else SendMessageToAllDMs("Barmaid: Couldnt find a customer");
|
||||
}
|
||||
}
|
||||
if (nUser == 1004) // this is the OnDialogue event
|
||||
{
|
||||
// This is just in here so you can interrupt her if you want to talk to her
|
||||
SetLocalObject (OBJECT_SELF, "CUSTOMER", OBJECT_INVALID);
|
||||
SetLocalInt (OBJECT_SELF, "BARMAID_STATE", 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user