/***** INCLUDES ********************************************************/ include java.util.StringTokenizer; include library.arena; include library.badge; include library.city; include library.colors; include library.craftinglib; include library.create; include library.dump; include library.factions; include library.force_rank; include library.fs_counterstrike; include library.fs_dyn_village; include library.fs_quests; include library.gm; include library.hue; include library.jedi_trials; include library.loot; include library.money; include library.npe; include library.quests; include library.pclib; include library.player_structure; include library.ship_ai; include library.skill; include library.sui; include library.target_dummy; include library.trace; include library.utils; include library.veteran_deprecated; include library.xp; include library.weapons; include library.static_item; /***** CONSTANTS *******************************************************/ /***** TRIGGER *********************************************************/ /***** COMMANDHANDLERS **************************************************/ /***** IDENTIFICATION **************************************************/ commandHandler cmdGetPlayerId() { if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /getPlayerId "); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(params); string name = st.nextToken(); obj_id playerId = getPlayerIdFromFirstName(toLower(name)); if (isIdValid(playerId)) sendSystemMessageTestingOnly(self, "getPlayerId: player '" + name + "' has object id: " + playerId); else sendSystemMessageTestingOnly(self, "getPlayerId: The system was unable to find a player named '" + name + "'"); return SCRIPT_CONTINUE; } /***** IDENTIFICATION **************************************************/ commandHandler cmdAiIgnore() { obj_id ship = getPilotedShip(self); if ( hasObjVar(self, "gm") ) { removeObjVar(self, "gm"); if (isIdValid(ship)) { ship_ai.unitSetAutoAggroImmune(ship, false); ship_ai.unitSetDamageAggroImmune(ship, false); } sendSystemMessageTestingOnly(self, "aiIgnore[OFF]: AI will now aggro you as normal and fight back."); } else { setObjVar(self, "gm", 1); if (isIdValid(ship)) { ship_ai.unitRemoveFromAllAttackTargetLists(ship); ship_ai.unitSetAutoAggroImmune(ship, true); ship_ai.unitSetDamageAggroImmune(ship, true); } sendSystemMessageTestingOnly(self, "aiIgnore[ON]: AI will no longer aggro you or fight back."); } return SCRIPT_CONTINUE; } /***** FORCE COMMAND **************************************************/ commandHandler cmdForceCommand() { if ( !isIdValid(target) || !isPlayer(target) || params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /forceCommand -target (with lookat target)"); return SCRIPT_CONTINUE; } if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { sendSystemMessageTestingOnly(self, "[Syntax] /forceCommand -target (with lookat target)"); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(params); string cmd = st.nextToken(); obj_id cmdTarget = null; string cmdParams = ""; while ( st.hasMoreTokens() ) { string tmp = st.nextToken(); if ( tmp != null && !tmp.equalsIgnoreCase("") ) cmdParams += tmp + " "; } cmdParams.trim(); sendSystemMessageTestingOnly(self, "/forceCommand: attempting to queue command: '" + cmd + " " + cmdParams + "' for (" + target + ")" + getName(target)); //debugSpeakMsg(self, "cmd = " + cmd); //debugSpeakMsg(self, "params = " + cmdParams); //queueClientVisibleCommand(target, cmdHashCode, null, cmdParams, COMMAND_PRIORITY_DEFAULT); return SCRIPT_CONTINUE; } /***** MONEY **************************************************/ commandHandler cmdMoney() { dictionary d = gm.parseTarget(params, target, "CREDITS"); if ( d == null ) { return SCRIPT_CONTINUE; } else if ( d.isEmpty() ) { } else { params = d.getString("params"); obj_id oid = d.getObjId("oid"); if ( isIdValid(oid) ) target = oid; else target = self; } if ( params == null || params.equalsIgnoreCase("") ) { showMoneySyntax(self); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(toLower(params)); string arg = st.nextToken(); if ( arg.equalsIgnoreCase("balance") ) { gm.showMoneyStatus(self, target); return SCRIPT_CONTINUE; } else if ( arg.equalsIgnoreCase("wipe") ) { queueCommand(self, ##"credits", target, "cash 0", COMMAND_PRIORITY_DEFAULT); queueCommand(self, ##"credits", target, "bank 0", COMMAND_PRIORITY_DEFAULT); return SCRIPT_CONTINUE; } if ( st.hasMoreTokens() ) { string sAmt = st.nextToken(); if ( arg.equalsIgnoreCase("cash") ) { if ( gm.setBalance(target, money.MT_CASH, sAmt) ) { sendSystemMessageTestingOnly(self, "[CREDITS] Processing CASH update: (" + target + ")" + utils.getStringName(target) + " amt = " + sAmt); } else { sendSystemMessageTestingOnly(self, "[CREDITS] System rejected the CASH update: (" + target + ")" + utils.getStringName(target) + " amt = " + sAmt); } return SCRIPT_CONTINUE; } else if ( arg.equalsIgnoreCase("bank") ) { //set money if ( gm.setBalance(target, money.MT_BANK, sAmt) ) { sendSystemMessageTestingOnly(self, "[CREDITS] Processing BANK update: (" + target + ")" + utils.getStringName(target) + " amt = " + sAmt); } else { sendSystemMessageTestingOnly(self, "[CREDITS] System rejected the BANK update: (" + target + ")" + utils.getStringName(target) + " amt = " + sAmt); } return SCRIPT_CONTINUE; } } showMoneySyntax(self); return SCRIPT_CONTINUE; } void showMoneySyntax(obj_id self) { sendSystemMessageTestingOnly(self, "[Syntax] /credits [-target]|[-id:] cash|bank (+|-)"); sendSystemMessageTestingOnly(self, "[Syntax] /credits [-target]|[-id:] balance"); } /***** BROADCAST **************************************************/ commandHandler cmdBroadcast() { queueCommand(self, ##"broadcastPlanet", target, params, COMMAND_PRIORITY_DEFAULT); return SCRIPT_CONTINUE; } commandHandler cmdBroadcastPlanet() { if ( params != null && !params.equalsIgnoreCase("") ) { sendSystemMessagePlanetTestingOnly(params); } else { sendSystemMessageTestingOnly(self, "[Syntax] /broadcastPlanet "); return SCRIPT_CONTINUE; } return SCRIPT_CONTINUE; } commandHandler cmdBroadcastGalaxy() { if ( params != null && !params.equalsIgnoreCase("") ) { sendSystemMessageGalaxyTestingOnly(params); } else { sendSystemMessageTestingOnly(self, "[Syntax] /broadcastGalaxy "); return SCRIPT_CONTINUE; } return SCRIPT_CONTINUE; } commandHandler cmdBroadcastArea() { // Constants that are currently used for this command only const float MAX_RANGE = 256.0f; const string KEYWORD_RANGE = "-range:"; // Initialize our variables float range = 0f; string message = ""; // Make sure the command has a range argument if(params.indexOf(KEYWORD_RANGE) > -1) { // Seperate the range argument from the rest of the message dictionary d = parseRange(params); range = d.getFloat("range"); message = d.getString("params"); // If the range is invalid if(range <= 0) { sendSystemMessageTestingOnly(self, "[Error] /broadcastArea: Invalid broadcast range specified"); sendSystemMessageTestingOnly(self, "[Syntax] /broadcastArea -range: "); return SCRIPT_CONTINUE; } // If the message is invalid if(message == null || message.equalsIgnoreCase("")) { sendSystemMessageTestingOnly(self, "[Error] /broadcastArea: Invalid or no broadcast message specified"); sendSystemMessageTestingOnly(self, "[Syntax] /broadcastArea -range: "); return SCRIPT_CONTINUE; } } else { sendSystemMessageTestingOnly(self, "[Syntax] /broadcastArea -range: "); sendSystemMessageTestingOnly(self, "[Example] /broadcastArea -range:100 Hello world!"); return SCRIPT_CONTINUE; } // If the range is larger than the maximum range, set it back to the maximum range if(range > MAX_RANGE) { range = MAX_RANGE; sendSystemMessageTestingOnly(self, "[Warning] /broadcastArea: Maximum range is " + MAX_RANGE + " meters. Your broadcast has been limited to that area."); } // Get all the players in the specified range obj_id[] players = getAllPlayers(getLocation(self), range); // This should never happen. The CSR should always count as a player within range if(players == null || players.length == 0) { sendSystemMessageTestingOnly(self, "[Error] /broadcastArea: No players within range"); return SCRIPT_CONTINUE; } // For all the players in the range, send them each the system message for(int i = 0; i < players.length; i++) { if(isIdValid(players[i]) && isPlayer(players[i])) { sendSystemMessageTestingOnly(players[i], message); } } return SCRIPT_CONTINUE; } // Parses the range argument for the broadcastArea command dictionary parseRange(string params) { const string KEYWORD_RANGE = "-range:"; dictionary ret = new dictionary(); // If no parameters were passed if(params == null || params.equalsIgnoreCase("")) return ret; // If the range argument does not exist int idx = params.indexOf(KEYWORD_RANGE); if(idx == -1) return ret; string retString = ""; float retRange = Float.NEGATIVE_INFINITY; StringTokenizer st = new StringTokenizer(params); while(st.hasMoreTokens()) { string arg = st.nextToken(); if(arg.startsWith(KEYWORD_RANGE)) { string sRange = arg.substring(KEYWORD_RANGE.length()); retRange = utils.stringToFloat(sRange); } else { retString += arg + " "; } } // utils.stringToFloat will return NEGATIVE_INFINITY if it was not able to successfully convert the string to a float if(retRange != Float.NEGATIVE_INFINITY) { ret.put("range", retRange); ret.put("params", retString.trim()); } return ret; } /***** KILL **************************************************/ commandHandler cmdKill() { if ( !isIdValid(target) || !isMob(target) ) { sendSystemMessageTestingOnly(self, "/kill: you must have a valid creature target to use this command"); return SCRIPT_CONTINUE; } if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { sendSystemMessageTestingOnly(self, "[Syntax] /kill -target"); return SCRIPT_CONTINUE; } if ( isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/kill: you must use /killPlayer to kill a player!"); } else { if ( !isIncapacitated(target) ) setPosture(target, POSTURE_INCAPACITATED); } return SCRIPT_CONTINUE; } commandHandler cmdKillPlayer() { if ( !isIdValid(target) || !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/killPlayer: you must have a valid player target to use this command"); return SCRIPT_CONTINUE; } if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { sendSystemMessageTestingOnly(self, "[Syntax] /killPlayer -target"); return SCRIPT_CONTINUE; } pclib.killPlayer(target, target); return SCRIPT_CONTINUE; } /***** FREEZE/UNFREEZE **************************************************/ commandHandler cmdFreezePlayer() { if (params.indexOf(gm.KEYWORD_ID) > -1) { dictionary ret = gm.parseObjId(params); target = ret.getObjId("oid"); } if (isIdValid(target) && isGameObjectTypeOf(getGameObjectType(target), GOT_ship)) target = getShipPilot(target); if (isIdValid(target) && isPlayer(target)) setState(target, STATE_FROZEN, true); else sendSystemMessageTestingOnly(self, "[Syntax] /freezePlayer [-target]|[-id:]"); return SCRIPT_CONTINUE; } commandHandler cmdUnfreezePlayer() { if (params.indexOf(gm.KEYWORD_ID) > -1) { dictionary ret = gm.parseObjId(params); target = ret.getObjId("oid"); } if (isIdValid(target) && isGameObjectTypeOf(getGameObjectType(target), GOT_ship)) target = getShipPilot(target); if (isIdValid(target) && isPlayer(target)) setState(target, STATE_FROZEN, false); else sendSystemMessageTestingOnly(self, "[Syntax] /unfreezePlayer [-target]|[-id:]"); return SCRIPT_CONTINUE; } /***** SET FACTION & STANDING **************************************************/ commandHandler cmdShowFactionInformation() { if ( !isIdValid(target) ) { dictionary ret = gm.parseTarget(params, target, "showFactionInformation"); obj_id tmpTarget = ret.getObjId("oid"); if ( isIdValid(tmpTarget) ) target = tmpTarget; else target = self; params = ret.getString("params"); if ( params == null ) params = ""; } if ( !isMob(target) && !hasObjVar(target, "pvpCanAttack") ) { string name = getEncodedName(target); string_id sid_name = utils.unpackString(name); if ( sid_name != null ) name = getString(sid_name); sendSystemMessageTestingOnly(self, "/showFactionInformation: (" + target + ")" + name + " is not a valid target"); return SCRIPT_CONTINUE; } gm.showFactionInformation(self, target); return SCRIPT_CONTINUE; } commandHandler cmdSetFaction() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { if ( params.indexOf(gm.KEYWORD_ID) > -1 ) { dictionary d = gm.parseObjId(params); obj_id tmpTarget = d.getObjId("oid"); if ( isIdValid(tmpTarget) ) { target = tmpTarget; } else { sendSystemMessageTestingOnly(self, "/setFaction: Unable to parse a valid object id!"); return SCRIPT_CONTINUE; } params = d.getString("params"); } else { target = self; } } boolean isAdHoc = false; if ( params.indexOf(gm.KEYWORD_ADHOC) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_ADHOC); isAdHoc = true; } if ( params == null || params.equalsIgnoreCase("") || (isPlayer(target) && isAdHoc)) { sendSystemMessageTestingOnly(self, "[Syntax] /setFaction [-target] (declared|covert|onleave) "); sendSystemMessageTestingOnly(self, "[Syntax] /setFaction [-target] clear"); sendSystemMessageTestingOnly(self, "[Syntax] /setFaction [-target] [-adhoc] (declared|covert) (AI ONLY)"); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(toLower(params)); string faction = ""; boolean declared = false; boolean onleave = false; boolean makeNeutral = false; boolean clearFlags = false; while ( st.hasMoreTokens() ) { string arg = st.nextToken(); if ( arg.equalsIgnoreCase("declared") ) { declared = true; } else if ( arg.equalsIgnoreCase("covert") ) { declared = false; } else if ( arg.equalsIgnoreCase("neutral") ) { makeNeutral = true; } else if ( arg.equalsIgnoreCase("onleave") ) { onleave = true; } else if ( arg.equalsIgnoreCase("clear") ) { clearFlags = clearFlags; } else { if ( arg.equalsIgnoreCase("imperial") ) { faction = "Imperial"; } else if ( arg.equalsIgnoreCase("rebel") ) { faction = "Rebel"; } else { faction = arg; } } } boolean updateFaction = false; int facNum = factions.AD_HOC_FACTION; if ( faction != null && !faction.equalsIgnoreCase("") ) { facNum = factions.getFactionNumber(faction); if ( facNum == factions.AD_HOC_FACTION ) { if ( !isPlayer(target) ) { if ( !isAdHoc ) { sendSystemMessageTestingOnly(self, "/setFaction: you must use '-adhoc' to set AIs to non-standard factions"); return SCRIPT_CONTINUE; } else { sendSystemMessageTestingOnly(self, "/setFaction: attempting to update " + utils.getStringName(target) + "'s faction!"); factions.setFaction(target, faction); return SCRIPT_CONTINUE; } } else { sendSystemMessageTestingOnly(self, "/setFaction: you may not set players to adhoc factions!"); return SCRIPT_CONTINUE; } } } if ( clearFlags ) { sendSystemMessageTestingOnly(self, "/setFaction: clearing all temp enemy flags..."); pvpRemoveAllTempEnemyFlags(target); } if ( makeNeutral ) { sendSystemMessageTestingOnly(self, "/setFaction: assigning neutral status..."); pvpMakeNeutral(target); } else { //set their faction first, if one was specified: if ( faction != null && !faction.equalsIgnoreCase("") && facNum != factions.AD_HOC_FACTION ) { //sendSystemMessageTestingOnly(self, "/setFaction: faction = " + faction + " facnum = " + facNum); int factionHashCode = dataTableGetInt(factions.FACTION_TABLE, facNum, "pvpFaction"); //sendSystemMessageTestingOnly(self, "/setFaction: faction hash code = " + factionHashCode); if ( factionHashCode != factions.AD_HOC_FACTION && factionHashCode != 0 ) { pvpSetAlignedFaction(target, factionHashCode); } else { sendSystemMessageTestingOnly(self, "/setFaction: unable to update " + utils.getStringName(target) + "'s faction to '" + faction + "'!"); return SCRIPT_CONTINUE; } } if ( declared ) { pvpMakeDeclared(target); } else if ( onleave ) { pvpMakeOnLeave(target); } else { pvpMakeCovert(target); } } if ( isMob(target) || hasObjVar(target, "pvpCanAttack") ) { sendSystemMessageTestingOnly(self, "/setFaction: displaying " + utils.getStringName(target) + "'s updated faction information!"); queueCommand(self, ##"showFactionInformation", target, "", COMMAND_PRIORITY_DEFAULT); } return SCRIPT_CONTINUE; } commandHandler cmdSetFactionStanding() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "[Syntax] /setFactionStanding: use /setFaction to set AI factions"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /setFactionStanding [-target] (+|-)"); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(toLower(params)); if ( st.countTokens() != 2 ) { sendSystemMessageTestingOnly(self, "[Syntax] /setFactionStanding [-target] (+|-)"); return SCRIPT_CONTINUE; } string faction = st.nextToken(); if ( faction.equalsIgnoreCase("imperial") ) { faction = "Imperial"; } else if ( faction.equalsIgnoreCase("rebel") ) { faction = "Rebel"; } int mod = 0; string sAmt = st.nextToken(); if ( sAmt.startsWith("-") ) { mod = -1; } if ( sAmt.startsWith("+") ) { mod = 1; sAmt = sAmt.substring(1); } float amt = utils.stringToFloat(sAmt); if ( amt == Float.NEGATIVE_INFINITY ) { sendSystemMessageTestingOnly(self, "[Syntax] /setFactionStanding [-target] (+|-)"); return SCRIPT_CONTINUE; } int facNum = factions.AD_HOC_FACTION; if ( faction != null && !faction.equalsIgnoreCase("") ) { facNum = factions.getFactionNumber(faction); if ( facNum == factions.AD_HOC_FACTION ) { sendSystemMessageTestingOnly(self, "/setFactionStanding: you may not set standing to non-standard factions"); return SCRIPT_CONTINUE; } else { if ( mod != 0 ) { sendSystemMessageTestingOnly(self, "/setFactionStanding: modifying '" + faction + "' by " + amt); factions.addFactionStanding(target, faction, amt); } else { sendSystemMessageTestingOnly(self, "/setFactionStanding: setting '" + faction + "' to " + amt); factions.setFactionStanding(target, faction, amt); } } } sendSystemMessageTestingOnly(self, "/setFactionStanding: displaying " + utils.getStringName(target) + "'s updated faction information!"); queueCommand(self, ##"showFactionInformation", target, "", COMMAND_PRIORITY_DEFAULT); return SCRIPT_CONTINUE; } commandHandler cmdGetRank() { if ( !isIdValid(target) || !isPlayer(target) ) target = self; int rank = pvpGetCurrentGcwRank(target); string faction = factions.getFaction(target); sendSystemMessageTestingOnly(self, "(" + target + ") " + getName(target) + "'s rank = ("+rank+") "+getString(new string_id("faction_recruiter",factions.getRankName(rank, faction)))); return SCRIPT_CONTINUE; } commandHandler cmdSetRank() { if ( utils.hasScriptVar(self, "setRank.pid") ) { int oldpid = utils.getIntScriptVar(self, "setRank.pid"); sui.closeSUI(self, oldpid); utils.removeScriptVarTree(self, "setRank"); } dictionary d = gm.parseTarget(params, target, "SETRANK"); if ( d == null ) { return SCRIPT_CONTINUE; } else if ( d.isEmpty() ) { } else { params = d.getString("params"); obj_id oid = d.getObjId("oid"); if ( isIdValid(oid) ) target = oid; else target = self; } if ( !isIdValid(target) || !isPlayer(target) ) target = self; string faction = factions.getFaction(target); if ( params == null || params.equalsIgnoreCase("") ) { int rank = pvpGetCurrentGcwRank(target); string title = "Set Player Rank"; string prompt = "Select the desired rank to set the player to.\n\n"; prompt += "Target = ("+target+") " + getName(target) + "\n"; prompt += "Current Rank = ("+rank+") " + getString(new string_id("faction_recruiter",factions.getRankName(rank, faction))); resizeable string[] entries = new string[0]; for ( int i = 0; i <= factions.MAXIMUM_RANK; i++ ) entries = utils.addElement(entries, "("+i+") " + getString(new string_id("faction_recruiter",factions.getRankName(i, faction)))); int pid = sui.listbox(self, self, prompt, sui.OK_CANCEL, title, entries, "handleSetRankSelection"); if ( pid > -1 ) { utils.setScriptVar(self, "setRank.pid", pid); utils.setScriptVar(self, "setRank.target", target); gm.attachHandlerScript(self); } } int newrank = utils.stringToInt(params); if ( newrank < 0 || newrank > factions.MAXIMUM_RANK ) { sendSystemMessageTestingOnly(self, "/setRank: unable to parse rank. Please choose a rank between 0 & " + factions.MAXIMUM_RANK); return SCRIPT_CONTINUE; } if ( factions.setRank(target, newrank) ) { int urank = pvpGetCurrentGcwRank(target); sendSystemMessageTestingOnly(self, "(" + target + ") " + getName(target) + "'s rank updated to ("+urank+") "+getString(new string_id("faction_recruiter",factions.getRankName(urank, faction)))); } else { sendSystemMessageTestingOnly(self, "The system was unable to update (" + target + ") " + getName(target) + "'s rank updated to ("+newrank+") "+getString(new string_id("faction_recruiter",factions.getRankName(newrank, faction)))); } return SCRIPT_CONTINUE; } /***** GRANT/REVOKE SKILL **************************************************/ commandHandler cmdGrantSkill() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/grantSkill: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } string prompt = "You are attempting to modify the skills for \\#pcontrast3 " + getName(target) + "\\#..\n\n"; prompt += "Please choose an option:"; int pid = sui.listbox(self, self, prompt, sui.OK_CANCEL, "GM GRANT SKILL", gm.ROADMAP_SKILL_OPTIONS, "handleGmGrantSkillOptions", true, false); utils.setScriptVar(self, "gmGrantSkill.target", target); /* params = toLower(params); string[] skills = dataTableGetStringColumnNoDefaults(skill.TBL_SKILL, "NAME"); if ( skills == null || skills.length == 0 ) { sendSystemMessageTestingOnly(self, "/grantSkill: unable to retrieve canonical skill listing!"); return SCRIPT_CONTINUE; } if ( toLower(params).equalsIgnoreCase("list") ) { listSkills(self, skills); return SCRIPT_CONTINUE; } boolean forceGrant = false; if ( params.indexOf(gm.KEYWORD_OVERRIDE) > -1 ) { forceGrant = true; params = gm.removeKeyword(params, gm.KEYWORD_OVERRIDE); } boolean grantedSkill = false; if ( forceGrant ) { string_id sid_skillName = new string_id("skl_n",params); if ( skill.grant(target, params) ) { sendSystemMessageTestingOnly(self, "You successfully FORCE grant " + params + " to (" + target + ") " + utils.getStringName(target)); } else { sendSystemMessageTestingOnly(self, "You are unable to FORCE grant " + params + " to (" + target + ") " + utils.getStringName(target)); } } else { if ( skill.grantSkillToPlayer(target, params) ) { dictionary d = new dictionary(); d.put(skill.DICT_SKILLNAME, skillName); messageTo(target, skill.HANDLER_SKILL_GRANTED, d, 0, true); sendSystemMessageTestingOnly(self, "You successfully grant " + params + " to (" + target + ") " + utils.getStringName(target)); } else { sendSystemMessageTestingOnly(self, "You were unable to grant " + params + " to (" + target + ") " + utils.getStringName(target)); } } */ return SCRIPT_CONTINUE; } commandHandler cmdRevokeSkill() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/revokeSkill: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /revokeSkill [-target] "); return SCRIPT_CONTINUE; } params = toLower(params); string[] skills = dataTableGetStringColumnNoDefaults(skill.TBL_SKILL, "NAME"); if ( skills == null || skills.length == 0 ) { sendSystemMessageTestingOnly(self, "/grantSkill: unable to retrieve canonical skill listing!"); return SCRIPT_CONTINUE; } if ( toLower(params).equalsIgnoreCase("list") ) { listSkills(self, skills); return SCRIPT_CONTINUE; } revokeSkill(target, params); sendSystemMessageTestingOnly(self, "You revoke " + params + " from (" + target + ") " + utils.getStringName(target)); CustomerServiceLog("Skill","CSR: ("+self+") "+getName(self)+" has revoked skill '"+params+"' from ("+target+") "+utils.getStringName(target)); return SCRIPT_CONTINUE; } void listSkills(obj_id self, string[] skills) { resizeable string[] entries = new string[0]; for ( int i = 0; i < skills.length; i++ ) { string stringname = getString(new string_id("skl_n",skills[i])); if ( stringname != null && !stringname.equalsIgnoreCase("") ) { string linedata = "(" + stringname + ") " + skills[i]; entries = utils.addElement(entries, linedata); } } //entries = utils.alphabetizeStringArray(entries); string listTitle = "SKILL LISTING"; string listPrompt = "A listing of all the currently used skills"; sui.listbox(self, self, listPrompt, sui.OK_ONLY, listTitle, entries, "noHandler", true, false); } /***** PLAYER CORPSE HISTORY **************************************************/ commandHandler cmdSearchCorpse() { if ( utils.hasScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_PID) ) { int pid = utils.getIntScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_PID); forceCloseSUIPage(pid); utils.removeScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_TARGET); utils.removeScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_PID); } if ( !isIdValid(target) ) target = self; if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/searchCorpse: you can only review player corpse history"); return SCRIPT_CONTINUE; } if ( !hasObjVar(target, pclib.VAR_CORPSE_BASE) ) { sendSystemMessageTestingOnly(self, "/searchCorpse: (" + target + ") " + utils.getStringName(target) + " has no corpse history!"); return SCRIPT_CONTINUE; } /*boolean showStamp = false; boolean showKiller = false; if ( params.indexOf("-killer") > -1 ) showKiller = true; if ( params.indexOf("-stamp") > -1 ) showStamp = true;*/ boolean showStamp = true; boolean showKiller = true; obj_id[] corpses = utils.getObjIdBatchObjVar(target, pclib.VAR_CORPSE_ID); if ( corpses == null || corpses.length == 0 ) { removeObjVar(target, pclib.VAR_CORPSE_BASE); sendSystemMessageTestingOnly(self, "/searchCorpse: (" + target + ") " + utils.getStringName(target) + " has no corpse history!"); return SCRIPT_CONTINUE; } int[] stamps = utils.getIntBatchObjVar(target, pclib.VAR_CORPSE_STAMP); if ( stamps == null || stamps.length == 0 || stamps.length != corpses.length ) { sendSystemMessageTestingOnly(self, "/searchCorpse: (" + target + ") " + utils.getStringName(target) + " has a bad corpse stamp history!"); showStamp = false; } obj_id[] killers = utils.getObjIdBatchObjVar(target, pclib.VAR_CORPSE_KILLER); if ( killers == null || killers.length == 0 || killers.length != corpses.length ) { sendSystemMessageTestingOnly(self, "/searchCorpse: (" + target + ") " + utils.getStringName(target) + " has a bad killer history!"); showKiller = false; } resizeable string[] entries = new stirng[0]; for ( int i = 0; i < corpses.length; i++ ) { string linedata = "id:" + corpses[i]; if ( showKiller ) linedata += " k:" + killers[i]; if ( showStamp ) linedata += " t:" + stamps[i]; entries = utils.addElement(entries, linedata); } if ( killers != null && killers.length > 0 ) { string prompt = "Corpse history for target: \n(" + target + ") " + utils.getStringName(target); prompt += "\n\nCurrent Time = " + getGameTime(); string title = "/searchCorpse: " + target; int pid = sui.listbox(self, self, prompt, sui.OK_CANCEL, title, entries, "handleSearchCorpseSui"); if ( pid > -1 ) { utils.setScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_TARGET, target); utils.setScriptVar(self, gm.SCRIPTVAR_SEARCHCORPSE_PID, pid); gm.attachHandlerScript(self); return SCRIPT_CONTINUE; } } sendSystemMessageTestingOnly(self, "/searchCorpse: was unable to construct a valid interface!"); return SCRIPT_CONTINUE; } /***** RUN SPEED **************************************************/ commandHandler cmdSetSpeed() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } boolean valid = false; if (isPlayer(target)) { obj_id ship = getPilotedShip(target); if (isIdValid(ship)) target = ship; valid = true; } else if (isGameObjectTypeOf(getGameObjectType(target), GOT_ship)) { valid = true; } if (!valid) { sendSystemMessageTestingOnly(self, "/setSpeed: you must be targeting a player or ship to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /setSpeed [-target] "); return SCRIPT_CONTINUE; } float multiplier = 1f; StringTokenizer st = new StringTokenizer(params); while ( st.hasMoreTokens() ) { float tmp = utils.stringToFloat(st.nextToken()); if ( tmp > 0f ) { multiplier = tmp; } } if ( multiplier > 0f && multiplier <= 10f ) setMovementPercent(target, multiplier); float newSpeed = getMovementPercent(target); sendSystemMessageTestingOnly(self, "(" + target + ") " + utils.getStringName(target) + "'s new speed multiplier = " + newSpeed); return SCRIPT_CONTINUE; } /***** SET NAME **************************************************/ commandHandler cmdSetName() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /setName [-target] "); return SCRIPT_CONTINUE; } setName(target, params); return SCRIPT_CONTINUE; } commandHandler cmdSetFirstName() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/setFirstName: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /setFirstName [-target] "); return SCRIPT_CONTINUE; } if ( params.indexOf(" ") > - 1 ) { sendSystemMessageTestingOnly(self, "/setFirstName: spaces are not allowed in a first name"); return SCRIPT_CONTINUE; } string name = utils.getStringName(target); string newname = name; if ( name != null && !name.equalsIgnoreCase("") ) { StringTokenizer st = new StringTokenizer(name); string fname = st.nextToken(); newname = params; while ( st.hasMoreTokens() ) newname += " " + st.nextToken(); } if ( newname.equalsIgnoreCase(name) ) { sendSystemMessageTestingOnly(self, "/setFirstName: name NOT updated..."); } else { if ( setName(target, newname) ) { sendSystemMessageTestingOnly(self, "/setFirstName: " + name + " will now be known as " + newname); } else { sendSystemMessageTestingOnly(self, "/setFirstName: system disallowed name change..."); } } return SCRIPT_CONTINUE; } commandHandler cmdSetLastName() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/setLastName: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /setLastName [-target] "); return SCRIPT_CONTINUE; } /*if ( params.indexOf(" ") > - 1 ) { sendSystemMessageTestingOnly(self, "/setLastName: spaces are not allowed in a first name"); return SCRIPT_CONTINUE; }*/ string name = utils.getStringName(target); string newname = name; if ( name != null && !name.equalsIgnoreCase("") ) { StringTokenizer st = new StringTokenizer(name); string fname = st.nextToken(); newname = fname + " " + params; } if ( newname.equalsIgnoreCase(name) ) { sendSystemMessageTestingOnly(self, "/setLastName: name NOT updated..."); } else { if ( setName(target, newname) ) { sendSystemMessageTestingOnly(self, "/setLastName: " + name + " will now be known as " + newname); } else { sendSystemMessageTestingOnly(self, "/setLastName: system disallowed name change..."); } } return SCRIPT_CONTINUE; } /***** BADGES **************************************************/ commandHandler cmdGrantBadge() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/grantBadge: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /grantBadge [-target] or "); return SCRIPT_CONTINUE; } int idx = utils.stringToInt(params); string badgeName = ""; if ( idx < 0 ) { badgeName = params; } else { badgeName = getCollectionSlotName(idx); } if ( (badgeName == null) || (badgeName.length() == 0) ) { sendSystemMessageTestingOnly(self, "Error: badge name " + badgeName + " is not a valid badge."); return SCRIPT_CONTINUE; } if ( badge.grantBadge(target, badgeName) ) { sendSystemMessageTestingOnly(self, "/grantBadge: you grant badge " + badgeName + " to (" + target + ")" + utils.getStringName(target)); } else { sendSystemMessageTestingOnly(self, "/grantBadge: you are UNABLE to grant badge " + badgeName + " to (" + target + ")" + utils.getStringName(target)); } return SCRIPT_CONTINUE; } commandHandler cmdRevokeBadge() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/revokeBadge: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { sendSystemMessageTestingOnly(self, "[Syntax] /revokeBadge [-target] "); return SCRIPT_CONTINUE; } int idx = utils.stringToInt(params); if ( idx < 0 ) { sendSystemMessageTestingOnly(self, "[Syntax] /revokeBadge [-target] "); return SCRIPT_CONTINUE; } string badgeName = getCollectionSlotName(idx); if ( (badgeName == null) || (badgeName.length() == 0) ) { sendSystemMessageTestingOnly(self, "Error: badge number " + idx + " is not a valid badge."); return SCRIPT_CONTINUE; } if ( badge.revokeBadge(target, badgeName, true) ) { sendSystemMessageTestingOnly(self, "/revokeBadge: you revoke badge #" + idx + " from (" + target + ")" + utils.getStringName(target)); } else { sendSystemMessageTestingOnly(self, "/revokeBadge: you are UNABLE to revoke badge #" + idx + " from (" + target + ")" + utils.getStringName(target)); } return SCRIPT_CONTINUE; } /***** EXPERIENCE **************************************************/ commandHandler cmdShowExperience() { if ( !isIdValid(target) ) target = self; if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "/showFactionInformation: you must be targetting a player to use this command"); return SCRIPT_CONTINUE; } if ( utils.hasScriptVar(self, gm.SCRIPTVAR_SHOWEXPERIENCE_PID) ) { int oldPid = utils.getIntScriptVar(self, gm.SCRIPTVAR_SHOWEXPERIENCE_PID); forceCloseSUIPage(oldPid); utils.removeScriptVar(self, gm.SCRIPTVAR_SHOWEXPERIENCE_PID); } string title = "EXPERIENCE LISTING"; string prompt = "Experience Listing for player:\n(" + target + ")" + utils.getStringName(target); prompt += "\n\nNOTE: THIS INFORMATION IS NOT REAL-TIME UPDATED! TIME: " + getGameTime(); resizeable string[] entries = new string[0]; //get experience listing... int pid = sui.listbox(self, self, prompt, sui.OK_ONLY, title, entries, "cleanupShowFaction"); if ( pid > -1 ) utils.setScriptVar(self, gm.SCRIPTVAR_SHOWEXPERIENCE_PID, pid); return SCRIPT_CONTINUE; } commandHandler cmdSetExperience() { if ( !isIdValid(target) ) target = self; if ( params.indexOf(gm.KEYWORD_TARGET) > -1 ) { params = gm.removeKeyword(params, gm.KEYWORD_TARGET); } else { target = self; } if ( !isPlayer(target) ) { sendSystemMessageTestingOnly(self, "[Syntax] /setExperience: this command may only be used on players"); return SCRIPT_CONTINUE; } if ( params == null || params.equalsIgnoreCase("") ) { showSetExperienceSyntax(self); return SCRIPT_CONTINUE; } string[] xpTypes = xp.getXpTypes(self); if ( xpTypes == null || xpTypes.length == 0 ) { sendSystemMessageTestingOnly(self, "/setExperience: unable to retrieve canonical xp listing!"); return SCRIPT_CONTINUE; } if ( toLower(params).equalsIgnoreCase("list") ) { resizeable string[] entries = new string[0]; for ( int i = 0; i < xpTypes.length; i++ ) { string stringname = getString(new string_id("exp_n",xpTypes[i])); if ( stringname != null && !stringname.equalsIgnoreCase("") ) { string linedata = "(" + stringname + ") " + xpTypes[i]; entries = utils.addElement(entries, linedata); } } //entries = utils.alphabetizeStringArray(entries); string listTitle = "XP TYPES"; string listPrompt = "A listing of all the currently used xp types"; sui.listbox(self,self, listPrompt, sui.OK_ONLY, listTitle, entries, "noHandler"); return SCRIPT_CONTINUE; } StringTokenizer st = new StringTokenizer(toLower(params)); if ( st.countTokens() != 2 ) { showSetExperienceSyntax(self); return SCRIPT_CONTINUE; } string xp_type = st.nextToken(); if ( utils.getElementPositionInArray(xpTypes, xp_type) == -1 ) { sendSystemMessageTestingOnly(self, "/setExperience: '" + xp_type + "' is not a valid xp type."); sendSystemMessageTestingOnly(self, "/setExperience: use '/setExperience list' for a valid listing"); return SCRIPT_CONTINUE; } int xp_amt = getExperiencePoints(target, xp_type); if ( st.hasMoreTokens() ) { string sAmt = st.nextToken(); int amt = 0; if ( sAmt.startsWith("+") || sAmt.startsWith("-") ) { amt = utils.stringToInt(sAmt.substring(1)); if ( amt == -1 ) { sendSystemMessageTestingOnly(self, "/setExperience: invalid xp delta parameter..."); } if ( sAmt.startsWith("-") ) { amt = -amt; } } else { amt = utils.stringToInt(sAmt); if ( amt == -1 ) { sendSystemMessageTestingOnly(self, "/setExperience: invalid xp amount: '" + sAmt + "'"); } amt = amt - xp_amt; } if ( amt != 0 ) { dictionary resultData = new dictionary(); resultData.put("target", target); resultData.put("xp_type", xp_type); xp.grantUnmodifiedExperience(target, xp_type, amt, "cmdSetExperienceResult", resultData); } } return SCRIPT_CONTINUE; } void showSetExperienceSyntax(obj_id self) { sendSystemMessageTestingOnly(self, "[Syntax] /setExperience [-target] (+|-)"); sendSystemMessageTestingOnly(self, "[Syntax] /setExperience list"); } commandHandler cmdFindObject() { obj_id objToFind = utils.stringToObjId(params); if (!isIdValid(objToFind)) sendSystemMessageTestingOnly(self, "[Syntax] /findObject objid"); else { sendSystemMessageTestingOnly(self, "Searching for object: " + objToFind); gm.attachHandlerScript(self); findObjectAnywhere(objToFind, self); } return SCRIPT_CONTINUE; } commandHandler cmdFindObjectByTemplate() { java.util.StringTokenizer st = new java.util.StringTokenizer(params); if (st.countTokens() != 1) { sendSystemMessageTestingOnly(self, "Format: findObjectByTemplate