Battledale_PRC8/_module/nss/dmfi_dmw_inc.nss
Jaysyn904 7b9e44ebbb Initial upload
Initial upload.  PRC8 has been added.  Module compiles, PRC's default AI & treasure scripts have been integrated.  Started work on top hak for SLA / Ability / Scripting modifications.
2024-03-11 23:44:08 -04:00

1202 lines
49 KiB
Plaintext

#include "prc_inc_racial"
// void main (){}
// VOICE CONFIGURATION - NEW IN 1.07 and UP
// Set this to 0 if you want to DISABLE listening by NPCs for performance reasons.
// See readme for additional information regarding possible issues and effects.
const int DMFI_LISTENING_GLOBAL = 1;
// NOTE: OMW_COLORS is an invisible object that must be present in your module.
// It has high ascii characters in the name and is used to get the color codes.
// This was ripped wholeheartedly by an example posted by Richterm on the bioboards.
string DST_COLOR_TAGS = GetName(GetObjectByTag("dem_color_text"));
string DST_COLOR_WHITE = GetSubString(DST_COLOR_TAGS, 0, 6);
string DST_COLOR_YELLOW = GetSubString(DST_COLOR_TAGS, 6, 6);
string DST_COLOR_MAGENTA = GetSubString(DST_COLOR_TAGS, 12, 6);
string DST_COLOR_CYAN = GetSubString(DST_COLOR_TAGS, 18, 6);
string DST_COLOR_RED = GetSubString(DST_COLOR_TAGS, 24, 6);
string DST_COLOR_GREEN = GetSubString(DST_COLOR_TAGS, 30, 6);
string DST_COLOR_BLUE = GetSubString(DST_COLOR_TAGS, 36, 6);
// Colors for each type of roll. Change the colors if you like.
string DMFI_ROLL_COLOR = DST_COLOR_CYAN;
string DST_COLOR_NORMAL = DST_COLOR_WHITE;
int DMW_START_CUSTOM_TOKEN = 8000;
//Retrieve targetting information
object oMySpeaker = GetLastSpeaker();
object oMyTarget = GetLocalObject(oMySpeaker, "dmfi_univ_target");
location lMyLoc = GetLocalLocation(oMySpeaker, "dmfi_univ_location");
// checks if a nearby object is destroyable
int dmwand_isnearbydestroyable();
// Check if the target can be created with CreateObject
int dmwand_istargetcreateable();
//Check if target is a destroyable object
int dmwand_istargetdestroyable();
// checks if the wand was NOT clicked on an object
int dmwand_istargetinvalid();
// check if the target has an inventory
int dmwand_istargetinventory();
//Check if the target is not the wand's user
int dmwand_istargetnotme();
//Check if target is an NPC or monster
int dmwand_istargetnpc();
//Check if the target is a PC
int dmwand_istargetpc();
//Check if the target is a PC and not me
int dmwand_istargetpcnme();
// Check if the target is a PC or NPC
// uses the CON score currently
int dmwand_istargetpcornpc();
//Check if the target is a PC or an npc and not me
int dmwand_istargetpcornpcnme();
// Check if target is a placeable
int dmwand_istargetplaceable();
//bulds the conversion
int dmwand_BuildConversationDialog(int nCurrent, int nChoice, string sConversation, string sParams);
int dmw_conv_ListPlayers(int nCurrent, int nChoice, string sParams = "");
int dmw_conv_Start(int nCurrent, int nChoice, string sParams = "");
void dmwand_BuildConversation(string sConversation, string sParams);
void dmwand_StartConversation();
// DMFI Color Text function. It returns a colored string.
// sText is the string that will be colored and sColor is the color
// options: yellow, magenta, cyan, red, green, blue - truncated at first letter
// Ex: sMsg = ColorText(sMsg, "y"); //Add the include file - yields yellow colored msg.
string ColorText(string sText, string sColor);
string ColorText(string sText, string sColor)
{
string sApply = DST_COLOR_NORMAL;
string sTest = GetStringLowerCase(GetStringLeft(sColor, 1));
if (sTest=="y") sApply = DST_COLOR_YELLOW;
else if (sTest == "m") sApply = DST_COLOR_MAGENTA;
else if (sTest == "c") sApply = DST_COLOR_CYAN;
else if (sTest == "r") sApply = DST_COLOR_RED;
else if (sTest == "g") sApply = DST_COLOR_GREEN;
else if (sTest == "b") sApply = DST_COLOR_BLUE;
string sFinal = sApply + sText + DST_COLOR_NORMAL;
return sFinal;
}
int dmwand_isnearbydestroyable()
{
object oMyTest = GetFirstObjectInShape(SHAPE_CUBE, 0.6, lMyLoc, FALSE, OBJECT_TYPE_ALL);
int nTargetType = GetObjectType(oMyTest);
return (GetIsObjectValid(oMyTest) && (! GetIsPC(oMyTest)) && ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE)));
}
int dmwand_istargetcreateable()
{
if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
int nTargetType = GetObjectType(oMyTarget);
return ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE));
}
int dmwand_istargetdestroyable()
{
if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
int nTargetType = GetObjectType(oMyTarget);
if(! GetIsPC(oMyTarget))
{
return ((nTargetType == OBJECT_TYPE_ITEM) || (nTargetType == OBJECT_TYPE_PLACEABLE) || (nTargetType == OBJECT_TYPE_CREATURE));
}
return FALSE;
}
int dmwand_istargetinvalid()
{
return !GetIsObjectValid(oMyTarget);
}
int dmwand_istargetinventory()
{
return (GetIsObjectValid(oMyTarget) && GetHasInventory(oMyTarget));
}
int dmwand_istargetnotme()
{
return (GetIsObjectValid(oMyTarget) && (oMySpeaker != oMyTarget));
}
int dmwand_istargetpc()
{
return (GetIsObjectValid(oMyTarget) && GetIsPC(oMyTarget));
}
int dmwand_istargetpcnme()
{
return (GetIsObjectValid(oMyTarget) && GetIsPC(oMyTarget) && (oMySpeaker != oMyTarget));
}
int dmwand_istargetpcornpc()
{
return (GetIsObjectValid(oMyTarget) && GetAbilityScore(oMyTarget, ABILITY_CONSTITUTION));
}
int dmwand_istargetnpc()
{
return (dmwand_istargetpcornpc() && (!GetIsPC(oMyTarget)));
}
int dmwand_istargetpcornpcnme()
{
return (dmwand_istargetpcornpc() && (oMySpeaker != oMyTarget));
}
int dmwand_istargetplaceable()
{
if(! GetIsObjectValid(oMyTarget)) { return FALSE; }
int nTargetType = GetObjectType(oMyTarget);
return (nTargetType == OBJECT_TYPE_PLACEABLE);
}
int dmw_conv_Start(int nCurrent, int nChoice, string sParams = "")
{
string sText = "";
string sCall = "";
string sCallParams = "";
switch(nCurrent)
{
case 0:
nCurrent = 0;
sText = "Hello there, DM. What can I do for you?";
sCall = "";
sCallParams = "";
break;
case 1:
nCurrent = 1;
if(dmwand_istargetpcnme())
{
sText = "Penguin this player.";
sCall = "func_Toad";
sCallParams = "";
break;
}
case 2:
nCurrent = 2;
if(dmwand_istargetpcnme())
{
sText = "Unpenguin this player.";
sCall = "func_Untoad";
sCallParams = "";
break;
}
case 3:
nCurrent = 3;
if(dmwand_istargetpcnme())
{
sText = "Boot this player.";
sCall = "func_KickPC";
sCallParams = "";
break;
}
case 4:
nCurrent = 4;
if(dmwand_istargetinvalid())
{
sText = "List all players...";
sCall = "conv_ListPlayers";
sCallParams = "func_PlayerListConv";
break;
}
case 5:
nCurrent = 5;
if(dmwand_istargetpcnme())
{
sText = "Jump this player to my location.";
sCall = "func_JumpPlayerHere";
sCallParams = "";
break;
}
case 6:
nCurrent = 6;
if(dmwand_istargetpcnme())
{
sText = "Jump me to this player's location.";
sCall = "func_JumpToPlayer";
sCallParams = "";
break;
}
case 7:
nCurrent = 7;
if(dmwand_istargetpcnme())
{
sText = "Jump this player's party to my location.";
sCall = "func_JumpPartyHere";
sCallParams = "";
break;
}
default:
nCurrent = 0;
sText = "";
sCall = "";
sCallParams = "";
break;
}
SetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nChoice), sText);
SetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice), sCall);
SetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice), sCallParams);
return nCurrent;
}
void DMFI_untoad(object oTarget, object oUser)
{
if (GetLocalInt(oTarget, "toaded")==1)
{
effect eMyEffect = GetFirstEffect(oTarget);
while(GetIsEffectValid(eMyEffect))
{
if(GetEffectType(eMyEffect) == EFFECT_TYPE_POLYMORPH || GetEffectType(eMyEffect) == EFFECT_TYPE_CUTSCENE_PARALYZE)
RemoveEffect(oTarget, eMyEffect);
eMyEffect = GetNextEffect(oTarget);
}
}
else
{
FloatingTextStringOnCreature("Dude, he is no toad!", oUser);
}
}
void DMFI_toad(object oTarget, object oUser)
{
//This function now toggles the toad status hahnsoo: DMFI 1.08
if (GetLocalInt(oTarget, "toaded") == 1)
{
effect eMyEffect = GetFirstEffect(oTarget);
while(GetIsEffectValid(eMyEffect))
{
if(GetEffectType(eMyEffect) == EFFECT_TYPE_POLYMORPH || GetEffectType(eMyEffect) == EFFECT_TYPE_CUTSCENE_PARALYZE)
RemoveEffect(oTarget, eMyEffect);
eMyEffect = GetNextEffect(oTarget);
}
FloatingTextStringOnCreature("Removed Penguin status from " + GetName(oTarget), oUser, FALSE);
SetLocalInt(oTarget, "toaded", 0);
}
else
{
effect ePenguin = EffectPolymorph(POLYMORPH_TYPE_PENGUIN);
effect eParalyze = EffectCutsceneParalyze();
AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, ePenguin, oTarget));
AssignCommand(oTarget, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eParalyze, oTarget));
SetLocalInt(oTarget, "toaded", 1);
FloatingTextStringOnCreature("Added Penguin status to " + GetName(oTarget), oUser, FALSE);
}
}
void DMFI_jail(object oOther, object oUser)
{
if (GetIsObjectValid(oOther) && !GetIsDM(oOther) && oOther != oUser)
{
object oJail = GetObjectByTag("dmfi_jail");
if (!GetIsObjectValid(oJail))
oJail = GetObjectByTag("dmfi_jail_default");
AssignCommand(oOther, ClearAllActions());
AssignCommand(oOther, JumpToObject(oJail));
SendMessageToPC(oUser, GetName(oOther) + " (" + GetPCPublicCDKey(oOther) + ")/IP: " + GetPCIPAddress(oOther) + " - has been sent to Jail.");
}
}
void dmwand_KickPC(object oTarget, object oUser)
{
// Create a lightning strike, thunder, scorch mark, and random small
// lightnings at target's location
location lMyLoc = GetLocation (oTarget);
AssignCommand( oUser, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_M), lMyLoc));
AssignCommand ( oUser, PlaySound ("as_wt_thundercl3"));
object oScorch = CreateObject ( OBJECT_TYPE_PLACEABLE, "plc_weathmark", lMyLoc, FALSE);
object oTargetArea = GetArea(oUser);
int nXPos, nYPos, nCount;
for(nCount = 0; nCount < 5; nCount++)
{
nXPos = Random(10) - 5;
nYPos = Random(10) - 5;
vector vNewVector = GetPositionFromLocation(lMyLoc);
vNewVector.x += nXPos;
vNewVector.y += nYPos;
location lNewLoc = Location(oTargetArea, vNewVector, 0.0);
AssignCommand( oUser, ApplyEffectAtLocation ( DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_LIGHTNING_S), lNewLoc));
}
DelayCommand ( 20.0, DestroyObject ( oScorch));
SendMessageToAllDMs (GetName(oTarget) + " was booted from the game. PC CD KEY: " + GetPCPublicCDKey(oTarget) + " PC IP ADDRESS: " + GetPCIPAddress(oTarget));
PrintString(GetName(oTarget) + " was booted from the game. PC CD KEY: " + GetPCPublicCDKey(oTarget) + " PC IP ADDRESS: " + GetPCIPAddress(oTarget));
// Kick the target out of the game
BootPC(oTarget);
}
void dmwand_JumpPlayerHere()
{
location lJumpLoc = GetLocation(oMySpeaker);
AssignCommand(oMyTarget, ClearAllActions());
AssignCommand(oMyTarget, ActionJumpToLocation(lJumpLoc));
}
//Added by hahnsoo, jumps a party to the DM
void dmwand_JumpPartyHere()
{
location lJumpLoc = GetLocation(oMySpeaker);
object oParty = GetFirstFactionMember(oMyTarget);
while (GetIsObjectValid(oParty))
{
AssignCommand(oParty, ClearAllActions());
AssignCommand(oParty, ActionJumpToLocation(lJumpLoc));
oParty = GetNextFactionMember(oMyTarget);
}
}
void dmwand_JumpToPlayer()
{
location lJumpLoc = GetLocation(oMyTarget);
AssignCommand(oMySpeaker, ActionJumpToLocation(lJumpLoc));
}
void dmwand_PlayerListConv(string sParams)
{
int nPlayer = StringToInt(sParams);
int nCache;
int nCount;
object oPlayer = GetLocalObject(oMySpeaker, "dmw_playercache" + IntToString(nPlayer));
oMyTarget = oPlayer;
SetLocalObject(oMySpeaker, "dmfi_univ_target", oMyTarget);
//Go back to the first conversation level
dmwand_BuildConversation("Start", "");
}
//::///////////////////////////////////////////////
//:: File: dmw_conv_inc
//::
//:: Conversation functions for the DM's Helper
//:://////////////////////////////////////////////
int dmwand_BuildConversationDialog(int nCurrent, int nChoice, string sConversation, string sParams)
{
if(TestStringAgainstPattern(sConversation, "ListPlayers"))
{
return dmw_conv_ListPlayers(nCurrent, nChoice, sParams);
}
if(TestStringAgainstPattern(sConversation, "Start"))
{
return dmw_conv_Start(nCurrent, nChoice, sParams);
}
return FALSE;
}
void dmwand_BuildConversation(string sConversation, string sParams)
{
int nLast;
int nTemp;
int nChoice = 1;
int nCurrent = 1;
int nMatch;
if(TestStringAgainstPattern(sParams, "prev"))
{
//Get the number choice to start with
nCurrent = GetLocalInt(oMySpeaker, "dmw_dialogprev");
//Since we're going to the previous page, there will be a next
SetLocalString(oMySpeaker, "dmw_dialog9", "Next ->");
SetLocalString(oMySpeaker, "dmw_function9", "conv_" + sConversation);
SetLocalString(oMySpeaker, "dmw_params9", "next");
SetLocalInt(oMySpeaker, "dmw_dialognext", nCurrent);
nChoice = 8;
for(;nChoice >= 0; nChoice--)
{
int nTemp1 = nCurrent;
int nTemp2 = nCurrent;
nMatch = nTemp2;
while((nCurrent == nMatch) && (nTemp2 > 0))
{
nTemp2--;
nMatch = dmwand_BuildConversationDialog(nTemp2, nChoice, sConversation, sParams);
}
if(nTemp2 <= 0)
{
//we went back too far for some reason, so make this choice blank
SetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nChoice), "");
SetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice), "");
SetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice), "");
}
nLast = nTemp;
nTemp = nTemp1;
nTemp1 = nMatch;
nCurrent = nMatch;
}
if(nMatch > 0)
{
SetLocalString(oMySpeaker, "dmw_dialog1", "<- previous");
SetLocalString(oMySpeaker, "dmw_function1", "conv_" + sConversation);
SetLocalString(oMySpeaker, "dmw_params1", "prev");
SetLocalInt(oMySpeaker, "dmw_dialogprev", nLast);
}
//fill the NPC's dialog spot
//(saved for last because the build process tromps on it)
dmwand_BuildConversationDialog(0, 0, sConversation, sParams);
}
else
{
//fill the NPC's dialog spot
dmwand_BuildConversationDialog(0, 0, sConversation, sParams);
//No parameters specified, start at the top of the conversation
if(sParams == "")
{
nChoice = 1;
nCurrent = 1;
}
//A "next->" choice was selected
if(TestStringAgainstPattern(sParams, "next"))
{
//get the number choice to start with
nCurrent = GetLocalInt(oMySpeaker, "dmw_dialognext");
//set this as the number for the "previous" choice to use
SetLocalInt(oMySpeaker, "dmw_dialogprev", nCurrent);
//Set the first dialog choice to be "previous"
nChoice = 2;
SetLocalString(oMySpeaker, "dmw_dialog1", "<- Previous");
SetLocalString(oMySpeaker, "dmw_function1", "conv_" + sConversation);
SetLocalString(oMySpeaker, "dmw_params1", "prev");
}
//Loop through to build the dialog list
for(;nChoice <= 10; nChoice++)
{
nMatch = dmwand_BuildConversationDialog(nCurrent, nChoice, sConversation, sParams);
//nLast will be the value of the choice before the last one
nLast = nTemp;
nTemp = nMatch;
if(nMatch > 0) { nCurrent = nMatch; }
if(nMatch == 0) { nLast = 0; }
nCurrent++;
}
//If there were enough choices to fill 10 spots, make spot 9 a "next"
if(nLast > 0)
{
SetLocalString(oMySpeaker, "dmw_dialog9", "Next ->");
SetLocalString(oMySpeaker, "dmw_function9", "conv_" + sConversation);
SetLocalString(oMySpeaker, "dmw_params9", "next");
SetLocalInt(oMySpeaker, "dmw_dialognext", nLast);
}
}
}
int dmw_conv_ListPlayers(int nCurrent, int nChoice, string sParams = "")
{
string sText = "";
string sCall = "";
string sCallParams = "";
object oPlayer;
int nCache;
if((! TestStringAgainstPattern(sParams, "next")) && (! TestStringAgainstPattern(sParams, "prev")))
{
//This is the first time running this function, so cache the objects
// of all players... we don't want our list swapping itself around every
// time you change a page
SetLocalString(oMySpeaker, "dmw_playerfunc", sParams);
int nCount = 1;
oPlayer = GetFirstPC();
while(GetIsObjectValid(oPlayer))
{
SetLocalObject(oMySpeaker, "dmw_playercache" + IntToString(nCount), oPlayer);
oPlayer = GetNextPC();
nCount++;
}
nCount--;
SetLocalInt(oMySpeaker, "dmw_playercache", nCount);
}
string sFunc = GetLocalString(oMySpeaker, "dmw_playerfunc");
nCache = GetLocalInt(oMySpeaker, "dmw_playercache");
switch(nCurrent)
{
case 0:
nCurrent = 0;
sText = "Who would you like to work on?";
sCall = "";
sCallParams = "";
break;
default:
//Find the next player in the cache who is valid
oPlayer = GetLocalObject(oMySpeaker, "dmw_playercache" + IntToString(nCurrent));
while((! GetIsObjectValid(oPlayer)) && (nCurrent <= nCache))
{
nCurrent++;
oPlayer = GetLocalObject(oMySpeaker, "dmw_playercache" + IntToString(nCurrent));
}
if(nCurrent > nCache)
{
//We've run out of cache, any other spots in this list should be
//skipped
nCurrent = 0;
sText = "";
sCall = "";
sCallParams = "";
}
else
{
//We found a player, set up the list entry
sText = GetName(oPlayer) + " (" + GetPCPlayerName(oPlayer) + ")";
sCall = sFunc;
sCallParams = IntToString(nCurrent);
}
break;
}
SetLocalString(oMySpeaker, "dmw_dialog" + IntToString(nChoice), sText);
SetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice), sCall);
SetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice), sCallParams);
return nCurrent;
}
void dmwand_DoDialogChoice(int nChoice)
{
string sCallFunction = GetLocalString(oMySpeaker, "dmw_function" + IntToString(nChoice));
string sCallParams = GetLocalString(oMySpeaker, "dmw_params" + IntToString(nChoice));
string sNav = "";
string sStart = GetStringLeft(sCallFunction, 5);
int nLen = GetStringLength(sCallFunction) - 5;
string sCall = GetSubString(sCallFunction, 5, nLen);
if(TestStringAgainstPattern("conv_", sStart))
{
dmwand_BuildConversation(sCall, sCallParams);
}
else
{
if(TestStringAgainstPattern("PlayerListConv", sCall))
{
dmwand_PlayerListConv(sCallParams);
return;
}
if(TestStringAgainstPattern("Toad", sCall))
{
DMFI_toad(oMyTarget, oMySpeaker);
return;
}
if(TestStringAgainstPattern("Untoad", sCall))
{
DMFI_untoad(oMyTarget, oMySpeaker);
return;
}
if(TestStringAgainstPattern("KickPC", sCall))
{
dmwand_KickPC(oMyTarget, oMySpeaker);
return;
}
if(TestStringAgainstPattern("JumpPlayerHere", sCall))
{
dmwand_JumpPlayerHere();
return;
}
if(TestStringAgainstPattern("JumpToPlayer", sCall))
{
dmwand_JumpToPlayer();
return;
}
if(TestStringAgainstPattern("JumpPartyHere", sCall))
{
dmwand_JumpPartyHere();
return;
}
}
}
//Smoking Function by Jason Robinson
location GetLocationAboveAndInFrontOf(object oPC, float fDist, float fHeight)
{
float fDistance = -fDist;
object oTarget = (oPC);
object oArea = GetArea(oTarget);
vector vPosition = GetPosition(oTarget);
vPosition.z += fHeight;
float fOrientation = GetFacing(oTarget);
vector vNewPos = AngleToVector(fOrientation);
float vZ = vPosition.z;
float vX = vPosition.x - fDistance * vNewPos.x;
float vY = vPosition.y - fDistance * vNewPos.y;
fOrientation = GetFacing(oTarget);
vX = vPosition.x - fDistance * vNewPos.x;
vY = vPosition.y - fDistance * vNewPos.y;
vNewPos = AngleToVector(fOrientation);
vZ = vPosition.z;
vNewPos = Vector(vX, vY, vZ);
return Location(oArea, vNewPos, fOrientation);
}
//Smoking Function by Jason Robinson
void SmokePipe(object oActivator)
{
string sEmote1 = "*puffs on a pipe*";
string sEmote2 = "*inhales from a pipe*";
string sEmote3 = "*pulls a mouthful of smoke from a pipe*";
float fHeight = 1.7;
float fDistance = 0.1;
// Set height based on race and gender
if (GetGender(oActivator) == GENDER_MALE)
{
switch (MyPRCGetRacialType(oActivator))
{
case RACIAL_TYPE_HUMAN:
case RACIAL_TYPE_HALFELF: fHeight = 1.7; fDistance = 0.12; break;
case RACIAL_TYPE_ELF: fHeight = 1.55; fDistance = 0.08; break;
case RACIAL_TYPE_GNOME:
case RACIAL_TYPE_HALFLING: fHeight = 1.15; fDistance = 0.12; break;
case RACIAL_TYPE_DWARF: fHeight = 1.2; fDistance = 0.12; break;
case RACIAL_TYPE_HALFORC: fHeight = 1.9; fDistance = 0.2; break;
}
}
else
{
// FEMALES
switch (MyPRCGetRacialType(oActivator))
{
case RACIAL_TYPE_HUMAN:
case RACIAL_TYPE_HALFELF: fHeight = 1.6; fDistance = 0.12; break;
case RACIAL_TYPE_ELF: fHeight = 1.45; fDistance = 0.12; break;
case RACIAL_TYPE_GNOME:
case RACIAL_TYPE_HALFLING: fHeight = 1.1; fDistance = 0.075; break;
case RACIAL_TYPE_DWARF: fHeight = 1.2; fDistance = 0.1; break;
case RACIAL_TYPE_HALFORC: fHeight = 1.8; fDistance = 0.13; break;
}
}
location lAboveHead = GetLocationAboveAndInFrontOf(oActivator, fDistance, fHeight);
// emotes
switch (d3())
{
case 1: AssignCommand(oActivator, ActionSpeakString(sEmote1)); break;
case 2: AssignCommand(oActivator, ActionSpeakString(sEmote2)); break;
case 3: AssignCommand(oActivator, ActionSpeakString(sEmote3));break;
}
// glow red
AssignCommand(oActivator, ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_LIGHT_RED_5), oActivator, 0.15)));
// wait a moment
AssignCommand(oActivator, ActionWait(3.0));
// puff of smoke above and in front of head
AssignCommand(oActivator, ActionDoCommand(ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SMOKE_PUFF), lAboveHead)));
// if female, turn head to left
if ((GetGender(oActivator) == GENDER_FEMALE) && (MyPRCGetRacialType(oActivator) != RACIAL_TYPE_DWARF))
AssignCommand(oActivator, ActionPlayAnimation(ANIMATION_FIREFORGET_HEAD_TURN_LEFT, 1.0, 5.0));
}
void EmoteDance(object oPC)
{
object oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
object oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
AssignCommand(oPC,ActionUnequipItem(oRightHand));
AssignCommand(oPC,ActionUnequipItem(oLeftHand));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC,ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 2.0, 2.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY1,1.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3,2.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 3.0, 1.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_LOOPING_TALK_FORCEFUL,1.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC,ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 2.0, 2.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY1,1.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3,2.0));
AssignCommand(oPC,ActionDoCommand(PlayVoiceChat(VOICE_CHAT_LAUGH,oPC)));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 3.0, 1.0));
AssignCommand(oPC,ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY2,1.0));
AssignCommand(oPC,ActionDoCommand(ActionEquipItem(oLeftHand,INVENTORY_SLOT_LEFTHAND)));
AssignCommand(oPC,ActionDoCommand(ActionEquipItem(oRightHand,INVENTORY_SLOT_RIGHTHAND)));
}
void SitInNearestChair(object oPC)
{
object oSit,oRightHand,oLeftHand,oChair,oCouch,oBenchPew,oStool;
float fDistSit;int nth;
// get the closest chair, couch bench or stool
nth = 1;oChair = GetNearestObjectByTag("Chair", oPC,nth);
while(oChair != OBJECT_INVALID && GetSittingCreature(oChair) != OBJECT_INVALID)
{nth++;oChair = GetNearestObjectByTag("Chair", oPC,nth);}
nth = 1;oCouch = GetNearestObjectByTag("Couch", oPC,nth);
while(oCouch != OBJECT_INVALID && GetSittingCreature(oCouch) != OBJECT_INVALID)
{nth++;oChair = GetNearestObjectByTag("Couch", oPC,nth);}
nth = 1;oBenchPew = GetNearestObjectByTag("BenchPew", oPC,nth);
while(oBenchPew != OBJECT_INVALID && GetSittingCreature(oBenchPew) != OBJECT_INVALID)
{nth++;oChair = GetNearestObjectByTag("BenchPew", oPC,nth);}
/* 1.27 bug
nth = 1;oStool = GetNearestObjectByTag("Stool", oPC,nth);
while(oStool != OBJECT_INVALID && GetSittingCreature(oStool) != OBJECT_INVALID)
{nth++;oStool = GetNearestObjectByTag("Stool", oPC,nth);}
*/
// get the distance between the user and each object (-1.0 is the result if no
// object is found
float fDistanceChair = GetDistanceToObject(oChair);
float fDistanceBench = GetDistanceToObject(oBenchPew);
float fDistanceCouch = GetDistanceToObject(oCouch);
float fDistanceStool = GetDistanceToObject(oStool);
// if any of the objects are invalid (not there), change the return value
// to a high number so the distance math can work
if (fDistanceChair == -1.0)
{fDistanceChair =1000.0;}
if (fDistanceBench == -1.0)
{fDistanceBench = 1000.0;}
if (fDistanceCouch == -1.0)
{fDistanceCouch = 1000.0;}
if (fDistanceStool == -1.0)
{fDistanceStool = 1000.0;}
// find out which object is closest to the PC
if (fDistanceChair<fDistanceBench && fDistanceChair<fDistanceCouch && fDistanceChair<fDistanceStool)
{oSit=oChair;fDistSit=fDistanceChair;}
else if (fDistanceBench<fDistanceChair && fDistanceBench<fDistanceCouch && fDistanceBench<fDistanceStool)
{oSit=oBenchPew;fDistSit=fDistanceBench;}
else if (fDistanceCouch<fDistanceChair && fDistanceCouch<fDistanceBench && fDistanceCouch<fDistanceStool)
{oSit=oCouch;fDistSit=fDistanceCouch;}
else
//if (fDistanceStool<fDistanceChair && fDistanceStool<fDistanceBench && fDistanceStool<fDistanceCouch)
{oSit=oStool;fDistSit=fDistanceStool;}
if(oSit != OBJECT_INVALID && fDistSit < 12.0)
{
// if no one is sitting in the object the PC is closest to, have him sit in it
if (GetSittingCreature(oSit) == OBJECT_INVALID)
{
oRightHand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC);
oLeftHand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC);
AssignCommand(oPC,ActionMoveToObject(oSit,FALSE,2.0)); //:: Presumably this will be fixed in a patch so that Plares will not run to chair
ActionUnequipItem(oRightHand); //:: Added to resolve clipping issues when seated
ActionUnequipItem(oLeftHand); //:: Added to resolve clipping issues when seated
ActionDoCommand(AssignCommand(oPC,ActionSit(oSit)));
}
else
{SendMessageToPC(oPC,"The nearest chair is already taken ");}
}
else
{SendMessageToPC(oPC,"There are no chairs nearby");}
}
string dmwand_Alignment(object oEntity)
{
string sReturnString;
switch (GetAlignmentLawChaos(oEntity))
{
case ALIGNMENT_LAWFUL: sReturnString = "Lawful "; break;
case ALIGNMENT_NEUTRAL: sReturnString = "Neutral "; break;
case ALIGNMENT_CHAOTIC: sReturnString = "Chaotic "; break;
}
switch (GetAlignmentGoodEvil(oEntity))
{
case ALIGNMENT_GOOD: sReturnString = sReturnString + "Good"; break;
case ALIGNMENT_NEUTRAL: sReturnString = sReturnString + "Neutral"; break;
case ALIGNMENT_EVIL: sReturnString = sReturnString + "Evil"; break;
}
if (sReturnString == "Neutral Neutral"){sReturnString = "True Neutral";}
return sReturnString;
}
string dmwand_ClassLevel(object oEntity)
{
string sReturnString;
string sClass;
string sClassOne;
string sClassTwo;
string sClassThree;
int nLevelOne;
int nLevelTwo;
int nLevelThree;
int iIndex;
// Loop through all three classes and pull out info
for(iIndex == 1;iIndex < 4;iIndex++)
{
switch (GetClassByPosition(iIndex,oEntity))
{
case CLASS_TYPE_ABERRATION: sClass ="Aberration";break;
case CLASS_TYPE_ANIMAL: sClass ="Animal"; break;
case CLASS_TYPE_ARCANE_ARCHER: sClass ="Arcane Archer";break;
case CLASS_TYPE_ASSASSIN: sClass ="Assassin"; break;
case CLASS_TYPE_BARBARIAN: sClass ="Barbarian";break;
case CLASS_TYPE_BARD: sClass ="Bard"; break;
case CLASS_TYPE_BEAST: sClass ="Beast"; break;
case CLASS_TYPE_BLACKGUARD: sClass ="Blackguard"; break;
case CLASS_TYPE_CLERIC: sClass ="Cleric"; break;
case CLASS_TYPE_COMMONER: sClass ="Commoner";break;
case CLASS_TYPE_CONSTRUCT: sClass ="Construct"; break;
case CLASS_TYPE_DIVINECHAMPION: sClass ="Divine Champion"; break;
case CLASS_TYPE_DRAGON: sClass ="Dragon"; break;
case CLASS_TYPE_DRAGONDISCIPLE: sClass ="Dragon Disciple"; break;
case CLASS_TYPE_DRUID: sClass ="Druid";break;
case CLASS_TYPE_DWARVENDEFENDER: sClass ="Dwarven Defender"; break;
case CLASS_TYPE_ELEMENTAL: sClass ="Elemental"; break;
case CLASS_TYPE_FEY: sClass ="Fey";break;
case CLASS_TYPE_FIGHTER: sClass ="Fighter"; break;
case CLASS_TYPE_GIANT: sClass ="Giant"; break;
case CLASS_TYPE_HARPER: sClass ="Harper"; break;
case CLASS_TYPE_HUMANOID: sClass ="Humanoid"; break;
case CLASS_TYPE_INVALID: sClass ="";break;
case CLASS_TYPE_MAGICAL_BEAST: sClass ="Magical Beast"; break;
case CLASS_TYPE_MONK: sClass ="Monk"; break;
case CLASS_TYPE_OUTSIDER: sClass ="Outsider"; break;
case CLASS_TYPE_MONSTROUS: sClass ="Monstrous"; break;
case CLASS_TYPE_PALADIN: sClass ="Paladin";break;
case CLASS_TYPE_PALEMASTER: sClass ="Palemaster"; break;
case CLASS_TYPE_PURPLE_DRAGON_KNIGHT: sClass="Purple Dragon Knight"; break;
case CLASS_TYPE_RANGER: sClass ="Ranger";break;
case CLASS_TYPE_ROGUE: sClass ="Rogue";break;
case CLASS_TYPE_SHADOWDANCER: sClass ="Shadowdancer"; break;
case CLASS_TYPE_SHAPECHANGER: sClass ="Shapechanger";break;
case CLASS_TYPE_SHIFTER: sClass ="Shifter"; break;
case CLASS_TYPE_SORCERER: sClass ="Sorcerer";break;
case CLASS_TYPE_UNDEAD: sClass ="Undead";break;
case CLASS_TYPE_VERMIN: sClass ="Vermin"; break;
case CLASS_TYPE_WEAPON_MASTER: sClass ="Weapon Master"; break;
case CLASS_TYPE_WIZARD: sClass ="Wizard"; break;
}
// Now depending on which iteration we just went through
// assign it to the proper class
switch (iIndex)
{
case 1: sClassOne = sClass; break;
case 2: sClassTwo = sClass; break;
case 3: sClassThree = sClass; break;
}
};
// Now get all three class levels. Wil be 0 if does class pos
//does not exists
nLevelOne = GetLevelByPosition(1,oEntity);
nLevelTwo = GetLevelByPosition(2,oEntity);
nLevelThree = GetLevelByPosition(3,oEntity);
//Start building return string
sReturnString = sClassOne + "(" + IntToString(nLevelOne) + ")" ;
//If second class exists append to return string
if(nLevelTwo > 0)
{
sReturnString =sReturnString + "/" + sClassTwo + "(" + IntToString(nLevelTwo) + ")";
}
//If third class exists append to return string
if(nLevelThree > 0)
{
sReturnString =sReturnString + "/" + sClassThree + "(" + IntToString(nLevelThree) + ")";
}
return sReturnString;
}
string dmwand_Gender(object oEntity)
{
switch (GetGender(oEntity))
{
case GENDER_MALE: return "Male"; break;
case GENDER_FEMALE: return "Female"; break;
case GENDER_BOTH: return "Both"; break;
case GENDER_NONE: return "None"; break;
case GENDER_OTHER: return "Other"; break;
}
return "Weirdo";
}
string dmwand_ItemInfo(object oItem, int iInt)
{
string sReturnString = "";
string sBaseType = "";
string sStacked = "";
string sIdentified = "";
string sGPValue = "";
string sACValue = "";
string sProperties = "";
switch(GetBaseItemType(oItem))
{
case BASE_ITEM_AMULET: sBaseType ="Amulet";break;
case BASE_ITEM_ARMOR: sBaseType ="Armor";break;
case BASE_ITEM_ARROW: sBaseType ="Arrow";break;
case BASE_ITEM_BASTARDSWORD: sBaseType ="Bastard Sword";break;
case BASE_ITEM_BATTLEAXE: sBaseType ="Battle Axe";break;
case BASE_ITEM_BELT: sBaseType ="Belt";break;
case BASE_ITEM_BLANK_POTION : sBaseType ="Blank Potion";break;
case BASE_ITEM_BLANK_SCROLL : sBaseType ="Blank Scroll";break;
case BASE_ITEM_BLANK_WAND : sBaseType ="Blank Wand";break;
case BASE_ITEM_BOLT : sBaseType ="Bolt";break;
case BASE_ITEM_BOOK: sBaseType ="Book";break;
case BASE_ITEM_BOOTS: sBaseType ="Boots";break;
case BASE_ITEM_BRACER: sBaseType ="Bracer";break;
case BASE_ITEM_BULLET: sBaseType ="Bullet";break;
case BASE_ITEM_CBLUDGWEAPON: sBaseType ="Bludgeoning Weap.";break;
case BASE_ITEM_CLOAK: sBaseType ="Cloak";break;
case BASE_ITEM_CLUB: sBaseType ="Club";break;
case BASE_ITEM_CPIERCWEAPON: sBaseType ="Pierceing Weap.";break;
case BASE_ITEM_CREATUREITEM: sBaseType ="Creature Item";break;
case BASE_ITEM_CSLASHWEAPON: sBaseType ="Slash Weap.";break;
case BASE_ITEM_CSLSHPRCWEAP: sBaseType ="Slash/Pierce Weap.";break;
case BASE_ITEM_DAGGER: sBaseType ="Dagger";break;
case BASE_ITEM_DART: sBaseType ="Dart";break;
case BASE_ITEM_DIREMACE: sBaseType ="Mace";break;
case BASE_ITEM_DOUBLEAXE: sBaseType ="Double Axe";break;
case BASE_ITEM_DWARVENWARAXE : sBaseType ="Dwarven War Axe";break;
case BASE_ITEM_ENCHANTED_POTION : sBaseType ="Enchanted Potion";break;
case BASE_ITEM_ENCHANTED_SCROLL : sBaseType ="Enchanted Scroll";break;
case BASE_ITEM_ENCHANTED_WAND : sBaseType ="Enchanted Wand";break;
case BASE_ITEM_GEM: sBaseType ="Gem";break;
case BASE_ITEM_GLOVES: sBaseType ="Gloves";break;
case BASE_ITEM_GOLD: sBaseType ="Gold";break;
case BASE_ITEM_GREATAXE: sBaseType ="Great Axe";break;
case BASE_ITEM_GREATSWORD: sBaseType ="Great Sword";break;
case BASE_ITEM_GRENADE : sBaseType ="Grenade";break;
case BASE_ITEM_HALBERD: sBaseType ="Halberd";break;
case BASE_ITEM_HANDAXE: sBaseType ="Hand Axe";break;
case BASE_ITEM_HEALERSKIT: sBaseType ="Healers Kit";break;
case BASE_ITEM_HEAVYCROSSBOW: sBaseType ="Heavy Xbow";break;
case BASE_ITEM_HEAVYFLAIL: sBaseType ="Heavy Flail";break;
case BASE_ITEM_HELMET: sBaseType ="Helmet";break;
case BASE_ITEM_INVALID: sBaseType ="";break;
case BASE_ITEM_KAMA: sBaseType ="Kama";break;
case BASE_ITEM_KATANA: sBaseType ="Katana";break;
case BASE_ITEM_KEY: sBaseType ="Key";break;
case BASE_ITEM_KUKRI: sBaseType ="Kukri";break;
case BASE_ITEM_LARGEBOX: sBaseType ="Large Box";break;
case BASE_ITEM_LARGESHIELD: sBaseType ="Large Shield";break;
case BASE_ITEM_LIGHTCROSSBOW: sBaseType ="Light Xbow";break;
case BASE_ITEM_LIGHTFLAIL: sBaseType ="Light Flail";break;
case BASE_ITEM_LIGHTHAMMER: sBaseType ="Light Hammer";break;
case BASE_ITEM_LIGHTMACE: sBaseType ="Light Mace";break;
case BASE_ITEM_LONGBOW: sBaseType ="Long Bow";break;
case BASE_ITEM_LONGSWORD: sBaseType ="Long Sword";break;
case BASE_ITEM_MAGICROD: sBaseType ="Magic Rod";break;
case BASE_ITEM_MAGICSTAFF: sBaseType ="Magic Staff";break;
case BASE_ITEM_MAGICWAND: sBaseType ="Magic Wand";break;
case BASE_ITEM_MISCLARGE: sBaseType ="Misc. Large";break;
case BASE_ITEM_MISCMEDIUM: sBaseType ="Misc. Medium";break;
case BASE_ITEM_MISCSMALL: sBaseType ="Misc. Small";break;
case BASE_ITEM_MISCTALL: sBaseType ="Misc. Small";break;
case BASE_ITEM_MISCTHIN: sBaseType ="Misc. Thin";break;
case BASE_ITEM_MISCWIDE: sBaseType ="Misc. Wide";break;
case BASE_ITEM_MORNINGSTAR: sBaseType ="Morningstar";break;
case BASE_ITEM_POTIONS: sBaseType ="Potion";break;
case BASE_ITEM_QUARTERSTAFF: sBaseType ="Quarterstaff";break;
case BASE_ITEM_RAPIER: sBaseType ="Rapier";break;
case BASE_ITEM_RING: sBaseType ="Ring";break;
case BASE_ITEM_SCIMITAR: sBaseType ="Scimitar";break;
case BASE_ITEM_SCROLL: sBaseType ="Scroll";break;
case BASE_ITEM_SCYTHE: sBaseType ="Scythe";break;
case BASE_ITEM_SHORTBOW: sBaseType ="Shortbow";break;
case BASE_ITEM_SHORTSPEAR: sBaseType ="Short Spear";break;
case BASE_ITEM_SHORTSWORD: sBaseType ="Short Sword";break;
case BASE_ITEM_SHURIKEN: sBaseType ="Shuriken";break;
case BASE_ITEM_SICKLE: sBaseType ="Sickle";break;
case BASE_ITEM_SLING: sBaseType ="Sling";break;
case BASE_ITEM_SMALLSHIELD: sBaseType ="Small Shield";break;
case BASE_ITEM_SPELLSCROLL: sBaseType ="Spell Scroll";break;
case BASE_ITEM_THIEVESTOOLS: sBaseType ="Thieves Tools";break;
case BASE_ITEM_THROWINGAXE: sBaseType ="Throwing Axe";break;
case BASE_ITEM_TORCH: sBaseType ="Torch";break;
case BASE_ITEM_TOWERSHIELD: sBaseType ="Tower Shield";break;
case BASE_ITEM_TRAPKIT: sBaseType ="Trap Kit";break;
case BASE_ITEM_TRIDENT: sBaseType ="Trident";break;
case BASE_ITEM_TWOBLADEDSWORD: sBaseType ="2 Bladed Sword";break;
case BASE_ITEM_WARHAMMER: sBaseType ="Warhammer";break;
case BASE_ITEM_WHIP : sBaseType ="Whip";break;
}
sReturnString = sStacked + GetName(oItem) + " (" + sBaseType + ")";
return sReturnString;
}
string dmwand_Inventory(object oEntity)
{
string sBaseType;
string sReturnString;
sReturnString = sReturnString + "\nEquipped:\n";
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_ARMS, oMyTarget))){ sReturnString = sReturnString + "Arms: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_ARMS, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_BELT, oMyTarget))){ sReturnString = sReturnString + "Belt: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_BELT, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_BOOTS, oMyTarget))){ sReturnString = sReturnString + "Boots: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_BOOTS, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CHEST, oMyTarget))){ sReturnString = sReturnString + "Chest: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CHEST, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CLOAK, oMyTarget))){ sReturnString = sReturnString + "Cloak: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CLOAK, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_HEAD, oMyTarget))){ sReturnString = sReturnString + "Head: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_HEAD, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oMyTarget))){ sReturnString = sReturnString + "Left Hand: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oMyTarget))){ sReturnString = sReturnString + "Left Ring: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_NECK, oMyTarget))){ sReturnString = sReturnString + "Neck: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_NECK, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMyTarget))){ sReturnString = sReturnString + "Right Hand: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oMyTarget))){ sReturnString = sReturnString + "Right Ring: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_ARROWS, oMyTarget))){ sReturnString = sReturnString + "Arrows: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_ARROWS, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_BOLTS, oMyTarget))){ sReturnString = sReturnString + "Bolts: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_BOLTS, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_BULLETS, oMyTarget))){ sReturnString = sReturnString + "Bullets: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_BULLETS, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oMyTarget))){ sReturnString = sReturnString + "Creature Armor: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oMyTarget))){ sReturnString = sReturnString + "Creature Bite: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMyTarget))){ sReturnString = sReturnString + "Creature Left: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oMyTarget),0) + "\n"; }
if(GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMyTarget))){ sReturnString = sReturnString + "Creature Right: " + dmwand_ItemInfo(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oMyTarget),0) + "\n"; }
object oItem = GetFirstItemInInventory(oEntity);
while(oItem != OBJECT_INVALID)
{
sReturnString = sReturnString + "\n" + dmwand_ItemInfo(oItem, 0);
oItem = GetNextItemInInventory(oEntity);
};
return sReturnString;
}
string dmwand_Race(object oEntity)
{
switch (MyPRCGetRacialType(oEntity))
{
case RACIAL_TYPE_ABERRATION: return "Aberration"; break;
case RACIAL_TYPE_ALL: return "All"; break;
case RACIAL_TYPE_ANIMAL: return "Animal"; break;
case RACIAL_TYPE_BEAST: return "Beast"; break;
case RACIAL_TYPE_CONSTRUCT: return "Construct"; break;
case RACIAL_TYPE_DRAGON: return "Dragon"; break;
case RACIAL_TYPE_DWARF: return "Dwarf"; break;
case RACIAL_TYPE_ELEMENTAL: return "Elemental"; break;
case RACIAL_TYPE_ELF: return "Elf"; break;
case RACIAL_TYPE_FEY: return "Fey"; break;
case RACIAL_TYPE_GIANT: return "Giant"; break;
case RACIAL_TYPE_GNOME: return "Gnome"; break;
case RACIAL_TYPE_HALFELF: return "Half Elf"; break;
case RACIAL_TYPE_HALFLING: return "Halfling"; break;
case RACIAL_TYPE_HALFORC: return "Half Orc"; break;
case RACIAL_TYPE_HUMAN: return "Human"; break;
case RACIAL_TYPE_HUMANOID_GOBLINOID: return "Goblinoid"; break;
case RACIAL_TYPE_HUMANOID_MONSTROUS: return "Monstrous"; break;
case RACIAL_TYPE_HUMANOID_ORC: return "Orc"; break;
case RACIAL_TYPE_HUMANOID_REPTILIAN: return "Reptillian"; break;
case RACIAL_TYPE_MAGICAL_BEAST: return "Magical Beast"; break;
case RACIAL_TYPE_OOZE: return "Ooze"; break;
case RACIAL_TYPE_OUTSIDER: return "Outsider"; break;
case RACIAL_TYPE_SHAPECHANGER: return "Shapechanger"; break;
case RACIAL_TYPE_UNDEAD: return "Undead"; break;
case RACIAL_TYPE_VERMIN: return "Vermin"; break;
}
return "Unknown";
}
int DMFI_GetNetWorth(object oTarget)
{
int n;
object oItem = GetFirstItemInInventory(oTarget);
while(GetIsObjectValid(oItem))
{
n= n + GetGoldPieceValue(oItem);
oItem = GetNextItemInInventory(oTarget);
}
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_ARMS, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_ARROWS, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_BELT, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_BOLTS, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_BOOTS, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_BULLETS, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CARMOUR, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CLOAK, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_B, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_CWEAPON_R, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_HEAD, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_NECK, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget));
n = n + GetGoldPieceValue(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oTarget));
return n;
}
void DMFI_report(object oTarget, object oUser)
{
string sSTR = IntToString(GetAbilityScore(oMyTarget,ABILITY_STRENGTH));
string sINT = IntToString(GetAbilityScore(oMyTarget,ABILITY_INTELLIGENCE));
string sDEX = IntToString(GetAbilityScore(oMyTarget,ABILITY_DEXTERITY));
string sWIS = IntToString(GetAbilityScore(oMyTarget,ABILITY_WISDOM));
string sCON = IntToString(GetAbilityScore(oMyTarget,ABILITY_CONSTITUTION));
string sCHA = IntToString(GetAbilityScore(oMyTarget,ABILITY_CHARISMA));
string sReport = "\n-------------------------------------------" +
"\nReported: " + IntToString(GetTimeHour()) + ":" + IntToString(GetTimeMinute()) +
"\nPlayer Name: " + GetPCPlayerName(oMyTarget) +
"\nPublic CDKey: " + GetPCPublicCDKey(oMyTarget) +
"\nChar Name: " + GetName(oMyTarget) +
"\n-------------------------------------------" +
"\nRace: " + dmwand_Race(oMyTarget) +
"\nClass: " + dmwand_ClassLevel(oMyTarget) +
"\nXP: " + IntToString(GetXP(oMyTarget)) +
"\nGender: " + dmwand_Gender(oMyTarget) +
"\nAlign: " + dmwand_Alignment(oMyTarget) +
"\nDeity: " + GetDeity(oMyTarget) +
"\n" +
"\nSTR: " + sSTR +
"\nINT: " + sINT +
"\nWIS: " + sWIS +
"\nDEX: " + sDEX +
"\nCON: " + sCON +
"\nCHA: " + sCHA +
"\n" +
"\nHP: " + IntToString(GetCurrentHitPoints(oMyTarget)) +
" of " + IntToString(GetMaxHitPoints(oMyTarget)) +
"\nAC: " + IntToString(GetAC(oMyTarget)) +
"\nGold: " + IntToString(GetGold(oMyTarget)) +
"\nNet Worth: " + IntToString(DMFI_GetNetWorth(oMyTarget) + GetGold(oMyTarget)) +
"\nInventory:\n " + dmwand_Inventory(oMyTarget) +
"\n-------------------------------------------";
SendMessageToPC(oUser, sReport);
SendMessageToAllDMs(sReport);
}