111 lines
3.3 KiB
Plaintext
111 lines
3.3 KiB
Plaintext
//////////////////////////////////////////////////////////////////////
|
|
// Sailing The Seas of Cheese
|
|
// The boat travel script
|
|
//////////////////////////////////////////////////////////////////////
|
|
// By Deva Bryson Winblood. 12/06/2003
|
|
//////////////////////////////////////////////////////////////////////
|
|
void fnMoveArmy(object oPC,object oDest)
|
|
{ // move me and my army
|
|
int nC=1;
|
|
object oNPC=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
|
|
string sID=GetLocalString(oPC,"sTeamID");
|
|
while(oNPC!=OBJECT_INVALID)
|
|
{ // move NPC
|
|
if (GetLocalString(oNPC,"sTeamID")==sID)
|
|
{ // jump this person
|
|
AssignCommand(oNPC,ClearAllActions(TRUE));
|
|
AssignCommand(oNPC,JumpToObject(oDest));
|
|
} // jump this person
|
|
nC++;
|
|
oNPC=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nC);
|
|
} // move NPC
|
|
AssignCommand(oPC,ClearAllActions(TRUE));
|
|
AssignCommand(oPC,JumpToObject(oDest));
|
|
} // fnMoveArmy()
|
|
|
|
|
|
void main()
|
|
{
|
|
object oPC=GetPCSpeaker();
|
|
object oMe=OBJECT_SELF;
|
|
if (oPC==OBJECT_INVALID) oPC=oMe;
|
|
int nDest=GetLocalInt(oPC,"nBoatDest");
|
|
int nTravelState=GetLocalInt(oPC,"nBoatState");
|
|
float fSpeed=10.0;
|
|
string sTag;
|
|
object oWP;
|
|
switch(nTravelState)
|
|
{ // switch
|
|
case 0: { // set sail
|
|
if (nDest==0)
|
|
{ // return elben
|
|
oWP=GetWaypointByTag("BOAT_2");
|
|
} // return elben
|
|
else
|
|
{ // normal
|
|
oWP=GetWaypointByTag("BOAT_1");
|
|
} // normal
|
|
fnMoveArmy(oPC,oWP);
|
|
SetLocalInt(oPC,"nBoatState",1);
|
|
break;
|
|
} // set sail
|
|
case 1: { // first destination
|
|
if (nDest==2)
|
|
{ // myth
|
|
if (d4()<3)
|
|
{ // pirates
|
|
fSpeed=60.0;
|
|
SetLocalInt(oPC,"nBoatState",2);
|
|
} // pirates
|
|
else
|
|
{ // no pirates
|
|
fSpeed=180.0;
|
|
SetLocalInt(oPC,"nBoatState",4);
|
|
} // no pirates
|
|
} // myth
|
|
else
|
|
{ // other
|
|
fSpeed=120.0;
|
|
SetLocalInt(oPC,"nBoatState",4);
|
|
} // other
|
|
break;
|
|
} // first destination
|
|
case 2: { // pirates
|
|
sTag=GetTag(GetArea(oPC));
|
|
if (sTag!="AtSeaPirates"&&sTag!="TheRealmofShadows"&&sTag!="ThePlaneofInBetween")
|
|
{ // move to pirates
|
|
oWP=GetWaypointByTag("BOAT_3");
|
|
fnMoveArmy(oPC,oWP);
|
|
} // move to pirates
|
|
else if (sTag!="TheRealmofShadows"&&sTag!="ThePlaneofInBetween")
|
|
{ // not dead
|
|
oWP=GetNearestObjectByTag("PIRATE",oPC,1);
|
|
if (oWP==OBJECT_INVALID)
|
|
{ // pirates defeated
|
|
fSpeed=30.0;
|
|
SetLocalInt(oPC,"nBoatState",3);
|
|
} // pirates defeated
|
|
} // not dead
|
|
else { SetLocalInt(oPC,"nBoatState",-1); }
|
|
break;
|
|
} // pirates
|
|
case 3: { // 2nd destination
|
|
oWP=GetWaypointByTag("BOAT_2");
|
|
fnMoveArmy(oPC,oWP);
|
|
fSpeed=120.0;
|
|
SetLocalInt(oPC,"nBoatState",4);
|
|
break;
|
|
} // 2nd destination
|
|
case 4: { // arrive at destination
|
|
if (nDest==0)
|
|
oWP=GetWaypointByTag("BOAT_ELBEN");
|
|
else if (nDest==1) oWP=GetWaypointByTag("BOAT_DRAGONS");
|
|
else if (nDest==2) oWP=GetWaypointByTag("BOAT_MYTH");
|
|
fnMoveArmy(oPC,oWP);
|
|
SetLocalInt(oPC,"nBoatState",-1);
|
|
break;
|
|
} // arrive at destination
|
|
} // switch
|
|
if (nTravelState!=-1) DelayCommand(fSpeed,ExecuteScript("sailing_script",oPC));
|
|
}
|