#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 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); }