585 lines
21 KiB
Plaintext
585 lines
21 KiB
Plaintext
// Team monitor - this makes sure there is always a leader
|
|
// if one does not exist then it will try to promote a sub-leader
|
|
// This also adjusts reputations based on leaders friend, enemy settings
|
|
// It also insures units of team not hostile on a sub_leader basis
|
|
//////////////////////
|
|
#include "header_sounds"
|
|
//////////////////////
|
|
// PROTOTYPES
|
|
//////////////////////
|
|
string fnRemParsed(string sO, string sP);
|
|
void fnSetFactionToFriendly(object oPC,string sID);
|
|
string fnParsePeriod(string sIn);
|
|
void fnAnnounce(string sMsg="",int nOption=0);
|
|
void fnTeamSelect(object oPC);
|
|
string fnGetTeamID(int nC);
|
|
void fnRecordInventory(object oPC);
|
|
void fnPartyCheck();
|
|
void fnMultiTeamCheck(object oPC);
|
|
|
|
//////////////////////////////////////////////////////////// MAIN
|
|
void main()
|
|
{
|
|
object oMod=GetModule();
|
|
object oPC;
|
|
string sID;
|
|
object oLead;
|
|
string sInfo;
|
|
int nC=1;
|
|
object oH;
|
|
int nNum;
|
|
int nRep;
|
|
object oMyTeam;
|
|
float fDist;
|
|
SetLocalInt(oMod,"nMonitorOn",TRUE);
|
|
sID=fnGetTeamID(nC);
|
|
while(sID!="NA")
|
|
{ // process team
|
|
oLead=GetLocalObject(oMod,"oTeamLead"+sID);
|
|
if (GetIsPC(oLead)==TRUE&&GetLocalInt(oLead,"bPermaDead")!=TRUE)
|
|
{ // record resources
|
|
nNum=GetGold(oLead);
|
|
SetLocalInt(oMod,"nGoldStore"+sID,nNum);
|
|
nNum=GetLocalInt(oLead,"nManaStore");
|
|
SetLocalInt(oMod,"nManaStore"+sID,nNum);
|
|
nNum=GetLocalInt(oLead,"nSoulStore");
|
|
SetLocalInt(oMod,"nSoulStore"+sID,nNum);
|
|
// make sure have tools
|
|
if (GetItemPossessedBy(oLead,"RTSCreation_Tool")==OBJECT_INVALID)
|
|
{ // create command tool
|
|
oH=CreateItemOnObject("rtscreation_tool",oLead);
|
|
} // create command tool
|
|
if (GetItemPossessedBy(oLead,"RTSUnit_Creation")==OBJECT_INVALID)
|
|
{ // create command tool
|
|
oH=CreateItemOnObject("rtsunit_creation",oLead);
|
|
} // create command too
|
|
if (GetItemPossessedBy(oLead,"rts_it_teamwand")==OBJECT_INVALID)
|
|
{ // create team wand
|
|
oH=CreateItemOnObject("rts_it_teamwand",oLead);
|
|
} // create team wand
|
|
} // record resources
|
|
else if (GetIsPC(oLead)&&GetLocalInt(oLead,"bPermaDead"))
|
|
{ // dead
|
|
oLead=OBJECT_INVALID;
|
|
DeleteLocalObject(oMod,"oTeamLead"+sID);
|
|
} // dead
|
|
if (GetItemPossessedBy(oLead,"rts_it_vote")==OBJECT_INVALID)
|
|
{ // voting tool
|
|
oH=CreateItemOnObject("rts_it_vote",oLead);
|
|
} // voting tool
|
|
if ((oLead==OBJECT_INVALID||GetIsPC(oLead)==FALSE)&&(!GetIsPossessedFamiliar(GetAssociate(ASSOCIATE_TYPE_FAMILIAR,oLead))))
|
|
{ // look for PC to promote to leader
|
|
nNum=FALSE;
|
|
oPC=GetFirstPC();
|
|
while(oPC!=OBJECT_INVALID&&nNum==FALSE)
|
|
{ // look for promotion
|
|
if (GetLocalString(oPC,"sTeamID")==sID&&GetLocalInt(oPC,"bPermaDead")!=TRUE) nNum=TRUE;
|
|
if (nNum==FALSE) oPC=GetNextPC();
|
|
} // look for promotion
|
|
if (nNum==TRUE)
|
|
{ // promote oPC to leader
|
|
fnTeamSelect(oPC);
|
|
oLead=oPC;
|
|
} // promote oPC to leader
|
|
} // look for PC to promote to leader
|
|
/// check reputations
|
|
/* oPC=GetFirstPC();
|
|
while(oPC!=OBJECT_INVALID&&GetLocalString(oPC,"sTeamID")==GetLocalString(oLead,"sTeamID"))
|
|
{ // adjust reputation
|
|
oH=GetFirstPC();
|
|
while(oH!=OBJECT_INVALID)
|
|
{ // set enemies & friends
|
|
if (GetIsFriend(oH,oLead)==TRUE||GetIsNeutral(oH,oLead)==TRUE||GetLocalString(oPC,"sTeamID")==GetLocalString(oH,"sTeamID")||oH==oLead)
|
|
{ // friend
|
|
if (oPC!=oH&&GetIsFriend(oH,oPC)==FALSE)
|
|
{ // not yourself
|
|
SetPCLike(oPC,oH);
|
|
SendMessageToPC(oPC,"Had to make you like '"+GetName(oH)+".'");
|
|
} // not yourself
|
|
} // friend
|
|
else
|
|
{ // enemy
|
|
if (oH!=oPC&&GetIsEnemy(oH,oPC)==FALSE)
|
|
{ // not yourself
|
|
SetPCDislike(oPC,oH);
|
|
SendMessageToPC(oPC,"Had to make you dislike '"+GetName(oH)+".'");
|
|
} // not yourself
|
|
} // enemy
|
|
oH=GetNextPC();
|
|
} // set enemies & friends
|
|
fnSetFactionToFriendly(oPC,sID);
|
|
oPC=GetNextPC();
|
|
} // adjust reputation */
|
|
// end of that team
|
|
nC++;
|
|
sID=fnGetTeamID(nC);
|
|
} // process team
|
|
/// Record Player Information
|
|
oPC=GetFirstPC();
|
|
while(oPC!=OBJECT_INVALID)
|
|
{ // !OI
|
|
if (GetIsDM(oPC)==FALSE)
|
|
{ // not DM
|
|
nRep=1;
|
|
sID=GetLocalString(oPC,"sTeamID");
|
|
oMyTeam=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nRep,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY);
|
|
fDist=GetDistanceBetween(oMyTeam,oPC);
|
|
while(oMyTeam!=OBJECT_INVALID&&fDist<30.0)
|
|
{ // adjust rep if same team
|
|
if (sID!=""&&sID==GetLocalString(oMyTeam,"sTeamID"))
|
|
{
|
|
if (fDist<10.0) AssignCommand(oMyTeam,ClearAllActions(TRUE));
|
|
ClearPersonalReputation(oPC,oMyTeam);
|
|
AdjustReputation(oPC,oMyTeam,100);
|
|
SetIsTemporaryFriend(oPC,oMyTeam);
|
|
SetIsTemporaryFriend(oMyTeam,oPC);
|
|
if (GetAbilityScore(oMyTeam,ABILITY_INTELLIGENCE)>7)
|
|
AssignCommand(oMyTeam,SpeakString("You are forgiven "+GetName(oPC)+"."));
|
|
}
|
|
nRep++;
|
|
oMyTeam=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oPC,nRep,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY);
|
|
fDist=GetDistanceBetween(oMyTeam,oPC);
|
|
} // adjust rep if same team
|
|
sInfo=GetName(oPC)+GetPCPlayerName(oPC);
|
|
SetLocalInt(oMod,sInfo,GetXP(oPC));
|
|
SetLocalObject(oMod,sInfo+"loc",GetArea(oPC));
|
|
fnRecordInventory(oPC);
|
|
DelayCommand(2.0,fnMultiTeamCheck(oPC));
|
|
} // not DM
|
|
oPC=GetNextPC();
|
|
} // !OI
|
|
DelayCommand(6.0,fnPartyCheck()); // make sure opposing teams not part of a party
|
|
DelayCommand(24.0,ExecuteScript("team_monitor",OBJECT_SELF));
|
|
}
|
|
///////////////////////////////////////////////////////////////// MAIN
|
|
|
|
|
|
///////////////////////
|
|
// FUNCTIONS
|
|
///////////////////////
|
|
void fnMultiTeamCheck(object oPC)
|
|
{ // make sure not liked by more than one team
|
|
string sID=GetLocalString(oPC,"sTeamID");
|
|
object oMod=GetModule();
|
|
string sIDO;
|
|
object oWP;
|
|
object oTemp;
|
|
object oCloak=GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
|
string sCTag=GetTag(oCloak);
|
|
int bInfiltrate=FALSE;
|
|
int nC=1;
|
|
if (sCTag=="rts_it_op6"||sCTag=="rts_it_op7"||sCTag=="rts_it_op8"||sCTag=="rts_it_op9")
|
|
{ // wearing infiltrator cloak
|
|
sCTag=GetStringRight(sCTag,1);
|
|
if (sCTag=="6") sCTag="UNC";
|
|
else if (sCTag=="7") sCTag="UND";
|
|
else if (sCTag=="8") sCTag="SPID";
|
|
else if (sCTag=="9") sCTag="DWF";
|
|
bInfiltrate=TRUE;
|
|
} // wearing infiltrator cloak
|
|
sIDO="SPID";
|
|
while(nC<5)
|
|
{
|
|
if (sID!=sIDO)
|
|
{ // check
|
|
if (!bInfiltrate||(bInfiltrate&&sCTag!=sIDO))
|
|
{ // not infiltrating
|
|
if (GetLocalObject(oMod,"oTeamLead"+sIDO)==oPC)
|
|
{
|
|
SendMessageToPC(oPC,"You were set as leader to "+sIDO+" team as well. This has been fixed.");
|
|
DeleteLocalObject(oMod,"oTeamLead"+sIDO);
|
|
}
|
|
oWP=GetWaypointByTag(sIDO+"_RESOURCES");
|
|
oTemp=CreateObject(OBJECT_TYPE_CREATURE,sIDO+"0",GetLocation(oWP));
|
|
if (GetIsEnemy(oPC,oTemp)==FALSE)
|
|
{ // set as enemy
|
|
AdjustReputation(oPC,oTemp,0);
|
|
SendMessageToPC(oPC,"Fixed reputation with "+sIDO+" team so, they are enemies.");
|
|
} // set as enemy
|
|
DestroyObject(oTemp);
|
|
}// not infiltrating
|
|
} // check
|
|
// next
|
|
nC++;
|
|
if (nC==2) sIDO="DWF";
|
|
else if (nC==3) sIDO="UNC";
|
|
else if (nC==4) sIDO=="UND";
|
|
else { sIDO="NA"; }
|
|
}
|
|
} // fnMultiTeamCheck()
|
|
|
|
void fnPartyCheck()
|
|
{ // don't allow people to join into parties when on opposing teams
|
|
object oPC=GetFirstPC();
|
|
object oPartyMemb;
|
|
string sID;
|
|
object oMod=GetModule();
|
|
while(oPC!=OBJECT_INVALID)
|
|
{ // !OI
|
|
if (GetIsDM(oPC)==FALSE)
|
|
{ // not DM
|
|
sID=GetLocalString(oPC,"sTeamID");
|
|
if (GetLocalObject(oMod,"oTeamLead"+sID)==oPC)
|
|
{ // this is the leader
|
|
oPartyMemb=GetFirstFactionMember(oPC);
|
|
while(oPartyMemb!=OBJECT_INVALID)
|
|
{ // !OI
|
|
if (GetLocalString(oPartyMemb,"sTeamID")!=sID)
|
|
{ // kick off party
|
|
RemoveFromParty(oPartyMemb); // opposing teams not allowed to be party
|
|
} // kick off party
|
|
oPartyMemb=GetNextFactionMember(oPC);
|
|
} // !OI
|
|
} // this is the leader
|
|
} // not DM
|
|
oPC=GetNextPC();
|
|
} // !OI
|
|
} // fnPartyCheck
|
|
|
|
void fnTeamSelect(object oPC)
|
|
{ // select team
|
|
string sID=GetLocalString(oPC,"sTeamID");
|
|
object oMod=GetModule();
|
|
object oLead=GetLocalObject(oMod,"oTeamLead"+sID);
|
|
int nC;
|
|
object oH;
|
|
string sS;
|
|
string sTeamName;
|
|
object oItem;
|
|
object oWP=GetWaypointByTag(sID+"_START");
|
|
int nMana=GetLocalInt(oMod,"nManaStore"+sID);
|
|
int nSouls=GetLocalInt(oMod,"nSoulStore"+sID);
|
|
int nStartSouls=GetLocalInt(oMod,"nStartSoul"+sID);
|
|
int nGold=GetLocalInt(oMod,"nGoldStore"+sID);
|
|
string sResources;
|
|
string sParse;
|
|
int nTeamN=1;
|
|
if (sID=="UND") nTeamN=4;
|
|
if (sID=="DWF") nTeamN=2;
|
|
if (sID=="UNC") nTeamN=3;
|
|
if (sID=="SPID") sTeamName="Spider Cultists.";
|
|
else if (sID=="DWF") sTeamName="Dwarves.";
|
|
else if (sID=="UND") sTeamName="Undead.";
|
|
else if (sID=="UNC") sTeamName="Unclean.";
|
|
if (oLead==OBJECT_INVALID||GetIsPC(oLead)!=TRUE)
|
|
{ // no leader - assume leadership
|
|
sS=GetName(oPC)+" has assumed leadership of the "+sTeamName;
|
|
if (GetItemPossessedBy(oPC,"RTSUnit_Creation")==OBJECT_INVALID)
|
|
oItem=CreateItemOnObject("rtsunit_creation",oPC);
|
|
if (GetItemPossessedBy(oPC,"RTSCreation_Tool")==OBJECT_INVALID)
|
|
oItem=CreateItemOnObject("rtscreation_tool",oPC);
|
|
if (GetItemPossessedBy(oPC,"rts_it_teamwand")==OBJECT_INVALID)
|
|
{ // create team wand
|
|
oItem=CreateItemOnObject("rts_it_teamwand",oPC);
|
|
} // create team wand
|
|
fnAnnounce(sS);
|
|
SetLocalObject(oMod,"oTeamLead"+sID,oPC);
|
|
if (oLead!=OBJECT_INVALID)
|
|
{ // there was an NPC leader
|
|
if (nStartSouls!=0)
|
|
{ // stored resources
|
|
SetLocalInt(oPC,"nManaStore",nMana);
|
|
SetLocalInt(oPC,"nSoulStore",nSouls);
|
|
SetLocalInt(oPC,"nStartSoul",nStartSouls);
|
|
GiveGoldToCreature(oPC,nGold);
|
|
} // stored resources
|
|
else
|
|
{ // parse resources
|
|
oItem=GetObjectByTag(sID+"_RESOURCES");
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // !OI
|
|
sResources=GetName(oItem);
|
|
sParse=fnParsePeriod(sResources);
|
|
sResources=fnRemParsed(sResources,sParse);
|
|
SendMessageToPC(oPC,"You have "+sParse+" mana at your disposal.");
|
|
SetLocalInt(oPC,"nManaStore",StringToInt(sParse));
|
|
SetLocalInt(oMod,"nManaStore"+sID,StringToInt(sParse));
|
|
sParse=fnParsePeriod(sResources);
|
|
sResources=fnRemParsed(sResources,sParse);
|
|
GiveGoldToCreature(oPC,StringToInt(sParse));
|
|
SetLocalInt(oMod,"nGoldStore"+sID,StringToInt(sParse));
|
|
SendMessageToPC(oPC,"You have "+sResources+" souls at your disposal.");
|
|
SetLocalInt(oPC,"nStartSoul",StringToInt(sResources));
|
|
SetLocalInt(oPC,"nSoulStore",StringToInt(sResources));
|
|
SetLocalInt(oMod,"nSoulStore"+sID,StringToInt(sResources));
|
|
SetLocalInt(oMod,"nStartSoul"+sID,StringToInt(sResources));
|
|
} // !OI
|
|
} // parse resources
|
|
SetLocalString(oMod,"sResNPCLead"+sID,GetResRef(oLead));
|
|
if (GetLocalObject(oMod,"oGUARD5"+sID)==OBJECT_INVALID)
|
|
{ // set guard markers
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD5"+sID,oItem);
|
|
oItem=GetObjectByTag(sID+"_VAULT");
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD4"+sID,oItem);
|
|
} // set guard markers
|
|
SendMessageToPC(oPC,"You have "+IntToString(nMana)+" mana, "+IntToString(nSouls)+", and "+IntToString(GetGold(oPC))+" gold at your disposal.");
|
|
DestroyObject(oLead);
|
|
} // there was an NPC leader
|
|
else if (nStartSouls!=0)
|
|
{ // get stored resources
|
|
SetLocalInt(oPC,"nManaStore",nMana);
|
|
SetLocalInt(oPC,"nSoulStore",nSouls);
|
|
SetLocalInt(oPC,"nStartSoul",nStartSouls);
|
|
GiveGoldToCreature(oPC,nGold);
|
|
if (GetLocalObject(oMod,"oGUARD5"+sID)==OBJECT_INVALID)
|
|
{ // set guard markers
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD5"+sID,oItem);
|
|
oItem=GetObjectByTag(sID+"_VAULT");
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD4"+sID,oItem);
|
|
} // set guard markers
|
|
SendMessageToPC(oPC,"You have "+IntToString(nMana)+" mana, "+IntToString(nSouls)+", and "+IntToString(GetGold(oPC))+" gold at your disposal.");
|
|
} // get stored resources
|
|
else
|
|
{ // parse resources
|
|
oItem=GetObjectByTag(sID+"_RESOURCES");
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // !OI
|
|
sResources=GetName(oItem);
|
|
sParse=fnParsePeriod(sResources);
|
|
sResources=fnRemParsed(sResources,sParse);
|
|
SendMessageToPC(oPC,"You have "+sParse+" mana at your disposal.");
|
|
SetLocalInt(oPC,"nManaStore",StringToInt(sParse));
|
|
SetLocalInt(oMod,"nManaStore"+sID,StringToInt(sParse));
|
|
sParse=fnParsePeriod(sResources);
|
|
sResources=fnRemParsed(sResources,sParse);
|
|
GiveGoldToCreature(oPC,StringToInt(sParse));
|
|
SetLocalInt(oMod,"nGoldStore"+sID,StringToInt(sParse));
|
|
SendMessageToPC(oPC,"You have "+sResources+" souls at your disposal.");
|
|
SetLocalInt(oPC,"nStartSoul",StringToInt(sResources));
|
|
SetLocalInt(oPC,"nSoulStore",StringToInt(sResources));
|
|
SetLocalInt(oMod,"nSoulStore"+sID,StringToInt(sResources));
|
|
SetLocalInt(oMod,"nStartSoul"+sID,StringToInt(sResources));
|
|
oItem=GetObjectByTag(sID+"_START");
|
|
if (GetLocalObject(oMod,"oGUARD5"+sID)==OBJECT_INVALID)
|
|
{ // set guard markers
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD5"+sID,oItem);
|
|
oItem=GetObjectByTag(sID+"_VAULT");
|
|
oItem=CreateObject(OBJECT_TYPE_PLACEABLE,"rts_marker",GetLocation(oItem));
|
|
SetLocalObject(oMod,"oGUARD4"+sID,oItem);
|
|
} // set guard markers
|
|
} // !OI
|
|
} // parse resources
|
|
} // no leader - assume leadership
|
|
else
|
|
{ // there is a leader
|
|
sS=GetName(oPC)+" has joined the "+sTeamName;
|
|
fnAnnounce(sS,1);
|
|
/*oH=GetFirstPC();
|
|
while(oH!=OBJECT_INVALID)
|
|
{ // set enemies & friends
|
|
if (GetIsFriend(oH,oLead)==TRUE||GetIsNeutral(oH,oLead)==TRUE)
|
|
{ // friend
|
|
if (oPC!=oH)
|
|
{ // not yourself
|
|
SetPCLike(oPC,oH);
|
|
} // not yourself
|
|
} // friend
|
|
else
|
|
{ // enemy
|
|
if (oH!=oPC)
|
|
{ // not yourself
|
|
SetPCDislike(oPC,oH);
|
|
} // not yourself
|
|
} // enemy
|
|
oH=GetNextPC();
|
|
} // set enemies & friends */
|
|
} // there is a leader
|
|
// set reputation of creatures towards you
|
|
SetLocalInt(oPC,"nTeamNum",nTeamN);
|
|
SetLocalInt(oMod,"n"+sID+"Num",nTeamN);
|
|
fnSetFactionToFriendly(oPC,sID);
|
|
} // fnTeamSelect()
|
|
|
|
|
|
string fnGetTeamID(int nC)
|
|
{ // return the team ID
|
|
string sRet="NA";
|
|
if (nC==1) sRet="SPID";
|
|
else if (nC==2) sRet="DWF";
|
|
else if (nC==3) sRet="UNC";
|
|
else if (nC==4) sRet="UND";
|
|
return sRet;
|
|
} // fnGetTeamID()
|
|
|
|
void fnAnnounce(string sMsg="",int nOption=0)
|
|
{ // announce message to players
|
|
object oNext=GetFirstPC();
|
|
while(oNext!=OBJECT_INVALID)
|
|
{ // announce
|
|
SendMessageToPC(oNext,"ANNOUNCEMENT:"+sMsg);
|
|
if (nOption==0) AssignCommand(oNext,fnSoundAlert("as_an_owlhoot1"));
|
|
else if (nOption==1) AssignCommand(oNext,fnSoundAlert("as_cv_lute1"));
|
|
oNext=GetNextPC();
|
|
} // announce
|
|
} // fnAnnounce()
|
|
|
|
string fnParsePeriod(string sIn)
|
|
{ // Parse period
|
|
string sH=sIn;
|
|
string sR="";
|
|
while (GetStringLength(sH)>0&&GetStringLeft(sH,1)!=".")
|
|
{ // build string
|
|
sR=sR+GetStringLeft(sH,1);
|
|
sH=GetStringRight(sH,GetStringLength(sH)-1);
|
|
} // build string
|
|
return sR;
|
|
} // fnParsePeriod()
|
|
|
|
string fnRemParsed(string sO, string sP)
|
|
{ // Remove parsed portion from sO
|
|
string sR="";
|
|
if (GetStringLength(sO)>=GetStringLength(sP))
|
|
sR=GetStringRight(sO,GetStringLength(sO)-GetStringLength(sP));
|
|
if (GetStringLeft(sR,1)==".") sR=GetStringRight(sR,GetStringLength(sR)-1);
|
|
return sR;
|
|
} // fnRemParsed()
|
|
|
|
void fnSetFactionToFriendly(object oPC,string sID)
|
|
{ // Set faction that you control to friendly
|
|
object oMember=GetObjectByTag(sID+"0");
|
|
object oWP;
|
|
int nCreate=FALSE;
|
|
if(oMember==OBJECT_INVALID)
|
|
{ // create dummy
|
|
nCreate=TRUE;
|
|
oWP=GetWaypointByTag(sID+"_START");
|
|
oMember=CreateObject(OBJECT_TYPE_CREATURE,sID+"0",GetLocation(oWP));
|
|
} // create dummy
|
|
if (oMember!=OBJECT_INVALID)
|
|
{ // !OI
|
|
AdjustReputation(oPC,oMember,100);
|
|
} // !OI
|
|
else
|
|
{
|
|
SendMessageToPC(oPC,"CRITICAL AREA: A creature placed with tag "+sID+"0 could not be found and is required to set faction you control to friendly!!!");
|
|
}
|
|
if (nCreate==TRUE) DestroyObject(oMember);
|
|
} // fnSetFactionToFriendly()
|
|
|
|
void fnRecordInventory(object oPC)
|
|
{ // flush old inventory record and record inventory
|
|
object oItem;
|
|
int nCount;
|
|
object oMod=GetModule();
|
|
string sPre=GetName(oPC)+GetPCPlayerName(oPC);
|
|
string sRes;
|
|
nCount=1;
|
|
sRes=GetLocalString(oMod,sPre+IntToString(nCount));
|
|
while(GetStringLength(sRes)>0)
|
|
{ // poll and clear old inventory storage
|
|
DeleteLocalString(oMod,sPre+IntToString(nCount));
|
|
nCount++;
|
|
sRes=GetLocalString(oMod,sPre+IntToString(nCount));
|
|
} // poll and clear old inventory storage
|
|
// write current inventory
|
|
oItem=GetFirstItemInInventory(oPC);
|
|
nCount=0;
|
|
while(oItem!=OBJECT_INVALID)
|
|
{ // store PLOT items
|
|
if (GetPlotFlag(oItem)==TRUE)
|
|
{ // store this item
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item
|
|
oItem=GetNextItemInInventory(oPC);
|
|
} // store PLOT items
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_ARROWS,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_BELT,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_BOLTS,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_BOOTS,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_BULLETS,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_CHEST,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_CLOAK,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_HEAD,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_LEFTRING,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_NECK,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
oItem=GetItemInSlot(INVENTORY_SLOT_RIGHTRING,oPC);
|
|
if (oItem!=OBJECT_INVALID)
|
|
{ // store this item too
|
|
sRes=GetResRef(oItem);
|
|
nCount++;
|
|
SetLocalString(oMod,sPre+IntToString(nCount),sRes);
|
|
} // store this item too
|
|
SetLocalInt(oMod,sPre+"Gold",GetGold(oPC));
|
|
} // fnRecordInventory()
|