NWNDS/nwnds_module/ar_db_main.nss
Jaysyn904 de24f81734 Added NWN Dark Sun module contents
Added NWN Dark Sun module contents.
2021-07-12 21:24:46 -04:00

982 lines
27 KiB
Plaintext

//::///////////////////////////////////////////////
//:: Athas reborn Database connection functions
//:: ar_db_main
//:: Copyright (c) 2007 Athas Reborn PW.
//:://////////////////////////////////////////////
/*
*/
//:://////////////////////////////////////////////
//:: Created By: NiteCap
//:: Created On: 7-9-07
//:://////////////////////////////////////////////
#include "aps_include"
#include "ar_inc_pcspawn"
#include "ar_db_const"
#include "ar_db_struct"
//#include "nwnx_functions"
//:://////////////////////////////////////////////
//:: Prototypes
//:://////////////////////////////////////////////
//Inititalizes the database and grooms the log table
void ARSX_INIT();
//prosscesses the oncliententer db information
void ARSX_OnClientEnter(object oPC);
// client onrest event handler
// stores db info for oPC
// includeing
// last location
void ARSX_OnRest(object oPC);
// returns the main storage object
// can be set to item or module
// if set to item ARSX_LOCAL_USE_ITEM_RESREF will need to be supplied
object ARSX_LOCAL();
//set/returns the race of oObject
int ARSX_GetRace(object oObject);
//returns the player id from the database
int ARSX_GetPlayer(object oPC);
//returns the pc id from the database
int ARSX_GetPC(object oPC, int nPlayer);
// updates the connection log useing sDatastruct
// returns the row index in the table of the connection
int ARSX_LogConnection(struct ar_connection_log sData);
//returns the Database id for oObject
int ARSX_GetDBID(object oObject, int nObjectType);
// returns the last known location of oPC
// if nolocation is found or nIsNewPC is set to true
// will return the PC's race adjusted start point
location ARSX_GetLastLocation(object oPC, int nIsNewPC=FALSE);
//logs the pc death and returns the entry # for use.
int ARSX_LogPCDeath(object oPC, object oKiller);
//logs the pc kil and returns the entry # for use.
int ARSX_LogPCKill(object oPC, object oKiller);
//returns the Database id for oObject
int ARSX_GetDBID(object oObject, int nObjectType);
// updates the ar_area_index
// return on error is ARSX_AREA_NOT_FOUND
int ARSX_IndexArea(object oArea);
// //logs the creature and returns the entry # for use.
int ARSX_IndexCreature(object oCreature);
//gets the xp value of a creature
int ARSX_GetXP(object oPlayer,object oCreature);
//logs the item and returns the entry # for use.
int ARSX_IndexItem(object oItem);
//logs the item Property and returns the entry # for use.
int ARSX_IndexItemProperty(object oItem, int nItem);
//gets the ecl value of a pc
int AR_GetECL(object oPC);
//gets the gold value of a creature
int ARSX_GetGoldValue(object oPlayer,object oCreature);
//:://////////////////////////////////////////////
//:: Implements
//:://////////////////////////////////////////////
// updates the connection log useing sDatastruct
// returns the row index in the table of the connection
// returns -1 on updates
int ARSX_LogConnection(struct ar_connection_log sData)
{
string sSQL="";
object oModule=GetModule();
if(sData.nID == ARSX_USER_NOT_CONNECTED)
{
sSQL = "INSERT INTO " + sData.sTable +
" (nPlayer,nPC,sInboundConnection,bDM,sIP) VALUES" +
"(" + IntToString(sData.nPlayer) +
"," + IntToString( sData.nPC) +
"," + sData.sInboundConnection +
"," + IntToString(sData.bDM ) +
",'" + sData.sIP +
"');";
SQLExecDirect(sSQL);
//Retrive our index for later
sSQL = "SELECT nIndex FROM " + sData.sTable + " WHERE nPlayer=" +
IntToString(sData.nPlayer) +
" AND sOutboundConnection " + SQL_ISNULL +
" AND sIP='" + sData.sIP + "';";
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
else
{
return SQLFetch();
}
}
else
{
sSQL = "UPDATE " + sData.sTable + " SET sOutBoundConnection=" + sData.sOutboundConnection +
",sLocation='" + sData.sLastLocation +
"' WHERE nIndex=" + IntToString(sData.nID) +
";";
SQLExecDirect(sSQL);
return ARSX_LOCATION_STORED;
}
}
//returns the player id from the database
int ARSX_GetPlayer(object oPC)
{
struct ar_player_index sData;
sData.sName = SQLEncodeSpecialChars(GetPCPlayerName(oPC));
sData.sIP = GetPCIPAddress(oPC);
sData.sCDKEY = GetPCPublicCDKey(oPC);
sData.sLastIP = SQL_NULL;
sData.bDM = GetIsDM(oPC);
string sSQL = "SELECT nIndex FROM " + ARSX_PLAYER_INDEX +
" WHERE sName='" + sData.sName +"'";
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
else
{
SendMessageToAllDMs("New Player: " + sData.sName);
SendMessageToPC(oPC,ARSX_MSG_NEWPLAYER);
sSQL = "INSERT INTO " + ARSX_PLAYER_INDEX +
" (sName,sIP,sCDKEY,sLastIP,bDM) VALUES (" +
"'" + sData.sName +
"','" + sData.sIP +
"','" + sData.sCDKEY +
"','" + sData.sLastIP +
"'," + IntToString( sData.bDM) + ");";
SQLExecDirect(sSQL);
sSQL = "SELECT nIndex FROM " + ARSX_PLAYER_INDEX +
" WHERE sName='" + sData.sName +"'";
SQLExecDirect(sSQL);
if(SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
return ARSX_USER_CREATE_ERROR;
}
return ARSX_USER_NOT_FOUND;
}
//returns the pc id from the database
int ARSX_GetPC(object oPC, int nPlayer)
{
struct ar_pc_index sData;
sData.sName = SQLEncodeSpecialChars(GetName(oPC));
sData.nPlayer = nPlayer;
sData.bDM = GetIsDM(oPC);
sData.nRace = ARSX_GetRace(oPC);
string sSQL = "SELECT nIndex FROM " + ARSX_PC_INDEX +
" WHERE sName='" + sData.sName +"' AND nPlayer=" +
IntToString(sData.nPlayer) + ";";
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
else
{
sSQL = "INSERT INTO " + ARSX_PC_INDEX +
" (sName,nPlayer,bDM,nRace) VALUES (" +
"'" + sData.sName +
"'," + IntToString( sData.nPlayer ) +
"," + IntToString(sData.bDM) +
"," + IntToString(sData.nRace) + ");";
SQLExecDirect(sSQL);
sSQL = "SELECT nIndex FROM " + ARSX_PC_INDEX +
" WHERE sName='" + sData.sName +"' AND nPlayer=" +
IntToString(sData.nPlayer) + ";";
SQLExecDirect(sSQL);
if(SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
return ARSX_PC_CREATE_ERROR;
}
return ARSX_PC_NOT_FOUND;
}
//set/returns the race index of oObject
int ARSX_GetRace(object oObject)
{
if(GetObjectType(oObject)!=OBJECT_TYPE_CREATURE)
{
return ARSX_RACE_OBJECT_NOT_VALID;
}
struct ar_race_index sData;
if(GetIsPC(oObject))
{
sData.sName = GetSubRace(oObject) == "" ?
Get2DAString("racialtypes","Lable",GetRacialType(oObject)) :
GetSubRace(oObject);
sData.sStartLocation=GetSubRaceAdjustedStartPoint(oObject);
sData.sRespawnLocation = GetSubRaceAdjustedRespawnPoint(oObject);
}
else
{
int nRow = GetRacialType(oObject);
sData.sName=Get2DAString ("racialtypes","Lable",nRow);
sData.sStartLocation="~CREATURE_SPAWN_POINT~";
sData.sRespawnLocation = "~CREATURE_SPAWN_POINT~";
}
string sSQL = "SELECT nIndex FROM " + ARSX_RACE_INDEX +
" WHERE sName='" + sData.sName + "';";
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
else
{
sSQL = "INSERT INTO " + ARSX_RACE_INDEX +
" (sName,sStartLocation,sRespawnLocation) VALUES (" +
"'" + sData.sName +
"','" + sData.sStartLocation +
"','" + sData.sRespawnLocation +
"');";
SQLExecDirect(sSQL);
sSQL = "SELECT nIndex FROM " + ARSX_RACE_INDEX +
" WHERE sName='" + sData.sName +"';";
SQLExecDirect(sSQL);
if(SQLFetch() == SQL_SUCCESS)
{
return StringToInt(SQLGetData(1));
}
return ARSX_RACE_CREATE_ERROR;
}
return ARSX_RACE_NOT_FOUND;
}
// returns the main Local storage object
// can be set to item or module see ar_db_const
// for details
// if set to item ARSX_LOCAL_USE_ITEM_TAG will need to be supplied
object ARSX_LOCAL()
{
if(ARSX_LOCAL_USE_ITEM)
{
return GetObjectByTag(ARSX_LOCAL_USE_ITEM_TAG);
}
return GetModule();
}
// returns the last known location of oPC
location ARSX_GetLastLocation(object oPC, int nIsNewPC=FALSE)
{
int nPlayer = ARSX_GetPlayer(oPC);
int nPC = ARSX_GetPC(oPC, nPlayer);
string sSQL;
location lLoc;
sSQL= "SELECT sLocation, nIndex FROM "+ ARSX_CONLOG +
" WHERE nPlayer=" + IntToString(nPlayer) +
" AND nPC=" + IntToString(nPC) +
" AND sLocation IS NOT NULL " +
" ORDER BY nIndex DESC";
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
string sLoc = SQLGetData(1);
if(sLoc != "")lLoc = APSStringToLocation(sLoc);
}
else
{
sSQL = "SELECT sStartLocation FROM " + ARSX_RACE_INDEX +
" WHERE nIndex=" + IntToString(ARSX_GetRace(oPC));
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
lLoc = GetLocation(GetObjectByTag(SQLGetData(1)));
}
}
if(nIsNewPC)
{
sSQL = "SELECT sStartLocation FROM " + ARSX_RACE_INDEX +
" WHERE nIndex=" + IntToString(ARSX_GetRace(oPC));
SQLExecDirect(sSQL);
if (SQLFetch() == SQL_SUCCESS)
{
lLoc = GetLocation(GetObjectByTag(SQLGetData(1)));
}
}
return lLoc;
}
void ARSX_OnClientEnter(object oPC)
{
struct ar_connection_log sData;
object oStorer = ARSX_LOCAL();
string sConn = ARSX_L_CONNECTION + GetPCPlayerName(oPC) + "_" + GetName(oPC);
int nConn = GetLocalInt(oStorer,sConn);
int nIsNewPC = GetHitDice(oPC)<=1?TRUE:FALSE;
if(!nConn)
{
sData.nID = ARSX_USER_NOT_CONNECTED;
sData.nPlayer = ARSX_GetPlayer(oPC);
sData.nPC = ARSX_GetPC(oPC, sData.nPlayer);
sData.sInboundConnection = SQL_NOW;
sData.sOutboundConnection = SQL_NULL;
//location lLastLoc =ARSX_GetLastLocation(oPC,sData.nPlayer ,sData.nPC,nIsNewPC);
sData.bDM = GetIsDM(oPC);
sData.sIP = GetPCIPAddress(oPC);
sData.sTable = ARSX_CONLOG;
nConn = ARSX_LogConnection(sData);
SetLocalInt(oStorer,sConn,nConn);
SetLocalInt(oPC,sConn,nConn);
SetLocalInt(oPC,ARSX_L_PLAYER,sData.nPlayer );
SetLocalInt(oPC,ARSX_L_PC,sData.nPC);
}
}
void ARSX_OnRest(object oPC)
{
struct ar_connection_log sData; // create our connection data structure
object oStorer = ARSX_LOCAL();
int nPC = GetLocalInt(oStorer,ARSX_L_PC + GetName(oPC)); // local stored pc index
int nPlayer = GetLocalInt(oStorer,ARSX_L_PLAYER + GetPCPlayerName(oPC)); // local Player index
string sUID = GetPCPlayerName(oPC) + "_" + GetName(oPC);
string sConn = ARSX_L_CONNECTION + sUID;
int nConn = GetLocalInt(oStorer, sConn); // get the local stored connection index
string sLoc = APSLocationToString(GetLocation(oPC));
if(sLoc=="")sLoc = "#ERROR##ERROR##ERROR##ERROR##ERROR#";
sData.nID = nConn;
sData.nPlayer = nPlayer;
sData.nPC =nPC;
sData.sInboundConnection = SQL_NULL;
sData.sOutboundConnection = SQL_NOW;
sData.sLastLocation = sLoc;
sData.bDM = GetIsDM(oPC);
sData.sIP = GetPCIPAddress(oPC);
sData.sTable = ARSX_CONLOG;
int nUpdated = ARSX_LogConnection(sData);
if(nUpdated == ARSX_LOCATION_STORED){
FloatingTextStringOnCreature("Location Saved",oPC);}
}
//Inititalizes the database and grooms the log table
void ARSX_INIT()
{
string sCleanConnectionLog = "DELETE FROM ar_connection_log WHERE sLocation IS NULL " +
" AND sOutboundConnection IS NULL AND " +
"sInboundConnection < CURRENT_DATE;";
SendMessageToAllDMs("ARSX-Loading...........");
SQLExecDirect(sCleanConnectionLog);
SendMessageToAllDMs("............ARSX-Loaded");
}
// updates the ar_area_index
// return on error is ARSX_AREA_NOT_FOUND
int ARSX_IndexArea(object oArea)
{
string sSelect;
string sInsert;
int nReturn=ARSX_AREA_NOT_FOUND;
string sResRef=GetResRef(oArea);
string sDescription=SQLEncodeSpecialChars(GetName(oArea));
sSelect = "SELECT nIndex FROM " + ARSX_AREA_INDEX +
" WHERE sResRef='" + sResRef +
"';";
sInsert = "INSERT INTO " + ARSX_AREA_INDEX +
"(sResRef,sDescription) VALUES (" +
"'" + sResRef +
"','" + sDescription +
"');";
SQLExecDirect(sSelect);
// If existing
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
}
// not There so we add it
else
{
SQLExecDirect(sInsert);
SQLExecDirect(sSelect);
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
}
}
return nReturn;
}
// updates the ar_creature_index useing sData
int ARSX_IndexCreature(object oCreature)
{
struct ar_creature_index sData;
sData.sResRef=GetResRef(oCreature);
sData.sDescription=SQLEncodeSpecialChars(GetName(oCreature));
sData.sCommonName=SQLEncodeSpecialChars(GetName(oCreature));
sData.nCRValue=FloatToInt(GetChallengeRating(oCreature));
sData.nRace= ARSX_GetRace(oCreature);
sData.bPlotFlag=GetPlotFlag(oCreature);
int nReturn=ARSX_CREATURE_CREATE_ERROR;
string sSelect = "SELECT nIndex FROM " + ARSX_CREATURE_INDEX +
" WHERE sResRef='" + sData.sResRef + "';";
string sInsert = "INSERT INTO " + ARSX_CREATURE_INDEX +
"(sResRef,sDescription,sCommonName,nCRValue,nRace,bPlotFlag) VALUES('" +
sData.sResRef + "','" +
sData.sDescription + "','" +
sData.sCommonName + "'," +
IntToString(sData.nCRValue) + "," +
IntToString(sData.nRace) + "," +
IntToString(sData.bPlotFlag) + ");";
SQLExecDirect(sSelect);
// If existing
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
}
// not There so we add it
else
{
SQLExecDirect(sInsert);
SQLExecDirect(sSelect);
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
}
}
return nReturn;
}
//logs the pc death.
int ARSX_LogPCDeath(object oPC, object oKiller)
{
int nReturn=ARSX_LOG_ERROR_PCDEATH;
string sSelect,sInsert;
int nPC,bKilledByPC,bKilledByCreature,nArea,nKiller,nItem;
string sTimeOfDeath = SQL_NOW;
nPC = ARSX_GetPC(oPC,ARSX_GetPlayer(oPC));
nArea = ARSX_IndexArea(GetArea(oPC));
object oItem = GetLastWeaponUsed(oKiller);
nItem =ARSX_IndexItem(oItem);
if(!GetIsPC(oKiller))
{
nKiller = ARSX_IndexCreature(oKiller);
bKilledByCreature=TRUE;
}
if(GetIsPC(oKiller))
{
bKilledByPC = TRUE;
nKiller = ARSX_GetPC(oKiller,ARSX_GetPlayer(oKiller));
bKilledByCreature=FALSE;
}
sInsert = "INSERT INTO " + ARSX_PC_DEATH_INDEX +
"(nPC,nKiller,bPCKill,bCreatureKill,nArea,nItem,sTimeStamp) VALUES(" +
IntToString(nPC) + "," +
IntToString(nKiller) + "," +
IntToString(bKilledByPC) + "," +
IntToString(bKilledByCreature) + "," +
IntToString(nArea) + "," +
IntToString(nItem) + "," +
sTimeOfDeath + ");";
SQLExecDirect(sInsert);
return ARSX_LOG_PCDEATH;
}
//logs the kill and returns the entry # for use.
//
int ARSX_LogCreatureDeath(object oDead, object oKiller)
{
int nReturn=ARSX_LOG_ERROR_CRDEATH;
string sInsert;
int nPC,nCreature,nArea,nXpValue,nGoldValue,nItem;
string sTimeOfDeath = SQL_NOW;
nPC = ARSX_GetPC(oKiller,ARSX_GetPlayer(oKiller));
nCreature = ARSX_IndexCreature(oDead);
nArea = ARSX_IndexArea(GetArea(oKiller));
nXpValue = ARSX_GetXP(oKiller, oDead);
nGoldValue = ARSX_GetGoldValue(oKiller,oDead);
//limited need upgrades here
object oItem = GetLastWeaponUsed(oKiller);
nItem =ARSX_IndexItem(oItem);
sInsert = "INSERT INTO " + ARSX_CREATURE_DEATHS +
"(nPC,nCreature,nArea,nXpValue,nGoldValue,nItem,sTimeStamp) VALUES(" +
IntToString(nPC) + "," +
IntToString(nCreature) + "," +
IntToString(nArea) + "," +
IntToString(nXpValue) + "," +
IntToString(nGoldValue) + "," +
IntToString(nItem) + "," +
sTimeOfDeath + ");";
SQLExecDirect(sInsert);
return ARSX_LOG_CRDEATH;
}
//logs the kill and returns the status response
//
int ARSX_LogKill(object oDead, object oKiller)
{
int nReturn=ARSX_LOG_ERROR_PCKILL;
string sSelect,sInsert;
int nDeadPC,nDeadCR,nPCKiller,nCRKiller;
//Killer is acually the master of oKiller in case of summon or familiars
if(GetIsObjectValid(GetMaster(oKiller)))oKiller = GetMaster(oKiller);
//pc was killed
if(GetIsPC(oDead))nDeadPC = TRUE;
//creature killed
if(GetObjectType(oDead)==OBJECT_TYPE_CREATURE)nDeadCR = TRUE;
if(GetIsPC(oKiller))nPCKiller=TRUE;
if(GetObjectType(oKiller)==OBJECT_TYPE_CREATURE)nCRKiller=TRUE;
if(nDeadPC)
{
nReturn= ARSX_LogPCDeath(oDead,oKiller);
}
else if(nDeadCR)
{
nReturn= ARSX_LogCreatureDeath(oDead,oKiller);
}
return nReturn;
}
int ARSX_GetXP(object oPlayer,object oCreature)
{
//Get the area the kill was made in
object oArea = GetArea(oCreature);
//Initialize the amount of players in a party
int nMembers = 0;
//Determine how many members of the party are in that area
object oPartyMember = GetFirstFactionMember(oPlayer);
int AwardXP=0;
if(GetIsObjectValid(oPartyMember))
{
while(GetIsObjectValid(oPartyMember))
{
if((GetArea(oPartyMember) == oArea) && (GetIsPC(oPartyMember)))
nMembers++;
oPartyMember = GetNextFactionMember(oPlayer);
}
//Get the hit dice of the monster
int nMRating = GetHitDice(oCreature);
//Get the hit dice of the killer
int nPRating = AR_GetECL(oPlayer);//GetHitDice(oPlayer);
if(nPRating == 0)
{
nMRating = 0;
nPRating = 1;
}
//Initialize a default amount of experience
int nXP = (100 + (nMRating * 5));
if((nMRating - nPRating) < -6)
{
nXP = 0;
}
//Modify the experience
nXP = ((nXP * nMRating) / nPRating);
AwardXP = nXP;
//Start exp loop
oPartyMember = GetFirstFactionMember(oPlayer);
if(GetIsObjectValid(oPartyMember))
{
//Initialize a variable for the loop to determine the party members challenge rating
int nPartyRating;
int nXPTemp = 0;
//Loop baby
while (GetIsObjectValid(oPartyMember))
{
if((GetArea(oPartyMember) == oArea) && (GetIsPC(oPartyMember)))
{
/// AREA if
nPartyRating = AR_GetECL(oPartyMember);
if(nPRating >= nPartyRating)
{
if((nPRating - nPartyRating) > 6)
nXPTemp = 0;
else
nXPTemp = ((nXP * nPartyRating) / nPRating);
}
else
{
if((nPartyRating - nPRating) > 6)
nXPTemp = 0;
else
{
if(nPartyRating == 0)
{
nPartyRating = 1;
nXP = 0;
}
nXPTemp = ((nXP * nPRating) / nPartyRating);
}
}
//if(nPRating >= nPartyRating)
if((nMRating - nPartyRating) < -6)
{
nXPTemp = 0;
}
if(nXPTemp > AwardXP)
{
AwardXP = nXPTemp;
}
}
oPartyMember = GetNextFactionMember(oPlayer);
}
}
}
return AwardXP;
}
int ARSX_GetGoldValue(object oPlayer,object oCreature)
{
//Get the area the kill was made in
object oArea = GetArea(oCreature);
//Initialize the amount of players in a party
int nMembers = 0;
//Determine how many members of the party are in that area
object oPartyMember = GetFirstFactionMember(oPlayer);
int nGold;
if(GetIsObjectValid(oPartyMember))
{
while(GetIsObjectValid(oPartyMember))
{
if((GetArea(oPartyMember) == oArea) && (GetIsPC(oPartyMember)))
nMembers++;
oPartyMember = GetNextFactionMember(oPlayer);
}
//Get the hit dice of the monster
int nMRating = GetHitDice(OBJECT_SELF);
//Get the hit dice of the killer
int nPRating = AR_GetECL(oPlayer);//GetHitDice(oPlayer);
if(nPRating == 0)
{
nMRating = 0;
nPRating = 1;
}
//Get an amount of gold in relation to the challenge rating of the monster
nGold = d4(nMRating);
//These monster types don't have gold
if(GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ANIMAL ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_BEAST ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_CONSTRUCT ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ELEMENTAL ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_ABERRATION ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_MAGICAL_BEAST ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OUTSIDER ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_UNDEAD ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_PLANT ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_OOZE ||
GetRacialType(OBJECT_SELF) == RACIAL_TYPE_VERMIN)
{
nGold = 0;
}
else
{
//Split the gold among the party members in the area
if (nMembers == 0)
nGold /= 1;
else
nGold /= nMembers;
}
}
return nGold;
}
int AR_GetECL(object oPC)
{
int iLevel = GetHitDice(oPC);
if(iLevel > MAXIMUM_PLAYER_LEVEL)
{
iLevel = MAXIMUM_PLAYER_LEVEL;
}
if(iLevel < 0)
{
iLevel = 0;
}
return iLevel;
}
int ARSX_IndexItem(object oItem)
{
struct ar_item_index sData;
sData.sResRef =GetResRef(oItem);
sData.sDescription="NOT_IMPLEMETED_YET";//GetDescription_(oItem);
sData.nGoldValue=GetGoldPieceValue(oItem);
sData.nType=GetBaseItemType(oItem);
sData.sName = SQLEncodeSpecialChars(GetName(oItem));
int nReturn=ARSX_ITEM_CREATE_ERROR;
string sSelect = "SELECT nIndex FROM " + ARSX_ITEM_INDEX +
" WHERE sResRef='" + sData.sResRef + "';";
string sInsert = "INSERT INTO " + ARSX_ITEM_INDEX +
"(sResRef,sDescription,sName,nGoldValue,nType) VALUES('" +
sData.sResRef + "','" +
sData.sDescription + "','" +
sData.sName + "'," +
IntToString(sData.nGoldValue) + "," +
IntToString(sData.nType) + ");";
SQLExecDirect(sSelect);
// If existing
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
}
// not There so we add it
else
{
SQLExecDirect(sInsert);
SQLExecDirect(sSelect);
if (SQLFetch() == SQL_SUCCESS)
{
nReturn = StringToInt(SQLGetData(1));
ARSX_IndexItemProperty(oItem, nReturn);
}
}
return nReturn;
}
//logs the item Property of nItem
int ARSX_IndexItemProperty(object oItem, int nItem)
{
itemproperty ip;
int nSubType,nType,nParam1,nParam1Value,nCostTable,nCostTableValue;
string sSQL;
// lay our hands on the first prop
ip = GetFirstItemProperty(oItem);
// start the recurse
while (GetIsItemPropertyValid(ip))
{
// get our values
nType = GetItemPropertyType(ip);
nSubType = GetItemPropertySubType(ip);
nParam1 = GetItemPropertyParam1(ip);
nParam1Value = GetItemPropertyParam1Value(ip);
nCostTable = GetItemPropertyCostTable(ip);
nCostTableValue = GetItemPropertyCostTableValue(ip);
//SQL ;)
sSQL= "INSERT INTO " + ARSX_ITEMPROP_INDEX +
"(nItem,nType,nSubType,nParam1,nParam1Value,nCostTable,nCostTableValue) VALUES(" +
IntToString(nItem) + "," +
IntToString(nType) + "," +
IntToString(nSubType) + "," +
IntToString(nParam1) + "," +
IntToString(nParam1Value) + "," +
IntToString(nCostTable) + "," +
IntToString(nCostTableValue) + ");";
// cast the data
SQLExecDirect(sSQL);
//try the next Prop if any
ip = GetNextItemProperty(oItem);
}
//done
return nItem;
}
/*
// updates the ar_arena_kills_index useing sData
void ARSX_IndexArenaKill(struct ar_arena_kills_index sData)
{
string sSql;
string sTable = sData.sTable;
}
// updates the ar_pc_bounty useing sData
void ARSX_IndexBounty(struct ar_pc_bounty sData)
{
string sSql;
string sTable = sData.sTable;
}
// updates the ar_pc_quests useing sData
void ARSX_IndexPCQuest(struct ar_pc_quests sData)
{
string sSql;
string sTable = sData.sTable;
}
// updates the ar_player_storage useing sData
void ARSX_IndexPCStorage(struct ar_player_storage sData)
{
string sSql;
string sTable = sData.sTable;
}
// updates the ar_quest_index useing sData
void ARSX_IndexQuest(struct ar_quest_index sData)
{
string sSql;
string sTable = sData.sTable;
}
*/
//------------------------------------------------------------------------------
// void main(){}