135 lines
4.2 KiB
Plaintext
135 lines
4.2 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
// Slave HB
|
|
// By Deva Bryson Winblood. 12/28/2003
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
#include "antistuck_h"
|
|
|
|
void fnMine(object oMineable)
|
|
{ // PURPOSE: Handle the mining of the object
|
|
object oMe=OBJECT_SELF;
|
|
string sID=GetLocalString(oMe,"sTeamID");
|
|
int nP=d100();
|
|
object oItem;
|
|
int nAmt=GetLocalInt(oMineable,"nResAmt");
|
|
string sRes=GetResRef(oMineable);
|
|
AssignCommand(oMe,ClearAllActions());
|
|
AssignCommand(oMe,ActionAttack(oMineable,TRUE));
|
|
AssignCommand(oMineable,PlaySound("as_cv_minepick1"));
|
|
if (sRes=="resgold")
|
|
{ // gold
|
|
if (nP<25)
|
|
{ // gold mined
|
|
CreateItemOnObject("gold_nugget",oMe,1);
|
|
nAmt=nAmt-1;
|
|
SetLocalInt(oMineable,"nResAmt",nAmt);
|
|
if (nAmt<1) DestroyObject(oMineable);
|
|
} // gold mined
|
|
} // gold
|
|
else if (sRes=="resadm")
|
|
{ // adamantine
|
|
if (nP<6)
|
|
{ // adamantine mined
|
|
CreateItemOnObject("bar_admant",oMe,1);
|
|
nAmt=nAmt-1;
|
|
SetLocalInt(oMineable,"nResAmt",nAmt);
|
|
if (nAmt<1) DestroyObject(oMineable);
|
|
} // adamantine mined
|
|
} // adamantine
|
|
else if (sRes=="resiron")
|
|
{ // iron
|
|
if (nP<10)
|
|
{ // iron mined
|
|
CreateItemOnObject("bar_iron",oMe,1);
|
|
nAmt=nAmt-1;
|
|
SetLocalInt(oMineable,"nResAmt",nAmt);
|
|
if (nAmt<1) DestroyObject(oMineable);
|
|
} // iron mined
|
|
} // iron
|
|
else if (sRes=="mithral")
|
|
{ // mithral
|
|
if (nP<3)
|
|
{ // mithral mined
|
|
CreateItemOnObject("bar_mith",oMe,1);
|
|
nAmt=nAmt-1;
|
|
SetLocalInt(oMineable,"nResAmt",nAmt);
|
|
if (nAmt<1) DestroyObject(oMineable);
|
|
} // mithral mined
|
|
} // mithral
|
|
} // fnMine()
|
|
|
|
|
|
|
|
void main()
|
|
{
|
|
object oMe=OBJECT_SELF;
|
|
object oMaster=GetLocalObject(oMe,"oMaster");
|
|
object oOb;
|
|
int nMode=GetLocalInt(oMe,"nMode");
|
|
object oMod=GetModule();
|
|
float fDist;
|
|
int nC=1;
|
|
string sRes;
|
|
object oMineable=OBJECT_INVALID;
|
|
int nDisableNonEssential=GetLocalInt(oMod,"nDisableNonEssential");
|
|
if (nDisableNonEssential==TRUE) DestroyObject(oMe);
|
|
else
|
|
{ // not disabled
|
|
SetAILevel(oMe,AI_LEVEL_NORMAL);
|
|
if (GetIsInCombat(oMe)==FALSE&&IsInConversation(oMe)==FALSE)
|
|
{ // not talking or fighting
|
|
switch(nMode)
|
|
{ // main ai switch for slaves
|
|
case 0: { // follow master
|
|
if (GetArea(oMe)==GetArea(oMaster))
|
|
{ // same area follow
|
|
fDist=GetDistanceBetween(oMe,oMaster);
|
|
if (fDist>14.0)
|
|
{ // run
|
|
if (GetCurrentAction(oMe)==ACTION_MOVETOPOINT) AssignCommand(oMe,ClearAllActions());
|
|
AssignCommand(oMe,ASActionMoveToObject(oMaster,TRUE,7.0));
|
|
} // run
|
|
else if (fDist>7.0)
|
|
{ // walk
|
|
if (GetCurrentAction(oMe)==ACTION_MOVETOPOINT) AssignCommand(oMe,ClearAllActions());
|
|
AssignCommand(oMe,ASActionMoveToObject(oMaster,FALSE,7.0));
|
|
} // walk
|
|
} // same area follow
|
|
else
|
|
{ // master in different area
|
|
AssignCommand(oMe,ASActionMoveToObject(oMaster,TRUE,7.0));
|
|
} // master in different area
|
|
break;
|
|
} // follow master
|
|
case 1: { // stand where you are
|
|
break;
|
|
} // stand where you are
|
|
case 2: { // mine
|
|
oOb=GetNearestObject(OBJECT_TYPE_PLACEABLE,oMe,nC);
|
|
fDist=GetDistanceBetween(oOb,oMe);
|
|
while(oOb!=OBJECT_INVALID&&oMineable==OBJECT_INVALID&&fDist<10.0)
|
|
{ // look for mineable object
|
|
sRes=GetResRef(oOb);
|
|
if (sRes=="resgold"||sRes=="resadm"||sRes=="resiron"||sRes=="resmith") oMineable=oOb;
|
|
nC++;
|
|
oOb=GetNearestObject(OBJECT_TYPE_PLACEABLE,oMe,nC);
|
|
fDist=GetDistanceBetween(oOb,oMe);
|
|
} // look for mineable object
|
|
if (oMineable!=OBJECT_INVALID)
|
|
{ // something to mine
|
|
fDist=GetDistanceBetween(oMineable,oMe);
|
|
if (fDist>2.0)
|
|
{ // move to object
|
|
AssignCommand(oMe,ASActionMoveToObject(oMineable,FALSE,1.0));
|
|
} // move to object
|
|
else
|
|
{ // use object
|
|
AssignCommand(oMe,fnMine(oMineable));
|
|
} // use object
|
|
} // something to mine
|
|
break;
|
|
} // mine
|
|
} // main ai switch for slaves
|
|
} // not talking or fighting
|
|
} // not disabled
|
|
}
|