/////////////////////////////////////////////////////////////////////////////// // ai_h_custom - Custom AI Header // By Deva Bryson Winblood. //---------------------------------------------------------------------------- // PURPOSE: To provide a lot of common functions to be used when setting up your // own AI for teams. /////////////////////////////////////////////////////////////////////////////// /////////////////////// // CONSTANTS /////////////////////// const int DWF_TEAM =1; const int UND_TEAM =2; const int UNC_TEAM =3; const int SPID_TEAM=4; // constants for UNIT AI STATES - see rts_unit_ai for more info const int CMD_GUARD_LAIR = 11; const int CMD_RAID = 17; const int CMD_HARVEST =1; const int CMD_GUARD = 2; const int CMD_PROTECT = 4; const int CMD_SEEK = 6; const int CMD_STAND = 7; const int CMD_ROAM = 8; const int CMD_HEAL = 9; const int CMD_SCOUT = 12; const int CMD_RECON = 14; const int CMD_CONTROL = 18; // capture control point const int CMD_ITEM = 19; // item collector AI const int CMD_GUARDA = 21; // guard area /////////////////////// // PROTOTYPES /////////////////////// // FILE: ai_h_custom FUNCTION: fnAIGetLairStart() // returns the starting waypoint where players and leaders spawn object fnAIGetLairStart(string sID); // FILE: ai_h_custom FUNCTION: fnAIGetLairChest() // returns the object that the taxes are stored in for this team object fnAIGetLairChest(string sID); // FILE: ai_h_custom FUNCTION: fnAIGetLargestTrespasser() // returns the ID of the team that has the most trespass counts against this // team sID. string fnAIGetLargestTrespasser(string sID); // FILE: ai_h_custom FUNCTION: fnAIGetRandomTrespasser() // returns the ID of a team that has trespassed randomly chosen. string fnAIGetRandomTrespasser(string sID); // FILE: ai_h_custom FUNCTION: fnAIRaid() // This function can be applied to a unit and used to set the raid type // as well as who to raid. void fnAIRaid(object oOb,string sRaid,int nParm); // FILE: ai_h_custom FUNCTION: fnAILevel() // This function will return the level of the NPC or PC who is passed to the function int fnAILevel(object oOb); // FILE: ai_h_custom FUNCTION: fnAIGetGold() // This function returns how much gold the team has in its tax chest. int fnAIGold(string sID); // FILE: ai_h_custom FUNCTION: fnAISetGold() // This function enables you to set how much gold this team has in the tax chest void fnAISetGold(string sID,int nGold); /////////////////////// // FUNCTIONS /////////////////////// void fnAISetGold(string sID,int nGold) { object oChest=GetObjectByTag(sID+"_CHEST"); int nG=0; object oItem=GetFirstItemInInventory(oChest); while(oItem!=OBJECT_INVALID) { // count gold if (GetResRef(oItem)=="nw_it_gold001") { // gold DelayCommand(0.3,DestroyObject(oItem)); } // gold oItem=GetNextItemInInventory(oChest); } // count gold CreateItemOnObject("nw_it_gold001",oChest,nGold); } // set gold amount int fnAIGetGold(string sID) { object oChest=GetObjectByTag(sID+"_CHEST"); int nG=0; object oItem=GetFirstItemInInventory(oChest); while(nG==0&&oItem!=OBJECT_INVALID) { // check chest inventory if (GetTag(oItem)=="NW_IT_GOLD001") nG=GetItemStackSize(oItem); oItem=GetNextItemInInventory(oChest); } // check chest inventory return nG; } // fnAIGetGold() int fnAILevel(object oOb) { // return level return GetLevelByPosition(1,oOb)+GetLevelByPosition(2,oOb)+GetLevelByPosition(3,oOb); } // fnLevel() void fnAIRaid(object oOb,string sRaid,int nParm) { DeleteLocalInt(oOb,"nSState"); SetLocalString(oOb,"sTeamToRaid",sRaid); SetLocalInt(oOb,"nParm",nParm); // attack SetLocalInt(oOb,"nMState",17); SetLocalInt(oOb,"nRun",TRUE); //AssignCommand(oOb,SpeakString("*raid "+sRaid+"*")); } // fnAIRaid() object fnAIGetLairStart(string sID) { object oWP=GetWaypointByTag(sID+"_START"); return oWP; } // fnAIGetLairStart() object fnAIGetLairChest(string sID) { object oOb=GetObjectByTag(sID+"_CHEST"); return oOb; } // fnAIGetLairChest() string fnAIGetLargestTrespasser(string sID) { string sRet="NA"; object oMod=GetModule(); string sTresPrefix="nAITrespass"+sID+"_"; int nCount=0; if (sID!="DWF"&&GetLocalInt(oMod,sTresPrefix+"DWF")>nCount) { nCount=GetLocalInt(oMod,sTresPrefix+"DWF"); sRet="DWF"; } if (sID!="UND"&&GetLocalInt(oMod,sTresPrefix+"UND")>nCount) { nCount=GetLocalInt(oMod,sTresPrefix+"UND"); sRet="UND"; } if (sID!="UNC"&&GetLocalInt(oMod,sTresPrefix+"UNC")>nCount) { nCount=GetLocalInt(oMod,sTresPrefix+"UNC"); sRet="UNC"; } if (sID!="SPID"&&GetLocalInt(oMod,sTresPrefix+"SPID")>nCount) { nCount=GetLocalInt(oMod,sTresPrefix+"SPID"); sRet="SPID"; } return sRet; } // fnAIGetLargestTrespasser() string fnAIGetRandomTrespasser(string sID) { string sRet="NA"; object oMod=GetModule(); int nCount=0; int nR; string sTresPrefix="nAITrespass"+sID+"_"; if (fnAIGetLargestTrespasser(sID)!="NA") { // there is a trespasser while(sRet=="NA") { // get trespasser nR=d4(); if (sID!="DWF"&&GetLocalInt(oMod,sTresPrefix+"DWF")>nCount&&nR==1) return "DWF"; else if (sID!="UND"&&GetLocalInt(oMod,sTresPrefix+"UND")>nCount&&nR==2) return "UND"; else if (sID!="UNC"&&GetLocalInt(oMod,sTresPrefix+"UNC")>nCount&&nR==3) return "UNC"; else if (sID!="SPID"&&GetLocalInt(oMod,sTresPrefix+"SPID")>nCount&&nR==4) return "SPID"; } // get trespasser } // there is a trespasser return sRet; } // fnAIGetRandomTrespasser() //void main(){}