Files
dsrc/sku.0/sys.server/compiled/game/script/player/base/base_player.java
2020-11-02 01:44:09 -05:00

12288 lines
566 KiB
Java
Executable File

package script.player.base;
import script.*;
import script.library.*;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;
public class base_player extends script.base_script
{
public base_player()
{
}
public static final int TIME_DEATH = 5;
public static final float RANGE_COUP_DE_GRACE = 3.0f;
public static final String JEDI_CLOAK_TEMPLATE = "object/tangible/wearable/robe/robe_s05.iff";
public static final String MSG_REVIVE_TITLE = "@base_player:revive_title";
public static final String MSG_REVIVE_MSG = "@base_player:revive_msg";
public static final String MSG_REVIVE_CLOSEST_INSURED = "@base_player:revive_closest_insured";
public static final String MSG_REVIVE_CLOSEST_UNINSURED = "@base_player:revive_closest_uninsured";
public static final String MSG_REVIVE_BIND_INSURED = "@base_player:revive_bind_insured";
public static final String MSG_REVIVE_BIND_UNINSURED = "@base_player:revive_bind_uninsured";
public static final String MSG_REVIVE_CLOSEST = "@base_player:revive_closest";
public static final String MSG_REVIVE_BIND = "@base_player:revive_bind";
public static final string_id SID_VICTIM_INCAPACITATED = new string_id("base_player", "victim_incapacitated");
public static final string_id SID_KILLER_TARGET_INCAPACITATED = new string_id("base_player", "killer_target_incapacitated");
public static final string_id PROSE_VICTIM_INCAP = new string_id("base_player", "prose_victim_incap");
public static final string_id PROSE_TARGET_INCAP = new string_id("base_player", "prose_target_incap");
public static final string_id SID_COUP_DE_GRACE = new string_id("base_player", "death_blow");
public static final string_id SID_REVIVE = new string_id("base_player", "revive_player");
public static final string_id SID_RESUSCITATE = new string_id("base_player", "resuscitate_player");
public static final string_id SID_TARGET_OUT_OF_RANGE = new string_id("error_message", "target_out_of_range");
public static final string_id SID_TARGET_NOT_ATTACKABLE = new string_id("error_message", "target_not_attackable");
public static final string_id SID_SYNTAX_UNCONSENT = new string_id("error_message", "syntax_unconsent");
public static final string_id SID_CONSENT_TO_EMPTY = new string_id("error_message", "consent_to_empty");
public static final string_id SID_CONSENT_FROM_EMPTY = new string_id("error_message", "consent_from_empty");
public static final string_id SID_HAVE_CONSENT_TRUE = new string_id("base_player", "haveconsent_true");
public static final string_id SID_HAVE_CONSENT_FALSE = new string_id("base_player", "haveconsent_false");
public static final string_id SID_CONSENT_SUCCESSFUL = new string_id("base_player", "consent_successful");
public static final string_id SID_UNCONSENT_SUCCESSFUL = new string_id("base_player", "unconsent_successful");
public static final string_id SID_CONSENT_TO_LISTBOX_PROMPT = new string_id("base_player", "consent_to_listbox_prompt");
public static final string_id SID_CONSENT_TO_LISTBOX_TITLE = new string_id("base_player", "consent_to_listbox_title");
public static final string_id SID_CONSENT_FROM_LISTBOX_PROMPT = new string_id("base_player", "consent_from_listbox_prompt");
public static final string_id SID_CONSENT_FROM_LISTBOX_TITLE = new string_id("base_player", "consent_from_listbox_title");
public static final string_id SID_UNCONSENT_LISTBOX_PROMPT = new string_id("base_player", "unconsent_listbox_prompt");
public static final string_id SID_UNCONSENT_LISTBOX_TITLE = new string_id("base_player", "unconsent_listbox_title");
public static final string_id PROSE_GOT_CONSENT = new string_id("base_player", "prose_got_consent");
public static final string_id PROSE_LOST_CONSENT = new string_id("base_player", "prose_lost_consent");
public static final string_id SID_CORPSE_EXPIRED = new string_id("base_player", "corpse_expired");
public static final string_id SID_PERM_NO_MOVE = new string_id("error_message", "perm_no_move");
public static final string_id SID_CMD_OPEN_FAIL = new string_id("error_message", "prose_open_fail");
public static final string_id SID_CMD_NO_EFFECT = new string_id("error_message", "cmd_no_effect");
public static final string_id SID_CMD_NO_EFFECT_ON_TARGET = new string_id("error_message", "cmd_no_effect_on_target");
public static final string_id SID_NO_UNINSURED_INSURABLES = new string_id("error_message", "no_uninsured_insurables");
public static final string_id SID_BAD_INSURE_REQUEST = new string_id("error_message", "bad_insure_request");
public static final string_id SID_INSURE_FAIL = new string_id("error_message", "insure_fail");
public static final string_id PROSE_INSURE_FAIL = new string_id("error_message", "prose_insure_fail");
public static final string_id SID_CLONE_FAIL = new string_id("error_message", "clone_fail");
public static final string_id SID_CLONE_FAIL_SELECTION = new string_id("base_player", "clone_fail_no_selection");
public static final string_id SID_TARGET_MUST_BE_PLAYER = new string_id("error_message", "target_must_be_player");
public static final string_id SID_ERROR_INVITE_RANGE = new string_id("error_message", "error_invite_range");
public static final string_id PROSE_INVITE_RANGE = new string_id("error_message", "prose_invite_range");
public static final string_id SID_INSTANCE_REVIVE = new string_id("base_player", "instance_revive");
public static final string_id SID_INSTANCE_REVIVE_TITLE = new string_id("base_player", "instance_revive_title");
public static final String HANDLER_PLAYER_REVIVE = "handlePlayerRevive";
public static final String HANDLER_UNCONSENT_MENU = "handleUnconsentMenu";
public static final String HANDLER_CASH_LOOTED = "handleCashLooted";
public static final string_id PROSE_COIN_LOOT = new string_id("base_player", "prose_coin_loot");
public static final string_id PROSE_COIN_LOOT_NO_TARGET = new string_id("base_player", "prose_coin_loot_no_target");
public static final string_id PROSE_COIN_LOOT_FAILED = new string_id("error_message", "prose_coin_loot_fail");
public static final int LOGOUT_TIME = 30;
public static final int LOGOUT_COUNT_INTERVAL = 5;
public static final string_id SID_SYS_SCENTMASK_NOSKILL = new string_id("skl_use", "sys_scentmask_noskill");
public static final string_id SID_SYS_SCENTMASK_START = new string_id("skl_use", "sys_scentmask_start");
public static final string_id SID_SYS_SCENTMASK_STOP = new string_id("skl_use", "sys_scentmask_stop");
public static final string_id SID_SYS_SCENTMASK_FAIL = new string_id("skl_use", "sys_scentmask_fail");
public static final string_id SID_SYS_SCENTMASK_ALREADY = new string_id("skl_use", "sys_scentmask_already");
public static final string_id SID_SYS_SCENTMASK_DELAY = new string_id("skl_use", "sys_scentmask_delay");
public static final string_id SID_SYS_SCENTMASK_CONCEALED = new string_id("skl_use", "sys_scentmask_concealed");
public static final string_id SID_SYS_CONCEAL_NOSKILL = new string_id("skl_use", "sys_conceal_noskill");
public static final string_id SID_SYS_CONCEAL_START = new string_id("skl_use", "sys_conceal_start");
public static final string_id SID_SYS_CONCEAL_STOP = new string_id("skl_use", "sys_conceal_stop");
public static final string_id SID_SYS_CONCEAL_FAIL = new string_id("skl_use", "sys_conceal_fail");
public static final string_id SID_SYS_CONCEAL_CANT = new string_id("skl_use", "sys_conceal_cant");
public static final string_id SID_SYS_CONCEAL_NOTPLAYER = new string_id("skl_use", "sys_conceal_notplayer");
public static final string_id SID_SYS_TARGET_CONCEALED = new string_id("skl_use", "sys_target_concealed");
public static final string_id SID_SYS_CONCEAL_REMOVE = new string_id("skl_use", "sys_conceal_remove");
public static final string_id SID_SYS_CONCEAL_NOKIT = new string_id("skl_use", "sys_conceal_nokit");
public static final string_id SID_SYS_CONCEAL_SCENTMASKED = new string_id("skl_use", "sys_conceal_scentmasked");
public static final string_id SID_SYS_CONCEAL_APPLY = new string_id("skl_use", "sys_conceal_apply");
public static final string_id SID_SYS_CONCEAL_DELAY = new string_id("skl_use", "sys_conceal_delay");
public static final string_id SID_SYS_SCAN_NOTHING = new string_id("skl_use", "sys_scan_nothing");
public static final string_id SID_SYS_SCAN_BEGIN = new string_id("skl_use", "sys_scan_begin");
public static final string_id SID_SYS_SCAN_ALREADY = new string_id("skl_use", "sys_scan_already");
public static final string_id SID_SYS_SCAN_INSIDE = new string_id("skl_use", "sys_scan_inside");
public static final string_id SID_SYS_SCAN_MOVED = new string_id("skl_use", "sys_scan_moved");
public static final string_id SID_SYS_SCAN_COMBAT = new string_id("skl_use", "sys_scan_combat");
public static final string_id SID_SURVEY_WAYPOINT_NAME = new string_id("skl_use", "survey_waypoint_name");
public static final string_id SID_SURVEY_WAYPOINT = new string_id("survey", "survey_waypoint");
public static final string_id SID_SAMPLE_CANCEL = new string_id("survey", "sample_cancel");
public static final string_id SID_SAMPLE_CANCEL_ATTACK = new string_id("survey", "sample_cancel_attack");
public static final string_id SID_NODE_WAYPOINT = new string_id("survey", "node_waypoint");
public static final string_id SID_GAMBLE_NO_ACTION = new string_id("survey", "gamble_no_action");
public static final string_id SID_TRAP_CANCEL = new string_id("trap/trap", "sys_traplay_cancel");
public static final string_id SID_TRAP_CANCEL_ATTACK = new string_id("trap/trap", "sys_traplay_cancel_attack");
public static final string_id SID_TRAP_COUNT = new string_id("trap/trap", "sys_traplay_count");
public static final string_id SID_SYS_EJECT_REQUEST = new string_id("error_message", "sys_eject_request");
public static final string_id SID_SYS_EJECT_FAIL_MOVE = new string_id("error_message", "sys_eject_fail_move");
public static final string_id SID_SYS_EJECT_FAIL_CONTAINED = new string_id("error_message", "sys_eject_fail_contained");
public static final string_id SID_SYS_EJECT_FAIL_PROXIMITY = new string_id("error_message", "sys_eject_fail_proximity");
public static final string_id SID_SYS_EJECT_FAIL_GROUND = new string_id("error_message", "sys_eject_fail_ground");
public static final string_id SID_SYS_EJECT_SUCCESS = new string_id("error_message", "sys_eject_success");
public static final string_id SID_SYS_EJECT_DUNGEON = new string_id("error_messaage", "sys_eject_dungeon_pp");
public static final string_id SID_NOT_MILITIA = new string_id("city/city", "not_militia");
public static final string_id SID_CITY_WARNED = new string_id("city/city", "city_warned");
public static final string_id SID_CITY_WARN_DONE = new string_id("city/city", "city_warn_done");
public static final string_id SID_ALREADY_WARNED = new string_id("city/city", "already_warned");
public static final string_id SID_CITY_BANNED = new string_id("city/city", "city_banned");
public static final string_id SID_CITY_BAN_DONE = new string_id("city/city", "city_ban_done");
public static final string_id SID_CITY_PARDONED = new string_id("city/city", "city_pardoned");
public static final string_id SID_CITY_PARDON_DONE = new string_id("city/city", "city_pardon_done");
public static final string_id SID_LEAVE_CITY = new string_id("city/city", "city_leave_city");
public static final string_id SID_ENTER_CITY = new string_id("city/city", "city_enter_city");
public static final string_id SID_CITY_WARNING = new string_id("city/city", "city_warning");
public static final string_id SID_CITY_WARNING_TARGET = new string_id("city/city", "city_warning_target");
public static final string_id SID_NOT_CITIZEN_BAN = new string_id("city/city", "not_citizen_ban");
public static final string_id SID_NOT_CSR_BAN = new string_id("city/city", "not_csr_ban");
public static final string_id SID_CSR_BAN_ATTEMPT_MSG = new string_id("city/city", "csr_ban_attempt_msg");
public static final string_id SID_RIGHTS_GRANTED = new string_id("city/city", "rights_granted");
public static final string_id SID_GRANT_RIGHTS_FAIL = new string_id("city/city", "grant_rights_fail");
public static final string_id SID_RIGHTS_GRANTED_SELF = new string_id("city/city", "rights_granted_self");
public static final String CITY_MISSION_TERMINALS = "datatables/city/mission_terminals.iff";
public static final string_id SID_NO_MORE_MT = new string_id("city/city", "no_more_mt");
public static final String CITY_SKILL_TRAINERS = "datatables/city/skill_trainers.iff";
public static final string_id SID_NO_MORE_TRAINERS = new string_id("city/city", "no_more_trainers");
public static final string_id SID_CITY_NO_MONEY = new string_id("city/city", "action_no_money");
public static final string_id SID_NO_FACTIONAL = new string_id("city/city", "no_factional");
public static final string_id SID_RIGHTS_REVOKED = new string_id("city/city", "rights_revoked");
public static final string_id SID_RIGHTS_REVOKED_OTHER = new string_id("city/city", "rights_revoked_other");
public static final string_id SID_CIVIC_ONLY = new string_id("city/city", "civic_only");
public static final String[] ZONING_RIGHTS_ARRAY = new String[]
{
"@city/city:full_zoning_rights",
"@city/city:st_zoning_rights"
};
public static final string_id SID_ST_RIGHTS_GRANTED = new string_id("city/city", "st_rights_granted");
public static final string_id SID_ST_GRANT_RIGHTS_FAIL = new string_id("city/city", "st_grant_rights_fail");
public static final string_id SID_ST_RIGHTS_GRANTED_SELF = new string_id("city/city", "st_rights_granted_self");
public static final string_id SID_ST_RIGHTS_REVOKED = new string_id("city/city", "st_rights_revoked");
public static final string_id SID_ST_RIGHTS_REVOKED_OTHER = new string_id("city/city", "st_rights_revoked_other");
public static final string_id SID_NOT_IN_CITY_LIMITS = new string_id("city/city", "not_in_city_limits");
public static final String NOVICE_MARKSMAN = "combat_marksman_novice";
public static final String NOVICE_BRAWLER = "combat_brawler_novice";
public static final String NOVICE_MEDIC = "science_medic_novice";
public static final String NOVICE_ARTISAN = "crafting_artisan_novice";
public static final String NOVICE_ENTERTAINER = "social_entertainer_novice";
public static final String NOVICE_SCOUT = "outdoors_scout_novice";
public static final string_id SID_INVITE_TO_RIDE = new string_id("base_player", "invite_to_ride");
public static final string_id SID_CANNOT_OFFER_RIDE_TO = new string_id("base_player", "cannot_offer_ride_to");
public static final string_id SID_OFFER_RIDE_TO = new string_id("base_player", "offer_ride_to");
public static final string_id SID_UNABLE_TO_ACCEPT_RIDE = new string_id("base_player", "unable_to_accept_ride");
public static final string_id SID_ACCEPTED_RIDE = new string_id("base_player", "accepted_ride");
public static final string_id SID_DECLINED_RIDE = new string_id("base_player", "declined_ride");
public static final string_id SID_NO_ROOM_FOR_PASSENGER = new string_id("base_player", "no_room_for_passenger");
public static final string_id SID_SPICE_DOWNER_DURATION_REDUCED = new string_id("base_player", "spice_downer_duration_reduced");
public static final string_id SID_SPICE_DOWNER_DURATION_NEGATED = new string_id("base_player", "spice_downer_duration_negated");
public static final string_id SID_INCAPACITATION_DURATION_REDUCED = new string_id("base_player", "incapacitation_duration_reduced");
public static final String NEW_PLAYER_QUESTS_SCRIPT = "theme_park.new_player.new_player";
public static final String SPACE_CERTIFICATION = "private_cert_space";
public static final string_id SID_CAN_PLACE_ONE_BASE = new string_id("faction_perk", "faction_base_refunded_one");
public static final String COUPE_DE_GRACE_TARGET = "coupeDeGraceTarget";
public static final String[] ATTRIBUTES =
{
"HEALTH",
"CONSTITUTION",
"ACTION",
"STAMINA",
"MIND",
"WILLPOWER"
};
public static final int TRANSFER_SHIPS = 1;
public static final int TRANSFER_DROIDS = 1;
public static final string_id SID_CANT_MILK_MOUNTED = new string_id("skl_use", "milk_mounted");
public static final string_id SID_CANT_MILK = new string_id("skl_use", "milk_cant");
public static final string_id SID_CANT_MILK_COMBAT = new string_id("skl_use", "milk_combat");
public static final string_id SID_NO_MILK = new string_id("skl_use", "milk_none");
public static final string_id SID_NO_ALLOW_MILK = new string_id("skl_use", "milk_unmilkeable");
public static final string_id MILK_TOO_FAR_START = new string_id("skl_use", "milk_too_far_start");
public static final string_id MILK_NO_TARGET = new string_id("skl_use", "milk_no_target");
public static final String CTS_LOT_COUNT = "cts.lotcount";
public static final String PVP_SKILL_1 = "retaliation_ability";
public static final String PVP_SKILL_2 = "adrenaline_ability";
public static final String PVP_SKILL_3 = "unstoppable_ability";
public static final String PVP_SKILL_4 = "last_man_ability";
public static final String PVP_SKILL_5 = "aura_buff_self";
public static final String PVP_SKILL_6 = "airstrike_ability";
public static final string_id COVERCHARGE_DANCER_MESSAGE = new string_id("base_player", "covercharge_dancer_message");
public static final string_id SID_FOUND_NOTHING = new string_id("lair_n", "found_nothing");
public static final string_id TOO_FAR_FROM_LAIR = new string_id("lair_n", "too_far_from_lair");
public static final string_id LAIR_NOT_TARGETED = new string_id("lair_n", "lair_not_targeted");
public static final string_id SHAPECHANGE = new string_id("spam", "shapechange_combat");
public static final String[] WAYPOINT_GROUND_PLANETS_EXTERNAL =
{
"tatooine",
"naboo",
"corellia",
"rori",
"talus",
"yavin4",
"endor",
"lok",
"dantooine",
"dathomir",
"kachirho",
"etyyy",
"khowir",
"mustafar"
};
public static final String[] WAYPOINT_GROUND_PLANETS_INTERNAL =
{
"tatooine",
"naboo",
"corellia",
"rori",
"talus",
"yavin4",
"endor",
"lok",
"dantooine",
"dathomir",
"kashyyyk_main",
"kashyyyk_hunting",
"kashyyyk_dead_forest",
"mustafar"
};
public static final vector[] WAYPOINT_GROUND_PLANETS_BUILDOUT_COORDS =
{
null,
null,
null,
null,
null,
null,
null,
null,
null,
null,
new vector(0.0f, 0.0f, 0.0f),
new vector(0.0f, 0.0f, 0.0f),
new vector(0.0f, 0.0f, 0.0f),
new vector(-2304.0f, 0.0f, 2848.0f)
};
public static final String[] WAYPOINT_SPACE_ZONES_EXTERNAL =
{
"space_tatooine",
"space_naboo",
"space_corellia",
"space_deep",
"space_kessel",
"space_yavin4",
"space_endor",
"space_lok",
"space_dantooine",
"space_dathomir",
"space_kashyyyk",
"space_nova_orion"
};
public static final String[] WAYPOINT_SPACE_ZONES_INTERNAL =
{
"space_tatooine",
"space_naboo",
"space_corellia",
"space_heavy1",
"space_light1",
"space_yavin4",
"space_endor",
"space_lok",
"space_dantooine",
"space_dathomir",
"space_kashyyyk",
"space_nova_orion"
};
public static final boolean LOGGING_ON = true;
public static final String LOGNAME = "junk_log";
public int OnCustomizeFinished(obj_id self, obj_id object, String params) throws InterruptedException
{
if (utils.hasScriptVar(self, "armor_colorize.tool_oid") || utils.hasScriptVar(self, "structure_colorize.tool_oid"))
{
obj_id tool = obj_id.NULL_ID;
if (utils.hasScriptVar(self, "armor_colorize.tool_oid"))
{
tool = utils.getObjIdScriptVar(self, "armor_colorize.tool_oid");
}
else if (utils.hasScriptVar(self, "structure_colorize.tool_oid"))
{
tool = utils.getObjIdScriptVar(self, "structure_colorize.tool_oid");
}
if (!isValidId(tool) || !exists(tool))
{
return SCRIPT_CONTINUE;
}
colorizeObject(self, object, tool, params);
}
if (utils.hasScriptVar(self, vendor_lib.GREETER_PLAYTERCOLOR_SCRVAR))
{
vendor_lib.colorizeGreeterFromWidget(self, object, params);
}
if (utils.hasScriptVar(self, "veteranRewardItemColor.color_setting"))
{
utils.colorizeItemFromWidget(self, object, params);
}
return SCRIPT_CONTINUE;
}
public int OnEnteredCombat(obj_id self) throws InterruptedException
{
int shapechange = buff.getBuffOnTargetFromGroup(self, "shapechange");
if (shapechange != 0)
{
buff.removeBuff(self, shapechange);
sendSystemMessage(self, SHAPECHANGE);
}
return SCRIPT_CONTINUE;
}
public int OnAttach(obj_id self) throws InterruptedException
{
final String[] NEWBIE_PROFICIENCIES =
{
"knife_stone",
"knife_survival",
"lance_staff_wood_s1",
"axe_heavy",
"rifle_cdef",
"pistol_cdef",
"carbine_cdef"
};
setObjVar(self, pclib.VAR_NEWBIE_DEATH, 1);
skill.setPlayerStatsForLevel(self, 1);
return SCRIPT_CONTINUE;
}
public int OnSkillAboutToBeRevoked(obj_id self, String skill) throws InterruptedException
{
if ((toLower(skill)).startsWith("pilot"))
{
int godLevel = -1;
if (isGod(self))
{
godLevel = getGodLevel(self);
}
if (!utils.hasScriptVar(self, "revokePilotSkill") && (godLevel < 50))
{
space_skill.retireWarning(self, skill);
return SCRIPT_OVERRIDE;
}
}
return SCRIPT_CONTINUE;
}
public int OnCombatLevelChanged(obj_id self, int oldCombatLevel, int newCombatLevel) throws InterruptedException
{
if (newCombatLevel <= 1 || oldCombatLevel >= newCombatLevel)
{
return SCRIPT_CONTINUE;
}
if (!utils.hasScriptVar(self, "respec.conceal"))
{
skill.doPlayerLeveling(self, oldCombatLevel, newCombatLevel);
}
else
{
skill.setPlayerStatsForLevel(self, newCombatLevel);
utils.removeScriptVar(self, "respec.conceal");
}
if ((utils.isProfession(self, utils.TRADER)) && (!hasSkill(self, "class_trader")))
{
grantSkill(self, "class_trader");
}
if ((!hasSkill(self, "expertise")) && (newCombatLevel == 10))
{
expertise.autoAllocateExpertiseByLevel(self, true);
}
recomputeCommandSeries(self);
grantLevelSpecificRewards(self, newCombatLevel);
skill.sendlevelUpStatChangeSystemMessages(self, oldCombatLevel, newCombatLevel);
return SCRIPT_CONTINUE;
}
public void grantLevelSpecificRewards(obj_id player, int newCombatLevel) throws InterruptedException{
if(!utils.checkConfigFlag("Custom", "grantLevelSpecificRewards")) return;
if(hasObjVar(player, "level.reward." + newCombatLevel)) return;
obj_id inv = utils.getInventoryContainer(player);
switch(newCombatLevel){
case 20:
// create the Level 20 reward Flash Speeder (stella)
createLevelReward("Flash Speeder deed", "object/tangible/deed/vehicle_deed/speederbike_flash_deed.iff", newCombatLevel, player);
break;
case 70:
createLevelReward("Lava Flea deed", "object/tangible/veteran_reward/mount_lava_flea.iff", newCombatLevel, player);
// create the Level 70 reward Lava Flea (stella)
break;
}
}
public void createLevelReward(String name, String template, int level, obj_id player) throws InterruptedException{
String playerName = getName(player);
obj_id reward = createObjectInInventoryAllowOverload(template, player);
if(isIdValid(reward)){
setObjVar(player, "level.reward." + level, true);
sendSystemMessage(player, "A " + name + " has been placed in your inventory.", null);
CustomerServiceLog("LevelItemRewards", "Player " + playerName + " (" + player + ") has been awarded the " + name + " for reaching Level " + level + ".");
}
else{
CustomerServiceLog("LevelItemRewards", "Unable to create " + name + " reward for Player " + playerName + " (" + player + ")");
}
}
public int updateGCWStanding(obj_id self, dictionary params) throws InterruptedException
{
int intScore = params.getInt("intScore");
gcw.checkAndUpdateGCWStanding(self, intScore);
return SCRIPT_CONTINUE;
}
public int OnSkillRevoked(obj_id self, String strSkill) throws InterruptedException
{
if (strSkill.equals("pilot_rebel_navy_novice") || strSkill.equals("pilot_imperial_navy_novice") || strSkill.equals("pilot_neutral_novice"))
{
space_flags.clearSpaceTrack(self);
space_skill.revokeExperienceForRetire(self, strSkill);
if (space_quest.hasQuest(self))
{
obj_id datapad = utils.getPlayerDatapad(self);
if (isIdValid(datapad))
{
obj_id[] dpobjs = getContents(datapad);
for (obj_id dpobj : dpobjs) {
if (hasObjVar(dpobj, space_quest.QUEST_TYPE)) {
space_quest.setQuestAborted(self, dpobj);
}
}
}
}
removeObjVar(self, "space_quest.series");
obj_var_list questList = getObjVarList(self, space_quest.QUEST_STATUS);
LOG("revoke", "QUESTLIST: QuestList " + questList);
if (questList != null)
{
int spaceQuests = questList.getNumItems();
for (int i = 0; i < spaceQuests; ++i)
{
obj_var spaceFields = questList.getObjVar(i);
String questType = spaceFields.getName();
obj_var_list typeList = questList.getObjVarList(questType);
int questCount = typeList.getNumItems();
for (int j = 0; j < questCount; j++)
{
obj_var quest = typeList.getObjVar(j);
String questName = quest.getName();
String spaceTable = "/datatables/spacequest/" + questType + "/" + questName + ".iff";
String questSeries = dataTableGetString(spaceTable, 0, "questSeries");
if (questSeries == null)
{
LOG("revoke_space_quest", "QUESTSERIES IS NULL IN DATATABLE: " + spaceTable);
continue;
}
if (!questSeries.equals("") && questSeries.equals("pilot_profession"))
{
space_quest.clearQuestFlags(self, questType, questName);
}
}
}
}
}
utils.unequipAndNotifyUncerted(self);
if (strSkill.equals("outdoors_ranger_movement_03"))
{
if (hasSchematic(self, "object/draft_schematic/scout/item_camokit_kashyyyk.iff"))
{
revokeSchematic(self, "object/draft_schematic/scout/item_camokit_kashyyyk.iff");
}
}
if (strSkill.startsWith("expertise_"))
{
expertise.cacheExpertiseProcReacList(self);
armor.recalculateArmorForPlayer(self);
obj_id tempWeapon = getObjectInSlot(self, "hold_r");
if (isIdValid(tempWeapon))
{
weapons.adjustWeaponRangeForExpertise(self, tempWeapon, true);
}
skill.recalcPlayerPools(self, false);
}
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
recomputeCommandSeries(self);
beast_lib.verifyAndUpdateCalledBeastStats(self);
return SCRIPT_CONTINUE;
}
public int OnInitialize(obj_id self) throws InterruptedException
{
if ((utils.isProfession(self, utils.TRADER)) && (!hasSkill(self, "class_trader")))
{
grantSkill(self, "class_trader");
}
if (!hasSkill(self, "expertise"))
{
expertise.autoAllocateExpertiseByLevel(self, false);
}
city.initCitizen(self);
respecNewEntertainerSkills(self);
respecNewCrafterSkills(self);
boolean setting = utils.checkConfigFlag("TestCenterPlayer", "ApplyTCMark");
if (setting)
{
setObjVar(self, "tcTester", 1);
}
if (getForcePower(self) > 0)
{
if (getJediState(self) == JEDI_STATE_NONE)
{
setJediState(self, JEDI_STATE_FORCE_SENSITIVE);
}
}
if (hasSkill(self, "jedi_padawan_novice"))
{
setSkillTemplate(self, "a");
attachScript(self, "player.player_jedi_conversion");
}
if (!isJedi(self))
{
if (hasObjVar(self, "jedi.postponeGrant"))
{
if (!jedi.postponeGrantJedi())
{
LOG("jedi", "MAKING " + self + " A JEDI FROM ON_INITIALIZE");
messageTo(self, "makeJedi", null, 0.1f, false);
}
}
else if (hasObjVar(self, "jedi.timeStamp"))
{
LOG("jedi", "MAKING " + self + " A JEDI FROM ON_INITIALIZE");
messageTo(self, "makeJedi", null, 0.1f, false);
}
}
skill.fixTerrainNegotiationMods(self);
if (isIdValid(getHouseId(self)))
{
skill.grantAllPoliticianSkills(self);
}
else
{
int currentCity = getCitizenOfCityId(self);
obj_id currentCityMayor = cityGetLeader(currentCity);
if (self == currentCityMayor)
{
skill.grantAllPoliticianSkills(self);
}
}
int vehicleBuff = buff.getBuffOnTargetFromGroup(self, "vehicle");
if (vehicleBuff != 0)
{
buff.removeBuff(self, vehicleBuff);
}
if (buff.hasBuff(self, "forceRun"))
{
buff.removeBuff(self, "forceRun");
}
if (buff.hasBuff(self, "forceRun_1"))
{
buff.removeBuff(self, "forceRun_1");
}
if (buff.hasBuff(self, "forceRun_2"))
{
buff.removeBuff(self, "forceRun_2");
}
jedi.jediSaberPearlRestore(self);
if (!hasSkill(self, "social_language_wookiee_comprehend"))
{
grantSkill(self, "social_language_wookiee_comprehend");
}
if (!group.isGrouped(self))
{
int[] buffList = buff.getGroupBuffEffects(self);
if (buffList != null && buffList.length > 0)
{
buff.removeGroupBuffEffect(self, buffList);
}
}
if (features.isSpaceEdition(self))
{
grantCommand(self, SPACE_CERTIFICATION);
}
else
{
revokeCommand(self, SPACE_CERTIFICATION);
}
removeObjVar(self, pclib.VAR_SAFE_LOGOUT);
recalculateLevel(self);
removeObjVar(self, "clickRespec");
removeObjVar(self, "npcRespec");
detachScript(self, group.SCRIPT_GROUP_MEMBER);
if (!hasScript(self, dot.SCRIPT_PLAYER_DOT))
{
setState(self, STATE_BLEEDING, false);
setState(self, STATE_POISONED, false);
setState(self, STATE_DISEASED, false);
setState(self, STATE_ON_FIRE, false);
}
if (buff.hasBuff(self, "healOverTime"))
{
buff.removeBuff(self, "healOverTime");
}
chat.resetTempAnimationMood(self);
if (hasObjVar(self, cloninglib.VAR_BIND_FACILITY_TEMPLATE))
{
obj_id facilityId = getObjIdObjVar(self, cloninglib.VAR_BIND_FACILITY);
dictionary data = new dictionary();
data.put("requester", self);
messageTo(facilityId, "requestCloningData", data, 0, false);
}
if (hasObjVar(self, "coa3"))
{
removeObjVar(self, "coa3");
}
utils.validatePlayerHairStyle(self);
badge.grantThemeParkBadges(self);
if (hasSchematic(self, getObjectTemplateCrc("object/draft_schematic/weapon/razor_knuckler.iff")))
{
temp_schematic.revoke(self, "object/draft_schematic/weapon/razor_knuckler.iff");
}
if (bounty_hunter.hasMaxBountyMissionsOnTarget(self))
{
messageTo(self, "handleBountyMissionTimeout", null, 30.0f, true);
}
int totalMoney = getTotalMoney(self);
utils.setScriptVar(self, "profit", totalMoney);
String balanceThreshold = getConfigSetting("GameServer", "wealthLoggingThreshold");
if (balanceThreshold == null || balanceThreshold.equals(""))
{
balanceThreshold = "10000000";
}
if (utils.stringToInt(balanceThreshold) > -1)
{
if (totalMoney > utils.stringToInt(balanceThreshold))
{
CustomerServiceLog("Wealth", "Extraordinary Wealth: " + getName(self) + " (" + self + ") logged in with " + totalMoney + " credits");
}
}
utils.unequipAndNotifyUncerted(self);
utils.checkInventoryForSnowflakeItemSwaps(self);
if (hasObjVar(self, "item_reimbursement_list"))
{
String[] strReimbursementList = getStringArrayObjVar(self, "item_reimbursement_list");
removeObjVar(self, "item_reimbursement_list");
for (String s1 : strReimbursementList) {
obj_id objTest = createObjectInInventoryAllowOverload(s1, self);
if (isIdValid(objTest)) {
if (armor.isArmorComponent(objTest)) {
if (!isGameObjectTypeOf(objTest, GOT_armor_foot) && !isGameObjectTypeOf(objTest, GOT_armor_hand)) {
final String[] ARMOR_SET =
{
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_leggings.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_helmet.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_gloves.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_chest_plate.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_bracer_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_bracer_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_boots.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_bicep_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_bicep_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_imperial_s01_belt.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_leggings.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_helmet.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_gloves.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_chest_plate.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_bracer_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_bracer_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_boots.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_bicep_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_bicep_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_rebel_s01_belt.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_leggings.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_helmet.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_gloves.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_chest_plate.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_bracer_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_bracer_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_boots.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_bicep_r.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_bicep_l.iff",
"object/tangible/wearables/armor/clone_trooper/armor_clone_trooper_neutral_s01_belt.iff"
};
for (String s : ARMOR_SET) {
if (s1.equals(s)) {
armor.setArmorDataPercent(objTest, 2, 1, 0.94f, 0.95f);
break;
}
}
}
}
CustomerServiceLog("item_reimbursement", "Created item of type " + s1 + " and Id of " + objTest + " in the inventory of %TU", self);
} else {
CustomerServiceLog("item_reimbursement", "Failed to reimburse item of type " + s1 + " in the inventory of %TU", self);
}
}
}
int fatigue = getShockWound(self);
if (fatigue > 0)
{
setShockWound(self, 0);
}
obj_var_list buffList = getObjVarList(self, "clickItem");
if (buffList != null)
{
int count = buffList.getNumItems();
int curTime = getGameTime();
for (int i = 0; i < count; i++)
{
obj_var item = buffList.getObjVar(i);
int reuseTime = item.getIntData();
if (reuseTime < curTime)
{
String cooldownGroup = item.getName();
removeObjVar(self, "clickItem." + cooldownGroup);
}
}
}
if (!hasScript(self, "player.live_conversions"))
{
attachScript(self, "player.live_conversions");
}
if (!hasScript(self, "systems.skills.stealth.player_stealth"))
{
attachScript(self, "systems.skills.stealth.player_stealth");
}
skill_template.validateWorkingSkill(self);
skill.setPlayerStatsForLevel(self, getLevel(self));
LOG("base_player - OnInitialize", "calling armor.recalculateArmorForPlayer(self); with a 'self' of: " + self);
armor.recalculateArmorForPlayer(self);
obj_id objWeapon = getDefaultWeapon(self);
String strTemplate = getTemplateName(objWeapon);
if (isIdValid(objWeapon) && strTemplate.equals("object/weapon/melee/unarmed/unarmed_default_player.iff"))
{
if (!hasScript(objWeapon, "systems.combat.combat_weapon"))
{
attachScript(objWeapon, "systems.combat.combat_weapon");
messageTo(objWeapon, "weaponConversion", null, 2, false);
}
float fltWeaponSpeed = getWeaponAttackSpeed(objWeapon);
if (fltWeaponSpeed != 0.50f)
{
setWeaponAttackSpeed(objWeapon, 0.50f);
}
}
expertise.cacheExpertiseProcReacList(self);
proc.buildCurrentProcList(self);
proc.buildCurrentReacList(self);
givePublishGift(self);
sendSmugglerSystemBootstrap(self);
recomputeCommandSeries(self);
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
missions.initializeDailyOnLogin(self);
int lastDecayTime = getIntObjVar(self, "bounty.decayTime");
int currentTime = getCalendarTime();
if (lastDecayTime == 0)
{
setObjVar(self, "bounty.decayTime", currentTime);
}
else
{
int bounty = getIntObjVar(self, "bounty.amount");
if (currentTime - lastDecayTime > 604800)
{
setObjVar(self, "bounty.decayTime", currentTime);
if (bounty < 10000)
{
removeObjVar(self, "bounty.amount");
}
}
}
return SCRIPT_CONTINUE;
}
public int handleRetireWarning(obj_id self, dictionary params) throws InterruptedException
{
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
location loc = utils.getLocationScriptVar(self, "revokePilotSkillWarningLoc");
String wp_name = utils.getStringScriptVar(self, "revokePilotSkillWarningWpName");
if (loc == null)
{
return SCRIPT_CONTINUE;
}
obj_id wp = createWaypointInDatapad(self, loc);
setWaypointName(wp, wp_name);
setWaypointColor(wp, "blue");
setWaypointActive(wp, true);
}
return SCRIPT_CONTINUE;
}
public int OnPvpRankingChanged(obj_id self, int oldRank, int newRank) throws InterruptedException
{
String faction = "";
boolean isImperial = false;
if (factions.isImperial(self))
{
faction = "pvp_imperial_";
isImperial = true;
}
if (factions.isRebel(self))
{
faction = "pvp_rebel_";
}
if (faction.equals(""))
{
factions.removeAllPvpSkills(self);
CustomerServiceLog("pvp_rank_error", "Player %TU somehow changed PvP rank without being Rebel or Imperial, removing all PvP skills.", self);
return SCRIPT_CONTINUE;
}
if (oldRank <= 6 && newRank > 6)
{
skill.grantSkill(self, faction + PVP_SKILL_1);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_lieutenant");
}
else
{
badge.grantBadge(self, "pvp_rebel_lieutenant");
}
}
if (oldRank <= 7 && newRank > 7)
{
skill.grantSkill(self, faction + PVP_SKILL_2);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_captain");
}
else
{
badge.grantBadge(self, "pvp_rebel_captain");
}
}
if (oldRank <= 8 && newRank > 8)
{
skill.grantSkill(self, faction + PVP_SKILL_3);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_major");
}
else
{
badge.grantBadge(self, "pvp_rebel_major");
}
}
if (oldRank <= 9 && newRank > 9)
{
skill.grantSkill(self, faction + PVP_SKILL_4);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_lt_colonel");
}
else
{
badge.grantBadge(self, "pvp_rebel_commander");
}
}
if (oldRank <= 10 && newRank > 10)
{
skill.grantSkill(self, faction + PVP_SKILL_5);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_colonel");
}
else
{
badge.grantBadge(self, "pvp_rebel_colonel");
}
}
if (oldRank <= 11 && newRank > 11)
{
skill.grantSkill(self, faction + PVP_SKILL_6);
if (isImperial)
{
badge.grantBadge(self, "pvp_imperial_general");
}
else
{
badge.grantBadge(self, "pvp_rebel_general");
}
}
if (oldRank == 12 && newRank <= 11)
{
skill.revokeSkill(self, faction + PVP_SKILL_6);
if (newRank == 10)
{
skill.revokeSkill(self, faction + PVP_SKILL_5);
}
if (newRank == 9)
{
skill.revokeSkill(self, faction + PVP_SKILL_4);
skill.revokeSkill(self, faction + PVP_SKILL_5);
}
if (newRank == 8)
{
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
skill.revokeSkill(self, faction + PVP_SKILL_5);
}
if (newRank == 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
skill.revokeSkill(self, faction + PVP_SKILL_5);
}
if (newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
skill.revokeSkill(self, faction + PVP_SKILL_5);
}
}
if (oldRank == 11 && newRank <= 10)
{
skill.revokeSkill(self, faction + PVP_SKILL_5);
if (newRank == 9)
{
skill.revokeSkill(self, faction + PVP_SKILL_4);
}
if (newRank == 8)
{
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
}
if (newRank == 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
}
if (newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
skill.revokeSkill(self, faction + PVP_SKILL_4);
}
}
if (oldRank == 10 && newRank <= 9)
{
skill.revokeSkill(self, faction + PVP_SKILL_4);
if (newRank == 8)
{
skill.revokeSkill(self, faction + PVP_SKILL_3);
}
if (newRank == 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
}
if (newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
skill.revokeSkill(self, faction + PVP_SKILL_2);
skill.revokeSkill(self, faction + PVP_SKILL_3);
}
}
if (oldRank == 9 && newRank <= 8)
{
skill.revokeSkill(self, faction + PVP_SKILL_3);
if (newRank == 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_2);
}
if (newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
skill.revokeSkill(self, faction + PVP_SKILL_2);
}
}
if (oldRank == 8 && newRank <= 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_2);
if (newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
}
}
if (oldRank == 7 && newRank < 7)
{
skill.revokeSkill(self, faction + PVP_SKILL_1);
}
return SCRIPT_CONTINUE;
}
public int OnEnvironmentalDeath(obj_id self) throws InterruptedException
{
if (!hasObjVar(self, pclib.VAR_BEEN_COUPDEGRACED))
{
setObjVar(self, pclib.VAR_DEATHBLOW_KILLER, self);
setObjVar(self, pclib.VAR_DEATHBLOW_STAMP, getGameTime());
}
messageTo(self, pclib.HANDLER_PLAYER_DEATH, null, 0, false);
return SCRIPT_CONTINUE;
}
public int OnAboutToBeIncapacitated(obj_id self, obj_id killer) throws InterruptedException
{
if (performCriticalHeal(self))
{
return SCRIPT_OVERRIDE;
}
return SCRIPT_CONTINUE;
}
public int OnIncapacitated(obj_id self, obj_id killer) throws InterruptedException
{
utils.setScriptVar(self, "lastKiller", killer);
if (hasScript(killer, "ai.smuggler_spawn_enemy"))
{
int exceptionSmuggler = 0;
if (hasObjVar(self, "quest.owner"))
{
obj_id smuggler = (getObjIdObjVar(self, "quest.owner"));
if (self != smuggler)
{
exceptionSmuggler = 1;
}
}
if (exceptionSmuggler == 0)
{
groundquests.sendSignal(self, "smugglerEnemyIncap");
messageTo(killer, "smugglerKilled", null, 1.0f, false);
}
}
if (callable.hasAnyCallable(self))
{
obj_id objCallable = callable.getCallable(self, callable.CALLABLE_TYPE_RIDEABLE);
if (exists(objCallable) && isIdValid(objCallable))
{
callable.storeCallable(self, objCallable);
}
}
int vehicleBuff = buff.getBuffOnTargetFromGroup(self, "vehicle");
if (vehicleBuff != 0)
{
buff.removeBuff(self, vehicleBuff);
}
if (buff.hasBuff(self, "incapWeaken"))
{
pclib.killPlayer(self, killer, true);
return SCRIPT_CONTINUE;
}
else
{
buff.applyBuff(self, "incapWeaken");
}
int recapacitateTimer = 10;
float recapacitateModified = getEnhancedSkillStatisticModifierUncapped(self, "resistance_incapacitation");
if (recapacitateModified > 0)
{
recapacitateTimer -= recapacitateModified;
if (recapacitateTimer <= 2)
{
recapacitateTimer = 2;
}
sendSystemMessage(self, SID_INCAPACITATION_DURATION_REDUCED);
}
CustomerServiceLog("player_death", "Player %TU is incapacitated by %TT", self, killer);
if (!isIdValid(killer))
{
killer = self;
}
if (killer == self)
{
sendSystemMessage(self, SID_VICTIM_INCAPACITATED);
}
else
{
prose_package ppToVictim = prose.getPackage(PROSE_VICTIM_INCAP, killer);
sendSystemMessageProse(self, ppToVictim);
}
if (killer != self)
{
prose_package ppToKiller = prose.getPackage(PROSE_TARGET_INCAP, self);
sendSystemMessageProse(killer, ppToKiller);
}
utils.removeScriptVar(self, COUPE_DE_GRACE_TARGET);
utils.setScriptVar(self, "incap.timeStamp", (getGameTime() + recapacitateTimer));
setCount(self, recapacitateTimer);
setHealth(self, 0);
combat.doCombatDebuffs(self);
messageTo(self, "recapacitationDelay", null, recapacitateTimer, false);
clearAllAiEnemyFlags(self);
dot.removeAllDots(self);
if (stealth.hasInvisibleBuff(self))
{
stealth.checkForAndMakeVisible(self);
}
return SCRIPT_CONTINUE;
}
public void clearAllAiEnemyFlags(obj_id self) throws InterruptedException
{
obj_id allEnemies[] = pvpGetPersonalEnemyIds(self);
if (allEnemies == null)
{
return;
}
for (obj_id allEnemy : allEnemies) {
if (isIdValid(allEnemy) && allEnemy.isLoaded() && (!isPlayer(allEnemy))) {
pvpRemoveTempEnemyFlags(self, allEnemy);
pvpRemoveTempEnemyFlags(allEnemy, self);
}
}
}
public int recapacitationDelay(obj_id self, dictionary params) throws InterruptedException
{
if (getPosture(self) != POSTURE_INCAPACITATED)
{
return SCRIPT_CONTINUE;
}
if (!combat.clearCombatDebuffs(self))
{
messageTo(self, "recapacitationDelay", null, 1, false);
return SCRIPT_CONTINUE;
}
setHealth(self, 1);
return SCRIPT_CONTINUE;
}
public int requestMissionLocations(obj_id self, dictionary params) throws InterruptedException
{
obj_id groupObject = getGroupObject(self);
if ((isIdValid(groupObject)) && (params != null) && (params.containsKey("requestMissionLocationsNumber")))
{
obj_id[] missions = getMissionObjects(self);
Vector missionLocation = new Vector();
missionLocation.setSize(0);
if ((missions != null) && (missions.length > 0))
{
int missionIndex = 0;
for (missionIndex = 0; missionIndex < missions.length; ++missionIndex)
{
if (isIdValid(missions[missionIndex]))
{
if (getMissionStatus(missions[missionIndex]) > 0)
{
utils.addElement(missionLocation, getMissionStartLocation(missions[missionIndex]));
}
}
}
}
dictionary response = new dictionary();
response.put("requestMissionLocationsNumber", params.getInt("requestMissionLocationsNumber"));
response.put("sender", self);
response.put("senderLocation", getLocation(self));
if (missionLocation.size() > 0)
{
response.put("missionLocation", missionLocation);
}
messageTo(groupObject, "missionLocationResponse", response, 0, false);
}
group.destroyGroupWaypoint(self);
return SCRIPT_CONTINUE;
}
public int OnAddedToGroup(obj_id self, obj_id groupId) throws InterruptedException
{
if (!hasScript(self, group.SCRIPT_GROUP_MEMBER))
{
attachScript(self, group.SCRIPT_GROUP_MEMBER);
}
if (beast_lib.getBeastOnPlayer(self) != null)
{
obj_id beast = beast_lib.getBeastOnPlayer(self);
obj_id beastBCD = beast_lib.getBeastBCD(beast);
messageTo(beastBCD, "ownerGrouped", null, 1, false);
}
return SCRIPT_CONTINUE;
}
public int OnRemovedFromGroup(obj_id self, obj_id groupId) throws InterruptedException
{
if (utils.hasScriptVar(self, "currentHolo"))
{
performance.holographicCleanup(self);
}
squad_leader.clearRallyPoint(self);
detachScript(self, group.SCRIPT_GROUP_MEMBER);
return SCRIPT_CONTINUE;
}
public int OnGroupLeaderChanged(obj_id self, obj_id groupId, obj_id newLeader, obj_id oldLeader) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int OnGroupDisbanded(obj_id self, obj_id group) throws InterruptedException
{
squad_leader.clearRallyPoint(self);
return SCRIPT_CONTINUE;
}
public int OnObjectMenuRequest(obj_id self, obj_id player, menu_info mi) throws InterruptedException
{
removeObjVar(self, "noTrade");
menu_info_data mid = mi.getMenuItemByType(menu_info_types.COMBAT_DEATH_BLOW);
if (mid == null)
{
int myPosture = getPosture(self);
if (myPosture == POSTURE_INCAPACITATED)
{
if (pvpCanAttack(player, self))
{
mi.addRootMenu(menu_info_types.COMBAT_DEATH_BLOW, new string_id("", ""));
}
}
else if (myPosture == POSTURE_DEAD)
{
if ((group.inSameGroup(self, player) || pclib.hasConsent(player, self)))
{
if (hasCommand(player, "revivePlayer"))
{
int reviveRoot = mi.addRootMenu(menu_info_types.SERVER_MENU1, SID_REVIVE);
if (hasCommand(player, "resuscitatePlayer"))
{
mi.addSubMenu(reviveRoot, menu_info_types.SERVER_MENU9, SID_RESUSCITATE);
}
}
else if (hasCommand(player, "resuscitatePlayer"))
{
mi.addRootMenu(menu_info_types.SERVER_MENU9, SID_RESUSCITATE);
}
}
}
}
else
{
mid.setServerNotify(true);
}
{
obj_id listenTarget = getPerformanceListenTarget(player);
if (isIdValid(listenTarget) && group.inSameGroup(listenTarget, self))
{
mi.addRootMenu(menu_info_types.SERVER_PERFORMANCE_LISTEN_STOP, performance.SID_RADIAL_PERFORMANCE_LISTEN_STOP);
}
if (hasScript(self, performance.MUSIC_HEARTBEAT_SCRIPT) && (!isIdValid(listenTarget) || !group.inSameGroup(self, listenTarget)))
{
mi.addRootMenu(menu_info_types.SERVER_PERFORMANCE_LISTEN, performance.SID_RADIAL_PERFORMANCE_LISTEN);
}
obj_id watchTarget = getPerformanceWatchTarget(player);
if (watchTarget == self)
{
mi.addRootMenu(menu_info_types.SERVER_PERFORMANCE_WATCH_STOP, performance.SID_RADIAL_PERFORMANCE_WATCH_STOP);
}
else
{
if (hasScript(self, performance.DANCE_HEARTBEAT_SCRIPT))
{
mi.addRootMenu(menu_info_types.SERVER_PERFORMANCE_WATCH, performance.SID_RADIAL_PERFORMANCE_WATCH);
}
}
}
return SCRIPT_CONTINUE;
}
public int OnObjectMenuSelect(obj_id self, obj_id player, int item) throws InterruptedException
{
if (item == menu_info_types.COMBAT_DEATH_BLOW)
{
}
else if (item == menu_info_types.SERVER_MENU9)
{
queueCommand(player, (-1360827551), self, "", COMMAND_PRIORITY_DEFAULT);
}
else if (item == menu_info_types.SERVER_MENU1)
{
queueCommand(player, (-915040138), self, "", COMMAND_PRIORITY_DEFAULT);
}
else if (item == menu_info_types.SERVER_PERFORMANCE_LISTEN)
{
dictionary params = new dictionary();
params.put("target", self);
messageTo(player, "handleListenRadialCmd", params, 0, false);
sendDirtyObjectMenuNotification(self);
}
else if (item == menu_info_types.SERVER_PERFORMANCE_WATCH)
{
dictionary params = new dictionary();
params.put("target", self);
messageTo(player, "handleWatchRadialCmd", params, 0, false);
sendDirtyObjectMenuNotification(self);
}
else if (item == menu_info_types.SERVER_PERFORMANCE_LISTEN_STOP)
{
dictionary params = new dictionary();
messageTo(player, "handleListenRadialCmd", params, 0, false);
sendDirtyObjectMenuNotification(self);
}
else if (item == menu_info_types.SERVER_PERFORMANCE_WATCH_STOP)
{
dictionary params = new dictionary();
messageTo(player, "handleWatchRadialCmd", params, 0, false);
sendDirtyObjectMenuNotification(self);
}
return SCRIPT_CONTINUE;
}
public int OnMadeAuthoritative(obj_id self) throws InterruptedException
{
String flag = getConfigSetting("GameServer", "skipTutorial");
if (flag != null && (flag.equals("true") || flag.equals("1")))
{
setObjVar(self, "skipTutorial", 1);
}
return SCRIPT_CONTINUE;
}
public int OnLogin(obj_id self) throws InterruptedException
{
boolean ctsDisconnectRequested = false;
if (hasObjVar(self, "disableLoginCtsInProgress"))
{
int timeOut = getIntObjVar(self, "disableLoginCtsInProgress");
if (timeOut > getGameTime())
{
ctsDisconnectRequested = true;
messageTo(self, "disconnectPlayerCtsCompletedOrInProgress", null, 0.1f, false);
CustomerServiceLog("Login", "dropping character (" + self + ": " + getName(self) + ") because of CTS completed or in progress");
}
else
{
removeObjVar(self, "disableLoginCtsInProgress");
}
}
if (!ctsDisconnectRequested && hasObjVar(self, "disableLoginCtsCompleted") && !isUsingAdminLogin(self))
{
ctsDisconnectRequested = true;
messageTo(self, "disconnectPlayerCtsCompletedOrInProgress", null, 0.1f, false);
CustomerServiceLog("Login", "dropping character (" + self + ": " + getName(self) + ") because of CTS completed or in progress");
}
if (!utils.hasScriptVar(self, "galaxyMessage.showmessage"))
{
obj_id planetId = getPlanetByName("tatooine");
if (!isIdNull(planetId))
{
utils.setScriptVar(self, "galaxyMessage.showmessage", true);
if (hasObjVar(planetId, "galaxyMessage"))
{
String strGalaxyMessage = "\\#FF0000" + utils.getStringObjVar(planetId, "galaxyMessage") + "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
else
{
String strGalaxyMessage = "\\#FF0000" + "Welcome to Star Wars Galaxies" + "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
boolean warden = isWarden(self);
if (warden || (getGodLevel(self) >= 10))
{
String strGalaxyMessage = "\\#FF0000";
if (!warden)
{
strGalaxyMessage += "Displaying warden MOTD to you even though you are not a warden, because you are of the appropriate god level:\n";
}
if (hasObjVar(planetId, "galaxyWardenMessage"))
{
strGalaxyMessage += utils.getStringObjVar(planetId, "galaxyWardenMessage");
}
else
{
strGalaxyMessage += "Welcome warden";
}
strGalaxyMessage += "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
}
}
removeObjVar(self, "noTrade");
if (hasObjVar(self, "comingFromTutorial"))
{
removeObjVar(self, "comingFromTutorial");
attachScript(self, "theme_park.newbie_tutorial.new_player_ribbon");
}
if (!hasObjVar(self, "combatLevel") && hasObjVar(self, "clickRespec.combatLevel"))
{
setObjVar(self, "combatLevel", getIntObjVar(self, "clickRespec.combatLevel"));
removeObjVar(self, "clickRespec.combatLevel");
}
if (getConfigSetting("GameServer", "combatUpgradeReward") != null)
{
if (!hasScript(self, "cureward.cureward"))
{
attachScript(self, "cureward.cureward");
}
}
obj_id bldg = getTopMostContainer(self);
if (isIdValid(bldg))
{
dictionary parms = new dictionary();
parms.put("player", self);
messageTo(bldg, "handlePlayerLogin", parms, 0, false);
String bldgName = getTemplateName(bldg);
String setting = getConfigSetting("Dungeon", "Death_Watch");
if (bldgName.equals("object/building/general/bunker_allum_mine.iff"))
{
if (setting == null || setting.equals("false") || setting.equals("0"))
{
CustomerServiceLog("DUNGEON_DeathWatchBunker", "*Death Watch Unauthorized Entry: %TU entered the death watch bunker while it was turned off.", self);
}
}
if (hasObjVar(bldg, "player_structure.condemned"))
{
player_structure.doCondemnedSui(bldg, self);
expelFromBuilding(self);
}
}
chatEnterRoom("SWG.system");
chatEnterRoom("SWG." + getGalaxyName() + ".system");
chatEnterRoom("SWG." + getGalaxyName() + "." + getCurrentSceneName() + ".system");
float curScale = getScale(self);
int gender = getGender(self);
int intSpecies = getSpecies(self);
String species = utils.getPlayerSpeciesName(intSpecies);
float min = 1.0f;
float max = 1.0f;
if (gender == GENDER_MALE)
{
min = dataTableGetFloat("datatables/player/racial_scale.iff", species, "MALE_MIN");
max = dataTableGetFloat("datatables/player/racial_scale.iff", species, "MALE_MAX");
}
else
{
min = dataTableGetFloat("datatables/player/racial_scale.iff", species, "FEMALE_MIN");
max = dataTableGetFloat("datatables/player/racial_scale.iff", species, "FEMALE_MAX");
}
if (min > 0 && max > 0)
{
if (curScale < min)
{
setScale(self, min);
}
else if (curScale > max)
{
setScale(self, max);
}
}
if (getState(self, STATE_MASK_SCENT) == 1)
{
if (utils.hasScriptVar(self, "scentmask.camokit"))
{
String kitPlanet = utils.getStringScriptVar(self, "scentmask.camokit");
String planetName = getCurrentSceneName();
if (planetName.startsWith("kashyyyk"))
{
planetName = "kashyyyk";
}
if (!kitPlanet.equals(planetName))
{
messageTo(self, "removeScentMaskNoNotify", null, 0, false);
}
}
else
{
messageTo(self, "removeScentMaskNoNotify", null, 0, false);
}
}
if (hasSkill(self, "demo_combat"))
{
revokeSkill(self, "demo_combat");
}
boolean needsPrerequisites = true;
int attempts = 0;
while (needsPrerequisites && attempts < 100)
{
++attempts;
needsPrerequisites = false;
String[] skillList = getSkillListingForPlayer(self);
if (skillList != null)
{
int i = 0;
for (i = 0; i < skillList.length; ++i)
{
String[] prereqs = getSkillPrerequisiteSkills(skillList[i]);
if (prereqs != null)
{
int j = 0;
for (j = 0; j < prereqs.length; ++j)
{
if (!hasSkill(self, prereqs[j]))
{
grantSkill(self, prereqs[j]);
needsPrerequisites = true;
}
}
}
}
}
}
if (hasObjVar(self, player_structure.VAR_RESIDENCE_BUILDING))
{
setHouseId(self, getObjIdObjVar(self, player_structure.VAR_RESIDENCE_BUILDING));
removeObjVar(self, player_structure.VAR_RESIDENCE_BUILDING);
}
slicing.clearSlicing(self);
hq.ejectEnemyFactionOnLogin(self);
if (!isIdValid(getGroupObject(self)))
{
obj_id groupWaypoint = getObjIdObjVar(self, "groupWaypoint");
if (isIdValid(groupWaypoint))
{
destroyWaypointInDatapad(groupWaypoint, self);
removeObjVar(self, "groupWaypoint");
}
}
veteran_deprecated.updateVeteranTime(self);
if (hasObjVar(self, "renamePerformed"))
{
String old_name = getStringObjVar(self, "renamePerformed");
removeObjVar(self, "renamePerformed");
if (old_name != null)
{
if (force_rank.isForceRanked(self))
{
force_rank.renameRankMember(self, old_name);
}
}
}
meditation.endMeditation(self, false);
if (isIdValid(getGroupObject(self)) && (!hasScript(self, group.SCRIPT_GROUP_MEMBER)))
{
attachScript(self, group.SCRIPT_GROUP_MEMBER);
}
utils.removeScriptVar(self, COUPE_DE_GRACE_TARGET);
if (!isInTutorialArea(self))
{
space_dungeon.verifyPlayerSession(self);
space_dungeon.validateInstanceControllerId(self);
}
int campXp = getExperiencePoints(self, "camp");
if (campXp > 0)
{
grantExperiencePoints(self, "scout", campXp);
grantExperiencePoints(self, "camp", 0 - campXp);
}
if (!utils.hasScriptVar(self, "bountyConsistencyCheck"))
{
Vector playerBountyMissionTargetId = new Vector();
playerBountyMissionTargetId.setSize(0);
obj_id[] objMissions = getMissionObjects(self);
if (objMissions != null)
{
for (obj_id objMission : objMissions) {
String missionType = getMissionType(objMission);
if (missionType.equals("bounty")) {
if (hasObjVar(objMission, "objTarget")) {
playerBountyMissionTargetId = utils.addElement(playerBountyMissionTargetId, getObjIdObjVar(objMission, "objTarget"));
}
}
}
}
obj_id[] bounties = getBountyHunterBounties(self);
if (bounties == null)
{
bounties = new obj_id[0];
}
boolean foundMatch = false;
for (Object o1 : playerBountyMissionTargetId) {
foundMatch = false;
for (obj_id bounty : bounties) {
if (((obj_id) o1) == bounty) {
foundMatch = true;
break;
}
}
if (!foundMatch) {
CustomerServiceLog("bounty_inconsistency", self + " (" + getName(self) + ") has a bounty mission for " + ((obj_id) o1) + " (" + getPlayerName(((obj_id) o1)) + ") but doesn't have a corresponding bounty");
dictionary d = new dictionary();
d.put("target", ((obj_id) o1));
messageTo(self, "handleBountyMissionIncomplete", d, 10.0f, false);
}
}
for (obj_id bounty : bounties) {
foundMatch = false;
for (Object o : playerBountyMissionTargetId) {
if (((obj_id) o) == bounty) {
foundMatch = true;
break;
}
}
if (!foundMatch) {
CustomerServiceLog("bounty_inconsistency", self + " (" + getName(self) + ") has a bounty for " + bounty + " (" + getPlayerName(bounty) + ") but doesn't have a corresponding bounty misssion");
removeJediBounty(bounty, self);
}
}
utils.setScriptVar(self, "bountyConsistencyCheck", 1);
}
if (!utils.hasScriptVar(self, "shipShieldOneTimeRebalance"))
{
obj_id[] objPcds = space_transition.findShipControlDevicesForPlayer(self);
if (objPcds != null && objPcds.length > 0)
{
for (obj_id objPcd : objPcds) {
obj_id objShip = space_transition.getShipFromShipControlDevice(objPcd);
if (isIdValid(objShip)) {
space_combat.simpleShieldRatioRebalance(objShip);
}
}
}
utils.setScriptVar(self, "shipShieldOneTimeRebalance", 1);
}
armor.calculateWornArmor(self);
squad_leader.validateRallyPoint(self);
if (!utils.hasScriptVar(self, "waitingOnCloneRespawn"))
{
int posture = getPosture(self);
if (posture == POSTURE_DEAD)
{
if (!hasObjVar(self, pclib.VAR_BEEN_COUPDEGRACED))
{
setObjVar(self, pclib.VAR_DEATHBLOW_KILLER, self);
setObjVar(self, pclib.VAR_DEATHBLOW_STAMP, getGameTime());
}
messageTo(self, pclib.HANDLER_PLAYER_DEATH, null, 5, false);
}
else
{
if (hasObjVar(self, pclib.VAR_BEEN_COUPDEGRACED))
{
removeObjVar(self, pclib.VAR_BEEN_COUPDEGRACED);
}
}
}
else
{
messageTo(self, "handleCloneRespawn", null, 1.0f, false);
}
if (groundquests.hasCompletedQuest(self, "ep3_avatar_self_destruct"))
{
badge.grantBadge(self, "bdg_kash_avatar_zssik");
}
if (!utils.hasScriptVar(self, "performance.buildabuff.buffComponentKeys") && buff.hasBuff(self, "buildabuff_inspiration"))
{
buff.removeBuff(self, "buildabuff_inspiration");
}
if (getLocation(self).area == "dungeon1")
{
if (trial.getTop(self) == self)
{
warpPlayer(self, "tatooine", 0, 0, 0, null, 0, 0, 0, null, false);
}
}
if (utils.isProfession(self, utils.FORCE_SENSITIVE) && getLevel(self) > 3)
{
if (!buff.isInStance(self) && !buff.isInFocus(self))
{
messageTo(self, "applyJediStance", null, 1.0f, false);
}
}
if (utils.isProfession(self, utils.SMUGGLER))
{
messageTo(self, "applySmugglingBonuses", null, 1.0f, false);
}
int cityId = getCitizenOfCityId(self);
if (cityId > 0 && !utils.hasScriptVar(self, "recieved_city_motd"))
{
obj_id cityHall = cityGetCityHall(cityId);
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(cityHall, "msgCheckMyCityMotd", outparams, 0, false);
}
if(groundquests.hasCompletedQuest(self, "u16_nym_themepark_miner_dna_collection") && utils.playerHasStaticItemInBankOrInventory(self, "item_nym_themepark_dna_extractor")) {
obj_id dna_extractor = utils.getStaticItemInBankOrInventory(self, "item_nym_themepark_dna_extractor");
if(isValidId(dna_extractor)) utils.destroyObject(dna_extractor);
}
return SCRIPT_CONTINUE;
}
public int disconnectPlayerCtsCompletedOrInProgress(obj_id self, dictionary params) throws InterruptedException
{
setObjVar(self, "safeLogout", 1);
disconnectPlayer(self);
return SCRIPT_CONTINUE;
}
public int ctsCompletedForCharacter(obj_id self, dictionary params) throws InterruptedException
{
if (utils.hasScriptVar(self, cts.SCRIPTVAR_CTS_ITEM_ID))
{
final obj_id ctsItem = utils.getObjIdScriptVar(self, cts.SCRIPTVAR_CTS_ITEM_ID);
if (isIdValid(ctsItem))
{
CustomerServiceLog("CharacterTransfer", "destroying item " + ctsItem + " used for ingame CTS by character " + self);
destroyObject(ctsItem);
}
}
setObjVar(self, "disableLoginCtsCompleted", getCalendarTime());
messageTo(self, "disconnectPlayerCtsCompletedOrInProgress", null, 0.1f, false);
return SCRIPT_CONTINUE;
}
public int applyJediStance(obj_id self, dictionary params) throws InterruptedException
{
if (hasSkill(self, "expertise_fs_path_cautious_nature_1"))
{
buff.applyBuff(self, self, jedi.JEDI_STANCE);
}
else
{
buff.applyBuff(self, self, jedi.JEDI_FOCUS);
}
return SCRIPT_CONTINUE;
}
public int applySmugglingBonuses(obj_id self, dictionary params) throws InterruptedException
{
removeSmugglingBuffs(self);
messageTo(self, "addSmugglingBuffs", null, 1.0f, false);
return SCRIPT_CONTINUE;
}
public int addSmugglingBuffs(obj_id self, dictionary params) throws InterruptedException
{
int smUnderworld = (int)getSkillStatisticModifier(self, "expertise_underworld_boss_bonus");
int rangeBonus = (int)getSkillStatisticModifier(self, "expertise_sm_rank_range_buff");
int damageBonus = (int)getSkillStatisticModifier(self, "expertise_sm_rank_damage_buff");
float underworldFaction = factions.getFactionStanding(self, "underworld");
int smugglerTier = smuggler.getSmugglerRank(underworldFaction);
switch (smugglerTier)
{
case 1:
if (smUnderworld > 0)
{
buff.applyBuff(self, "sm_underworld_boss_1");
}
if (rangeBonus > 0)
{
buff.applyBuff(self, "sm_underworld_range_1");
}
if (damageBonus > 0)
{
buff.applyBuff(self, "sm_underworld_damage_1");
}
break;
case 2:
if (smUnderworld > 0)
{
buff.applyBuff(self, "sm_underworld_boss_2");
}
if (rangeBonus > 0)
{
buff.applyBuff(self, "sm_underworld_range_2");
}
if (damageBonus > 0)
{
buff.applyBuff(self, "sm_underworld_damage_2");
}
break;
case 3:
if (smUnderworld > 0)
{
buff.applyBuff(self, "sm_underworld_boss_3");
}
if (rangeBonus > 0)
{
buff.applyBuff(self, "sm_underworld_range_3");
}
if (damageBonus > 0)
{
buff.applyBuff(self, "sm_underworld_damage_3");
}
break;
default:
break;
}
messageTo(self, "recalcArmor", null, 1, false);
messageTo(self, "recalcWeaponRange", null, 1, false);
return SCRIPT_CONTINUE;
}
public int recalcWeaponRange(obj_id self, dictionary params) throws InterruptedException
{
obj_id tempWeapon = getObjectInSlot(self, "hold_r");
if (isIdValid(tempWeapon))
{
weapons.adjustWeaponRangeForExpertise(self, tempWeapon, true);
}
return SCRIPT_CONTINUE;
}
public void removeSmugglingBuffs(obj_id who) throws InterruptedException
{
buff.removeBuff(who, "sm_underworld_boss_1");
buff.removeBuff(who, "sm_underworld_boss_2");
buff.removeBuff(who, "sm_underworld_boss_3");
buff.removeBuff(who, "sm_underworld_range_1");
buff.removeBuff(who, "sm_underworld_range_2");
buff.removeBuff(who, "sm_underworld_range_3");
buff.removeBuff(who, "sm_underworld_damage_1");
buff.removeBuff(who, "sm_underworld_damage_2");
buff.removeBuff(who, "sm_underworld_damage_3");
messageTo(who, "recalcArmor", null, 1, false);
messageTo(who, "recalcWeaponRange", null, 1, false);
}
public int removeSmugglingBonuses(obj_id self, dictionary params) throws InterruptedException
{
removeSmugglingBuffs(self);
return SCRIPT_CONTINUE;
}
public int handlerRemoveGroupBuffEffect(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
int[] buffList = params.getIntArray("buffList");
if (buffList == null || buffList.length <= 0)
{
return SCRIPT_CONTINUE;
}
buff.removeGroupBuffEffect(self, buffList);
return SCRIPT_CONTINUE;
}
public int OnNewbieTutorialResponse(obj_id self, String action) throws InterruptedException
{
if (action.equals("clientReady"))
{
int playerState = getState(self, STATE_DISGUISE);
if (playerState > 0)
{
int shapechange = buff.getBuffOnTargetFromGroup(self, "shapechange");
if (shapechange == 0)
{
revertObjectAppearance(self);
}
}
location myLoc = getLocation(self);
if (hasTriggerVolume(self, "group_buff_breach"))
{
obj_id groupId = getGroupObject(self);
if (isIdValid(groupId))
{
obj_id[] groupMembers = getGroupMemberIds(groupId);
if (groupMembers != null && groupMembers.length > 0)
{
int[] buffList = buff.getOwnedGroupBuffs(self);
dictionary dict = new dictionary();
dict.put("buffList", buffList);
for (obj_id groupMember : groupMembers) {
location playerLoc = getLocation(groupMember);
if (playerLoc == null) {
messageTo(groupMember, "handlerRemoveGroupBuffEffect", dict, 1, false);
continue;
}
if (!myLoc.area.equals(playerLoc.area)) {
messageTo(groupMember, "handlerRemoveGroupBuffEffect", dict, 1, false);
continue;
}
float distance = getDistance(myLoc, playerLoc);
if (distance > 110.0f) {
messageTo(groupMember, "handlerRemoveGroupBuffEffect", dict, 1, false);
continue;
}
}
}
}
}
int[] allBuffs = buff.getAllBuffs(self);
if (allBuffs != null && allBuffs.length > 0)
{
for (int allBuff : allBuffs) {
if (buff.isAuraBuff(allBuff)) {
obj_id caster = buff.getBuffCaster(self, allBuff);
if (!isIdValid(caster) || !exists(caster)) {
buff.removeBuff(self, allBuff);
continue;
}
location casterLoc = getLocation(caster);
if (!myLoc.area.equals(casterLoc.area)) {
buff.removeBuff(self, allBuff);
continue;
}
float distance = getDistance(myLoc, casterLoc);
if (distance > 110.0f) {
buff.removeBuff(self, allBuff);
continue;
}
}
}
}
String halloweenRunning = getConfigSetting("GameServer", "halloween");
if (halloweenRunning == null)
{
if (hasObjVar(self, event_perk.COUNTER_TIMESTAMP))
{
removeObjVar(self, event_perk.COUNTER_TIMESTAMP);
}
if (hasObjVar(self, event_perk.COUNTER))
{
removeObjVar(self, event_perk.COUNTER);
}
if (hasObjVar(self, event_perk.COUNTER_RESTARTTIME))
{
removeObjVar(self, event_perk.COUNTER_RESTARTTIME);
}
}
String lifedayRunning = getConfigSetting("GameServer", "lifeday");
if (lifedayRunning == null)
{
if (hasObjVar(self, "lifeday"))
{
removeObjVar(self, "lifeday");
}
}
if (lifedayRunning != null)
{
if (lifeDayNewDay(self))
{
if (hasObjVar(self, "lifeday"))
{
removeObjVar(self, "lifeday");
}
if (buff.hasBuff(self, "event_lifeday_imperial_competitive"))
{
buff.removeBuff(self, "event_lifeday_imperial_competitive");
}
if (buff.hasBuff(self, "event_lifeday_rebel_competitive"))
{
buff.removeBuff(self, "event_lifeday_rebel_competitive");
}
if (buff.hasBuff(self, "event_lifeday_imperial_present_counter"))
{
buff.removeBuff(self, "event_lifeday_imperial_present_counter");
}
if (buff.hasBuff(self, "event_lifeday_rebel_tree_counter"))
{
buff.removeBuff(self, "event_lifeday_rebel_tree_counter");
}
}
}
if (hasScript(self, "systems.respec.click_combat_respec"))
{
detachScript(self, "systems.respec.click_combat_respec");
}
String skillTemplate = getSkillTemplate(self);
String workingSkill = getWorkingSkill(self);
if (skillTemplate == null || skillTemplate.equals("") || skillTemplate.equals("a"))
{
int combatLevel = respec.getOldCombatLevel(self);
obj_id respecDevice = utils.getStaticItemInBankOrInventory(self, "item_respec_token_01_01");
if (hasObjVar(self, "combatLevel"))
{
combatLevel = getIntObjVar(self, "combatLevel");
}
else
{
if (isIdValid(respecDevice))
{
combatLevel = getIntObjVar(respecDevice, "combatLevel");
}
}
if (combatLevel > 80)
{
combatLevel = 80;
}
setObjVar(self, "combatLevel", combatLevel);
setObjVar(self, "clickRespec.combatLevel", combatLevel);
setObjVar(self, "clickRespec.npeRespec", 1);
if (!isIdValid(respecDevice))
{
respecDevice = static_item.createNewItemFunction("item_respec_token_01_01", self);
if (isIdValid(respecDevice))
{
setObjVar(respecDevice, "combatLevel", combatLevel);
setObjVar(respecDevice, "highestLevel", true);
}
}
attachScript(self, "systems.respec.click_combat_respec");
messageTo(self, "delayRespecInstructions", null, 1, false);
}
if (hasObjVar(self, "npe.skippingTutorial"))
{
location origin = getLocation(self);
location fighting = new location(3521.0f, 0.0f, -4821.0f, origin.area);
location crafty = new location(3309.0f, 6.0f, -4785.0f, origin.area);
String profession = getSkillTemplate(self);
obj_id objInv = utils.getInventoryContainer(self);
String questNewbieStart = "quest/speeder_quest";
String questNewbieStartBH = "quest/speeder_quest";
String questCrafterEntertainer = "quest/tatooine_eisley_noncombat";
int crafter = profession.indexOf("trader");
int entertainer = profession.indexOf("entertainer");
int bountyhunter = profession.indexOf("bounty_hunter");
if (crafter > -1 || entertainer > -1)
{
if (!groundquests.isQuestActiveOrComplete(self, questCrafterEntertainer))
{
groundquests.grantQuest(self, questCrafterEntertainer);
}
}
else if (bountyhunter > -1)
{
if (groundquests.hasCompletedQuest(self, questNewbieStartBH) || groundquests.isQuestActive(self, questNewbieStartBH))
{
detachScript(self, "npe.handoff_to_tatooine");
}
else
{
groundquests.requestGrantQuest(self, questNewbieStartBH);
}
}
else
{
if (groundquests.hasCompletedQuest(self, questNewbieStart) || groundquests.isQuestActive(self, questNewbieStart))
{
detachScript(self, "npe.handoff_to_tatooine");
}
else
{
groundquests.requestGrantQuest(self, questNewbieStart);
}
}
if (crafter > -1)
{
messageTo(self, "handleSurveyToolbarSetup", null, 5, false);
}
static_item.createNewItemFunction("item_npe_uniform_crate_01_01", objInv);
npe.giveProfessionWeapon(self);
removeObjVar(self, "npe.skippingTutorial");
int combatLevel = getLevel(self);
if (combatLevel < 5)
{
respec.autoLevelPlayer(self, 5, false);
}
}
}
return SCRIPT_CONTINUE;
}
public int OnCSCreateItem(obj_id self, obj_id container, String staticItemName) throws InterruptedException
{
gmlib.generateStaticItem(container, staticItemName);
return SCRIPT_CONTINUE;
}
public int delayRespecInstructions(obj_id self, dictionary params) throws InterruptedException
{
int pid = createSUIPage(sui.SUI_MSGBOX, self, self, "noHandler");
setSUIProperty(pid, "this", "Size", "475,575");
setSUIProperty(pid, "this", "Location", "100,100");
setSUIProperty(pid, sui.MSGBOX_TITLE, sui.PROP_TEXT, "@click_respec:respec_title");
setSUIProperty(pid, sui.MSGBOX_PROMPT, sui.PROP_TEXT, "@click_respec:respec_message");
sui.msgboxButtonSetup(pid, sui.OK_ONLY);
showSUIPage(pid);
flushSUIPage(pid);
return SCRIPT_CONTINUE;
}
public int OnRemovingFromWorld(obj_id self) throws InterruptedException
{
removeObjVar(self, "conversation");
return SCRIPT_CONTINUE;
}
public int handleLoginLocResolved(obj_id self, dictionary params) throws InterruptedException
{
CustomerServiceLog("LOGIN_LOC", "(" + self + ":" + getPlayerObject(self) + ") " + getName(self) + ": warp callback entered @ loc=" + (getLocation(self)).toString() + " world_loc=" + (getWorldLocation(self)).toString());
String prompt = "Due to a system error involving invalid login coordinates, an attempt has been made to warp you to a local starport.";
prompt += " We apologize for the inconvenience.";
sui.msgbox(self, prompt);
return SCRIPT_CONTINUE;
}
public int handleStatProfileSUI(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, "screwedStats.opt"))
{
return SCRIPT_CONTINUE;
}
String[] opt = utils.getStringArrayScriptVar(self, "screwedStats.opt");
utils.removeScriptVar(self, "screwedStats.opt");
int idx = sui.getListboxSelectedRow(params);
if (idx == -1 || idx == 0)
{
sendSystemMessageTestingOnly(self, "You will be asked the previous question on each log-in until the problem is rectified.");
return SCRIPT_CONTINUE;
}
if (opt == null || opt.length == 0)
{
return SCRIPT_CONTINUE;
}
if (idx < 1 || idx >= opt.length)
{
return SCRIPT_CONTINUE;
}
dictionary racial_mods = null;
String template = utils.getTemplateFilenameNoPath(self);
if (template != null && !template.equals(""))
{
if (template.endsWith(".iff"))
{
template = template.substring(0, template.length() - 4);
}
String racial_tbl = "datatables/creation/racial_mods.iff";
int templateRow = 0;
if (getGender(self) == GENDER_MALE)
{
templateRow = dataTableSearchColumnForString(template, 0, racial_tbl);
}
else
{
templateRow = dataTableSearchColumnForString(template, 1, racial_tbl);
}
racial_mods = dataTableGetRow(racial_tbl, templateRow);
}
if (racial_mods == null || racial_mods.isEmpty())
{
return SCRIPT_CONTINUE;
}
String profile = opt[idx];
if (profile == null || profile.equals("") || profile.equals("none"))
{
return SCRIPT_CONTINUE;
}
dictionary prof_mods = dataTableGetRow("datatables/creation/profession_mods.iff", profile);
for (int x = 0; x < NUM_ATTRIBUTES; x++)
{
String aname = "";
switch (x)
{
case 0:
aname = "health";
break;
case 1:
aname = "constitution";
break;
case 2:
aname = "action";
break;
case 3:
aname = "stamina";
break;
case 4:
aname = "mind";
break;
case 5:
aname = "willpower";
break;
}
int newval = racial_mods.getInt(aname) + prof_mods.getInt(aname);
setMaxAttrib(self, x, newval);
}
healing.fullHeal(self);
String prompt = " We apologize for any inconveniences this may cause.";
sui.msgbox(self, prompt);
return SCRIPT_CONTINUE;
}
public int OnLogout(obj_id self) throws InterruptedException
{
if (hasObjVar(self, pclib.VAR_CONSENT_FROM_ID))
{
pclib.relinquishConsents(self);
}
(self.getScriptVars()).remove(veteran_deprecated.SCRIPTVAR_VETERAN_LOGGED_IN);
obj_id objBuilding = getTopMostContainer(self);
if (isIdValid(objBuilding) && objBuilding != self)
{
if (hasScript(objBuilding, "planet_map.active_registered"))
{
dictionary dctParams = new dictionary();
dctParams.put("objItem", self);
messageTo(objBuilding, "removeRegistrant", dctParams, 0, false);
}
location buildingEjectionPoint = getBuildingEjectLocation(objBuilding);
if (buildingEjectionPoint != null)
{
setObjVar(self, "building_ejection_point", buildingEjectionPoint);
}
}
else
{
removeObjVar(self, "building_ejection_point");
}
if (utils.hasScriptVar(self, "battlefield.queue"))
{
String battlefieldName = utils.getStringScriptVar(self, "battlefield.queue");
obj_id controller = null;
if (battlefieldName != null || battlefieldName.length() > 0)
{
controller = utils.getObjIdScriptVar(self, "battlefield." + battlefieldName);
}
if (isIdValid(controller))
{
dictionary params = new dictionary();
params.put("player", self);
if (factions.isRebel(self))
{
params.put("faction", factions.FACTION_FLAG_REBEL);
}
else if (factions.isImperial(self))
{
params.put("faction", factions.FACTION_FLAG_IMPERIAL);
}
messageTo(controller, "removePlayerFromQueue", params, 1.0f, false);
}
}
return SCRIPT_CONTINUE;
}
public int OnUnloadedFromMemory(obj_id self) throws InterruptedException
{
chatExitRoom("SWG.system");
chatExitRoom("SWG." + getGalaxyName() + ".system");
chatExitRoom("SWG." + getGalaxyName() + "." + getCurrentSceneName() + ".system");
return SCRIPT_CONTINUE;
}
public int OnImmediateLogout(obj_id self) throws InterruptedException
{
(self.getScriptVars()).remove(veteran_deprecated.SCRIPTVAR_VETERAN_LOGGED_IN);
if (utils.hasScriptVar(self, "profit"))
{
int startMoney = utils.getIntScriptVar(self, "profit");
int endMoney = getTotalMoney(self);
utils.removeScriptVar(self, "profit");
String profitThreshold = getConfigSetting("GameServer", "profitLoggingThreshold");
if (profitThreshold == null || profitThreshold.equals(""))
{
profitThreshold = "500000";
}
if (utils.stringToInt(profitThreshold) > -1)
{
if ((endMoney - startMoney) > utils.stringToInt(profitThreshold))
{
CustomerServiceLog("Wealth", "Extraordinary Profit: " + getName(self) + " (" + self + ") logged in with " + startMoney + " credits and logged out with " + endMoney + " credits, for a profit of " + (endMoney - startMoney) + " credits");
}
}
}
if (guild.hasWindowPid(self))
{
guild.removeWindowPid(self);
}
int vehicleBuff = buff.getBuffOnTargetFromGroup(self, "vehicle");
if (vehicleBuff != 0)
{
buff.removeBuff(self, vehicleBuff);
}
if (callable.hasAnyCallable(self))
{
callable.storeCallables(self);
}
removeObjVar(self, "surveying.sampleLocation");
if (hasObjVar(self, "safeLogout"))
{
if (getIntObjVar(self, "safeLogout") == 1)
{
return SCRIPT_CONTINUE;
}
}
obj_id building = getTopMostContainer(self);
if (isIdValid(building))
{
if (hasObjVar(building, "safeLogout") && getIntObjVar(building, "safeLogout") == 1)
{
return SCRIPT_CONTINUE;
}
if (hasScript(building, force_rank.SCRIPT_ENCLAVE_CONTROLLER))
{
if (!force_rank.isPlayersEnclave(building, self))
{
expelFromBuilding(self);
}
}
}
return SCRIPT_OVERRIDE;
}
public int OnAboutToReceiveItem(obj_id self, obj_id srcContainer, obj_id transferer, obj_id item) throws InterruptedException
{
int got = getGameObjectType(item);
if (isGameObjectTypeOf(got, GOT_misc_container_wearable))
{
obj_id belt = getObjectInSlot(self, "utility_belt");
if (isIdValid(belt) && isGameObjectTypeOf(belt, GOT_misc_container_wearable))
{
obj_id inv = utils.getInventoryContainer(self);
putInOverloaded(belt, inv);
}
}
return SCRIPT_CONTINUE;
}
public int OnReceivedItem(obj_id self, obj_id srcContainer, obj_id transferer, obj_id item) throws InterruptedException
{
int got = getGameObjectType(item);
if (isGameObjectTypeOf(got, GOT_armor) && !isGameObjectTypeOf(got, GOT_armor_psg))
{
armor.calculateWornArmor(self);
}
return SCRIPT_CONTINUE;
}
public int OnLostItem(obj_id self, obj_id destContainer, obj_id transferer, obj_id item) throws InterruptedException
{
int got = getGameObjectType(item);
if (isGameObjectTypeOf(got, GOT_armor) && !isGameObjectTypeOf(got, GOT_armor_psg))
{
armor.calculateWornArmor(self);
}
if (isGameObjectTypeOf(got, GOT_weapon))
{
combat.cacheCombatData(self);
}
return SCRIPT_CONTINUE;
}
public int OnTransferred(obj_id self, obj_id src, obj_id dest, obj_id transferer) throws InterruptedException
{
if ((pet_lib.isMount(src)) || (pet_lib.isMount(dest)) || (vehicle.isVehicle(src)) || (vehicle.isVehicle(dest)))
{
movement.refresh(self);
}
return SCRIPT_CONTINUE;
}
public int handleEjection(obj_id self, dictionary params) throws InterruptedException
{
obj_id sender = null;
if (params == null || params.isEmpty())
{
sender = getTopMostContainer(self);
}
else
{
sender = params.getObjId("sender");
}
if (!isIdValid(sender))
{
return SCRIPT_CONTINUE;
}
location there = getBuildingEjectLocation(sender);
if (there == null)
{
return SCRIPT_CONTINUE;
}
pclib.sendToAnyLocation(self, there, null);
return SCRIPT_CONTINUE;
}
public int cmdEject(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
dictionary outparams = new dictionary();
outparams.put("loc", getLocation(self));
messageTo(self, "handleDelayedEjection", outparams, 10.0f, false);
sendSystemMessage(self, SID_SYS_EJECT_REQUEST);
return SCRIPT_CONTINUE;
}
public int handleDelayedEjection(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
if (getLocation(self).area == "tutorial")
{
return SCRIPT_CONTINUE;
}
location loc = params.getLocation("loc");
location curloc = getLocation(self);
if (getDistance(loc, curloc) > 1.0f)
{
sendSystemMessage(self, SID_SYS_EJECT_FAIL_MOVE);
return SCRIPT_CONTINUE;
}
obj_id instanceController = instance.getAreaInstanceController(self);
if (isIdValid(instanceController))
{
String instanceName = instance.getInstanceName(instanceController);
instance.requestExitPlayer(instanceName, self);
return SCRIPT_CONTINUE;
}
{
obj_id dungeon_id = space_dungeon.getDungeonIdForPlayer(self);
if (isValidId(dungeon_id) && exists(dungeon_id))
{
return SCRIPT_CONTINUE;
}
}
obj_id container = getTopMostContainer(self);
obj_id building = null;
if (isIdValid(container))
{
if (isGameObjectTypeOf(container, GOT_building) && hasScript(container, "structure.permanent_structure"))
{
ejectPlayerFromBuilding(self, container);
}
return SCRIPT_CONTINUE;
}
obj_id[] near = getNonCreaturesInRange(getWorldLocation(self), 128.0f);
location here = getWorldLocation(self);
obj_id closest = null;
float maxdist = 9999.0f;
for (obj_id obj_id : near) {
if (isGameObjectTypeOf(obj_id, GOT_building) || isGameObjectTypeOf(obj_id, GOT_installation)) {
float dist = getDistance(here, getWorldLocation(obj_id));
if (dist < maxdist) {
maxdist = dist;
closest = obj_id;
}
}
}
if (isIdValid(closest))
{
if (isGameObjectTypeOf(closest, GOT_building))
{
ejectPlayerFromBuilding(self, closest);
}
else if (isGameObjectTypeOf(closest, GOT_installation))
{
float yaw = getYaw(closest);
location there = getWorldLocation(closest);
location loc1 = utils.rotatePointXZ(there, 8.0f, yaw + 90.0f);
location loc2 = utils.rotatePointXZ(there, 8.0f, yaw - 90.0f);
float d1 = getDistance(here, loc1);
float d2 = getDistance(here, loc2);
if (d1 < d2)
{
pclib.sendToAnyLocation(self, loc1, null);
}
else
{
pclib.sendToAnyLocation(self, loc2, null);
}
sendSystemMessage(self, SID_SYS_EJECT_SUCCESS);
}
}
else
{
sendSystemMessage(self, SID_SYS_EJECT_FAIL_PROXIMITY);
}
return SCRIPT_CONTINUE;
}
public void ejectPlayerFromBuilding(obj_id player, obj_id building) throws InterruptedException
{
location there = getBuildingEjectLocation(building);
if (there == null)
{
return;
}
pclib.sendToAnyLocation(player, there, null);
sendSystemMessage(player, SID_SYS_EJECT_SUCCESS);
}
public int handleWatchRadialCmd(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
if (isIdValid(target))
{
performance.watch(self, target);
}
else
{
performance.stopWatch(self);
}
return SCRIPT_CONTINUE;
}
public int handleListenRadialCmd(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
if (isIdValid(target))
{
performance.listen(self, target);
}
else
{
performance.stopListen(self);
}
return SCRIPT_CONTINUE;
}
public int handleSkillPurchase(obj_id self, dictionary params) throws InterruptedException
{
String boxTitle = params.getString(sui.LISTBOX_TITLE + "." + sui.PROP_TEXT);
String skillName = boxTitle.substring(boxTitle.indexOf(":") + 1);
if (!skill.purchaseSkill(self, skillName))
{
}
return SCRIPT_CONTINUE;
}
public int handleRequestCoinLoot(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
obj_id corpseId = params.getObjId(corpse.DICT_CORPSE_ID);
if (!isIdValid(corpseId))
{
return SCRIPT_CONTINUE;
}
int cash = params.getInt(corpse.DICT_COINS);
int safeCash = group.getSafeDifference(self, cash);
if (safeCash < cash)
{
cash = safeCash;
params.put(corpse.DICT_COINS, cash);
}
if (cash > 0)
{
if (transferBankCreditsFromNamedAccount(money.ACCT_NPC_LOOT, self, cash, null, null, null))
{
utils.moneyInMetric(corpseId, money.ACCT_NPC_LOOT, cash);
withdrawCashFromBank(self, cash, corpse.HANDLER_COINS_LOOTED, corpse.HANDLER_COINLOOT_FAILED, params);
}
}
return SCRIPT_CONTINUE;
}
public int handleUnconsentMenu(obj_id self, dictionary params) throws InterruptedException
{
int btnPressed = sui.getIntButtonPressed(params);
switch (btnPressed)
{
case sui.BP_CANCEL:
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, pclib.VAR_CONSENT_TO_ID))
{
obj_id[] consentTo = getObjIdArrayObjVar(self, pclib.VAR_CONSENT_TO_ID);
if ((consentTo == null) || (consentTo.length == 0))
{
}
else
{
obj_id target = consentTo[idx];
queueCommand(self, (-1562441686), null, getPlayerFullName(target), COMMAND_PRIORITY_DEFAULT);
return SCRIPT_CONTINUE;
}
}
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_CONTINUE;
}
public int handleConsentToLogout(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_OVERRIDE;
}
obj_id consented = params.getObjId(corpse.DICT_PLAYER_ID);
obj_id[] corpses = getObjIdArrayObjVar(self, pclib.VAR_CORPSE_ID);
if (corpses != null)
{
corpse.revokeCorpseConsent(corpses, consented);
}
Vector consentToList = getResizeableObjIdArrayObjVar(self, pclib.VAR_CONSENT_TO_ID);
if (consentToList != null)
{
consentToList = utils.removeElement(consentToList, consented);
if ((consentToList == null) || (consentToList.size() == 0))
{
removeObjVar(self, pclib.VAR_CONSENT_TO_ID);
return SCRIPT_CONTINUE;
}
setObjVar(self, pclib.VAR_CONSENT_TO_ID, consentToList);
}
return SCRIPT_CONTINUE;
}
public int handleReceivedConsent(obj_id self, dictionary params) throws InterruptedException
{
obj_id consenter = params.getObjId(pclib.DICT_CONSENTER_ID);
Vector consentFrom = getResizeableObjIdArrayObjVar(self, pclib.VAR_CONSENT_FROM_ID);
if (consentFrom == null)
{
Vector newConsentFrom = new Vector();
newConsentFrom.setSize(0);
consentFrom = newConsentFrom;
}
else
{
if (utils.getElementPositionInArray(consentFrom, consenter) > -1)
{
return SCRIPT_CONTINUE;
}
}
consentFrom = utils.addElement(consentFrom, consenter);
setObjVar(self, pclib.VAR_CONSENT_FROM_ID, consentFrom);
prose_package pp = prose.getPackage(PROSE_GOT_CONSENT, getPlayerFullName(consenter));
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int handleReceivedUnconsent(obj_id self, dictionary params) throws InterruptedException
{
obj_id consenter = params.getObjId(pclib.DICT_CONSENTER_ID);
Vector consentFrom = getResizeableObjIdArrayObjVar(self, pclib.VAR_CONSENT_FROM_ID);
if (consentFrom != null)
{
int idx = utils.getElementPositionInArray(consentFrom, consenter);
if (idx > -1)
{
consentFrom = utils.removeElementAt(consentFrom, idx);
if ((consentFrom == null) || (consentFrom.size() == 0))
{
removeObjVar(self, pclib.VAR_CONSENT_FROM_BASE);
}
else
{
setObjVar(self, pclib.VAR_CONSENT_FROM_ID, consentFrom);
}
prose_package pp = prose.getPackage(PROSE_LOST_CONSENT, getPlayerFullName(consenter));
sendSystemMessageProse(self, pp);
}
}
return SCRIPT_CONTINUE;
}
public int handleCorpseCoinLoot(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
obj_id corpseId = params.getObjId(corpse.DICT_CORPSE_ID);
int cash = params.getInt(corpse.DICT_COINS);
if (isIdValid(corpseId))
{
obj_id nullId = null;
queueCommand(self, (-1939113026), null, Integer.toString(cash), COMMAND_PRIORITY_DEFAULT);
obj_id gid = getGroupObject(self);
if (isIdValid(gid))
{
group.notifyCoinLoot(gid, self, corpseId, cash);
}
else
{
prose_package pp = prose.getPackage(PROSE_COIN_LOOT_NO_TARGET, null, nullId, cash);
sendSystemMessageProse(self, pp);
}
CustomerServiceLog("Loot", "(" + self + ") " + getName(self) + " looted " + cash + " credits from (" + corpseId + ") " + getName(corpseId));
obj_id cInv = utils.getInventoryContainer(corpseId);
if (isIdValid(cInv))
{
obj_id[] corpseContents = corpse.getValidLootContents(getContents(cInv));
if (corpseContents == null || corpseContents.length <= 0)
{
messageTo(corpseId, "handleCorpseExpire", null, 2, true);
return SCRIPT_CONTINUE;
}
else
{
return SCRIPT_CONTINUE;
}
}
messageTo(corpseId, "handleCorpseExpire", null, 2, true);
}
return SCRIPT_CONTINUE;
}
public int handleCorpseCoinLootFailed(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
obj_id corpseId = params.getObjId(corpse.DICT_CORPSE_ID);
int cash = params.getInt(corpse.DICT_COINS);
prose_package pp = prose.getPackage(PROSE_COIN_LOOT_FAILED, null, corpseId, cash);
sendSystemMessageProse(self, pp);
int got = getGameObjectType(corpseId);
if (got == GOT_corpse)
{
CustomerServiceLog("Death", "(" + self + ") " + getName(self) + " FAILED to loot " + cash + " credits from (" + corpseId + ") " + getName(corpseId));
}
else
{
CustomerServiceLog("Loot", "(" + self + ") " + getName(self) + " FAILED to loot " + cash + " credits from (" + corpseId + ") " + getName(corpseId));
}
return SCRIPT_CONTINUE;
}
public int handleCorpseExpire(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_OVERRIDE;
}
obj_id corpseId = params.getObjId(corpse.DICT_CORPSE_ID);
if (isIdValid(corpseId))
{
obj_id[] corpses = getObjIdArrayObjVar(self, pclib.VAR_CORPSE_ID);
if (utils.getElementPositionInArray(corpses, corpseId) > -1)
{
sendSystemMessage(self, SID_CORPSE_EXPIRED);
}
}
return SCRIPT_CONTINUE;
}
public int handleCorpseWaypointUpdate(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_OVERRIDE;
}
obj_id waypoint = params.getObjId(corpse.DICT_CORPSE_WAYPOINT);
location loc = params.getLocation(corpse.DICT_CORPSE_LOC);
setWaypointLocation(waypoint, loc);
return SCRIPT_CONTINUE;
}
public int handleCorpseCleanup(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_OVERRIDE;
}
obj_id corpseId = params.getObjId(corpse.DICT_CORPSE_ID);
obj_id waypoint = params.getObjId(corpse.DICT_CORPSE_WAYPOINT);
destroyWaypointInDatapad(waypoint, self);
Vector corpses = utils.getResizeableObjIdBatchObjVar(self, pclib.VAR_CORPSE_ID);
Vector killers = utils.getResizeableObjIdBatchObjVar(self, pclib.VAR_CORPSE_KILLER);
Vector stamps = utils.getResizeableIntBatchObjVar(self, pclib.VAR_CORPSE_STAMP);
if ((corpses == null) || (killers == null))
{
return SCRIPT_OVERRIDE;
}
int idx = utils.getElementPositionInArray(corpses, corpseId);
if (idx > -1)
{
corpses = utils.removeElementAt(corpses, idx);
killers = utils.removeElementAt(killers, idx);
stamps = utils.removeElementAt(stamps, idx);
if ((corpses == null) || (corpses.size() == 0))
{
removeObjVar(self, pclib.VAR_CORPSE_BASE);
}
else
{
utils.setResizeableBatchObjVar(self, pclib.VAR_CORPSE_ID, corpses);
utils.setResizeableBatchObjVar(self, pclib.VAR_CORPSE_KILLER, killers);
utils.setResizeableBatchObjVar(self, pclib.VAR_CORPSE_STAMP, stamps);
}
}
else
{
}
return SCRIPT_CONTINUE;
}
public int handleIncapCounterDeath(obj_id self, dictionary params) throws InterruptedException
{
int posture = getPosture(self);
obj_id objKiller = params.getObjId("objKiller");
if (posture == POSTURE_INCAPACITATED && !hasObjVar(self, pclib.VAR_BEEN_COUPDEGRACED))
{
pclib.coupDeGrace(self, objKiller, false);
}
return SCRIPT_CONTINUE;
}
public int reportJediDeathCount(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int handleJediDeathCount(obj_id self, dictionary params) throws InterruptedException
{
if (isJedi(self))
{
int jediDeaths = getIntObjVar(self, jedi.VAR_JEDI_DEATHS);
string_id msg = new string_id("jedi_spam", "jedi_death");
prose_package proseMsg = prose.getPackage(msg, jediDeaths);
sendSystemMessageProse(self, proseMsg);
}
return SCRIPT_CONTINUE;
}
public int decayJediDeath(obj_id self, dictionary params) throws InterruptedException
{
int jediDeaths = getIntObjVar(self, jedi.VAR_JEDI_DEATHS);
jediDeaths--;
if (jediDeaths < 0)
{
jediDeaths = 0;
}
setObjVar(self, jedi.VAR_JEDI_DEATHS, jediDeaths);
if (isGod(self))
{
string_id msg = new string_id("jedi_spam", "jedi_death_decay");
prose_package proseMsg = prose.getPackage(msg, jediDeaths);
sendSystemMessageProse(self, proseMsg);
}
return SCRIPT_CONTINUE;
}
public int handleHealOverTimeTick(obj_id self, dictionary params) throws InterruptedException
{
float duration = params.getFloat("duration");
float tick = params.getFloat("tick");
int heal = params.getInt("heal");
int hot_id = params.getInt("id");
int isCombat = params.getInt("combat");
obj_id medic = params.getObjId("medic");
if (isDead(self))
{
if (buff.hasBuff(self, "healOverTime"))
{
buff.removeBuff(self, "healOverTime");
}
return SCRIPT_CONTINUE;
}
if (!utils.hasScriptVar(self, healing.VAR_PLAYER_HOT_ID))
{
if (buff.hasBuff(self, "healOverTime"))
{
buff.removeBuff(self, "healOverTime");
}
return SCRIPT_CONTINUE;
}
int player_id = utils.getIntScriptVar(self, healing.VAR_PLAYER_HOT_ID);
if (hot_id != player_id)
{
return SCRIPT_CONTINUE;
}
if (!isIncapacitated(self))
{
int delta = healing.healDamage(medic, self, HEALTH, heal);
if (isCombat == 1 && isIdValid(medic))
{
prose_package pp = new prose_package();
pp = prose.setStringId(pp, new string_id("healing", "heal_fly"));
pp = prose.setDI(pp, delta);
pp = prose.setTO(pp, ATTRIBUTES[HEALTH]);
showFlyTextPrivateProseWithFlags(self, self, pp, 2.0f, colors.SEAGREEN, FLY_TEXT_FLAG_IS_HEAL);
if (medic != self)
{
showFlyTextPrivateProseWithFlags(self, medic, pp, 2.0f, colors.SEAGREEN, FLY_TEXT_FLAG_IS_HEAL);
}
pp = prose.setStringId(pp, healing.SID_PERFORM_HEAL_DAMAGE_SUCCESS);
pp = prose.setTT(pp, medic);
pp = prose.setTO(pp, self);
pp = prose.setDI(pp, delta);
healing.sendMedicalSpam(medic, self, pp, true, true, true, COMBAT_RESULT_MEDICAL);
delta = (int)(delta * healing.HEAL_OVER_TIME_AGGRO_REDUCER);
healing._addMedicalHate(medic, self, delta);
}
}
duration -= tick;
if (duration <= 0.0f)
{
if (buff.hasBuff(self, "healOverTime"))
{
buff.removeBuff(self, "healOverTime");
}
return SCRIPT_CONTINUE;
}
dictionary d = new dictionary();
d.put("duration", duration);
d.put("tick", tick);
d.put("heal", heal);
d.put("id", hot_id);
d.put("combat", isCombat);
d.put("medic", medic);
if (tick >= 0)
{
messageTo(self, healing.MSG_HEAL_OVER_TIME, d, tick, false);
}
return SCRIPT_CONTINUE;
}
public int handlePlayerDeath(obj_id self, dictionary params) throws InterruptedException
{
groundquests.sendSignal(self, "smugglerEnemyIncap");
if (utils.hasScriptVar(self, pclib.VAR_SUI_CLONE))
{
int oldpid = utils.getIntScriptVar(self, pclib.VAR_SUI_CLONE);
forceCloseSUIPage(oldpid);
utils.removeScriptVar(self, pclib.VAR_SUI_CLONE);
}
if (!isDead(self))
{
return SCRIPT_CONTINUE;
}
pvpRemoveAllTempEnemyFlags(self);
clearBuffIcon(self, "food");
if (isPvpRelatedDeath(self))
{
utils.setScriptVar(self, "buffDecay", 1);
buff.decayAllBuffsFromPvpDeath(self);
}
else
{
buff.removeAllBuffs(self, true);
}
if (!hasObjVar(self, pclib.VAR_BEEN_COUPDEGRACED))
{
return SCRIPT_CONTINUE;
}
Vector options = new Vector();
options.setSize(0);
Vector cloneLocs = new Vector();
cloneLocs.setSize(0);
Vector spawnLocs = new Vector();
spawnLocs.setSize(0);
Vector damage = new Vector();
damage.setSize(0);
boolean isNewbieDeath = false;
location deathLoc = pclib.getEffectiveDeathLocation(self);
String planetName = deathLoc.area;
obj_id planet = getPlanetByName(planetName);
location worldLoc = getWorldLocation(self);
String areaName = getBuildoutAreaName(worldLoc.x, worldLoc.z);
obj_id bound = getObjIdObjVar(self, cloninglib.VAR_BIND_FACILITY);
boolean isBindListed = false;
obj_id controller = utils.getObjIdScriptVar(self, "battlefield.active");
if (isIdValid(controller) && exists(controller))
{
location cloneLoc = null;
String cloneName = "Clone Center";
String battlefieldName = utils.getStringObjVar(controller, "battlefieldName");
if (factions.isRebel(self))
{
cloneLoc = utils.getLocationScriptVar(controller, "battlefieldRebelSpawn");
cloneName = "Rebel Cloning Center - " + localize(new string_id("spam", battlefieldName));
}
else if (factions.isImperial(self))
{
cloneLoc = utils.getLocationScriptVar(controller, "battlefieldImperialSpawn");
cloneName = "Imperial Cloning Center - " + localize(new string_id("spam", battlefieldName));
}
options = utils.addElement(options, cloneName);
cloneLocs = utils.addElement(cloneLocs, cloneLoc);
spawnLocs = utils.addElement(spawnLocs, cloneLoc);
}
else
{
if (cloninglib.canUseBindFacility(planetName, areaName))
{
String bindName = "@base_player:clone_location_registered_select_begin ";
if (hasObjVar(self, cloninglib.VAR_BIND_BASE))
{
String cloneName = getStringObjVar(self, cloninglib.VAR_BIND_CITY_NAME);
location bindLoc = getLocationObjVar(self, cloninglib.VAR_BIND_LOCATION);
location spawnLoc = getLocationObjVar(self, cloninglib.VAR_BIND_SPAWN_LOC);
if (bindLoc != null)
{
if (isIdValid(bound))
{
if (city.isCityBanned(self, bound))
{
bindName += " @base_player:clone_location_city_banned";
bindLoc = null;
spawnLoc = null;
}
else
{
bindName += cloneName;
}
}
else
{
bindName += "@base_player:clone_location_unknown";
bindLoc = null;
spawnLoc = null;
}
}
else
{
bindName += "@base_player:clone_location_none";
bindLoc = null;
spawnLoc = null;
}
bindName += " @base_player:clone_location_registered_select_end";
options = utils.addElement(options, bindName);
cloneLocs = utils.addElement(cloneLocs, bindLoc);
spawnLocs = utils.addElement(spawnLocs, spawnLoc);
if (pvp.isPvpDeath(self) || isNewbieDeath)
{
damage = utils.addElement(damage, 0);
}
else
{
damage = utils.addElement(damage, cloninglib.CLONE_DAMAGE_LOW);
}
isBindListed = true;
}
}
if (isIdValid(planet))
{
if (utils.hasScriptVar(planet, cloninglib.VAR_PLANET_CLONE_LOC))
{
Vector cloneList = cloninglib.getAvailableCloningFacilities(self);
int playerFaction = factions.getFactionFlag(self);
obj_id tatooinePlanet = getPlanetByName("tatooine");
for (Object o : cloneList) {
dictionary cloneData = (dictionary) o;
obj_id facility = cloneData.getObjId("faciltyId");
String cloneName = cloneData.getString("cloneName");
location cloneLoc = cloneData.getLocation("facilityLoc");
location spawnLoc = cloneData.getLocation("spawnLoc");
if (facility == bound && !isBindListed) {
cloneName = "@base_player:clone_location_registered_select_begin " + getStringObjVar(self, cloninglib.VAR_BIND_CITY_NAME) + " @base_player:clone_location_registered_select_end";
isBindListed = true;
}
if (cloneName.equals("@naboo_region_names:theed") && cloneLoc.z > 4100) {
cloneName += "_north";
}
if (playerFaction == factions.FACTION_FLAG_IMPERIAL || playerFaction == factions.FACTION_FLAG_REBEL) {
if (cloneName.equals("@tatooine_region_names:bestine") && utils.hasScriptVar(tatooinePlanet, "gcw.invasionRunning.bestine")) {
int factionDefending = utils.getIntScriptVar(tatooinePlanet, "gcw.factionDefending.bestine");
if ((factionDefending == factions.FACTION_FLAG_IMPERIAL || factionDefending == factions.FACTION_FLAG_REBEL) && playerFaction != factionDefending) {
continue;
}
}
if (cloneName.equals("@talus_region_names:dearic") && utils.hasScriptVar(tatooinePlanet, "gcw.invasionRunning.dearic")) {
int factionDefending = utils.getIntScriptVar(tatooinePlanet, "gcw.factionDefending.dearic");
if ((factionDefending == factions.FACTION_FLAG_IMPERIAL || factionDefending == factions.FACTION_FLAG_REBEL) && playerFaction != factionDefending) {
continue;
}
}
if (cloneName.equals("@naboo_region_names:keren") && utils.hasScriptVar(tatooinePlanet, "gcw.invasionRunning.keren")) {
int factionDefending = utils.getIntScriptVar(tatooinePlanet, "gcw.factionDefending.keren");
if ((factionDefending == factions.FACTION_FLAG_IMPERIAL || factionDefending == factions.FACTION_FLAG_REBEL) && playerFaction != factionDefending) {
continue;
}
}
}
options = utils.addElement(options, cloneName);
cloneLocs = utils.addElement(cloneLocs, cloneLoc);
spawnLocs = utils.addElement(spawnLocs, spawnLoc);
}
}
}
}
if (options == null || options.size() < 1)
{
}
int suiClone = createCloningSui(self, options);
if (suiClone == -1)
{
debugServerConsoleMsg(self, "PLAYER DEATH ERROR: unable to create sui for player = " + self);
debugServerConsoleMsg(self, "* reviving player at cuttent location...");
return SCRIPT_CONTINUE;
}
utils.setScriptVar(self, pclib.VAR_SUI_CLONE, suiClone);
utils.setScriptVar(self, pclib.VAR_REVIVE_OPTIONS, options);
utils.setScriptVar(self, pclib.VAR_REVIVE_CLONE, cloneLocs);
utils.setScriptVar(self, pclib.VAR_REVIVE_SPAWN, spawnLocs);
dictionary hrem = new dictionary();
hrem.put("time", healing.REVIVE_TIMER);
hrem.put("sui", suiClone);
utils.setScriptVar(self, combat.DIED_RECENTLY, true);
messageTo(self, "clearRecentDeathScriptVar", null, combat.RECENT_DEATH_EXPIRATION, false);
messageTo(self, "handleReviveExpirationMessage", hrem, 0.0f, false);
return SCRIPT_CONTINUE;
}
public int createCloningSui(obj_id player, Vector list) throws InterruptedException
{
String title = MSG_REVIVE_TITLE;
String prompt = buildCloningPrompt(player, -1);
int pid = createSUIPage(sui.SUI_LISTBOX, player, player, HANDLER_PLAYER_REVIVE);
setSUIProperty(pid, sui.LISTBOX_TITLE, sui.PROP_TEXT, title);
setSUIProperty(pid, sui.LISTBOX_PROMPT, sui.PROP_TEXT, prompt);
sui.listboxButtonSetup(pid, sui.OK_ONLY);
clearSUIDataSource(pid, sui.LISTBOX_DATASOURCE);
for (int i = 0; i < list.size(); i++)
{
addSUIDataItem(pid, sui.LISTBOX_DATASOURCE, "" + i);
setSUIProperty(pid, sui.LISTBOX_DATASOURCE + "." + i, sui.PROP_TEXT, ((String)list.get(i)));
}
subscribeToSUIEvent(pid, sui_event_type.SET_onGenericSelection, sui.LISTBOX_LIST, "handleCloneSuiUpdate");
subscribeToSUIPropertyForEvent(pid, sui_event_type.SET_onGenericSelection, sui.LISTBOX_LIST, sui.LISTBOX_LIST, sui.PROP_SELECTEDROW);
subscribeToSUIProperty(pid, sui.LISTBOX_LIST, sui.PROP_SELECTEDROW);
subscribeToSUIProperty(pid, sui.LISTBOX_TITLE, sui.PROP_TEXT);
showSUIPage(pid);
flushSUIPage(pid);
return pid;
}
public int handleCloneSuiUpdate(obj_id self, dictionary params) throws InterruptedException
{
if ((params == null) || (params.isEmpty()))
{
return SCRIPT_CONTINUE;
}
int pid = utils.getIntScriptVar(self, pclib.VAR_SUI_CLONE);
int idx = sui.getListboxSelectedRow(params);
String prompt = buildCloningPrompt(self, idx);
setSUIProperty(pid, sui.LISTBOX_PROMPT, sui.PROP_TEXT, prompt);
flushSUIPage(pid);
return SCRIPT_CONTINUE;
}
public String buildCloningPrompt(obj_id player, int index) throws InterruptedException
{
String[] options = utils.getStringArrayScriptVar(player, pclib.VAR_REVIVE_OPTIONS);
location[] cloneLocs = utils.getLocationArrayScriptVar(player, pclib.VAR_REVIVE_CLONE);
String prompt = "@base_player:clone_prompt_header ";
if (index > -1)
{
prompt += "\n\n @base_player:clone_prompt_data ";
prompt += "\n @base_player:clone_prompt_location " + options[index];
prompt += "\n @base_player:clone_prompt_distance " + distanceToString(getDistance(player, cloneLocs[index]));
}
return prompt;
}
public String distanceToString(float dist) throws InterruptedException
{
String text;
if (dist < 0)
{
text = "@base_player:clone_location_unknown";
}
else if (dist < 1000)
{
text = "" + (int)dist + "m";
}
else
{
text = "" + (int)(dist / 1000.0f) + "km";
}
return text;
}
public int handleCloningDataUpdate(obj_id self, dictionary params) throws InterruptedException
{
obj_id facilityId = params.getObjId("faciltyId");
location facilityLoc = params.getLocation("facilityLoc");
location spawnLoc = params.getLocation("spawnLoc");
String cloneName = params.getString("cloneName");
setObjVar(self, cloninglib.VAR_BIND_FACILITY, facilityId);
setObjVar(self, cloninglib.VAR_BIND_LOCATION, facilityLoc);
setObjVar(self, cloninglib.VAR_BIND_SPAWN_LOC, spawnLoc);
setObjVar(self, cloninglib.VAR_BIND_CITY_NAME, cloneName);
removeObjVar(self, cloninglib.VAR_BIND_FACILITY_TEMPLATE);
removeObjVar(self, cloninglib.VAR_BIND_FACILITY_CELL);
return SCRIPT_CONTINUE;
}
public int clearRecentDeathScriptVar(obj_id self, dictionary params) throws InterruptedException
{
if (utils.hasScriptVar(self, combat.DIED_RECENTLY))
{
utils.removeScriptVar(self, combat.DIED_RECENTLY);
}
return SCRIPT_CONTINUE;
}
public int handleReviveExpirationMessage(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, pclib.VAR_SUI_CLONE))
{
return SCRIPT_CONTINUE;
}
int remaining_time = params.getInt("time");
int sui_id = params.getInt("sui");
int next_msg_time = 600;
int sui_var = utils.getIntScriptVar(self, pclib.VAR_SUI_CLONE);
if (sui_id != sui_var)
{
return SCRIPT_CONTINUE;
}
prose_package pp = new prose_package();
pp = prose.setStringId(pp, new string_id("base_player", "revive_exp_msg"));
if (remaining_time <= 0)
{
sendSystemMessage(self, new string_id("base_player", "revive_expired"));
forceCloseSUIPage(sui_id);
if (space_dungeon.isCloningInstance(self))
{
space_dungeon.handleInstanceClone(self);
return SCRIPT_CONTINUE;
}
location[] cloneLocs = utils.getLocationArrayScriptVar(self, pclib.VAR_REVIVE_CLONE);
location[] spawnLocs = utils.getLocationArrayScriptVar(self, pclib.VAR_REVIVE_SPAWN);
location clone = cloneLocs[0];
location spawn = spawnLocs[0];
if (!pclib.playerRevive(self, clone, spawn, 0))
{
messageTo(self, pclib.HANDLER_CLONE_RESPAWN, null, 1, true);
}
return SCRIPT_CONTINUE;
}
else if (remaining_time <= 60)
{
pp = prose.setStringId(pp, new string_id("base_player", "revive_exp_msg_last"));
next_msg_time = remaining_time;
}
else if (remaining_time <= 300)
{
next_msg_time = 120;
}
else if (remaining_time <= 600)
{
next_msg_time = 300;
}
pp = prose.setTT(pp, player_structure.assembleTimeRemaining(player_structure.convertSecondsTime(remaining_time)));
sendSystemMessageProse(self, pp);
remaining_time -= next_msg_time;
dictionary d = new dictionary();
d.put("time", remaining_time);
d.put("sui", sui_id);
messageTo(self, "handleReviveExpirationMessage", d, next_msg_time, false);
return SCRIPT_CONTINUE;
}
public int handleInstanceClonePause(obj_id self, dictionary params) throws InterruptedException
{
String prompt = "@" + SID_INSTANCE_REVIVE;
String title = "@" + SID_INSTANCE_REVIVE_TITLE;
int pid = sui.msgbox(self, self, prompt, sui.OK_ONLY, title, "handleInstanceCloneSelection");
showSUIPage(pid);
utils.setScriptVar(self, pclib.VAR_SUI_CLONE, pid);
dictionary hrem = new dictionary();
hrem.put("time", healing.REVIVE_TIMER);
hrem.put("sui", pid);
messageTo(self, "handleReviveExpirationMessage", hrem, 0.0f, false);
return SCRIPT_CONTINUE;
}
public int handleInstanceCloneSelection(obj_id self, dictionary params) throws InterruptedException
{
int posture = getPosture(self);
if (posture != POSTURE_DEAD)
{
return SCRIPT_CONTINUE;
}
space_dungeon.handleInstanceClone(self);
return SCRIPT_CONTINUE;
}
public int showReviveSUI(obj_id self, dictionary params) throws InterruptedException
{
if (utils.hasScriptVar(self, "reviveSUI.pid"))
{
int oldpid = utils.getIntScriptVar(self, "reviveSUI.pid");
sui.closeSUI(self, oldpid);
utils.removeScriptVar(self, "reviveSUI.pid");
}
obj_id medic = params.getObjId("medic");
int weak = params.getInt("weak");
string_id reviveSUITitleSID = new string_id("spam", "revive_sui_title");
prose_package ppPrompt = new prose_package();
ppPrompt = prose.setStringId(ppPrompt, new string_id("spam", "revive_sui_prompt"));
ppPrompt = prose.setTT(ppPrompt, medic);
if (weak == 0)
{
reviveSUITitleSID = new string_id("spam", "revive_sui_title_weak");
ppPrompt = prose.setStringId(ppPrompt, new string_id("spam", "revive_sui_prompt_weak"));
}
String title = "@" + reviveSUITitleSID;
utils.setScriptVar(self, "reviveSUI.medic", medic);
utils.setScriptVar(self, "reviveSUI.weak", weak);
int pid = sui.msgbox(self, self, ppPrompt, sui.YES_NO, title, "handleReviveSUI");
utils.setScriptVar(self, "reviveSUI.pid", pid);
showSUIPage(pid);
params.put("pid", pid);
messageTo(self, "handleReviveSUITimeout", params, 120, false);
return SCRIPT_CONTINUE;
}
public int handleReviveSUITimeout(obj_id self, dictionary params) throws InterruptedException
{
int pidThisMessageRefersToo = params.getInt("pid");
if (utils.hasScriptVar(self, "reviveSUI.pid"))
{
int storedPid = utils.getIntScriptVar(self, "reviveSUI.pid");
if (storedPid == pidThisMessageRefersToo)
{
sui.closeSUI(self, storedPid);
utils.removeScriptVar(self, "reviveSUI.pid");
}
}
return SCRIPT_CONTINUE;
}
public int handleReviveSUI(obj_id self, dictionary params) throws InterruptedException
{
int bp = sui.getIntButtonPressed(params);
obj_id medic = utils.getObjIdScriptVar(self, "reviveSUI.medic");
int weak = utils.getIntScriptVar(self, "reviveSUI.weak");
if (bp == sui.BP_OK)
{
pclib.clearEffectsForDeath(self);
int maxHealth = getWoundedMaxAttrib(self, HEALTH);
int maxAction = getWoundedMaxAttrib(self, ACTION);
int actionVal = weak * (maxAction / 2);
int toHeal = (maxHealth / 3) + 1;
if (weak == 0)
{
toHeal = (maxHealth / 10) + 1;
}
setAttrib(self, HEALTH, toHeal);
setAttrib(self, ACTION, actionVal);
setAttrib(self, MIND, 0);
utils.removeScriptVar(self, "reviveSUI.weak");
utils.removeScriptVar(self, "reviveSUI.pid");
messageTo(self, "handlePlayerResuscitated", null, 0, true);
}
else
{
prose_package pp = new prose_package();
pp = prose.setStringId(pp, new string_id("spam", "revive_attempt_denied"));
pp = prose.setTO(pp, self);
sendSystemMessageProse(medic, pp);
utils.removeScriptVar(self, "reviveSUI.weak");
utils.removeScriptVar(self, "reviveSUI.medic");
utils.removeScriptVar(self, "reviveSUI.pid");
}
return SCRIPT_CONTINUE;
}
public int handlePlayerRevive(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, pclib.VAR_SUI_CLONE))
{
return SCRIPT_CONTINUE;
}
utils.removeScriptVar(self, pclib.VAR_SUI_CLONE);
location clone = null;
location spawn = null;
int damage = cloninglib.CLONE_DAMAGE_HIGH;
int idx = -1;
int delayedClone = 0;
if (params != null)
{
idx = sui.getListboxSelectedRow(params);
if (idx > -1)
{
location[] cloneLocs = utils.getLocationArrayScriptVar(self, pclib.VAR_REVIVE_CLONE);
location[] spawnLocs = utils.getLocationArrayScriptVar(self, pclib.VAR_REVIVE_SPAWN);
clone = cloneLocs[idx];
spawn = spawnLocs[idx];
location deathLoc = getLocation(self);
region[] respawnRegions = getRegionsWithPvPAtPoint(deathLoc, regions.PVP_REGION_TYPE_ADVANCED);
if ((respawnRegions != null && respawnRegions.length > 0) || utils.hasScriptVar(self, "battlefield.active"))
{
delayedClone = 15;
utils.setScriptVar(self, "no_cloning_sickness", 1);
}
}
else
{
sendSystemMessage(self, SID_CLONE_FAIL_SELECTION);
}
}
if (clone != null && clone.compareTo(new location()) != 0 && spawn != null && spawn.compareTo(new location()) != 0)
{
if (delayedClone > 0)
{
int gameTime = getGameTime();
int timeRemaining = delayedClone - (gameTime % delayedClone);
int pid = sui.countdownTimerSUI(self, self, "waitingToClone", new string_id("gcw", "static_base_waiting_to_clone"), (delayedClone - timeRemaining), delayedClone, "handleDelayedCloneCancel");
if (pid > -1)
{
dictionary d = new dictionary();
d.put("clone", clone);
d.put("spawn", spawn);
d.put("damage", damage);
d.put("id", pid);
messageTo(self, "handleDelayedClone", d, timeRemaining, true);
utils.setScriptVar(self, "waiting_to_clone", pid);
return SCRIPT_CONTINUE;
}
}
else if (pclib.playerRevive(self, clone, spawn, 0))
{
return SCRIPT_CONTINUE;
}
}
messageTo(self, pclib.HANDLER_PLAYER_DEATH, null, 0, false);
return SCRIPT_CONTINUE;
}
public int handleDelayedClone(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, "waiting_to_clone"))
{
return SCRIPT_CONTINUE;
}
int pid = utils.getIntScriptVar(self, "waiting_to_clone");
int id = params.getInt("id");
if (pid != id)
{
return SCRIPT_CONTINUE;
}
forceCloseSUIPage(pid);
location clone = params.getLocation("clone");
location spawn = params.getLocation("spawn");
int damage = params.getInt("damage");
if (clone != null && clone.compareTo(new location()) != 0 && spawn != null && spawn.compareTo(new location()) != 0)
{
pclib.playerRevive(self, clone, spawn, damage);
}
return SCRIPT_CONTINUE;
}
public int handleDelayedCloneCancel(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, "waiting_to_clone"))
{
return SCRIPT_CONTINUE;
}
utils.removeScriptVar(self, "waiting_to_clone");
messageTo(self, pclib.HANDLER_PLAYER_DEATH, null, 0.0f, true);
return SCRIPT_CONTINUE;
}
public int handleCloneRespawn(obj_id self, dictionary params) throws InterruptedException
{
utils.removeScriptVar(self, pclib.VAR_SUI_CLONE);
utils.removeScriptVar(self, pclib.VAR_REVIVE_OPTIONS);
utils.removeScriptVar(self, pclib.VAR_REVIVE_CLONE);
utils.removeScriptVar(self, pclib.VAR_REVIVE_SPAWN);
utils.removeScriptVar(self, "waitingOnCloneRespawn");
removeObjVar(self, pclib.VAR_BEEN_COUPDEGRACED);
pvpRemoveAllTempEnemyFlags(self);
int intGuildId = getGuildId(self);
if (intGuildId != 0)
{
int[] enemies_A_to_B = guildGetEnemies(intGuildId);
if (enemies_A_to_B != null && enemies_A_to_B.length > 0)
{
int[] enemies_B_to_A = getGuildsAtWarWith(intGuildId);
if (enemies_B_to_A != null && enemies_B_to_A.length > 0)
{
for (int i1 : enemies_A_to_B) {
if (guild.findIntTableOffset(enemies_B_to_A, i1) != -1) {
pvpSetGuildWarCoolDownPeriodEnemyFlag(self);
break;
}
}
}
}
}
pclib.checkCovertRespawn(self);
pclib.clearEffectsForDeath(self);
utils.removeScriptVar(self, "jedi.rankedDeath");
if (hasObjVar(self, "fullHealClone"))
{
removeObjVar(self, "fullHealClone");
healing.healClone(self, false);
}
else
{
healing.healClone(self, true);
}
setPosture(self, POSTURE_UPRIGHT);
utils.removeScriptVar(self, "pvp_death");
queueCommand(self, (-1465754503), self, "", COMMAND_PRIORITY_IMMEDIATE);
playClientEffectObj(self, "clienteffect/player_clone_compile.cef", self, null);
if (!utils.hasScriptVar(self, "no_cloning_sickness") && !instance.isInInstanceArea(self))
{
buff.applyBuff(self, "cloning_sickness");
}
else if (utils.hasScriptVar(self, "no_cloning_sickness"))
{
utils.removeScriptVar(self, "no_cloning_sickness");
}
if (0 == pvpGetAlignedFaction(self))
{
int currentMercenaryFaction = pvpNeutralGetMercenaryFaction(self);
if ((0 != currentMercenaryFaction) && pvpNeutralIsMercenaryDeclared(self))
{
pvpNeutralSetMercenaryFaction(self, currentMercenaryFaction, false);
}
}
CustomerServiceLog("Death", "(" + self + ") " + getName(self) + " has clone respawned at " + (getLocation(self)).toString());
return SCRIPT_CONTINUE;
}
public int handlePlayerResuscitated(obj_id self, dictionary params) throws InterruptedException
{
int suiClone = utils.getIntScriptVar(self, pclib.VAR_SUI_CLONE);
LOG("resuscitate", "self = " + self + ": clone sui = " + suiClone);
if (suiClone > -1)
{
LOG("resuscitate", "attempting to force closure of clone sui: sui #" + suiClone);
forceCloseSUIPage(suiClone);
}
utils.removeScriptVar(self, pclib.VAR_SUI_CLONE);
utils.removeScriptVar(self, pclib.VAR_REVIVE_OPTIONS);
pvpRemoveAllTempEnemyFlags(self);
removeObjVar(self, pclib.VAR_BEEN_COUPDEGRACED);
obj_id medic = utils.getObjIdScriptVar(self, "reviveSUI.medic");
utils.removeScriptVar(self, "reviveSUI.medic");
if (isIdValid(medic))
{
prose_package pp = new prose_package();
pp = prose.setStringId(pp, healing.SID_PERFORM_REVIVE_SUCCESS);
pp = prose.setTT(pp, medic);
pp = prose.setTO(pp, self);
sendSystemMessageProse(medic, pp);
sendSystemMessageProse(self, pp);
}
else
{
sendSystemMessage(self, new string_id("healing", "perform_revive_success_self_only"));
}
if (hasObjVar(self, "outbreak.usedGate"))
{
buff.applyBuff(self, "death_troopers_no_vehicle");
}
setPosture(self, POSTURE_UPRIGHT);
utils.removeScriptVar(self, "pvp_death");
CustomerServiceLog("Death", "(" + self + ") " + getName(self) + " has been resuscitated at " + (getLocation(self)).toString());
return SCRIPT_CONTINUE;
}
public int handleReviveStand(obj_id self, dictionary params) throws InterruptedException
{
setPosture(self, POSTURE_UPRIGHT);
return SCRIPT_CONTINUE;
}
public int handleInstanceRessurect(obj_id self, dictionary params) throws InterruptedException
{
pclib.resurrectPlayer(self, true);
return SCRIPT_CONTINUE;
}
public int handleDecayReport(obj_id self, dictionary params) throws InterruptedException
{
utils.removeScriptVarTree(self, "decayReport");
return SCRIPT_CONTINUE;
}
public int handleRepairItems(obj_id self, dictionary params) throws InterruptedException
{
obj_id[] repairList = params.getObjIdArray("items");
cloninglib.repairItems(self, repairList);
return SCRIPT_CONTINUE;
}
public int handleChatPersistentMessage(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_OVERRIDE;
}
String from = params.getString("from");
if (from == null)
{
return SCRIPT_OVERRIDE;
}
String subject = params.getString("subject");
if (subject == null)
{
return SCRIPT_OVERRIDE;
}
String message = params.getString("message");
if (message == null)
{
return SCRIPT_OVERRIDE;
}
String outOfBand = params.getString("outofband");
String avatarName = getChatName(self);
if (avatarName == null)
{
return SCRIPT_OVERRIDE;
}
chatSendPersistentMessage(from, avatarName, subject, message, outOfBand);
return SCRIPT_CONTINUE;
}
public int gmRevive(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
target = self;
params = toLower(params);
if (params.equals("-target"))
{
target = getLookAtTarget(self);
}
if (isIdValid(target))
{
obj_id targetCreature = null;
obj_id targetShip = null;
int got = getGameObjectType(target);
if (isGameObjectTypeOf(got, GOT_ship))
{
targetShip = target;
targetCreature = getShipPilot(target);
}
else if (isGameObjectTypeOf(got, GOT_creature))
{
targetShip = getPilotedShip(target);
targetCreature = target;
}
if (!isIdValid(targetShip) && !isIdValid(targetCreature))
{
sendSystemMessageTestingOnly(self, "The /gmRevive command may only be used on creature or ship type objects");
return SCRIPT_CONTINUE;
}
if (isIdValid(targetShip))
{
space_crafting.repairDamage(targetCreature, targetShip, 1.0f, 0.0f);
if (isShipSlotInstalled(targetShip, ship_chassis_slot_type.SCST_shield_0))
{
setShipShieldHitpointsFrontCurrent(targetShip, getShipShieldHitpointsFrontMaximum(targetShip));
setShipShieldHitpointsBackCurrent(targetShip, getShipShieldHitpointsBackMaximum(targetShip));
}
if (isIdValid(targetCreature))
{
sendSystemMessageTestingOnly(targetCreature, "Ship Repaired.");
}
CustomerServiceLog("Death", "(" + targetShip + ") " + getName(targetShip) + " has been /gmRevive'd at " + (getLocation(self)).toString() + " by (" + self + ") " + getName(self));
}
if (isIdValid(targetCreature))
{
obj_id mountId = getMountId(targetCreature);
if (isIdValid(mountId))
{
utils.dismountRiderJetpackCheck(targetCreature);
}
if (pclib.resurrectPlayer(targetCreature))
{
sendSystemMessageTestingOnly(targetCreature, "You have been restored...");
if (isPlayer(targetCreature))
{
pclib.clearCombatData(targetCreature);
buff.removeAllBuffs(targetCreature, true);
removeObjVar(targetCreature, "combat.intIncapacitationCount");
setPosture(targetCreature, POSTURE_UPRIGHT);
queueCommand(targetCreature, (-1465754503), targetCreature, "", COMMAND_PRIORITY_IMMEDIATE);
queueCommand(targetCreature, (-562996732), targetCreature, "", COMMAND_PRIORITY_IMMEDIATE);
play2dNonLoopingSound(targetCreature, "sound/music_acq_healer.snd");
utils.removeScriptVar(targetCreature, "pvp_death");
sendSystemMessageTestingOnly(self, "You have /gmRevived " + getName(targetCreature));
}
}
}
CustomerServiceLog("Death", "(" + targetCreature + ") " + getName(targetCreature) + " has been /gmRevive'd at " + (getLocation(self)).toString() + " by (" + self + ") " + getName(self));
}
return SCRIPT_CONTINUE;
}
public int cmdEat(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target) && exists(target))
{
return SCRIPT_OVERRIDE;
}
consumable.consumeItem(self, target);
return SCRIPT_CONTINUE;
}
public int cmdUseSkillBuff(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
LOG("skillBuff", "cmdUseSkillBuff");
if (!isIdValid(target) && exists(target))
{
return SCRIPT_OVERRIDE;
}
dictionary childparams = new dictionary();
childparams.put("player", self);
messageTo(target, "handleUseSkillBuff", childparams, 1.0f, true);
return SCRIPT_CONTINUE;
}
public int cmdTip(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if ((params == null) || (params.equals("")))
{
showTipSyntax(self);
return SCRIPT_CONTINUE;
}
location here = getLocation(self);
if (((here.area)).equals("tutorial"))
{
sendSystemMessageTestingOnly(self, "You cannot use this command from within the tutorial.");
return SCRIPT_CONTINUE;
}
CustomerServiceLog("Trade", "Tip Invoked -- Self: " + self + " Target: " + target + " Params: " + params);
if (params.equals("clear"))
{
CustomerServiceLog("Trade", " Tip -- Self: " + self + " " + getName(self) + " -- User requested tip data clear.");
sendSystemMessage(self, pclib.SID_TIP_CLEAR);
pclib.cleanupTipSui(self);
return SCRIPT_CONTINUE;
}
if (utils.hasScriptVar(self, pclib.VAR_TIP_SUI))
{
int suiConfirm = utils.getIntScriptVar(self, pclib.VAR_TIP_SUI);
forceCloseSUIPage(suiConfirm);
obj_id oldTarget = utils.getObjIdScriptVar(self, pclib.VAR_TIP_TARGET);
if (isIdValid(oldTarget) && exists(oldTarget) && oldTarget.isLoaded())
{
prose_package tipAbort = prose.getPackage(pclib.PROSE_TIP_ABORT, oldTarget);
sendSystemMessageProse(self, tipAbort);
}
else
{
sendSystemMessage(self, pclib.SID_TIP_ABORT);
}
CustomerServiceLog("Trade", " Tip -- Self: " + self + " " + getName(self) + " -- Cancelled prior tip due to new tip attempt.");
pclib.cleanupTipSui(self);
}
if (target == self)
{
CustomerServiceLog("Trade", " Tip -- Self: " + self + " " + getName(self) + " -- Tip aborted: (target == self)");
sendSystemMessageTestingOnly(self, "You can't use yourself as a target for /tip!");
return SCRIPT_CONTINUE;
}
boolean useCash = true;
if (params.contains("bank"))
{
params = gm.removeKeyword(params, "bank");
useCash = false;
}
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
int amt = 0;
String name = null;
int cnt = st.countTokens();
switch (cnt)
{
case 1:
if (!isIdValid(target))
{
showTipSyntax(self);
return SCRIPT_CONTINUE;
}
break;
case 2:
name = st.nextToken();
break;
default:
showTipSyntax(self);
return SCRIPT_CONTINUE;
}
boolean areMoreTokens = st.hasMoreTokens();
if (areMoreTokens)
{
String sAmt = st.nextToken();
amt = utils.stringToInt(sAmt);
if (amt < 1)
{
prose_package invalidParam = prose.getPackage(pclib.PROSE_INVALID_TIP_PARAM, sAmt);
sendSystemMessageProse(self, invalidParam);
return SCRIPT_CONTINUE;
}
if ((name == null) || (name.equals("")))
{
pclib.giveTip(self, target, getName(target), amt, useCash);
}
else
{
obj_id playerId = getPlayerIdFromFirstName(name);
if (isIdValid(playerId))
{
pclib.giveTip(self, playerId, name, amt, useCash);
}
}
}
return SCRIPT_CONTINUE;
}
public int cmdTipFail(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
sendSystemMessageTestingOnly(self, "/TIP command failed in command table...");
return SCRIPT_CONTINUE;
}
public int cmdCheckForceStatus(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int handleWireConfirm(obj_id self, dictionary params) throws InterruptedException
{
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " -- Tip aborted: Bank-to-Bank transfer canceled by player's request.");
pclib.cleanupTipSui(self);
return SCRIPT_CONTINUE;
}
obj_id target = utils.getObjIdScriptVar(self, pclib.VAR_TIP_TARGET);
if (!isIdValid(target))
{
sendSystemMessage(self, pclib.SID_TIP_ERROR);
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " -- Tip aborted: Target was invalid after tip fee dialog was accepted.");
pclib.cleanupTipSui(self);
return SCRIPT_CONTINUE;
}
int amt = utils.getIntScriptVar(self, pclib.VAR_TIP_AMT);
int fee = (int)(amt * pclib.TIP_WIRE_SURCHARGE);
if (fee < 1)
{
fee = 1;
}
int total = amt + fee;
String targetName = utils.getStringScriptVar(self, pclib.VAR_TIP_TARGET_NAME);
if (getBankBalance(self) < total)
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " -- Tip aborted: Player couldn't afford the wire fee.");
prose_package nsfWire = prose.getPackage(pclib.PROSE_TIP_NSF_WIRE, self, getName(self), null, target, targetName, null, null, null, null, total, 0.0f);
sendSystemMessageProse(self, nsfWire);
}
else
{
dictionary d = new dictionary();
d.put("target", target);
d.put("amt", amt);
d.put("useCash", false);
d.put("targetName", targetName);
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " -- Transferring wire bank money to escrow account! Amt: " + amt);
transferBankCreditsToNamedAccount(self, money.ACCT_TIP_ESCROW, amt, "handleTipSuccess", "handleTipFail", d);
if (utils.isFreeTrial(self, target))
{
pclib.doTipLogging(self, target, amt);
}
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " -- Transferring wire bank fee to surcharge account! Amt: " + fee);
transferBankCreditsToNamedAccount(self, money.ACCT_TIP_SURCHARGE, fee, "noHandler", "noHandler", d);
utils.moneyOutMetric(self, money.ACCT_TIP_SURCHARGE, fee);
}
pclib.cleanupTipSui(self);
return SCRIPT_CONTINUE;
}
public int handleTipSuccess(obj_id self, dictionary params) throws InterruptedException
{
String myName = getName(self);
obj_id po = getPlayerObject(self);
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " -- Handling a successful transfer.");
obj_id target = params.getObjId("target");
if (params == null || params.isEmpty() || !isIdValid(target))
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " -- Error! Can't handle successful tip transfer! The target data is invalid.");
return SCRIPT_CONTINUE;
}
int amt = params.getInt("amt");
boolean useCash = params.getBoolean("useCash");
String targetName = params.getString("targetName");
params.put("actor", self);
params.put("actorName", myName);
obj_id tpo = getPlayerObject(target);
if (useCash)
{
prose_package toSelf = prose.getPackage(pclib.PROSE_TIP_PASS_SELF, target, amt);
sendSystemMessageProse(self, toSelf);
prose_package toTarget = prose.getPackage(pclib.PROSE_TIP_PASS_TARGET, self, amt);
sendSystemMessageProse(target, toTarget);
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " " + getName(target) + " -- Cash tip transfer successfully completed. Amt: " + amt);
}
else
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " " + getName(target) + " -- Bank->Escrow wire transfer complete. Telling target to request escrow funds. Amt: " + amt);
messageTo(target, "handleTipEscrowRequest", params, 1.0f, true);
prose_package bankToEscrow = prose.getPackage(new string_id("base_player", "bank_to_escrow"), targetName, amt);
sendSystemMessageProse(self, bankToEscrow);
}
return SCRIPT_CONTINUE;
}
public int handleTipEscrowRequest(obj_id self, dictionary params) throws InterruptedException
{
int amt = params.getInt("amt");
obj_id player = params.getObjId("actor");
String playerName = params.getString("actorName");
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + self + " " + getName(self) + " -- Target is now requesting funds from the escrow account. Amt: " + amt);
if (amt >= 1 && amt <= 1000000)
{
boolean success = transferBankCreditsFromNamedAccount(money.ACCT_TIP_ESCROW, self, amt, "handleTipEscrowPass", "handleTipEscrowFail", params);
if (!success)
{
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + self + " -- Tip aborted: Unable to transfer money from bank to escrow. Amt: " + amt);
refundEscrow(player, playerName, self, getName(self), amt);
}
}
else
{
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + self + " " + getName(self) + " -- Target was unable to request tip funds from escrow because the amount is invalid! Amt: " + amt);
}
return SCRIPT_CONTINUE;
}
public int handleTipEscrowPass(obj_id self, dictionary params) throws InterruptedException
{
obj_id actor = params.getObjId("actor");
String actorName = params.getString("actorName");
obj_id target = params.getObjId("target");
String targetName = params.getString("targetName");
if (!isIdValid(actor) || !isIdValid(target) || targetName == null || actorName == null)
{
CustomerServiceLog("Trade", " Tip -- Player: " + actor + " " + actorName + " Target: " + target + " " + getName(target) + " -- Unable to handle successful transfer Escrow->Bank because of bad parameters.");
return SCRIPT_CONTINUE;
}
int amt = params.getInt("amt");
boolean useCash = params.getBoolean("useCash");
CustomerServiceLog("Trade", " Tip -- Player: " + actor + " " + actorName + " Target: " + target + " " + getName(target) + " -- Target successfully withdrew the money from escrow. Wire transfer complete. Amt: " + amt);
prose_package bodyToTarget = prose.getPackage(pclib.PROSE_WIRE_MAIL_TARGET, actorName, amt);
utils.sendMail(pclib.SID_WIRE_MAIL_SUBJECT, bodyToTarget, targetName, "@money/acct_n:bank");
prose_package bodyToSelf = prose.getPackage(pclib.PROSE_WIRE_MAIL_SELF, targetName, amt);
utils.sendMail(pclib.SID_WIRE_MAIL_SUBJECT, bodyToSelf, actorName, targetName);
return SCRIPT_CONTINUE;
}
public int handleTipEscrowFail(obj_id self, dictionary params) throws InterruptedException
{
obj_id actor = params.getObjId("actor");
String actorName = params.getString("actorName");
obj_id target = params.getObjId("target");
String targetName = params.getString("targetName");
if (!isIdValid(actor) || !isIdValid(target) || targetName == null || actorName == null)
{
CustomerServiceLog("Trade", " Tip -- Player: " + actor + " " + actorName + " Target: " + target + " " + getName(target) + " -- Unable to handle FAILED transfer Escrow->Bank because of bad parameters.");
return SCRIPT_CONTINUE;
}
int amt = params.getInt("amt");
boolean useCash = params.getBoolean("useCash");
CustomerServiceLog("Trade", " Tip -- Player: " + actor + " " + actorName + " Target: " + target + " " + getName(target) + " -- Target failed to withdraw the money from escrow! Wire transfer FAILED! Attempting to refund. Amt: " + amt);
prose_package escrowFailed = prose.getPackage(new string_id("base_player", "escrow_withdraw_failed"), actorName, amt);
utils.sendMail(pclib.SID_WIRE_MAIL_SUBJECT, escrowFailed, targetName, actorName);
refundEscrow(actor, actorName, target, targetName, amt);
return SCRIPT_CONTINUE;
}
public void refundEscrow(obj_id player, String playerName, obj_id target, String targetName, int amt) throws InterruptedException
{
dictionary params = new dictionary();
params.put("player", player);
params.put("playerName", playerName);
params.put("target", target);
params.put("targetName", targetName);
params.put("amt", amt);
messageTo(player, "handleTipRefundRequest", params, 1.0f, true);
}
public int handleTipRefundRequest(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = params.getObjId("player");
String playerName = params.getString("playerName");
obj_id target = params.getObjId("target");
String targetName = params.getString("targetName");
int amt = params.getInt("amt");
if (amt < 1 || amt > 1000000)
{
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + target + " " + targetName + " -- Unable to refund escrow because the amount is invalid! Amt:" + amt);
return SCRIPT_CONTINUE;
}
boolean success = transferBankCreditsFromNamedAccount(money.ACCT_TIP_ESCROW, player, amt, "handleTipRefundPass", "handleTipRefundFail", params);
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + target + " " + targetName + " -- Calling transferBankCreditsFromNamedAccount to transfer refund from escrow. Amt:" + amt);
if (!success)
{
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + target + " " + targetName + " -- transferBankCreditsFromNamedAccount failed immediately while attempting to refund escrow! Amt:" + amt);
notifyFailedRefund(player, playerName, target, targetName, amt);
return SCRIPT_CONTINUE;
}
return SCRIPT_CONTINUE;
}
public int handleTipRefundPass(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = params.getObjId("player");
String playerName = params.getString("playerName");
obj_id target = params.getObjId("target");
String targetName = params.getString("targetName");
int amt = params.getInt("amt");
prose_package refundToSelf = prose.getPackage(new string_id("base_player", "received_escrow_refund"), targetName, amt);
utils.sendMail(pclib.SID_WIRE_MAIL_SUBJECT, refundToSelf, playerName, targetName);
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + target + " " + targetName + " -- Refund successfully delivered. Amt:" + amt);
return SCRIPT_CONTINUE;
}
public int handleTipRefundFail(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = params.getObjId("player");
String playerName = params.getString("playerName");
obj_id target = params.getObjId("target");
String targetName = params.getString("targetName");
int amt = params.getInt("amt");
notifyFailedRefund(player, playerName, target, targetName, amt);
return SCRIPT_CONTINUE;
}
public void notifyFailedRefund(obj_id player, String playerName, obj_id target, String targetName, int amt) throws InterruptedException
{
CustomerServiceLog("Trade", " Tip -- Player: " + player + " " + playerName + " Target: " + target + " " + targetName + " -- Failed to refund player from escrow account! Amt:" + amt);
prose_package refundToSelf = prose.getPackage(new string_id("base_player", "failed_escrow_refund"), targetName, amt);
utils.sendMail(pclib.SID_WIRE_MAIL_SUBJECT, refundToSelf, playerName, targetName);
}
public int handleTipFail(obj_id self, dictionary params) throws InterruptedException
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " -- Tip cash transfer or bank wire escrow transfer failed!");
utils.removeScriptVar(self, pclib.VAR_TIP_SUI);
utils.removeScriptVar(self, pclib.VAR_TIP_TARGET);
utils.removeScriptVar(self, pclib.VAR_TIP_AMT);
obj_id target = params.getObjId("target");
if (!isIdValid(target))
{
return SCRIPT_CONTINUE;
}
if (!exists(target) || !target.isLoaded())
{
sendSystemMessage(self, pclib.SID_TIP_ERROR);
return SCRIPT_CONTINUE;
}
int amt = params.getInt("amt");
boolean useCash = params.getBoolean("useCash");
if (useCash)
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " " + getName(target) + " -- Cash transfer failed in transferCashTo! Amt: " + amt);
prose_package nsfCash = prose.getPackage(pclib.PROSE_TIP_NSF_CASH, target, amt);
sendSystemMessageProse(self, nsfCash);
}
else
{
CustomerServiceLog("Trade", " Tip -- Player: " + self + " " + getName(self) + " Target: " + target + " " + getName(target) + " -- Bank->Escrow transfer failed in transferBankCreditsToNamedAccount! Amt: " + amt);
prose_package nsfBank = prose.getPackage(pclib.PROSE_TIP_NSF_BANK, target, amt);
sendSystemMessageProse(self, nsfBank);
}
return SCRIPT_CONTINUE;
}
public void showTipSyntax(obj_id self) throws InterruptedException
{
sendSystemMessage(self, pclib.SID_TIP_SYNTAX);
}
public int cmdOpenFail(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
return SCRIPT_OVERRIDE;
}
prose_package pp = prose.getPackage(SID_CMD_OPEN_FAIL, target);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int cmdLoot(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
obj_id player = self;
if (!isIdValid(target))
{
return SCRIPT_CONTINUE;
}
if (!isMob(target))
{
return SCRIPT_CONTINUE;
}
if (!isIncapacitated(target))
{
return SCRIPT_CONTINUE;
}
if (isIncapacitated(self))
{
return SCRIPT_CONTINUE;
}
if (pet_lib.isPet(target))
{
return SCRIPT_CONTINUE;
}
int got = getGameObjectType(target);
if (got == GOT_corpse)
{
queueCommand(self, (1421655546), target, "", COMMAND_PRIORITY_DEFAULT);
return SCRIPT_CONTINUE;
}
if (isMob(target) && !isPlayer(target))
{
if (group.isGrouped(self))
{
obj_id team = getGroupObject(self);
int lootRule = getGroupLootRule(team);
if (lootRule == 3)
{
if (hasObjVar(target, "autoLootComplete"))
{
obj_id corpseInv = utils.getInventoryContainer(target);
queueCommand(player, (1880585606), corpseInv, "", COMMAND_PRIORITY_DEFAULT);
}
obj_id[] objMembersWhoExist = utils.getLocalGroupMemberIds(team);
int teamNumber = objMembersWhoExist.length;
if (teamNumber > 0)
{
int which = rand(0, teamNumber - 1);
player = objMembersWhoExist[which];
}
}
if (loot.doGroupLootAllCheck(self, target))
{
loot.lootAiCorpse(player, target);
}
return SCRIPT_CONTINUE;
}
loot.lootAiCorpse(self, target);
return SCRIPT_CONTINUE;
}
return SCRIPT_CONTINUE;
}
public int cmdLootPlayer(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
return SCRIPT_OVERRIDE;
}
if (!utils.isOwner(target, self) && !isGod(self))
{
return SCRIPT_OVERRIDE;
}
int got = getGameObjectType(target);
if (got != GOT_corpse)
{
return SCRIPT_OVERRIDE;
}
corpse.lootPlayerCorpse(self, target);
return SCRIPT_CONTINUE;
}
public int cmdActivateClone(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (params.equals("now"))
{
if (isGod(self))
{
if (utils.hasScriptVar(self, pclib.VAR_SUI_CLONE))
{
int cloneSui = utils.getIntScriptVar(self, pclib.VAR_SUI_CLONE);
utils.removeScriptVar(self, pclib.VAR_SUI_CLONE);
forceCloseSUIPage(cloneSui);
}
if (!pclib.playerRevive(self))
{
sendSystemMessageTestingOnly(self, "You may only use this command to force a clone spawn if you are dead.");
}
return SCRIPT_CONTINUE;
}
}
if (utils.hasScriptVar(self, pclib.VAR_SUI_CLONE))
{
sendSystemMessageTestingOnly(self, "You already have a cloning options menu open!");
return SCRIPT_CONTINUE;
}
if (!isDead(self))
{
return SCRIPT_CONTINUE;
}
messageTo(self, pclib.HANDLER_PLAYER_DEATH, null, 0, false);
return SCRIPT_CONTINUE;
}
public int cmdActivateCloneFail(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
sendSystemMessageTestingOnly(self, "You may only use this command to activate the cloning options menu if you are dead.");
return SCRIPT_CONTINUE;
}
public int cmdSetBind(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
return SCRIPT_CONTINUE;
}
int got = getGameObjectType(target);
if (got != GOT_terminal_cloning)
{
return SCRIPT_CONTINUE;
}
cloninglib.requestBind(self, target);
return SCRIPT_CONTINUE;
}
public boolean canDeathBlow(obj_id killer, obj_id victim) throws InterruptedException
{
if ((!isIdValid(victim)) || (!isPlayer(victim)))
{
debugServerConsoleMsg(killer, "cmdCoupDeGrace: (" + victim + ")target is not player or is not incapacitated!!");
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "invalid_target"));
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "target_invalid_fly"), 1.5f, colors.WHITE);
return false;
}
if (!pvpCanAttack(killer, victim))
{
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "target_invalid_fly"), 1.5f, colors.WHITE);
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "invalid_pvp_target"));
return false;
}
if (isIncapacitated(victim))
{
if (hasObjVar(victim, pclib.VAR_BEEN_COUPDEGRACED))
{
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "invalid_target"));
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "target_invalid_fly"), 1.5f, colors.WHITE);
return false;
}
location myPos = getLocation(killer);
location targetPos = getLocation(victim);
if (myPos != null && targetPos != null)
{
float distance = myPos.distance(targetPos);
float maxDistance = getCommandMaxRange((1917386623));
debugServerConsoleMsg(null, "Deathblow distance to target ");
if (distance < maxDistance)
{
stealth.checkForAndMakeVisibleNoRecourse(killer);
if (isIncapacitated(killer) || isDead(killer))
{
return false;
}
if (getState(killer, STATE_FEIGN_DEATH) == 1)
{
return false;
}
int killerPosture = getPosture(killer);
if (killerPosture == POSTURE_KNOCKED_DOWN)
{
return false;
}
return true;
}
else
{
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "range_too_far"), 1.5f, colors.MEDIUMTURQUOISE);
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "out_of_range_far"), COMBAT_RESULT_OUT_OF_RANGE);
CustomerServiceLog("Pvp", "Player %TU received deathblow message for target %TT, but has moved too " + "far away (" + distance + ")", killer, victim);
}
}
else
{
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "invalid_target"));
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "target_invalid_fly"), 1.5f, colors.WHITE);
CustomerServiceLog("Pvp", "Player %TU received deathblow message for target %TT, but we could " + "not get the player's positions", killer, victim);
}
}
else
{
combat.sendCombatSpamMessage(killer, new string_id("cbt_spam", "invalid_target"));
showFlyTextPrivate(killer, killer, new string_id("combat_effects", "target_invalid_fly"), 1.5f, colors.WHITE);
}
return false;
}
public int cmdCoupDeGrace(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (canDeathBlow(self, target))
{
pclib.coupDeGrace(target, self);
}
else
{
return SCRIPT_OVERRIDE;
}
return SCRIPT_CONTINUE;
}
public int handleCoupDeGrace(obj_id self, dictionary params) throws InterruptedException
{
if (utils.hasScriptVar(self, COUPE_DE_GRACE_TARGET))
{
obj_id target = utils.getObjIdScriptVar(self, COUPE_DE_GRACE_TARGET);
utils.removeScriptVar(self, COUPE_DE_GRACE_TARGET);
debugServerConsoleMsg(null, "Performing deathblow on " + target);
if (isIdValid(target))
{
if (isIncapacitated(target))
{
location myPos = getLocation(self);
location targetPos = getLocation(target);
if (myPos != null && targetPos != null)
{
float distance = myPos.distance(targetPos);
float maxDistance = getCommandMaxRange((1917386623));
debugServerConsoleMsg(null, "Deathblow distance to target ");
if (distance < maxDistance)
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message for target %TT, and is performing the blow");
pclib.coupDeGrace(target, self);
}
else
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message for target %TT, but has moved too " + "far away (" + distance + ")", self, target);
}
}
else
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message for target %TT, but we could " + "not get the player's positions", self, target);
}
}
else
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message, but target %TT is no longer incapped ", self, target);
}
}
else
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message, but has invalid deathblow scriptvar " + target, self);
}
}
else
{
CustomerServiceLog("Pvp", "Player %TU received deathblow message, but has no deathblow scriptvar ", self);
}
if (!isIncapacitated(self))
{
setCount(self, 0);
}
setState(self, STATE_PERFORM_DEATHBLOW, false);
return SCRIPT_CONTINUE;
}
public int cmdCorpse(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
queueCommand(self, (-304150016), target, "", COMMAND_PRIORITY_DEFAULT);
return SCRIPT_CONTINUE;
}
public int cmdConsent(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (params.equals(""))
{
target = getLookAtTarget(self);
if (isIdValid(target) && isPlayer(target))
{
pclib.consent(self, target);
}
else
{
if (hasObjVar(self, pclib.VAR_CONSENT_TO_ID))
{
obj_id[] consentTo = getObjIdArrayObjVar(self, pclib.VAR_CONSENT_TO_ID);
if ((consentTo == null) || (consentTo.length == 0))
{
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_OVERRIDE;
}
Vector consentToName = new Vector();
consentToName.setSize(0);
for (obj_id consentTo1 : consentTo) {
consentToName = utils.addElement(consentToName, getPlayerFullName(consentTo1));
}
sui.listbox(self, "@" + SID_CONSENT_TO_LISTBOX_PROMPT, "@" + SID_CONSENT_TO_LISTBOX_TITLE, consentToName);
return SCRIPT_CONTINUE;
}
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_CONTINUE;
}
}
else
{
if (params.startsWith(">"))
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
params = params.substring(1);
}
if (params.indexOf(",") > 0)
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
do
{
String arg = st.nextToken();
if (arg.startsWith(">"))
{
arg = arg.substring(1);
}
obj_id playerId = getPlayerIdFromFirstName(arg);
if (isIdValid(playerId))
{
pclib.consent(self, playerId);
}
} while (st.hasMoreTokens());
}
else
{
obj_id playerId = getPlayerIdFromFirstName(params);
if (isIdValid(playerId))
{
pclib.consent(self, playerId);
}
}
}
return SCRIPT_CONTINUE;
}
public int cmdUnconsent(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (params.equals(""))
{
target = getLookAtTarget(self);
if (isIdValid(target) && isPlayer(target))
{
pclib.unconsent(self, target);
}
else
{
if (hasObjVar(self, pclib.VAR_CONSENT_TO_ID))
{
obj_id[] consentTo = getObjIdArrayObjVar(self, pclib.VAR_CONSENT_TO_ID);
if ((consentTo == null) || (consentTo.length == 0))
{
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_OVERRIDE;
}
Vector consentToName = new Vector();
consentToName.setSize(0);
for (obj_id consentTo1 : consentTo) {
consentToName = utils.addElement(consentToName, getPlayerFullName(consentTo1));
}
sui.listbox(self, self, "@" + SID_UNCONSENT_LISTBOX_PROMPT, sui.OK_CANCEL, "@" + SID_UNCONSENT_LISTBOX_TITLE, consentToName, HANDLER_UNCONSENT_MENU);
return SCRIPT_CONTINUE;
}
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_CONTINUE;
}
}
else
{
if (params.startsWith(">"))
{
params = params.substring(1);
}
if (params.indexOf(",") > 0)
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
do
{
String arg = st.nextToken();
if (arg.startsWith(">"))
{
arg = arg.substring(1);
}
obj_id playerId = getPlayerIdFromFirstName(arg);
if (isIdValid(playerId))
{
pclib.unconsent(self, playerId);
}
} while (st.hasMoreTokens());
}
else
{
obj_id playerId = getPlayerIdFromFirstName(params);
if (isIdValid(playerId))
{
pclib.unconsent(self, playerId);
}
}
}
return SCRIPT_CONTINUE;
}
public int cmdHaveConsent(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (params.equals(""))
{
target = getLookAtTarget(self);
if (isIdValid(target) && isPlayer(target))
{
pclib.hasConsent(self, target, true);
}
else
{
if (hasObjVar(self, pclib.VAR_CONSENT_FROM_ID))
{
obj_id[] consentFrom = getObjIdArrayObjVar(self, pclib.VAR_CONSENT_FROM_ID);
if ((consentFrom == null) || (consentFrom.length == 0))
{
sendSystemMessage(self, SID_CONSENT_TO_EMPTY);
return SCRIPT_OVERRIDE;
}
Vector consentFromName = new Vector();
consentFromName.setSize(0);
for (obj_id obj_id : consentFrom) {
consentFromName = utils.addElement(consentFromName, getPlayerFullName(obj_id));
}
sui.listbox(self, "@" + SID_CONSENT_FROM_LISTBOX_PROMPT, "@" + SID_CONSENT_FROM_LISTBOX_TITLE, consentFromName);
return SCRIPT_CONTINUE;
}
sendSystemMessage(self, SID_CONSENT_FROM_EMPTY);
return SCRIPT_CONTINUE;
}
}
else
{
if (params.startsWith(">"))
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
params = params.substring(1);
}
if (params.indexOf(",") > 0)
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
do
{
String arg = st.nextToken();
if (arg.startsWith(">"))
{
arg = arg.substring(1);
}
obj_id playerId = getPlayerIdFromFirstName(arg);
if (isIdValid(playerId))
{
pclib.hasConsent(self, playerId, true);
}
} while (st.hasMoreTokens());
}
else
{
obj_id playerId = getPlayerIdFromFirstName(params);
if (isIdValid(playerId))
{
pclib.hasConsent(self, playerId, true);
}
}
}
return SCRIPT_CONTINUE;
}
public int startTraceLogging(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
enableTraceLogging();
return SCRIPT_CONTINUE;
}
public int stopTraceLogging(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
disableTraceLogging();
return SCRIPT_CONTINUE;
}
public int createCreature(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
String strCreatureType = params;
location locSpawnLocation = getLocation(self);
return SCRIPT_CONTINUE;
}
public int createNPC(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
String strNPCType = params;
location locSpawnLocation = getLocation(self);
return SCRIPT_CONTINUE;
}
public int cmdStartLogout(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!hasScript(self, "player.player_logout"))
{
attachScript(self, "player.player_logout");
dictionary d = new dictionary();
if (isGod(self))
{
d.put("timeLeft", 1);
}
else
{
d.put("timeLeft", LOGOUT_TIME);
}
d.put("countInterval", LOGOUT_COUNT_INTERVAL);
messageTo(self, "OnLogoutPulse", d, 0.1f, false);
}
return SCRIPT_CONTINUE;
}
public int maskscent(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int failMaskscent(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int milkCreature(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
obj_id playerCurrentMount = getMountId(self);
obj_id intendedTarget = getIntendedTarget(self);
obj_id lookAtTarget = getLookAtTarget(self);
String milkType_lookAt = ai_lib.getMilkType(lookAtTarget);
String milkType_intended = ai_lib.getMilkType(intendedTarget);
if (milkType_lookAt != null && !milkType_lookAt.equals("none"))
{
target = lookAtTarget;
}
else if (milkType_intended != null && !milkType_intended.equals("none"))
{
target = intendedTarget;
}
else if (!isIdValid(lookAtTarget) && !isIdValid(intendedTarget))
{
sendSystemMessage(self, MILK_NO_TARGET);
return SCRIPT_OVERRIDE;
}
else
{
sendSystemMessage(self, SID_NO_ALLOW_MILK);
return SCRIPT_OVERRIDE;
}
if (vehicle.isVehicle(target) || (ai_lib.aiGetNiche(target) == NICHE_DROID) || (ai_lib.aiGetNiche(target) == NICHE_ANDROID))
{
sendSystemMessage(self, SID_NO_ALLOW_MILK);
return SCRIPT_OVERRIDE;
}
if (isIdValid(playerCurrentMount))
{
sendSystemMessage(self, SID_CANT_MILK_MOUNTED);
return SCRIPT_OVERRIDE;
}
if (pet_lib.isPet(target))
{
sendSystemMessage(self, SID_CANT_MILK);
return SCRIPT_OVERRIDE;
}
float distStart = utils.getDistance2D(self, target);
if ((distStart < -3) || (distStart > 3))
{
sendSystemMessage(self, MILK_TOO_FAR_START);
return SCRIPT_OVERRIDE;
}
if (!ai_lib.isAiDead(target) && !hasScript(target, "ai.pet_advance") && !ai_lib.isInCombat(target))
{
dictionary dict = new dictionary();
dict.put("player", self);
messageTo(target, "attemptMilkHandler", dict, 0, false);
}
return SCRIPT_OVERRIDE;
}
public int searchLair(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
obj_id intendedTarget = getIntendedTarget(self);
obj_id lookAtTarget = getLookAtTarget(self);
int GOT_type_intended = getGameObjectType(intendedTarget);
int GOT_type_look = getGameObjectType(lookAtTarget);
if (GOT_type_intended == GOT_lair)
{
target = intendedTarget;
}
else if (GOT_type_look == GOT_lair)
{
target = lookAtTarget;
}
else
{
sendSystemMessage(self, LAIR_NOT_TARGETED);
return SCRIPT_OVERRIDE;
}
float maxDistance = 10.0f;
float distanceToLair = utils.getDistance2D(self, target);
if (hasScript(target, "theme_park.dungeon.mustafar_trials.valley_battleground.battlefield_destructable"))
{
return SCRIPT_OVERRIDE;
}
if (distanceToLair > maxDistance)
{
sendSystemMessage(self, TOO_FAR_FROM_LAIR);
return SCRIPT_OVERRIDE;
}
else
{
if (!utils.hasScriptVar(target, "lair.searched") && !isIncapacitated(self))
{
collection.collectionResource(self, "egg");
dictionary dict = new dictionary();
dict.put("player", self);
messageTo(target, "searchLair", dict, 0, false);
}
else
{
sendSystemMessage(self, SID_FOUND_NOTHING);
}
}
return SCRIPT_CONTINUE;
}
public int removeScentMask(obj_id self, dictionary params) throws InterruptedException
{
int scentMasked = getState(self, STATE_MASK_SCENT);
if (scentMasked == 0)
{
buff.removeBuff(self, "mask_scent");
return SCRIPT_CONTINUE;
}
int scount = params.getInt("count");
int count = utils.getIntScriptVar(self, "scentmask.count");
if (count != scount)
{
return SCRIPT_CONTINUE;
}
setState(self, STATE_MASK_SCENT, false);
buff.removeBuff(self, "mask_scent");
sendSystemMessage(self, SID_SYS_SCENTMASK_STOP);
return SCRIPT_CONTINUE;
}
public int removeScentMaskNoNotify(obj_id self, dictionary params) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int concealEnable(obj_id self, dictionary params) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int failConceal(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public int removeConceal(obj_id self, dictionary params) throws InterruptedException
{
return SCRIPT_CONTINUE;
}
public boolean itemIsRare(obj_id self, int skillMod) throws InterruptedException
{
boolean rare = false;
if (skillMod >= 65)
{
int difficultyCheck = (skillMod - 50) + 30;
int dieRoll = rand(1, 100);
if (dieRoll > difficultyCheck)
{
dieRoll = rand(1, 4);
if (dieRoll == 1)
{
rare = true;
}
}
}
return rare;
}
public int sysGroup(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (hasSkill(self, "class_officer_phase1_master"))
{
squad_leader.sendSquadLeaderCommand(self, params);
}
return SCRIPT_CONTINUE;
}
public int groupWaypoint(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (hasSkill(self, "class_officer_phase1_master"))
{
if (params.equals("a") || params.equals("c"))
{
squad_leader.sendSquadWaypoint(self, getLocation(self));
}
else
{
location wayLoc = combat.getCommandGroundTargetLocation(params);
squad_leader.sendSquadWaypoint(self, wayLoc);
}
}
return SCRIPT_CONTINUE;
}
public int createOfficerGroupWaypoint(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
location wayLoc = params.getLocation("wayLoc");
obj_id groupWaypoint = createWaypointInDatapad(self, wayLoc);
setWaypointColor(groupWaypoint, "green");
setWaypointName(groupWaypoint, "Group Waypoint");
setWaypointActive(groupWaypoint, true);
dictionary dict = new dictionary();
dict.put("groupWaypoint", groupWaypoint);
messageTo(self, "removeOfficerGroupWaypoint", dict, 600, false);
return SCRIPT_CONTINUE;
}
public int removeOfficerGroupWaypoint(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
obj_id groupWaypoint = params.getObjId("groupWaypoint");
if (!isIdValid(groupWaypoint) || !exists(groupWaypoint))
{
return SCRIPT_CONTINUE;
}
destroyWaypointInDatapad(groupWaypoint, self);
return SCRIPT_CONTINUE;
}
public int OnSurveyDataReceived(obj_id self, float[] xVals, float[] zVals, float[] efficiencies) throws InterruptedException
{
if (efficiencies == null)
{
return SCRIPT_CONTINUE;
}
int highest = -1;
float highVal = 0.0f;
for (int i = 0; i < efficiencies.length; i++)
{
if (efficiencies[i] > highVal)
{
highest = i;
highVal = efficiencies[i];
}
}
if ((highest > -1) && (highVal > 0.1))
{
location point = new location();
point.x = xVals[highest];
point.y = 0;
point.z = zVals[highest];
obj_id waypoint = getSurveyWaypoint(self);
boolean newWpCreated = false;
if (!isIdValid(waypoint))
{
waypoint = createWaypointInDatapad(self, point);
newWpCreated = true;
}
if (isIdValid(waypoint))
{
setWaypointVisible(waypoint, true);
setWaypointActive(waypoint, true);
setWaypointLocation(waypoint, point);
setWaypointName(waypoint, "Resource Survey");
if (newWpCreated)
{
setWaypointColor(waypoint, "orange");
}
setObjVar(self, "survey_waypoint", waypoint);
}
sendSystemMessage(self, SID_SURVEY_WAYPOINT);
}
return SCRIPT_CONTINUE;
}
public obj_id getSurveyWaypoint(obj_id self) throws InterruptedException
{
obj_id[] data = getWaypointsInDatapad(self);
if (data != null)
{
for (obj_id datum : data) {
if (!isIdValid(datum)) {
continue;
}
String waypointName = getWaypointName(datum);
if ((waypointName != null) && waypointName.equals("Resource Survey")) {
return datum;
}
}
}
return null;
}
public int OnChangedPosture(obj_id self, int before, int after) throws InterruptedException
{
if (meditation.isMeditating(self))
{
meditation.endMeditation(self);
}
if (before == POSTURE_CROUCHED)
{
if (utils.hasScriptVar(self, "surveying.takingSamples"))
{
obj_id tool = utils.getObjIdScriptVar(self, "surveying.tool");
resource.cleanupTool(self, tool);
sendSystemMessage(self, SID_SAMPLE_CANCEL);
}
else if (utils.hasScriptVar(self, "trapdrop.settrap"))
{
obj_id trap = utils.getObjIdScriptVar(self, "trapdrop.settrap");
messageTo(trap, "stopDeploy", null, 0.0f, false);
sendSystemMessage(self, SID_TRAP_CANCEL);
utils.removeScriptVar(self, "trapdrop.settrap");
}
}
return SCRIPT_CONTINUE;
}
public int OnCreatureDamaged(obj_id self, obj_id attacker, obj_id weapon, int[] damage) throws InterruptedException
{
if (meditation.isMeditating(self))
{
meditation.endMeditation(self);
}
if (utils.hasScriptVar(self, "surveying.takingSamples"))
{
obj_id tool = utils.getObjIdScriptVar(self, "surveying.tool");
resource.cleanupTool(self, tool);
sendSystemMessage(self, SID_SAMPLE_CANCEL_ATTACK);
}
else if (utils.hasScriptVar(self, "trapdrop.settrap"))
{
obj_id trap = utils.getObjIdScriptVar(self, "trapdrop.settrap");
messageTo(trap, "stopDeploy", null, 0.0f, false);
sendSystemMessage(self, SID_TRAP_CANCEL_ATTACK);
utils.removeScriptVar(self, "trapdrop.settrap");
}
metrics.logArmorStatus(self);
return SCRIPT_CONTINUE;
}
public int OnTargeted(obj_id self, obj_id attacker) throws InterruptedException
{
if (utils.hasScriptVar(self, "surveying.takingSamples"))
{
obj_id tool = utils.getObjIdScriptVar(self, "surveying.tool");
resource.cleanupTool(self, tool);
return SCRIPT_CONTINUE;
}
return SCRIPT_CONTINUE;
}
public int handleSurveyNodeChoice(obj_id self, dictionary params) throws InterruptedException
{
if (!sui.hasPid(self, resource.PID_NAME))
{
return SCRIPT_CONTINUE;
}
sui.removePid(self, resource.PID_NAME);
if (!utils.hasScriptVar(self, "surveying.takingSamples"))
{
return SCRIPT_CONTINUE;
}
obj_id curtool = utils.getObjIdScriptVar(self, "surveying.tool");
obj_id tool = utils.getObjIdScriptVar(self, "survey_event.tool");
if (tool != curtool)
{
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
obj_id player = sui.getPlayerId(params);
int btn = sui.getIntButtonPressed(params);
if ((btn == sui.BP_CANCEL) || (idx == 0))
{
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
else if (idx == 2)
{
if (!hasCompletedCollection(player, "sampling_pet_collection"))
{
modifyCollectionSlotValue(player, "col_pet_resource_sampling", 1);
}
int dieRoll = rand(1, 100);
if (dieRoll < 75)
{
utils.setScriptVar(player, "survey_event.gamble", 3);
}
else
{
utils.setScriptVar(player, "survey_event.gamble", 4);
}
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "stopSampleEvent", outparams, 0.0f, false);
location point = locations.getGoodLocationAroundLocation(getLocation(self), 10, 10, 50, 50, true, false);
if (point == null)
{
return SCRIPT_CONTINUE;
}
obj_id waypoint = getSurveyWaypoint(self);
if (!isIdValid(waypoint))
{
waypoint = createWaypointInDatapad(self, point);
}
if (isIdValid(waypoint))
{
setWaypointVisible(waypoint, true);
setWaypointActive(waypoint, true);
setWaypointLocation(waypoint, point);
setWaypointName(waypoint, "Resource Survey");
setWaypointColor(waypoint, "blue");
}
sendSystemMessage(self, SID_NODE_WAYPOINT);
utils.setScriptVar(self, "survey_event.location", point);
return SCRIPT_CONTINUE;
}
public int handleSurveyGambleChoice(obj_id self, dictionary params) throws InterruptedException
{
if (!sui.hasPid(self, resource.PID_NAME))
{
return SCRIPT_CONTINUE;
}
sui.removePid(self, resource.PID_NAME);
if (!utils.hasScriptVar(self, "surveying.takingSamples"))
{
return SCRIPT_CONTINUE;
}
obj_id curtool = utils.getObjIdScriptVar(self, "surveying.tool");
obj_id tool = utils.getObjIdScriptVar(self, "survey_event.tool");
if (tool != curtool)
{
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
obj_id player = sui.getPlayerId(params);
int btn = sui.getIntButtonPressed(params);
if ((btn == sui.BP_CANCEL) || (idx == 0))
{
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
int action = getAttrib(player, ACTION);
int actioncost = 2000;
if (!drainAttributes(player, actioncost, 0))
{
sendSystemMessage(player, SID_GAMBLE_NO_ACTION);
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
if (idx == 2)
{
String resource_class = getStringObjVar(tool, resource.VAR_SURVEY_CLASS);
String collectionName = "col_resource_" + resource_class + "_01";
modifyCollectionSlotValue(player, collectionName, 1);
utils.setScriptVar(player, "survey_event.gamble", 5);
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
int dieRoll = rand(1, 100);
if (dieRoll < 75)
{
utils.setScriptVar(player, "survey_event.gamble", 1);
}
else
{
utils.setScriptVar(player, "survey_event.gamble", 2);
}
dictionary outparams = new dictionary();
outparams.put("player", self);
messageTo(tool, "continueSampleLoop", outparams, 0.0f, false);
return SCRIPT_CONTINUE;
}
public int cmdHarvestDNA(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
return SCRIPT_CONTINUE;
}
bio_engineer.harvestCreatureDNA(self, target);
return SCRIPT_CONTINUE;
}
public int cmdHarvestDNAFail(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
sendSystemMessage(self, bio_engineer.SID_HARVEST_DNA_FAILED);
}
else
{
prose_package pp = prose.getPackage(bio_engineer.PROSE_HARVEST_DNA_FAILED, target);
sendSystemMessageProse(self, pp);
}
return SCRIPT_CONTINUE;
}
public int completeHarvestDNA(obj_id self, dictionary params) throws InterruptedException
{
bio_engineer.completeHarvest(self);
return SCRIPT_CONTINUE;
}
public int cmdWaypoint(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
String wpColor = null;
float displayCoordX = 0.0f;
float displayCoordZ = 0.0f;
boolean wpDifferentPlanet = false;
obj_id lookAtTarget = null;
obj_id intendedTarget = null;
int parsedIndex = 0;
Vector parsedParams = new Vector();
parsedParams.setSize(0);
if (params != null && !params.equals(""))
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
while (st.hasMoreTokens())
{
String token = st.nextToken();
if (wpColor == null)
{
for (int i = 0; i < utils.WAYPOINT_COLORS.length; ++i)
{
if ((token.toLowerCase()).equals(utils.WAYPOINT_COLORS[i]))
{
wpColor = utils.WAYPOINT_COLORS[i];
break;
}
}
if (wpColor == null)
{
utils.addElement(parsedParams, token);
}
}
else
{
utils.addElement(parsedParams, token);
}
}
}
location spot = null;
if (parsedParams == null || (parsedParams.size() <= 0))
{
spot = getWorldLocation(self);
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
float[] baInfo = getBuildoutAreaSizeAndCenter(spot.x, spot.z, spot.area, true, true);
if ((baInfo != null) && (baInfo.length == 4))
{
displayCoordX -= baInfo[2];
displayCoordZ -= baInfo[3];
}
}
}
else
{
String wpGroundPlanet = null;
vector wpGroundPLanetBuildoutCoords = null;
String wpSpaceZone = null;
float wpCoord1 = Float.NEGATIVE_INFINITY;
float wpCoord2 = Float.NEGATIVE_INFINITY;
float wpCoord3 = Float.NEGATIVE_INFINITY;
boolean useTarget = false;
wpCoord1 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord1 == Float.NEGATIVE_INFINITY)
{
String planet = ((String)parsedParams.get(parsedIndex)).toLowerCase();
if (planet.equals("-target"))
{
useTarget = true;
++parsedIndex;
}
else
{
for (int i = 0; i < WAYPOINT_GROUND_PLANETS_EXTERNAL.length; ++i)
{
if ((planet.equals(WAYPOINT_GROUND_PLANETS_EXTERNAL[i])) && (i < WAYPOINT_GROUND_PLANETS_INTERNAL.length))
{
wpGroundPlanet = WAYPOINT_GROUND_PLANETS_INTERNAL[i];
if (i < WAYPOINT_GROUND_PLANETS_BUILDOUT_COORDS.length)
{
wpGroundPLanetBuildoutCoords = WAYPOINT_GROUND_PLANETS_BUILDOUT_COORDS[i];
}
++parsedIndex;
break;
}
}
if (wpGroundPlanet == null)
{
for (int i = 0; i < WAYPOINT_SPACE_ZONES_EXTERNAL.length; ++i)
{
if ((planet.equals(WAYPOINT_SPACE_ZONES_EXTERNAL[i])) && (i < WAYPOINT_SPACE_ZONES_INTERNAL.length))
{
wpSpaceZone = WAYPOINT_SPACE_ZONES_INTERNAL[i];
++parsedIndex;
break;
}
}
}
}
if (((wpGroundPlanet != null) || (wpSpaceZone != null)) && (parsedIndex < parsedParams.size()))
{
wpCoord1 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
}
}
if (wpCoord1 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
if (parsedIndex < parsedParams.size())
{
wpCoord2 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord2 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
if (parsedIndex < parsedParams.size())
{
wpCoord3 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord3 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
}
else if (wpSpaceZone != null)
{
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
--parsedIndex;
--parsedIndex;
}
}
else if (wpSpaceZone != null)
{
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
--parsedIndex;
--parsedIndex;
}
}
else
{
wpCoord1 = Float.NEGATIVE_INFINITY;
--parsedIndex;
}
}
else
{
wpCoord1 = Float.NEGATIVE_INFINITY;
--parsedIndex;
}
}
if ((wpGroundPlanet != null) && ((wpCoord1 == Float.NEGATIVE_INFINITY) || (wpCoord2 == Float.NEGATIVE_INFINITY)))
{
wpGroundPlanet = null;
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
wpCoord3 = Float.NEGATIVE_INFINITY;
parsedIndex = 0;
}
if ((wpSpaceZone != null) && ((wpCoord1 == Float.NEGATIVE_INFINITY) || (wpCoord2 == Float.NEGATIVE_INFINITY) || (wpCoord3 == Float.NEGATIVE_INFINITY)))
{
wpSpaceZone = null;
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
wpCoord3 = Float.NEGATIVE_INFINITY;
parsedIndex = 0;
}
if (wpCoord1 == Float.NEGATIVE_INFINITY)
{
if (useTarget)
{
intendedTarget = getIntendedTarget(self);
if (isIdValid(intendedTarget))
{
spot = getWorldLocation(intendedTarget);
}
if (spot == null)
{
intendedTarget = null;
lookAtTarget = getLookAtTarget(self);
if (isIdValid(lookAtTarget))
{
spot = getWorldLocation(lookAtTarget);
}
}
}
if (spot == null)
{
intendedTarget = null;
lookAtTarget = null;
spot = getWorldLocation(self);
}
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
float[] baInfo = getBuildoutAreaSizeAndCenter(spot.x, spot.z, spot.area, true, true);
if ((baInfo != null) && (baInfo.length == 4))
{
displayCoordX -= baInfo[2];
displayCoordZ -= baInfo[3];
}
}
}
else
{
if (wpCoord3 == Float.NEGATIVE_INFINITY)
{
spot = new location(wpCoord1, 0.0f, wpCoord2);
}
else
{
spot = new location(wpCoord1, wpCoord2, wpCoord3);
}
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
float[] baInfo = null;
if ((wpGroundPlanet != null) && (!wpGroundPlanet.equals(spot.area)))
{
if (wpGroundPLanetBuildoutCoords != null)
{
baInfo = getBuildoutAreaSizeAndCenter(wpGroundPLanetBuildoutCoords.x, wpGroundPLanetBuildoutCoords.z, wpGroundPlanet, true, true);
}
wpDifferentPlanet = true;
spot.area = wpGroundPlanet;
}
else if ((wpSpaceZone != null) && (!wpSpaceZone.equals(spot.area)))
{
wpDifferentPlanet = true;
spot.area = wpSpaceZone;
}
else
{
location currentLoc = getWorldLocation(self);
if (currentLoc != null)
{
baInfo = getBuildoutAreaSizeAndCenter(currentLoc.x, currentLoc.z, currentLoc.area, true, true);
}
}
if ((baInfo != null) && (baInfo.length == 4))
{
final float halfWidth = baInfo[0] / 2;
if (displayCoordX > halfWidth)
{
displayCoordX = halfWidth;
}
else if (displayCoordX < -halfWidth)
{
displayCoordX = -halfWidth;
}
final float halfHeight = baInfo[1] / 2;
if (displayCoordZ > halfHeight)
{
displayCoordZ = halfHeight;
}
else if (displayCoordZ < -halfHeight)
{
displayCoordZ = -halfHeight;
}
spot.x = displayCoordX + baInfo[2];
spot.z = displayCoordZ + baInfo[3];
}
}
}
}
if (spot == null)
{
sendSystemMessageTestingOnly(self, "Waypoint: The system was unable to parse a valid waypoint location.");
}
else
{
obj_id wp = createWaypointInDatapadWithLimits(self, spot);
if (isIdValid(wp))
{
if (!wpDifferentPlanet)
{
setWaypointActive(wp, true);
}
setWaypointVisible(wp, true);
String wpName = null;
for (int i = parsedIndex; i < parsedParams.size(); ++i)
{
if (wpName == null)
{
wpName = ((String)parsedParams.get(i));
}
else
{
wpName += " ";
wpName += ((String)parsedParams.get(i));
}
}
if (wpName == null)
{
wpName = "Waypoint";
}
setWaypointName(wp, wpName);
if (wpColor != null && !wpColor.equals(""))
{
setWaypointColor(wp, wpColor);
}
if (!wpDifferentPlanet)
{
if (isIdValid(intendedTarget))
{
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for intended target location (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
else if (isIdValid(lookAtTarget))
{
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for look at target location (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
else
{
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for location (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
}
else
{
final String localizedPlanetName = localize(new string_id("planet_n", spot.area));
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for location " + localizedPlanetName + " (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
}
else
{
string_id errorMessage = new string_id("base_player", "too_many_waypoints");
sendSystemMessage(self, errorMessage);
}
}
return SCRIPT_CONTINUE;
}
public int cmdSpaceWaypoint(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
String wpColor = null;
float displayCoordX = 0.0f;
float displayCoordZ = 0.0f;
boolean wpDifferentPlanet = false;
int parsedIndex = 0;
Vector parsedParams = new Vector();
parsedParams.setSize(0);
if (params != null && !params.equals(""))
{
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
while (st.hasMoreTokens())
{
String token = st.nextToken();
if (wpColor == null)
{
for (int i = 0; i < utils.WAYPOINT_COLORS.length; ++i)
{
if ((token.toLowerCase()).equals(utils.WAYPOINT_COLORS[i]))
{
wpColor = utils.WAYPOINT_COLORS[i];
break;
}
}
if (wpColor == null)
{
utils.addElement(parsedParams, token);
}
}
else
{
utils.addElement(parsedParams, token);
}
}
}
location spot = null;
if (parsedParams == null || (parsedParams.size() <= 0))
{
if (!isIdValid(target))
{
target = space_transition.getContainingShip(self);
}
else
{
obj_id objContainer = getTopMostContainer(target);
if (isIdValid(objContainer))
{
target = objContainer;
}
}
spot = getWorldLocation(target);
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
}
}
else
{
String wpGroundPlanet = null;
vector wpGroundPLanetBuildoutCoords = null;
String wpSpaceZone = null;
float wpCoord1 = Float.NEGATIVE_INFINITY;
float wpCoord2 = Float.NEGATIVE_INFINITY;
float wpCoord3 = Float.NEGATIVE_INFINITY;
wpCoord1 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord1 == Float.NEGATIVE_INFINITY)
{
String planet = ((String)parsedParams.get(parsedIndex)).toLowerCase();
for (int i = 0; i < WAYPOINT_GROUND_PLANETS_EXTERNAL.length; ++i)
{
if ((planet.equals(WAYPOINT_GROUND_PLANETS_EXTERNAL[i])) && (i < WAYPOINT_GROUND_PLANETS_INTERNAL.length))
{
wpGroundPlanet = WAYPOINT_GROUND_PLANETS_INTERNAL[i];
if (i < WAYPOINT_GROUND_PLANETS_BUILDOUT_COORDS.length)
{
wpGroundPLanetBuildoutCoords = WAYPOINT_GROUND_PLANETS_BUILDOUT_COORDS[i];
}
++parsedIndex;
break;
}
}
if (wpGroundPlanet == null)
{
for (int i = 0; i < WAYPOINT_SPACE_ZONES_EXTERNAL.length; ++i)
{
if ((planet.equals(WAYPOINT_SPACE_ZONES_EXTERNAL[i])) && (i < WAYPOINT_SPACE_ZONES_INTERNAL.length))
{
wpSpaceZone = WAYPOINT_SPACE_ZONES_INTERNAL[i];
++parsedIndex;
break;
}
}
}
if (((wpGroundPlanet != null) || (wpSpaceZone != null)) && (parsedIndex < parsedParams.size()))
{
wpCoord1 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
}
}
if (wpCoord1 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
if (parsedIndex < parsedParams.size())
{
wpCoord2 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord2 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
if (parsedIndex < parsedParams.size())
{
wpCoord3 = utils.stringToFloat(((String)parsedParams.get(parsedIndex)));
if (wpCoord3 != Float.NEGATIVE_INFINITY)
{
++parsedIndex;
}
else if (wpGroundPlanet == null)
{
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
--parsedIndex;
--parsedIndex;
}
}
else if (wpGroundPlanet == null)
{
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
--parsedIndex;
--parsedIndex;
}
}
else
{
wpCoord1 = Float.NEGATIVE_INFINITY;
--parsedIndex;
}
}
else
{
wpCoord1 = Float.NEGATIVE_INFINITY;
--parsedIndex;
}
}
if ((wpGroundPlanet != null) && ((wpCoord1 == Float.NEGATIVE_INFINITY) || (wpCoord2 == Float.NEGATIVE_INFINITY)))
{
wpGroundPlanet = null;
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
wpCoord3 = Float.NEGATIVE_INFINITY;
parsedIndex = 0;
}
if ((wpSpaceZone != null) && ((wpCoord1 == Float.NEGATIVE_INFINITY) || (wpCoord2 == Float.NEGATIVE_INFINITY) || (wpCoord3 == Float.NEGATIVE_INFINITY)))
{
wpSpaceZone = null;
wpCoord1 = Float.NEGATIVE_INFINITY;
wpCoord2 = Float.NEGATIVE_INFINITY;
wpCoord3 = Float.NEGATIVE_INFINITY;
parsedIndex = 0;
}
if (wpCoord1 == Float.NEGATIVE_INFINITY)
{
if (!isIdValid(target))
{
target = space_transition.getContainingShip(self);
}
else
{
obj_id objContainer = getTopMostContainer(target);
if (isIdValid(objContainer))
{
target = objContainer;
}
}
spot = getWorldLocation(target);
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
}
}
else
{
if (wpCoord3 == Float.NEGATIVE_INFINITY)
{
spot = new location(wpCoord1, 0.0f, wpCoord2);
}
else
{
spot = new location(wpCoord1, wpCoord2, wpCoord3);
}
if (spot != null)
{
displayCoordX = spot.x;
displayCoordZ = spot.z;
if ((wpGroundPlanet != null) && (!wpGroundPlanet.equals(spot.area)))
{
if (wpGroundPLanetBuildoutCoords != null)
{
float[] baInfo = getBuildoutAreaSizeAndCenter(wpGroundPLanetBuildoutCoords.x, wpGroundPLanetBuildoutCoords.z, wpGroundPlanet, true, true);
if ((baInfo != null) && (baInfo.length == 4))
{
final float halfWidth = baInfo[0] / 2;
if (displayCoordX > halfWidth)
{
displayCoordX = halfWidth;
}
else if (displayCoordX < -halfWidth)
{
displayCoordX = -halfWidth;
}
final float halfHeight = baInfo[1] / 2;
if (displayCoordZ > halfHeight)
{
displayCoordZ = halfHeight;
}
else if (displayCoordZ < -halfHeight)
{
displayCoordZ = -halfHeight;
}
spot.x = displayCoordX + baInfo[2];
spot.z = displayCoordZ + baInfo[3];
}
}
wpDifferentPlanet = true;
spot.area = wpGroundPlanet;
}
else if ((wpSpaceZone != null) && (!wpSpaceZone.equals(spot.area)))
{
wpDifferentPlanet = true;
spot.area = wpSpaceZone;
}
}
}
}
if (spot == null)
{
sendSystemMessageTestingOnly(self, "Waypoint: The system was unable to parse a valid waypoint location.");
}
else
{
obj_id wp = createWaypointInDatapadWithLimits(self, spot);
if (isIdValid(wp))
{
if (!wpDifferentPlanet)
{
setWaypointActive(wp, true);
}
setWaypointVisible(wp, true);
String wpName = null;
for (int i = parsedIndex; i < parsedParams.size(); ++i)
{
if (wpName == null)
{
wpName = ((String)parsedParams.get(i));
}
else
{
wpName += " ";
wpName += ((String)parsedParams.get(i));
}
}
if (wpName == null)
{
wpName = "Waypoint";
}
setWaypointName(wp, wpName);
if ((wpColor == null) && !wpDifferentPlanet)
{
wpColor = "space";
}
if (wpColor != null && !wpColor.equals(""))
{
setWaypointColor(wp, wpColor);
}
if (!wpDifferentPlanet)
{
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for location (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
else
{
final String localizedPlanetName = localize(new string_id("planet_n", spot.area));
sendSystemMessageTestingOnly(self, "Waypoint: New waypoint \"" + wpName + "\" created for location " + localizedPlanetName + " (" + (int)displayCoordX + ", " + (int)spot.y + ", " + (int)displayCoordZ + ")");
}
}
else
{
string_id errorMessage = new string_id("base_player", "too_many_waypoints");
sendSystemMessage(self, errorMessage);
}
}
return SCRIPT_CONTINUE;
}
public int cmdClearQueue(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
queueClear(self);
return SCRIPT_CONTINUE;
}
public int getPrototype(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(target))
{
return SCRIPT_CONTINUE;
}
if (!hasObjVar(target, "crafting.tool"))
{
return SCRIPT_CONTINUE;
}
messageTo(target, "getPrototype", null, 0, false);
return SCRIPT_CONTINUE;
}
public int cmdCityban(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (target == self)
{
return SCRIPT_CONTINUE;
}
if (!isPlayer(target))
{
return SCRIPT_CONTINUE;
}
int city_id = city.checkCity(self, true);
if (city_id == 0)
{
return SCRIPT_CONTINUE;
}
obj_id mayor = cityGetLeader(city_id);
if (!city.isMilitiaOfCity(self, city_id) && (self != mayor))
{
sendSystemMessage(self, SID_NOT_MILITIA);
return SCRIPT_CONTINUE;
}
if (isGod(target) || hasObjVar(target, "gm"))
{
sendSystemMessage(self, SID_NOT_CSR_BAN);
prose_package pp = prose.getPackage(SID_CSR_BAN_ATTEMPT_MSG, getFirstName(self), cityGetName(city_id));
sendSystemMessageProse(target, pp);
return SCRIPT_CONTINUE;
}
if (target == mayor)
{
return SCRIPT_CONTINUE;
}
if (city.isCitizenOfCity(target, city_id))
{
sendSystemMessage(self, SID_NOT_CITIZEN_BAN);
return SCRIPT_CONTINUE;
}
sendSystemMessage(target, SID_CITY_BANNED);
int[] banCities = getIntArrayObjVar(target, "city.banlist");
if (banCities == null)
{
int[] newBanCities = new int[1];
newBanCities[0] = city_id;
setObjVar(target, "city.banlist", newBanCities);
}
else
{
for (int banCity : banCities) {
if (banCity == city_id) {
return SCRIPT_CONTINUE;
}
}
int[] newBanCities = new int[banCities.length + 1];
for (int i = 0; i < banCities.length; i++)
{
newBanCities[i + 1] = banCities[i];
}
newBanCities[0] = city_id;
setObjVar(target, "city.banlist", newBanCities);
}
prose_package pp = prose.getPackage(SID_CITY_BAN_DONE, target);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int cmdCitypardon(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (target == self)
{
return SCRIPT_CONTINUE;
}
if (!isPlayer(target))
{
return SCRIPT_CONTINUE;
}
int city_id = city.checkCity(self, true);
if (city_id == 0)
{
return SCRIPT_CONTINUE;
}
obj_id mayor = cityGetLeader(city_id);
if (!city.isMilitiaOfCity(self, city_id) && (self != mayor))
{
sendSystemMessage(self, SID_NOT_MILITIA);
return SCRIPT_CONTINUE;
}
if (target == mayor)
{
return SCRIPT_CONTINUE;
}
int[] banCities = getIntArrayObjVar(target, "city.banlist");
if (banCities != null)
{
int found = 0;
for (int banCity1 : banCities) {
if (banCity1 == city_id) {
found = 1;
break;
}
}
if (found == 0)
{
return SCRIPT_CONTINUE;
}
if (banCities.length == 1)
{
removeObjVar(target, "city.banlist");
}
else
{
int j = 0;
int[] newBanCities = new int[banCities.length - 1];
for (int banCity : banCities) {
if (banCity != city_id) {
newBanCities[j] = banCity;
j++;
}
}
setObjVar(target, "city.banlist", newBanCities);
}
}
sendSystemMessage(target, SID_CITY_PARDONED);
prose_package pp = prose.getPackage(SID_CITY_PARDON_DONE, target);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int OnCityChanged(obj_id self, int oldCityId, int newCityId) throws InterruptedException
{
if ((oldCityId != 0) && cityExists(oldCityId)) {
sendSystemMessageProse(self, prose.getPackage(SID_LEAVE_CITY, cityGetName(oldCityId)));
return SCRIPT_CONTINUE;
}
String cityName = cityGetName(newCityId);
int city_rank = city.getCityRank(newCityId);
string_id rank_name = new string_id("city/city", "rank" + city_rank);
String spec = city.cityGetSpecString(newCityId);
prose_package pp = new prose_package();
pp.stringId = SID_ENTER_CITY;
pp.target.set(cityName);
String specpart = localize(rank_name);
if (spec != null && !spec.equals("null")) {
specpart = specpart + ", " + localize(new string_id("city/city", spec));
}
int factionId = cityGetFaction(newCityId);
if ((-615855020) == factionId) {
specpart = specpart + ", Imperial aligned";
} else if ((370444368) == factionId) {
specpart = specpart + ", Rebel aligned";
}
pp.other.set(specpart);
sendSystemMessageProse(self, pp);
obj_id cityHallId = cityGetCityHall(newCityId);
if(cityHallId != null && cityName != null && hasObjVar(cityHallId, "city_visitor_message")) {
String cityVisitorMessage = getStringObjVar(cityHallId, "city_visitor_message");
sendConsoleMessage(self, "City(" + cityName + ") Message: " + cityVisitorMessage + "\\#DFDFDF");
}
return SCRIPT_CONTINUE;
}
public int cmdGrantZoningRights(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (target == self)
{
return SCRIPT_CONTINUE;
}
if (!isPlayer(target))
{
return SCRIPT_CONTINUE;
}
utils.setScriptVar(self, "zoning_rights_target", target);
sui.listbox(self, self, "@city/city:zoning_rights_p", sui.OK_CANCEL, "@city/city:zoning_rights_t", ZONING_RIGHTS_ARRAY, "handleZoningRightsSelect", true);
return SCRIPT_CONTINUE;
}
public int handleZoningRightsSelect(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = sui.getPlayerId(params);
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
utils.removeScriptVar(player, "zoning_rights_target");
return SCRIPT_CONTINUE;
}
if (!utils.hasScriptVar(player, "zoning_rights_target"))
{
return SCRIPT_CONTINUE;
}
obj_id target = utils.getObjIdScriptVar(player, "zoning_rights_target");
utils.removeScriptVar(player, "zoning_rights_target");
obj_id top = getTopMostContainer(player);
int city_id = getCityAtLocation(getLocation(top), 0);
if (city_id <= 0)
{
sendSystemMessage(player, SID_NOT_IN_CITY_LIMITS);
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
return SCRIPT_CONTINUE;
}
switch (idx)
{
case 0:
handleCmdGrantZoningRights(player, target, city_id);
break;
case 1:
handleStorytellerZoningRights(player, target, city_id);
break;
}
return SCRIPT_CONTINUE;
}
public void handleCmdGrantZoningRights(obj_id player, obj_id target, int city_id) throws InterruptedException
{
if (!isIdValid(player) || !isIdValid(target))
{
return;
}
if (target == player)
{
return;
}
if (!isPlayer(target))
{
return;
}
obj_id mayor = cityGetLeader(city_id);
if ((mayor != player) && !city.isMilitiaOfCity(player, city_id))
{
sendSystemMessage(player, SID_GRANT_RIGHTS_FAIL);
return;
}
if (hasObjVar(target, "city.zoning_rights"))
{
int other_city_id = getIntObjVar(target, "city.zoning_rights");
if (other_city_id == city_id)
{
int curt = getGameTime();
int rights_time = getIntObjVar(target, "city.zoning_rights_time");
if (curt - rights_time < 24 * 60 * 60)
{
removeObjVar(target, "city.zoning_rights");
removeObjVar(target, "city.zoning_rights_time");
sendSystemMessage(player, SID_RIGHTS_REVOKED);
sendSystemMessage(target, SID_RIGHTS_REVOKED_OTHER);
return;
}
}
}
setObjVar(target, "city.zoning_rights", city_id);
setObjVar(target, "city.zoning_rights_time", getGameTime());
prose_package pp = prose.getPackage(SID_RIGHTS_GRANTED, cityGetName(city_id));
sendSystemMessageProse(target, pp);
pp = prose.getPackage(SID_RIGHTS_GRANTED_SELF, getName(target));
sendSystemMessageProse(player, pp);
return;
}
public void handleStorytellerZoningRights(obj_id player, obj_id target, int city_id) throws InterruptedException
{
if (!isIdValid(player) || !isIdValid(target))
{
return;
}
if (target == player)
{
return;
}
if (!isPlayer(target))
{
return;
}
obj_id mayor = cityGetLeader(city_id);
if ((mayor != player) && !city.isMilitiaOfCity(player, city_id))
{
sendSystemMessage(player, SID_ST_GRANT_RIGHTS_FAIL);
return;
}
if (hasObjVar(target, "city.st_zoning_rights"))
{
int[] city_id_array = getIntArrayObjVar(target, "city.st_zoning_rights");
int[] zoning_time_array = getIntArrayObjVar(target, "city.st_zoning_rights_time");
Vector ids = new Vector();
if (ids != null)
{
ids.setSize(city_id_array.length);
for (int _i = 0; _i < city_id_array.length; ++_i)
{
ids.set(_i, city_id_array[_i]);
}
}
Vector times = new Vector();
if (times != null)
{
times.setSize(zoning_time_array.length);
for (int _i = 0; _i < zoning_time_array.length; ++_i)
{
times.set(_i, zoning_time_array[_i]);
}
}
for (int i = 0; i < city_id_array.length; i++)
{
if (city_id_array[i] == city_id)
{
int curt = getGameTime();
if (curt - zoning_time_array[i] < 24 * 60 * 60)
{
ids.removeElementAt(i);
times.removeElementAt(i);
sendSystemMessage(player, SID_ST_RIGHTS_REVOKED);
sendSystemMessage(target, SID_ST_RIGHTS_REVOKED_OTHER);
int[] stampIdsArray = new int[0];
if (ids != null)
{
stampIdsArray = new int[ids.size()];
for (int _i = 0; _i < ids.size(); ++_i)
{
stampIdsArray[_i] = (Integer) ids.get(_i);
}
}
int[] stampTimesArray = new int[0];
if (times != null)
{
stampTimesArray = new int[times.size()];
for (int _i = 0; _i < times.size(); ++_i)
{
stampTimesArray[_i] = (Integer) times.get(_i);
}
}
setObjVar(target, "city.st_zoning_rights", stampIdsArray);
setObjVar(target, "city.st_zoning_rights_time", stampTimesArray);
return;
}
else
{
ids.removeElementAt(i);
times.removeElementAt(i);
int[] stampIdsArray = new int[0];
if (ids != null)
{
stampIdsArray = new int[ids.size()];
for (int _i = 0; _i < ids.size(); ++_i)
{
stampIdsArray[_i] = (Integer) ids.get(_i);
}
}
int[] stampTimesArray = new int[0];
if (times != null)
{
stampTimesArray = new int[times.size()];
for (int _i = 0; _i < times.size(); ++_i)
{
stampTimesArray[_i] = (Integer) times.get(_i);
}
}
setObjVar(target, "city.st_zoning_rights", stampIdsArray);
setObjVar(target, "city.st_zoning_rights_time", stampTimesArray);
return;
}
}
}
prose_package pp = prose.getPackage(SID_ST_RIGHTS_GRANTED, cityGetName(city_id));
sendSystemMessageProse(target, pp);
pp = prose.getPackage(SID_ST_RIGHTS_GRANTED_SELF, getName(target));
sendSystemMessageProse(player, pp);
utils.addElement(ids, city_id);
utils.addElement(times, getGameTime());
int[] stampIdsArray = new int[0];
if (ids != null)
{
stampIdsArray = new int[ids.size()];
for (int _i = 0; _i < ids.size(); ++_i)
{
stampIdsArray[_i] = (Integer) ids.get(_i);
}
}
int[] stampTimesArray = new int[0];
if (times != null)
{
stampTimesArray = new int[times.size()];
for (int _i = 0; _i < times.size(); ++_i)
{
stampTimesArray[_i] = (Integer) times.get(_i);
}
}
setObjVar(target, "city.st_zoning_rights", stampIdsArray);
setObjVar(target, "city.st_zoning_rights_time", stampTimesArray);
}
else
{
int[] id_array = new int[]
{
city_id
};
int[] time_array = new int[]
{
getGameTime()
};
setObjVar(target, "city.st_zoning_rights", id_array);
setObjVar(target, "city.st_zoning_rights_time", time_array);
prose_package pp = prose.getPackage(SID_ST_RIGHTS_GRANTED, cityGetName(city_id));
sendSystemMessageProse(target, pp);
pp = prose.getPackage(SID_ST_RIGHTS_GRANTED_SELF, getName(target));
sendSystemMessageProse(player, pp);
}
return;
}
public int cmdGrantStorytellerZoningRights(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!isIdValid(self) || !isIdValid(target))
{
return SCRIPT_CONTINUE;
}
obj_id player = self;
obj_id top = getTopMostContainer(player);
int city_id = getCityAtLocation(getLocation(top), 0);
if (city_id <= 0)
{
sendSystemMessage(player, SID_NOT_IN_CITY_LIMITS);
return SCRIPT_CONTINUE;
}
handleStorytellerZoningRights(player, target, city_id);
return SCRIPT_CONTINUE;
}
public int cmdInstallMissionTerminal(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
int city_id = city.checkMayorCity(self, true);
if (city_id == 0)
{
return SCRIPT_CONTINUE;
}
String[] rawTerminalTypes = dataTableGetStringColumn(CITY_MISSION_TERMINALS, "STRING");
String[] terminalTypes = new String[rawTerminalTypes.length + 1];
terminalTypes[0] = "@city/city:current_mt " + city.getMTCount(city_id) + "/" + city.getMaxMTCount(city_id);
for (int i = 0; i < rawTerminalTypes.length; i++)
{
terminalTypes[i + 1] = rawTerminalTypes[i];
}
sui.listbox(self, self, "@city/city:job_d", sui.OK_CANCEL, "@city/city:job_n", terminalTypes, "handleInstallMissionTerminal");
return SCRIPT_CONTINUE;
}
public int handleInstallMissionTerminal(obj_id self, dictionary params) throws InterruptedException
{
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
if (idx == 0)
{
return SCRIPT_CONTINUE;
}
int city_id = city.checkMayorCity(self, true);
if (city_id == 0)
{
return SCRIPT_CONTINUE;
}
int maxmt = city.getMaxMTCount(city_id);
int curmt = city.getMTCount(city_id);
if (curmt + 1 > maxmt)
{
sendSystemMessage(self, SID_NO_MORE_MT);
return SCRIPT_CONTINUE;
}
int factional = dataTableGetInt(CITY_MISSION_TERMINALS, idx - 1, "FACTION");
if ((factional == 1) && !hasSkill(self, "social_politician_martial_04"))
{
sendSystemMessage(self, SID_NO_FACTIONAL);
return SCRIPT_CONTINUE;
}
obj_id structure = getTopMostContainer(self);
if (isIdValid(structure) && (structure != self))
{
if (!player_structure.isCivic(structure))
{
sendSystemMessage(self, SID_CIVIC_ONLY);
return SCRIPT_CONTINUE;
}
}
int cost = 1000;
dictionary payparams = new dictionary();
payparams.put("city_id", city_id);
payparams.put("cost", cost);
payparams.put("idx", idx);
transferBankCreditsToNamedAccount(cityGetCityHall(city_id), money.ACCT_CITY, cost, "handleMTFeeSuccess", "handleMTFeeFail", payparams);
return SCRIPT_CONTINUE;
}
public int handleMTFeeSuccess(obj_id self, dictionary params) throws InterruptedException
{
int city_id = params.getInt("city_id");
int idx = params.getInt("idx");
String[] terminalTemplates = dataTableGetStringColumn(CITY_MISSION_TERMINALS, "TEMPLATE");
city.addMissionTerminal(city_id, self, terminalTemplates[idx - 1]);
return SCRIPT_CONTINUE;
}
public int handleMTFeeFail(obj_id self, dictionary params) throws InterruptedException
{
int cost = params.getInt("cost");
prose_package pp = prose.getPackage(SID_CITY_NO_MONEY, cost);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int handleSTFeeSuccess(obj_id self, dictionary params) throws InterruptedException
{
int city_id = params.getInt("city_id");
int idx = params.getInt("idx");
String[] trainerTemplates = dataTableGetStringColumn(CITY_SKILL_TRAINERS, "TEMPLATE");
city.addSkillTrainer(city_id, self, trainerTemplates[idx - 1]);
return SCRIPT_CONTINUE;
}
public int handleSTFeeFail(obj_id self, dictionary params) throws InterruptedException
{
int cost = params.getInt("cost");
prose_package pp = prose.getPackage(SID_CITY_NO_MONEY, cost);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int cmdCityInfo(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
int[] cities = getAllCityIds();
if ((cities == null) || (cities.length == 0))
{
sendSystemMessage(self, new string_id("city/city", "csr_no_cities"));
return SCRIPT_CONTINUE;
}
String[] planets =
{
"corellia",
"dantooine",
"lok",
"naboo",
"rori",
"talus",
"tatooine"
};
java.util.Map counts = new java.util.HashMap();
String[] cityPlanet = new String[cities.length];
String[] cityName = new String[cities.length];
for (int i = 0; i < cities.length; i++)
{
location cityLoc = cityGetLocation(cities[i]);
cityPlanet[i] = cityLoc.area;
cityName[i] = cityGetName(cities[i]);
int count = 0;
Integer icount = (Integer)counts.get(cityPlanet[i]);
if (icount != null)
{
count = icount;
}
count++;
counts.put(cityPlanet[i], count);
}
String[] planetList = new String[planets.length];
for (int i = 0; i < planets.length; i++)
{
Integer count = (Integer)counts.get(planets[i]);
if (count == null)
{
planetList[i] = "\\#888888 " + planets[i] + " (0)";
}
else
{
planetList[i] = "\\#00FF00 " + planets[i] + "\\#FFFFFF (" + count + ")";
}
}
utils.setScriptVar(self, "planetList", planetList);
sui.listbox(self, self, "@city/city:cityplanets_d", sui.OK_CANCEL, "@city/city:cityinfo_n", planetList, "handleSelectPlanet");
return SCRIPT_CONTINUE;
}
public int handleSelectPlanet(obj_id self, dictionary params) throws InterruptedException
{
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
String[] planets =
{
"corellia",
"dantooine",
"lok",
"naboo",
"rori",
"talus",
"tatooine"
};
String planet = planets[idx];
int[] cities = getAllCityIds();
int count = 0;
int[] planetCities = new int[cities.length];
for (int i = 0; i < cities.length; i++)
{
location cityLoc = cityGetLocation(cities[i]);
if (cityLoc.area.equals(planet))
{
planetCities[i] = 1;
count++;
}
else
{
planetCities[i] = 0;
}
}
String[] cityList = new String[count];
int[] planetCityIds = new int[count];
int j = 0;
for (int i = 0; i < planetCities.length; i++)
{
if (planetCities[i] == 1)
{
int cityRank = city.getCityRank(cities[i]);
String cityName = cityGetName(cities[i]);
planetCityIds[j] = cities[i];
cityList[j++] = "\\#00FF00 " + cityName + "\\#FFFFFF (" + cities[i] + ")" + "\\#BBBBBB Rank " + cityRank;
}
}
utils.setScriptVar(self, "cities", planetCityIds);
utils.setScriptVar(self, "cityList", cityList);
sui.listbox(self, self, "@city/city:cityinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", cityList, "handleSelectCity", true, false);
return SCRIPT_CONTINUE;
}
public int handleSelectCity(obj_id self, dictionary params) throws InterruptedException
{
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
String[] planetList = utils.getStringArrayScriptVar(self, "planetList");
sui.listbox(self, self, "@city/city:cityplanets_d", sui.OK_CANCEL, "@city/city:cityinfo_n", planetList, "handleSelectPlanet");
return SCRIPT_CONTINUE;
}
int[] cities = utils.getIntArrayScriptVar(self, "cities");
int city_id = cities[idx];
String cityName = cityGetName(city_id);
obj_id cityHall = cityGetCityHall(city_id);
location cityLoc = cityGetLocation(city_id);
obj_id mayor = cityGetLeader(city_id);
String mayorName = cityGetCitizenName(city_id, mayor);
obj_id[] citizens = cityGetCitizenIds(city_id);
obj_id[] structures = cityGetStructureIds(city_id);
int cityRank = city.getCityRank(city_id);
int numCitizens = citizens.length;
int numStructures = structures.length;
int incomeTax = cityGetIncomeTax(city_id);
int propertyTax = cityGetPropertyTax(city_id);
int salesTax = cityGetSalesTax(city_id);
String[] cityInfo = new String[9];
cityInfo[0] = "\\#00FF00 Name: \\#FFFFFF " + cityName;
cityInfo[1] = "\\#00FF00 Hall ID: \\#FFFFFF " + cityHall;
cityInfo[2] = "\\#00FF00 Location: \\#FFFFFF " + cityLoc;
cityInfo[3] = "\\#00FF00 Mayor: \\#FFFFFF " + mayorName + " (" + mayor + ")";
cityInfo[4] = "\\#00FF00 Rank: \\#FFFFFF " + cityRank;
cityInfo[5] = "\\#00FF00 # Citizens: \\#FFFFFF " + numCitizens;
cityInfo[6] = "\\#00FF00 # Structures: \\#FFFFFF " + numStructures;
cityInfo[7] = "\\#00FF00 Taxes (Income/Property/Sales): \\#FFFFFF " + incomeTax + "/" + propertyTax + "/" + salesTax;
cityInfo[8] = "\\#00FF00 Voting Information";
utils.setScriptVar(self, "cityinfo", city_id);
utils.setScriptVar(self, "cityloc", cityLoc);
utils.setScriptVar(self, "cityInfo", cityInfo);
sui.listbox(self, self, "@city/city:cityinfos_d", sui.OK_CANCEL, "@city/city:cityinfos_n", cityInfo, "handleSelectCityInfo");
return SCRIPT_CONTINUE;
}
public int handleSelectCityInfo(obj_id self, dictionary params) throws InterruptedException
{
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
String[] cityList = utils.getStringArrayScriptVar(self, "cityList");
sui.listbox(self, self, "@city/city:cityinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", cityList, "handleSelectCity", true, false);
return SCRIPT_CONTINUE;
}
int city_id = utils.getIntScriptVar(self, "cityinfo");
if (idx == 2)
{
location loc = utils.getLocationScriptVar(self, "cityloc");
warpPlayer(self, loc.area, loc.x, loc.y, loc.z, loc.cell, 0, 0, 0, null, false);
}
else if (idx == 5)
{
obj_id[] citizens = cityGetCitizenIds(city_id);
String[] civInfo = new String[citizens.length];
for (int i = 0; i < citizens.length; i++)
{
String militia = "";
if (city.hasMilitiaFlag(citizens[i], city_id))
{
militia = "\\#FF0000 Militia";
}
String citName = cityGetCitizenName(city_id, citizens[i]);
civInfo[i] = "\\#00FF00 " + citName + "\\#FFFFFF (" + citizens[i] + ")" + militia;
}
sui.listbox(self, self, "@city/city:civinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", civInfo, "handleNothing", true, false);
}
else if (idx == 6)
{
obj_id[] structures = cityGetStructureIds(city_id);
String[] strInfo = new String[structures.length];
for (int i = 0; i < structures.length; i++)
{
int typeflags = cityGetStructureType(city_id, structures[i]);
String typestring = "";
if (0 != (typeflags & city.SF_MISSION_TERMINAL))
{
typestring = "\\#AAAAAA (Mission Terminal)";
}
else if (0 != (typeflags & city.SF_SKILL_TRAINER))
{
typestring = "\\#AAAAAA (Skill Trainer)";
}
else if (0 != (typeflags & city.SF_DECORATION))
{
typestring = "\\#AAAAAA (Decoration)";
}
else if (0 != (typeflags & city.SF_COST_CITY_HALL))
{
typestring = "\\#AAAAAA (City Hall)";
}
strInfo[i] = "\\#00FF00 " + getTemplateName(structures[i]) + "\\#FFFFFF (" + structures[i] + ")" + typestring;
}
sui.listbox(self, self, "@city/city:strinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", strInfo, "handleNothing", true, false);
}
else if (idx == 8)
{
Vector vote_names = new Vector();
vote_names.setSize(0);
Vector vote_ids = new Vector();
vote_ids.setSize(0);
Vector vote_counts = new Vector();
vote_counts.setSize(0);
obj_id[] citizens = cityGetCitizenIds(city_id);
for (obj_id citizen : citizens) {
if (!isIdValid(citizen)) {
continue;
}
boolean found = false;
obj_id vote = cityGetCitizenAllegiance(city_id, citizen);
if (isIdValid(vote)) {
for (int j = 0; (j < vote_ids.size()); j++) {
if (((obj_id) vote_ids.get(j)) == vote) {
vote_counts.set(j, (Integer) vote_counts.get(j) + 1);
found = true;
break;
}
}
if (!found) {
utils.addElement(vote_ids, vote);
utils.addElement(vote_counts, 1);
utils.addElement(vote_names, cityGetCitizenName(city_id, citizen));
}
}
}
utils.setScriptVar(self, "votes_ids", vote_ids);
obj_id mayor = cityGetLeader(city_id);
String[] voteInfo = new String[vote_names.size()];
for (int i = 0; i < voteInfo.length; i++)
{
if (((obj_id)vote_ids.get(i)) == mayor)
{
voteInfo[i] = "\\#00FF00 " + ((String)vote_names.get(i)) + "\\#AAAAFF Votes: " + (Integer) vote_counts.get(i) + "\\#FFFFFF (" + ((obj_id)vote_ids.get(i)) + ") " + "\\#AAAAAA (Incumbent)";
}
else
{
voteInfo[i] = "\\#00FF00 " + ((String)vote_names.get(i)) + "\\#AAAAFF Votes: " + (Integer) vote_counts.get(i) + "\\#FFFFFF (" + ((obj_id)vote_ids.get(i)) + ")";
}
}
sui.listbox(self, self, "@city/city:voteinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", voteInfo, "handleSelectRunner", true, false);
}
return SCRIPT_CONTINUE;
}
public int handleSelectRunner(obj_id self, dictionary params) throws InterruptedException
{
int idx = sui.getListboxSelectedRow(params);
if (idx < 0)
{
idx = 0;
}
int btn = sui.getIntButtonPressed(params);
if (btn == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
int city_id = utils.getIntScriptVar(self, "cityinfo");
obj_id[] runners = utils.getObjIdArrayScriptVar(self, "votes_ids");
obj_id runner = runners[idx];
Vector vote_names = new Vector();
vote_names.setSize(0);
Vector vote_ids = new Vector();
vote_ids.setSize(0);
obj_id[] citizens = cityGetCitizenIds(city_id);
for (obj_id citizen : citizens) {
if (!isIdValid(citizen)) {
continue;
}
boolean found = false;
obj_id vote = cityGetCitizenAllegiance(city_id, citizen);
if (vote == runner) {
utils.addElement(vote_ids, citizen);
utils.addElement(vote_names, cityGetCitizenName(city_id, citizen));
}
}
String[] voteInfo = new String[vote_names.size()];
for (int i = 0; i < voteInfo.length; i++)
{
voteInfo[i] = "\\#00FF00 " + ((String)vote_names.get(i)) + "\\#FFFFFF (" + ((obj_id)vote_ids.get(i)) + ")";
}
sui.listbox(self, self, "@city/city:voterinfo_d", sui.OK_CANCEL, "@city/city:cityinfo_n", voteInfo, "handleNothing", true, false);
return SCRIPT_CONTINUE;
}
public int OnSkillGranted(obj_id self, String skillName) throws InterruptedException
{
if (!hasObjVar(self, "clickRespec.granting") && !hasObjVar(self, "npcRespec.inProgress"))
{
if (getLevel(self) <= 1)
{
playClientEffectObj(self, "clienteffect/skill_granted.cef", self, null);
showFlyText(self, new string_id("cbt_spam", "skill_up"), 2.5f, colors.YELLOWGREEN);
}
}
badge.grantMasterSkillBadge(self, skillName);
static_item.validateWornEffects(self);
if (skillName.endsWith("_novice"))
{
if (!setupNovicePilotSkill(self, skillName))
{
return SCRIPT_OVERRIDE;
}
}
if (!allowedBySpaceExpansion(self, skillName))
{
return SCRIPT_OVERRIDE;
}
if (skillName.startsWith("expertise_"))
{
expertise.cacheExpertiseProcReacList(self);
armor.recalculateArmorForPlayer(self);
if (utils.isProfession(self, utils.SMUGGLER))
{
messageTo(self, "applySmugglingBonuses", null, 1.0f, false);
}
if (utils.isProfession(self, utils.FORCE_SENSITIVE))
{
if (buff.isInStance(self))
{
buff.removeBuff(self, jedi.JEDI_STANCE);
buff.applyBuff(self, jedi.JEDI_STANCE);
}
if (buff.isInFocus(self))
{
buff.removeBuff(self, jedi.JEDI_FOCUS);
buff.applyBuff(self, jedi.JEDI_FOCUS);
}
}
if (!expertise.isProfAllowedSkill(self, skillName))
{
revokeSkillSilent(self, skillName);
return SCRIPT_OVERRIDE;
}
obj_id tempWeapon = getObjectInSlot(self, "hold_r");
if (isIdValid(tempWeapon))
{
weapons.adjustWeaponRangeForExpertise(self, tempWeapon, true);
}
skill.recalcPlayerPools(self, false);
}
recomputeCommandSeries(self);
beast_lib.verifyAndUpdateCalledBeastStats(self);
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
return SCRIPT_CONTINUE;
}
public int handleStartJediKnightTrials(obj_id self, dictionary params) throws InterruptedException
{
if (!hasScript(self, jedi_trials.KNIGHT_TRIALS_SCRIPT))
{
attachScript(self, jedi_trials.KNIGHT_TRIALS_SCRIPT);
}
return SCRIPT_CONTINUE;
}
public int OnStartCharacterUpload(obj_id self, byte[] results, modifiable_int resultSize, boolean w, boolean ao) throws InterruptedException
{
Boolean withItems = w;
dictionary params = new dictionary();
params.put("withItems", w);
params.put("allowOverride", ao);
Object[] triggerParams = new Object[2];
triggerParams[0] = self;
triggerParams[1] = params;
CustomerServiceLog("CharacterTransfer", "OnStartCharacterUpload(withItems=" + withItems + ", allowOverride=" + ao + ")");
resultSize.set(0);
String result = null;
try
{
int err = script_entry.runScripts("OnUploadCharacter", triggerParams);
if (err == SCRIPT_CONTINUE)
{
byte[] tmp = params.pack();
if (tmp.length < results.length)
{
int i;
for (i = 0; i < tmp.length; ++i)
{
results[i] = tmp[i];
}
resultSize.set(tmp.length);
}
else
{
CustomerServiceLog("CharacterTransfer", "OnStartCharacterUpload(withItems=" + withItems + ") tmp.length=" + tmp.length + " is >= results.length=" + results.length + ", not enough buffer space to pack the dictionary! character transfer will FAIL");
return SCRIPT_OVERRIDE;
}
}
else
{
CustomerServiceLog("CharacterTransfer", "OnStartCharacterUpload(withItems=" + withItems + ") runScripts(\"OnUploadCharacter\") returned SCRIPT_OVERRIDE, character transfer will FAIL");
final string_id mailTransferFailedScriptError = new string_id("character_transfer", "failed_internal_script_error");
final string_id mailTransferFailedSubject = new string_id("character_transfer", "failed_subject");
utils.sendMail(mailTransferFailedScriptError, mailTransferFailedScriptError, self, "System");
resultSize.set(0);
return SCRIPT_OVERRIDE;
}
}
catch(Throwable t)
{
CustomerServiceLog("CharacterTransfer", "OnStartCharacterUpload(withItems=" + withItems + ") : an exception was thrown, character transfer will FAIL : " + t);
final string_id mailTransferFailedScriptError = new string_id("character_transfer", "failed_internal_script_error");
final string_id mailTransferFailedSubject = new string_id("character_transfer", "failed_subject");
utils.sendMail(mailTransferFailedScriptError, mailTransferFailedScriptError, self, "System");
result = null;
return SCRIPT_OVERRIDE;
}
return SCRIPT_CONTINUE;
}
public boolean ctsCheckAndLogUniqueStaticItemAlreadyExists(obj_id container, dictionary itemDictionary) throws InterruptedException
{
if (isIdNull(container) || (itemDictionary == null))
{
return false;
}
if (itemDictionary.containsKey("staticItemName"))
{
String staticItemName = itemDictionary.getString("staticItemName");
if (staticItemName == null)
{
return false;
}
if (!static_item.isUniqueStaticItem(staticItemName))
{
return false;
}
obj_id containerOwnerId = getOwner(container);
if (isIdNull(containerOwnerId))
{
return false;
}
if (!isPlayer(containerOwnerId))
{
return false;
}
if (utils.playerHasStaticItemInBankOrInventory(containerOwnerId, staticItemName))
{
CustomerServiceLog("CharacterTransfer", "unique static item " + staticItemName + " already exists");
return true;
}
if (utils.playerHasStaticItemInAppearanceInventory(containerOwnerId, staticItemName))
{
CustomerServiceLog("CharacterTransfer", "unique static item " + staticItemName + " already exists");
return true;
}
}
return false;
}
public boolean ctsHasExceededResourceTransferLimit(int crateCountLimit, int currentCrateCount, long unitCountLimit, long currentUnitCount) throws InterruptedException
{
if ((crateCountLimit > 0) && (currentCrateCount >= crateCountLimit))
{
return true;
}
if ((unitCountLimit > 0L) && (currentUnitCount >= unitCountLimit))
{
return true;
}
return false;
}
public obj_id unpackItem(obj_id container, dictionary itemDictionary) throws InterruptedException
{
obj_id newItem = null;
try
{
obj_id self = getSelf();
if (!isIdValid(self))
{
return null;
}
LIVE_LOG("CharacterTransfer", "unpackItem(" + container + ", " + itemDictionary + ")");
if (!itemDictionary.containsKey("objectTemplateCrc"))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : could not retrieve object template crc from item dictionary. TRANSFER FAILED");
return null;
}
int objectTemplateCrc = itemDictionary.getInt("objectTemplateCrc");
String objectTemplateName = "UNKNOWN ITEM";
if (itemDictionary.containsKey("objectTemplateName"))
{
objectTemplateName = itemDictionary.getString("objectTemplateName");
}
boolean isEquipped = false;
if (itemDictionary.containsKey("isEquipped"))
{
isEquipped = itemDictionary.getBoolean("isEquipped");
}
boolean isAppearanceEquipped = false;
if (itemDictionary.containsKey("isAppearanceEquipped"))
{
isAppearanceEquipped = itemDictionary.getBoolean("isAppearanceEquipped");
}
if (itemDictionary.containsKey("staticItemName"))
{
String staticItemName = itemDictionary.getString("staticItemName");
newItem = static_item.createNewItemFunction(staticItemName, container);
CustomerServiceLog("CharacterTransfer", "unpackItem() : createNewItemFunction(" + staticItemName + ", " + container + ") = " + newItem);
}
else if (itemDictionary.containsKey("msoDraftSchematicCrc"))
{
int schematicCrc = itemDictionary.getInt("msoDraftSchematicCrc");
newItem = createSchematic(schematicCrc, container);
CustomerServiceLog("CharacterTransfer", "unpackItem() : createSchematic(" + schematicCrc + ", " + container + ") = " + newItem);
}
else if (itemDictionary.containsKey("schematicTemplateCrc"))
{
return null;
}
else
{
if (isEquipped || isAppearanceEquipped)
{
newItem = createObjectInInventoryAllowOverload(objectTemplateCrc, self);
CustomerServiceLog("CharacterTransfer", "unpackItem() : createObjectInInventoryAllowOverload(" + objectTemplateCrc + "=" + objectTemplateName + ", " + self + ") = " + newItem);
}
else if (itemDictionary.containsKey("bypassVolumeCheck"))
{
newItem = createObjectInInventoryAllowOverload(objectTemplateCrc, self);
}
else
{
int containerType = getContainerType(container);
if (containerType == 2)
{
newItem = createObjectOverloaded(objectTemplateCrc, container);
}
else
{
newItem = createObject(objectTemplateCrc, container, "");
}
CustomerServiceLog("CharacterTransfer", "unpackItem() : createObjectOverloaded(" + objectTemplateCrc + "=" + objectTemplateName + ", " + container + ") = " + newItem);
}
}
if (!isIdValid(newItem))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to create object in container " + container + ": " + itemDictionary);
return null;
}
else
{
setOwner(newItem, self);
utils.setLocalVar(newItem, "ctsBeingUnpacked", true);
}
if (!itemDictionary.containsKey("packedObjvars"))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to retrieve packedObjvars from item dictionary: " + itemDictionary);
return null;
}
String packedObjvars = itemDictionary.getString("packedObjvars");
if (packedObjvars == null)
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to get a non-null packedObjvars value from item dictionary: " + itemDictionary);
return null;
}
setPackedObjvars(newItem, packedObjvars);
int objectType = getGameObjectType(newItem);
if (!static_item.isStaticItem(newItem))
{
if (itemDictionary.containsKey("attribute_types") && itemDictionary.containsKey("attribute_values"))
{
int[] itemAttribTypes = itemDictionary.getIntArray("attribute_types");
int[] itemAttribValues = itemDictionary.getIntArray("attribute_values");
if (itemAttribTypes != null && itemAttribValues != null)
{
attribute[] itemAttribs = new attribute[itemAttribTypes.length];
int itemAttribsIter;
for (itemAttribsIter = 0; itemAttribsIter < itemAttribTypes.length; ++itemAttribsIter)
{
itemAttribs[itemAttribsIter] = new attribute(itemAttribTypes[itemAttribsIter], itemAttribValues[itemAttribsIter]);
}
if (!setMaxAttribs(newItem, itemAttribs))
{
CustomerServiceLog("CharacterTransfer", "setMaxAttribs( " + newItem + ", ...) FAILED");
}
if (!setAttribs(newItem, itemAttribs))
{
CustomerServiceLog("CharacterTransfer", "setAttribs( " + newItem + ", ...) FAILED");
}
}
}
if (itemDictionary.containsKey("maxHitpoints"))
{
int maxHitpoints = itemDictionary.getInt("maxHitpoints");
if (!setMaxHitpoints(newItem, maxHitpoints))
{
CustomerServiceLog("CharacterTransfer", "setMaxHitpoints( " + newItem + ", " + maxHitpoints + ") FAILED");
}
}
if (itemDictionary.containsKey("hitpoints"))
{
int hitpoints = itemDictionary.getInt("hitpoints");
if (!setInvulnerableHitpoints(newItem, hitpoints))
{
CustomerServiceLog("CharacterTransfer", "setInvulnerableHitpoints( " + newItem + ", " + hitpoints + ") FAILED");
}
}
if (itemDictionary.containsKey("conditionFlags"))
{
int conditionFlags = itemDictionary.getInt("conditionFlags");
if (!setCondition(newItem, conditionFlags))
{
CustomerServiceLog("CharacterTransfer", "setCondition( " + newItem + ", " + conditionFlags + ") FAILED");
}
}
if (itemDictionary.containsKey("scripts"))
{
String[] itemScripts = itemDictionary.getStringArray("scripts");
if (itemScripts != null && itemScripts.length > 0)
{
int scriptIter;
for (scriptIter = 0; scriptIter < itemScripts.length; ++scriptIter)
{
if (!hasScript(newItem, itemScripts[scriptIter]))
{
attachScript(newItem, itemScripts[scriptIter]);
}
}
}
}
if (itemDictionary.containsKey("objectName"))
{
String objectName = itemDictionary.getString("objectName");
setName(newItem, objectName);
}
if (itemDictionary.containsKey("isWeaponItem"))
{
boolean isWeaponItem = itemDictionary.getBoolean("isWeaponItem");
if (isWeaponItem)
{
if (itemDictionary.containsKey("currentVersion"))
{
int currentVersion = itemDictionary.getInt("currentVersion");
setConversionId(newItem, currentVersion);
}
int minDamage = itemDictionary.getInt("minDamage");
if (!setWeaponMinDamage(newItem, minDamage))
{
CustomerServiceLog("CharacterTransfer", "setWeaponMinDamage( " + newItem + ", " + minDamage + ") FAILED");
}
int maxDamage = itemDictionary.getInt("maxDamage");
if (!setWeaponMaxDamage(newItem, maxDamage))
{
CustomerServiceLog("CharacterTransfer", "setWeaponMaxDamage( " + newItem + ", " + maxDamage + ") FAILED");
}
float attackSpeed = itemDictionary.getFloat("attackSpeed");
if (!setWeaponAttackSpeed(newItem, attackSpeed))
{
CustomerServiceLog("CharacterTransfer", "setWeaponAttackSpeed( " + newItem + ", " + attackSpeed + ") FAILED");
}
range_info rangeInfo = new range_info();
rangeInfo.minRange = itemDictionary.getFloat("rangeInfoMinRange");
rangeInfo.maxRange = itemDictionary.getFloat("rangeInfoMaxRange");
if (!setWeaponRangeInfo(newItem, rangeInfo))
{
CustomerServiceLog("CharacterTransfer", "setWeaponRangeInfo( " + newItem + ", " + rangeInfo + ") FAILED");
}
float woundChance = itemDictionary.getFloat("woundChance");
if (!setWeaponWoundChance(newItem, woundChance))
{
CustomerServiceLog("CharacterTransfer", "setWeaponWoundChance( " + newItem + ", " + woundChance + ") FAILED");
}
float damageRadius = itemDictionary.getFloat("damageRadius");
if (!setWeaponDamageRadius(newItem, damageRadius))
{
CustomerServiceLog("CharacterTransfer", "setWeaponDamageRadius( " + newItem + ", " + damageRadius + ") FAILED");
}
int accuracy = itemDictionary.getInt("accuracy");
if (!setWeaponAccuracy(newItem, accuracy))
{
CustomerServiceLog("CharacterTransfer", "setWeaponAccuracy( " + newItem + ", " + accuracy + ") FAILED");
}
int elementalType = itemDictionary.getInt("elementalType");
if (!setWeaponElementalType(newItem, elementalType))
{
CustomerServiceLog("CharacterTransfer", "setWeaponElemetalType( " + newItem + ", " + elementalType + ") FAILED");
}
int elementalValue = itemDictionary.getInt("elementalValue");
if (!setWeaponElementalValue(newItem, elementalValue))
{
CustomerServiceLog("CharacterTransfer", "setWeaponElemetalValue( " + newItem + ", " + elementalValue + ") FAILED");
}
int damageType = itemDictionary.getInt("damageType");
if (!setWeaponDamageType(newItem, damageType))
{
CustomerServiceLog("CharacterTransfer", "setWeaponDamageType( " + newItem + ", " + damageType + ") FAILED");
}
int attackCost = itemDictionary.getInt("attackCost");
if (!setWeaponAttackCost(newItem, attackCost))
{
CustomerServiceLog("CharacterTransfer", "setWeaponAttackCost( " + newItem + ", " + attackCost + ") FAILED");
}
weapons.setWeaponData(newItem);
}
}
if (itemDictionary.containsKey("colorData"))
{
dictionary colorData = itemDictionary.getDictionary("colorData");
hue.setPalcolorData(newItem, colorData);
}
if (itemDictionary.containsKey("customAppearance"))
{
byte[] customAppearance = itemDictionary.getByteArray("customAppearance");
setAutoVariableFromByteStream(newItem, "customAppearance", customAppearance);
}
if (itemDictionary.containsKey("appearanceData"))
{
byte[] appearanceData = itemDictionary.getByteArray("appearanceData");
setAutoVariableFromByteStream(newItem, "appearanceData", appearanceData);
}
}
if (hasCondition(newItem, CONDITION_LOCKED))
{
clearUserAccessList(newItem);
clearGuildAccessList(newItem);
addUserToAccessList(newItem, self);
if (hasObjVar(newItem, "lock_owner"))
{
setObjVar(newItem, "lock_owner", self);
}
if (hasObjVar(newItem, "lock_owner_name"))
{
setObjVar(newItem, "lock_owner_name", getName(self));
}
}
if (itemDictionary.containsKey("count"))
{
int count = itemDictionary.getInt("count");
if (!setCount(newItem, count))
{
CustomerServiceLog("CharacterTransfer", "setCount( " + newItem + ", " + count + ") FAILED");
}
}
if (itemDictionary.containsKey("bankBalance"))
{
byte[] bankBalance = itemDictionary.getByteArray("bankBalance");
setAutoVariableFromByteStream(newItem, "bankBalance", bankBalance);
}
if (isGameObjectTypeOf(objectType, GOT_ship))
{
if ((objectTemplateName != null) && (objectTemplateName.endsWith("player_sorosuub_space_yacht.iff")))
{
}
else
{
space_crafting.uninstallAll(newItem);
}
float mass = itemDictionary.getFloat("ship_mass");
float maxHp = itemDictionary.getFloat("ship_hp");
float currentHp = itemDictionary.getFloat("ship_current_hp");
setChassisComponentMassMaximum(newItem, mass);
setShipMaximumChassisHitPoints(newItem, maxHp);
setShipCurrentChassisHitPoints(newItem, currentHp);
if (itemDictionary.containsKey("droid_control_device"))
{
obj_id objDroidControlDevice = itemDictionary.getObjId("droid_control_device");
if (isIdValid(objDroidControlDevice))
{
utils.setLocalVar(newItem, "droid_control_device", objDroidControlDevice);
}
}
if (itemDictionary.containsKey("shipComponents"))
{
obj_id datapad = getContainedBy(container);
obj_id player = getOwner(datapad);
if (isIdValid(player))
{
dictionary componentsDictionary = itemDictionary.getDictionary("shipComponents");
if (componentsDictionary != null)
{
Set keySet = componentsDictionary.keySet();
Integer[] slots = new Integer[keySet.size()];
keySet.toArray(slots);
for (Integer slot : slots) {
dictionary componentDictionary = componentsDictionary.getDictionary(slot);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(player, componentDictionary)) {
continue;
}
componentDictionary.put("bypassVolumeCheck", 1);
obj_id newComponent = unpackItem(player, componentsDictionary.getDictionary(slot));
if (isIdValid(newComponent)) {
shipInstallComponent(player, newItem, slot, newComponent);
}
}
}
}
}
}
if (itemDictionary.containsKey("isCrystalOwner"))
{
if (hasObjVar(self, "preserve_existing_lightsaber_crystal_owner_objvar"))
{
String namePrefix = getStringObjVar(self, "preserve_existing_lightsaber_crystal_owner_objvar");
if ((namePrefix != null) && (namePrefix.length() > 0) && !namePrefix.equals("none"))
{
String existingName = getStringObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_NAME);
if ((existingName != null) && (existingName.length() > 0))
{
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_NAME, namePrefix + existingName);
}
}
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_ID, 0);
}
else
{
if (itemDictionary.getBoolean("isCrystalOwner"))
{
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_ID, self);
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_NAME, getName(self));
}
else
{
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_ID, 0);
setObjVar(newItem, jedi.VAR_CRYSTAL_OWNER_NAME, "None");
}
}
String name = getEncodedName(newItem);
if (name.startsWith("@"))
{
name = localize(getNameStringId(newItem));
}
name = "\\" + colors_hex.GREEN + "" + name + " (tuned)\\#.";
setName(newItem, name);
}
if (itemDictionary.containsKey("biolink"))
{
obj_id biolink = itemDictionary.getObjId("biolink");
if (itemDictionary.getBoolean("isBiolinkOwner"))
{
biolink = self;
}
if (!setBioLink(newItem, biolink))
{
CustomerServiceLog("CharacterTransfer", "setBioLink( " + newItem + ", " + biolink + ") FAILED");
}
}
if (isGameObjectTypeOf(objectType, GOT_resource_container))
{
if (objectType != GOT_resource_container_pseudo)
{
if (itemDictionary.containsKey("resourceQuantity") && itemDictionary.containsKey("resourceData"))
{
int quantity = itemDictionary.getInt("resourceQuantity");
String resourceData = itemDictionary.getString("resourceData");
CustomerServiceLog("CharacterTransfer", "unpackItem() : created resource container " + newItem + ": resourceQuantity=" + quantity + ", resourceData=" + resourceData);
setResourceCtsData(newItem, quantity, resourceData);
}
}
else
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : created pseudo resource container " + newItem);
}
}
if (objectType == GOT_misc_factory_crate)
{
recomputeCrateAttributes(newItem);
}
if ((objectType == GOT_data_manufacturing_schematic) && itemDictionary.containsKey("msoCtsPackUnpack"))
{
byte[] data = itemDictionary.getByteArray("msoCtsPackUnpack");
setAutoVariableFromByteStream(newItem, "msoCtsPackUnpack", data);
if (itemDictionary.containsKey("msoConversionId"))
{
setConversionId(newItem, itemDictionary.getInt("msoConversionId"));
}
}
if (objectType == GOT_data_mission_object)
{
if (itemDictionary.containsKey("moCtsPackUnpack"))
{
byte[] data = itemDictionary.getByteArray("moCtsPackUnpack");
setAutoVariableFromByteStream(newItem, "moCtsPackUnpack", data);
}
if (itemDictionary.containsKey("missionAge"))
{
int timeCreated = (getGameTime() - itemDictionary.getInt("missionAge"));
if (timeCreated <= 0)
{
timeCreated = 1;
}
setObjVar(newItem, "time_created", timeCreated);
}
}
if (objectType == GOT_chronicles_quest_holocron || objectType == GOT_chronicles_quest_holocron_recipe)
{
if (itemDictionary.containsKey("PGCPacked"))
{
byte[] data = itemDictionary.getByteArray("PGCPacked");
setAutoVariableFromByteStream(newItem, "PGCPacked", data);
}
if (objectType == GOT_chronicles_quest_holocron_recipe)
{
setPlayerQuestCreator(newItem, self);
setObjVar(newItem, pgc_quests.PCG_QUEST_CREATOR_ID_OBJVAR, self);
setObjVar(newItem, pgc_quests.PCG_QUEST_CREATOR_STATIONID_OBJVAR, getPlayerStationId(self));
setObjVar(newItem, pgc_quests.PCG_QUEST_CREATOR_NAME_OBJVAR, getName(self));
}
}
if ((objectTemplateCrc == (2082993503)) && (hasObjVar(newItem, incubator.RESOURCE_POWER_NAME)))
{
if (itemDictionary.containsKey("incubatorResourceData"))
{
byte[] data = itemDictionary.getByteArray("incubatorResourceData");
setAutoVariableFromByteStream(newItem, "incubatorResourceData", data);
}
}
if (objectType == GOT_installation_factory)
{
setObjVar(newItem, player_structure.VAR_OWNER, getPlayerName(self));
String[] admin_list = new String[1];
admin_list[0] = self.toString();
setObjVar(newItem, player_structure.VAR_ADMIN_LIST, admin_list);
setObjVar(newItem, player_structure.VAR_HOPPER_LIST, admin_list);
removeObjVar(newItem, player_structure.VAR_ENTER_LIST);
removeObjVar(newItem, player_structure.VAR_BAN_LIST);
removeObjVar(newItem, player_structure.VAR_VENDOR_LIST);
removeObjVar(newItem, "city_id");
removeObjVar(newItem, player_structure.VAR_IS_GUILD_HALL);
if (itemDictionary.containsKey("powerValue"))
{
byte[] powerValue = itemDictionary.getByteArray("powerValue");
setAutoVariableFromByteStream(newItem, "powerValue", powerValue);
}
if (itemDictionary.containsKey("powerRate"))
{
byte[] powerRate = itemDictionary.getByteArray("powerRate");
setAutoVariableFromByteStream(newItem, "powerRate", powerRate);
}
if (itemDictionary.containsKey("manf_schematic"))
{
dictionary dictManfSchematic = itemDictionary.getDictionary("manf_schematic");
if (dictManfSchematic != null)
{
obj_id manfSchematic = unpackItem(utils.getPlayerDatapad(self), dictManfSchematic);
if (isIdValid(manfSchematic))
{
transferManufactureSchematicToStation(manfSchematic, newItem);
}
}
}
if (itemDictionary.containsKey("ingr_hopper_contents"))
{
dictionary dictIngrHopperContents = itemDictionary.getDictionary("ingr_hopper_contents");
if (dictIngrHopperContents != null)
{
obj_id ingrHopper = getObjectInSlot(newItem, "ingredient_hopper");
if (isIdValid(ingrHopper))
{
Set keySet = dictIngrHopperContents.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
dictionary containedItemDict = dictIngrHopperContents.getDictionary(key);
if (containedItemDict == null) {
continue;
}
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(ingrHopper, containedItemDict)) {
continue;
}
unpackItem(ingrHopper, containedItemDict);
}
}
}
}
if (itemDictionary.containsKey("output_hopper_contents"))
{
dictionary dictOutputHopperContents = itemDictionary.getDictionary("output_hopper_contents");
if (dictOutputHopperContents != null)
{
obj_id outputHopper = getObjectInSlot(newItem, "output_hopper");
if (isIdValid(outputHopper))
{
Set keySet = dictOutputHopperContents.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
dictionary containedItemDict = dictOutputHopperContents.getDictionary(key);
if (containedItemDict == null) {
continue;
}
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(outputHopper, containedItemDict)) {
continue;
}
unpackItem(outputHopper, containedItemDict);
}
}
}
}
}
if (objectType == GOT_misc_crafting_station)
{
if (itemDictionary.containsKey("input_hopper_contents"))
{
dictionary dictInputHopperContents = itemDictionary.getDictionary("input_hopper_contents");
if (dictInputHopperContents != null)
{
obj_id inputHopper = getObjectInSlot(newItem, "ingredient_hopper");
if (isIdValid(inputHopper))
{
Set keySet = dictInputHopperContents.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
dictionary containedItemDict = dictInputHopperContents.getDictionary(key);
if (containedItemDict == null) {
continue;
}
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(inputHopper, containedItemDict)) {
continue;
}
unpackItem(inputHopper, containedItemDict);
}
}
}
}
}
if (itemDictionary.containsKey("isBlueprintDesigner"))
{
if (itemDictionary.getBoolean("isBlueprintDesigner"))
{
setObjVar(newItem, storyteller.BLUEPRINT_AUTHOR_OBJVAR, self);
}
else
{
CustomerServiceLog("CharacterTransfer", "Player is not blueprint's designer: player = " + self + "; blueprint = " + newItem);
}
}
if (isGameObjectTypeOf(objectType, GOT_building))
{
if (itemDictionary.containsKey("lotOverlimitStructureId"))
{
obj_id lotOverlimitStructureOnCharacter = getObjIdObjVar(self, "lotOverlimit.structure_id");
if (isIdValid(lotOverlimitStructureOnCharacter))
{
obj_id lotOverlimitStructure = itemDictionary.getObjId("lotOverlimitStructureId");
if (isIdValid(lotOverlimitStructure) && (lotOverlimitStructure == lotOverlimitStructureOnCharacter))
{
setObjVar(self, "lotOverlimit.structure_id", newItem);
setObjVar(self, "lotOverlimit.structure_location", "Datapad");
}
}
}
}
if (itemDictionary.containsKey("house_contents"))
{
setObjVar(newItem, player_structure.VAR_OWNER, getPlayerName(self));
String[] admin_list = new String[1];
admin_list[0] = self.toString();
setObjVar(newItem, player_structure.VAR_ADMIN_LIST, admin_list);
removeObjVar(newItem, player_structure.VAR_ENTER_LIST);
removeObjVar(newItem, player_structure.VAR_BAN_LIST);
removeObjVar(newItem, player_structure.VAR_VENDOR_LIST);
removeObjVar(newItem, player_structure.VAR_HOPPER_LIST);
removeObjVar(newItem, player_structure.VAR_IS_GUILD_HALL);
dictionary contentsDict = itemDictionary.getDictionary("house_contents");
Set keySet = contentsDict.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() FAILED: key " + key + " not valid in house contents dictionary: " + contentsDict);
return null;
}
dictionary containedItemDict = contentsDict.getDictionary(key);
if (containedItemDict == null) {
continue;
}
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(utils.getInventoryContainer(self), containedItemDict)) {
continue;
}
containedItemDict.put("bypassVolumeCheck", 1);
obj_id house_item = unpackItem(utils.getInventoryContainer(self), containedItemDict);
if (isIdValid(house_item)) {
location loc = containedItemDict.getLocation("house_cell_loc");
String cell_name = containedItemDict.getString("house_cell");
obj_id cellid = getCellId(newItem, cell_name);
if (isIdValid(cellid)) {
loc.cell = cellid;
setLocation(house_item, loc);
}
float[] quaternion = containedItemDict.getFloatArray("quaternion");
if ((quaternion != null) && (quaternion.length == 4)) {
setQuaternion(house_item, quaternion[0], quaternion[1], quaternion[2], quaternion[3]);
}
requestSendPositionUpdate(house_item);
}
}
if (isGameObjectTypeOf(objectType, GOT_building))
{
loadBuildingContents(self, newItem);
}
}
if ((objectType == GOT_installation_factory) || isGameObjectTypeOf(objectType, GOT_building))
{
if (hasObjVar(newItem, player_structure.VAR_LAST_MAINTANENCE))
{
setObjVar(newItem, player_structure.VAR_LAST_MAINTANENCE, getGameTime());
}
}
int containerType = itemDictionary.getInt("containerType");
if (containerType > 0 || jedi.isLightsaber(newItem) || isGameObjectTypeOf(objectType, GOT_data_ship_control_device))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : unpacking contents of container " + newItem + "(type " + containerType + ")");
if (itemDictionary.containsKey("contents"))
{
if (objectTemplateName.equals("object/intangible/ship/navicomputer_1.iff") || objectTemplateName.equals("object/intangible/ship/navicomputer_2.iff") || objectTemplateName.equals("object/intangible/ship/navicomputer_3.iff") || objectTemplateName.equals("object/intangible/ship/navicomputer_4.iff") || objectTemplateName.equals("object/intangible/ship/navicomputer_5.iff") || objectTemplateName.equals("object/intangible/ship/navicomputer_6.iff"))
{
obj_id datapad = utils.getDatapad(newItem);
if (isIdValid(datapad))
{
destroyObject(datapad);
}
}
dictionary contentsDict = itemDictionary.getDictionary("contents");
Set keySet = contentsDict.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() FAILED: key " + key + " not valid in container contents dictionary: " + contentsDict);
return null;
}
dictionary containedItemDict = contentsDict.getDictionary(key);
obj_id unpackedItem = null;
obj_id saberInv = null;
if (jedi.isLightsaber(newItem)) {
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(container, containedItemDict)) {
continue;
}
saberInv = getObjectInSlot(newItem, "saber_inv");
unpackedItem = unpackItem(container, containedItemDict);
} else {
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(newItem, containedItemDict)) {
continue;
}
unpackedItem = unpackItem(newItem, containedItemDict);
}
if (!isIdValid(unpackedItem)) {
if (isIdNull(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : unpackItem() returned NULL id for item: " + containedItemDict);
return null;
} else {
CustomerServiceLog("CharacterTransfer", "unpackItem() : unpackItem() returned invalid id " + unpackedItem + " for item: " + containedItemDict);
continue;
}
}
if (isIdValid(saberInv)) {
if (jedi.hasColorCrystal(newItem) && jedi.isColorCrystal(unpackedItem)) {
removeObjVar(newItem, jedi.VAR_SABER_BASE + "." + jedi.VAR_COLOR);
}
if (!putIn(unpackedItem, saberInv)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to move lightsaber crystal " + unpackedItem + " into saber " + saberInv);
}
}
}
}
if (objectType == GOT_misc_factory_crate)
{
boolean factoryCrateHasCreator = false;
if (itemDictionary.containsKey("factoryCrateHasCreator"))
{
factoryCrateHasCreator = itemDictionary.getBoolean("factoryCrateHasCreator");
}
boolean factoryCrateCreatorIsSelf = false;
if (itemDictionary.containsKey("factoryCrateCreatorIsSelf"))
{
factoryCrateCreatorIsSelf = itemDictionary.getBoolean("factoryCrateCreatorIsSelf");
}
obj_id factoryCrateCreator = (factoryCrateCreatorIsSelf ? self : obj_id.getObjId(10000000));
if (factoryCrateHasCreator)
{
setCrafter(newItem, factoryCrateCreator);
}
obj_id[] factoryCrateContents = getContents(newItem);
if ((factoryCrateContents != null) && (factoryCrateContents.length > 0))
{
for (obj_id factoryCrateContent : factoryCrateContents) {
setCrafter(factoryCrateContent, factoryCrateCreator);
}
}
}
}
if (isEquipped)
{
if (equip(newItem, self))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : equipped item (" + newItem + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to equip item (" + newItem + ")");
}
}
if (isAppearanceEquipped)
{
obj_id appearanceInventory = getAppearanceInventory(self);
if (!isIdValid(appearanceInventory))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : Failed to equip appearance item (" + newItem + "). Character has no valid appearance inventory.");
return null;
}
if (putIn(newItem, appearanceInventory))
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : equipped appearance item (" + newItem + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to equip appearance item (" + newItem + ")");
}
}
if (isGameObjectTypeOf(objectType, GOT_data_ship_control_device))
{
obj_id ship = space_transition.getShipFromShipControlDevice(newItem);
setObjVar(newItem, "ship", ship);
setObjVar(ship, "shipControlDevice", newItem);
if (!isIdValid(ship))
{
return null;
}
}
}
catch(Throwable t)
{
CustomerServiceLog("CharacterTransfer", "unpackItem() FAILED : container=" + container + ", itemDictionary=" + itemDictionary + " EXCEPTION: " + t);
return null;
}
utils.removeLocalVar(newItem, "ctsBeingUnpacked");
return newItem;
}
public obj_id unpackWaypoint(dictionary waypointDictionary) throws InterruptedException
{
obj_id self = getSelf();
if (!isIdValid(self))
{
return null;
}
obj_id newWaypoint = null;
location loc = waypointDictionary.getLocation("location");
if (!isIdNull(loc.cell))
{
return null;
}
location newloc = new location(loc.x, loc.y, loc.z, loc.area);
String name = waypointDictionary.getString("name");
newWaypoint = createWaypointInDatapad(self, newloc);
setWaypointName(newWaypoint, name);
return newWaypoint;
}
public boolean itemIsAllowedToTransfer(obj_id item, obj_id player) throws InterruptedException
{
if (!isValidId(item) || !isValidId(player))
{
return false;
}
if (utils.hasScriptVar(player, cts.SCRIPTVAR_CTS_ITEM_ID))
{
final obj_id ctsItem = utils.getObjIdScriptVar(player, cts.SCRIPTVAR_CTS_ITEM_ID);
if (isValidId(ctsItem) && (ctsItem == item))
{
return false;
}
}
return true;
}
public dictionary packWaypoint(obj_id waypoint) throws InterruptedException
{
obj_id self = getSelf();
dictionary waypointDictionary = null;
try
{
waypointDictionary = new dictionary();
if (!isValidId(waypoint))
{
return null;
}
location loc = getWaypointLocation(waypoint);
waypointDictionary.put("location", loc);
String name = getWaypointName(waypoint);
waypointDictionary.put("name", name);
}
catch(Throwable t)
{
return null;
}
return waypointDictionary;
}
public void doItemPrepack(obj_id item) throws InterruptedException
{
if (!isValidId(item))
{
return;
}
{
dictionary d = new dictionary();
int result = script_entry.callMessageHandlers("OnPack", item, d);
if (result != SCRIPT_CONTINUE)
{
utils.setScriptVar(item, "do_not_pack", 1);
return;
}
}
obj_id[] contents = null;
contents = getContents(item);
if (contents != null)
{
for (obj_id content : contents) {
doItemPrepack(content);
}
}
}
public dictionary packItem(obj_id item, int objectType, boolean allowOverride, int resourceCrateCountLimit, int[] resourceCurrentCrateCount, long resourceUnitCountLimit, long[] resourceCurrentUnitCount) throws InterruptedException
{
dictionary itemDictionary = null;
try
{
final obj_id self = getSelf();
if ((getName(item)).equalsIgnoreCase("object/cell/cell.iff"))
{
return null;
}
if (hasCondition(item, CONDITION_VENDOR))
{
return null;
}
if (utils.hasScriptVar(item, "do_not_pack"))
{
return null;
}
String name = getName(item);
String objectTypeName = getGameObjectTypeName(objectType);
String objectTemplateName = getTemplateName(item);
int objectTemplateCrc = getObjectTemplateCrc(objectTemplateName);
if (objectType == GOT_misc_factory_crate)
{
int factoryCrateCount = getCount(item);
if (factoryCrateCount <= 0)
{
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") skipping factory crate because it has a count of " + factoryCrateCount);
return null;
}
obj_id[] factoryCrateContents = getContents(item);
if ((factoryCrateContents == null) || (factoryCrateContents.length <= 0))
{
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") skipping factory crate because it is empty");
return null;
}
String crateItemTemplateName = getTemplateName(factoryCrateContents[0]);
if (crateItemTemplateName == null || crateItemTemplateName.length() <= 0)
{
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") skipping factory crate because its contents returned a null string as a template name.");
return null;
}
if (crateItemTemplateName.equals("object/tangible/food/crafted/dessert_felbar.iff") || crateItemTemplateName.equals("object/tangible/food/crafted/dessert_blap_biscuit.iff") || crateItemTemplateName.equals("object/tangible/food/crafted/dessert_pastebread.iff") || crateItemTemplateName.equals("object/tangible/food/crafted/dessert_sweesonberry_rolls.iff"))
{
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") skipping factory crate because it contained old pet food(" + crateItemTemplateName + "), that is supposed to be deleted.");
return null;
}
}
itemDictionary = new dictionary();
itemDictionary.put("objectTemplateCrc", objectTemplateCrc);
itemDictionary.put("objectTemplateName", objectTemplateName);
String packedObjvars = getPackedObjvars(item);
itemDictionary.put("packedObjvars", packedObjvars);
String staticItemName = getStaticItemName(item);
if (static_item.isStaticItem(item) && !staticItemName.equals("item_respec_token_01_01"))
{
itemDictionary.put("staticItemName", staticItemName);
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ", " + allowOverride + ") staticItemName=" + staticItemName);
}
else
{
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ", " + allowOverride + ") objectTemplateName=" + objectTemplateName + ", name=" + name);
String[] itemScripts = getScriptList(item);
if (itemScripts != null && itemScripts.length > 0)
{
for (int i = 0; i < itemScripts.length; ++i)
{
if (itemScripts[i].startsWith("script."))
{
itemScripts[i] = itemScripts[i].substring(7);
}
}
itemDictionary.put("scripts", itemScripts);
}
String objectName = getAssignedName(item);
if (objectName == null || objectName.equals(""))
{
objectName = utils.packStringId(getNameStringId(item));
}
if (objectName == null)
{
objectName = "";
}
itemDictionary.put("objectName", objectName);
dictionary colorData = hue.getPalcolorData(item);
if (colorData != null)
{
itemDictionary.put("colorData", colorData);
}
if (isTangible(item))
{
byte[] customAppearance = getByteStreamFromAutoVariable(item, "customAppearance");
if (customAppearance != null && customAppearance.length > 0)
{
itemDictionary.put("customAppearance", customAppearance);
}
byte[] appearanceData = getByteStreamFromAutoVariable(item, "appearanceData");
if (appearanceData != null && appearanceData.length > 0)
{
itemDictionary.put("appearanceData", appearanceData);
}
if (isMob(item))
{
CustomerServiceLog("CharacterTransfer", "packItem() : getAttribs(" + item + ") on a creature object");
attribute[] itemAttribs = getAttribs(item);
if (itemAttribs != null)
{
int[] itemAttribTypes = new int[itemAttribs.length];
int[] itemAttribValues = new int[itemAttribs.length];
int itemAttribsIter;
CustomerServiceLog("CharacterTransfer", "packItem() : retrieving " + itemAttribs.length + " attributes");
for (itemAttribsIter = 0; itemAttribsIter < itemAttribs.length; ++itemAttribsIter)
{
itemAttribTypes[itemAttribsIter] = itemAttribs[itemAttribsIter].getType();
itemAttribValues[itemAttribsIter] = getUnmodifiedMaxAttrib(item, itemAttribsIter);
CustomerServiceLog("CharacterTransfer", "packItem() : itemAttribTypes[" + itemAttribsIter + "] = " + itemAttribTypes[itemAttribsIter] + ", itemAttribsValues[" + itemAttribsIter + "] = " + itemAttribValues[itemAttribsIter]);
}
itemDictionary.put("attribute_types", itemAttribTypes);
itemDictionary.put("attribute_values", itemAttribValues);
}
else
{
CustomerServiceLog("CharacterTransfer", "packItem() FAILED: getAttribs(" + item + ") = null.");
return null;
}
}
else
{
int maxHitpoints = getMaxHitpoints(item);
if (maxHitpoints != ATTRIB_ERROR)
{
itemDictionary.put("maxHitpoints", maxHitpoints);
}
else
{
CustomerServiceLog("CharacterTransfer", "packItem() FAILED: getMaxHitpoints(" + item + ") failed!");
return null;
}
int hitpoints = getHitpoints(item);
if (hitpoints != ATTRIB_ERROR)
{
itemDictionary.put("hitpoints", hitpoints);
}
else
{
CustomerServiceLog("CharacterTransfer", "packItem() FAILED: getHitpoints(" + item + ") failed!");
return null;
}
itemDictionary.put("conditionFlags", getCondition(item));
boolean isWeaponItem = isWeapon(item);
itemDictionary.put("isWeaponItem", isWeaponItem);
if (isWeaponItem)
{
int currentVersion = getConversionId(item);
if (currentVersion > 0)
{
itemDictionary.put("currentVersion", currentVersion);
}
int minDamage = getWeaponMinDamage(item);
itemDictionary.put("minDamage", minDamage);
int maxDamage = getWeaponMaxDamage(item);
itemDictionary.put("maxDamage", maxDamage);
float attackSpeed = getWeaponAttackSpeed(item);
itemDictionary.put("attackSpeed", attackSpeed);
range_info rangeInfo = getWeaponRangeInfo(item);
itemDictionary.put("rangeInfoMinRange", rangeInfo.minRange);
itemDictionary.put("rangeInfoMaxRange", rangeInfo.maxRange);
float woundChance = getWeaponWoundChance(item);
itemDictionary.put("woundChance", woundChance);
float damageRadius = getWeaponDamageRadius(item);
itemDictionary.put("damageRadius", damageRadius);
int accuracy = getWeaponAccuracy(item);
itemDictionary.put("accuracy", accuracy);
int elementalType = getWeaponElementalType(item);
itemDictionary.put("elementalType", elementalType);
int elementalValue = getWeaponElementalValue(item);
itemDictionary.put("elementalValue", elementalValue);
int damageType = getWeaponDamageType(item);
itemDictionary.put("damageType", damageType);
int attackCost = getWeaponAttackCost(item);
itemDictionary.put("attackCost", attackCost);
}
}
}
}
int count = getCount(item);
if (count > 0)
{
itemDictionary.put("count", count);
}
if (getBankBalance(item) > 0)
{
byte[] bankBalance = getByteStreamFromAutoVariable(item, "bankBalance");
if (bankBalance != null && bankBalance.length > 0)
{
itemDictionary.put("bankBalance", bankBalance);
}
}
if (hasScript(item, "systems.jedi.jedi_saber_component"))
{
if (jedi.isCrystalTuned(item))
{
if (jedi.isCrystalOwner(self, item))
{
itemDictionary.put("isCrystalOwner", true);
}
else
{
itemDictionary.put("isCrystalOwner", false);
}
}
}
obj_id biolink = getBioLink(item);
if (isIdValid(biolink))
{
itemDictionary.put("biolink", biolink);
if (biolink == self)
{
itemDictionary.put("isBiolinkOwner", true);
}
else
{
itemDictionary.put("isBiolinkOwner", false);
}
}
if (hasObjVar(item, storyteller.BLUEPRINT_AUTHOR_OBJVAR))
{
obj_id blueprintDesigner = getObjIdObjVar(item, storyteller.BLUEPRINT_AUTHOR_OBJVAR);
if (isIdValid(blueprintDesigner))
{
if (blueprintDesigner == self)
{
itemDictionary.put("isBlueprintDesigner", true);
}
else
{
itemDictionary.put("isBlueprintDesigner", false);
}
}
}
if (getContainedBy(item) == self)
{
itemDictionary.put("isEquipped", true);
}
else
{
itemDictionary.put("isEquipped", false);
}
obj_id appearanceInventory = getAppearanceInventory(self);
if (isIdValid(appearanceInventory) && getContainedBy(item) == appearanceInventory)
{
itemDictionary.put("isAppearanceEquipped", true);
}
else
{
itemDictionary.put("isAppearanceEquipped", false);
}
if (isGameObjectTypeOf(objectType, GOT_resource_container))
{
if (objectType != GOT_resource_container_pseudo)
{
int quantity = getResourceContainerQuantity(item);
if (quantity <= 0)
{
return null;
}
String resourceData = getResourceCtsData(item);
if ((resourceData == null) || (resourceData.length() <= 0))
{
return null;
}
if ((resourceUnitCountLimit > 0L) && ((resourceCurrentUnitCount[0] + quantity) > resourceUnitCountLimit))
{
quantity = (int)(resourceUnitCountLimit - resourceCurrentUnitCount[0]);
if (quantity <= 0)
{
return null;
}
}
resourceCurrentCrateCount[0] = resourceCurrentCrateCount[0] + 1;
resourceCurrentUnitCount[0] = resourceCurrentUnitCount[0] + quantity;
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") packed resource container (" + resourceCurrentCrateCount[0] + "/" + resourceCrateCountLimit + ") (" + resourceCurrentUnitCount[0] + "/" + resourceUnitCountLimit + "): resourceQuantity=" + quantity + ", resourceData=" + resourceData);
itemDictionary.put("resourceQuantity", quantity);
itemDictionary.put("resourceData", resourceData);
}
else
{
resourceCurrentCrateCount[0] = resourceCurrentCrateCount[0] + 1;
CustomerServiceLog("CharacterTransfer", "packItem(" + item + ") packed pseudo resource container (" + resourceCurrentCrateCount[0] + "/" + resourceCrateCountLimit + ") (" + resourceCurrentUnitCount[0] + "/" + resourceUnitCountLimit + ")");
}
}
if (objectType == GOT_misc_factory_crate)
{
obj_id factoryCrateCreator = getCrafter(item);
if (isIdValid(factoryCrateCreator))
{
itemDictionary.put("factoryCrateHasCreator", true);
if (factoryCrateCreator == self)
{
itemDictionary.put("factoryCrateCreatorIsSelf", true);
}
else
{
itemDictionary.put("factoryCrateCreatorIsSelf", false);
}
}
else
{
itemDictionary.put("factoryCrateHasCreator", false);
}
}
if (objectType == GOT_data_manufacturing_schematic)
{
byte[] data = getByteStreamFromAutoVariable(item, "msoCtsPackUnpack");
if (data != null && data.length > 0)
{
itemDictionary.put("msoCtsPackUnpack", data);
}
itemDictionary.put("msoDraftSchematicCrc", getDraftSchematicCrc(item));
int conversionId = getConversionId(item);
if (conversionId > 0)
{
itemDictionary.put("msoConversionId", conversionId);
}
}
if (objectType == GOT_data_mission_object)
{
byte[] data = getByteStreamFromAutoVariable(item, "moCtsPackUnpack");
if (data != null && data.length > 0)
{
itemDictionary.put("moCtsPackUnpack", data);
}
if (hasObjVar(item, "time_created"))
{
int secondsSinceCreated = (getGameTime() - getIntObjVar(item, "time_created"));
if (secondsSinceCreated < 0)
{
secondsSinceCreated = 0;
}
itemDictionary.put("missionAge", secondsSinceCreated);
}
}
if (objectType == GOT_chronicles_quest_holocron || objectType == GOT_chronicles_quest_holocron_recipe)
{
byte[] data = getByteStreamFromAutoVariable(item, "PGCPacked");
if (data != null && data.length > 0)
{
itemDictionary.put("PGCPacked", data);
}
}
if ((objectTemplateCrc == (2082993503)) && (hasObjVar(item, incubator.RESOURCE_POWER_NAME)))
{
byte[] data = getByteStreamFromAutoVariable(item, "incubatorResourceData");
if (data != null && data.length > 0)
{
itemDictionary.put("incubatorResourceData", data);
}
}
if (isGameObjectTypeOf(objectType, GOT_ship))
{
float mass = getChassisComponentMassMaximum(item);
float hp = getShipMaximumChassisHitPoints(item);
float currentHp = getShipCurrentChassisHitPoints(item);
itemDictionary.put("ship_mass", mass);
itemDictionary.put("ship_hp", hp);
itemDictionary.put("ship_current_hp", currentHp);
obj_id objDroidControlDevice = getDroidControlDeviceForShip(item);
if (isIdValid(objDroidControlDevice))
{
itemDictionary.put("droid_control_device", objDroidControlDevice);
}
if ((objectTemplateName != null) && (objectTemplateName.endsWith("player_sorosuub_space_yacht.iff")))
{
}
else
{
dictionary shipDict = new dictionary();
int[] shipSlots = getShipChassisSlots(item);
for (int shipSlot : shipSlots) {
if (isShipSlotInstalled(item, shipSlot)) {
obj_id component = shipUninstallComponentAllowOverload(getOwner(item), item, shipSlot, utils.getInventoryContainer(self));
if (isIdValid(component)) {
int ot = getGameObjectType(component);
if (itemIsAllowedToTransfer(component, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0]))) {
dictionary component_dict = packItem(component, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (component_dict != null) {
shipDict.put(shipSlot, component_dict);
}
}
}
shipInstallComponent(getOwner(item), item, shipSlot, component);
}
}
itemDictionary.put("shipComponents", shipDict);
}
}
if (objectType == GOT_installation_factory)
{
byte[] powerValue = getByteStreamFromAutoVariable(item, "powerValue");
if (powerValue != null && powerValue.length > 0)
{
itemDictionary.put("powerValue", powerValue);
}
byte[] powerRate = getByteStreamFromAutoVariable(item, "powerRate");
if (powerRate != null && powerRate.length > 0)
{
itemDictionary.put("powerRate", powerRate);
}
obj_id manfSchematic = getObjectInSlot(item, "manf_schematic");
if (isIdValid(manfSchematic))
{
int ot = getGameObjectType(manfSchematic);
if (itemIsAllowedToTransfer(manfSchematic, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary dictManfSchematic = packItem(manfSchematic, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (dictManfSchematic != null)
{
itemDictionary.put("manf_schematic", dictManfSchematic);
}
}
}
obj_id ingrHopper = getObjectInSlot(item, "ingredient_hopper");
if (isIdValid(ingrHopper))
{
obj_id ingrHopperContents[] = getContents(ingrHopper);
if (ingrHopperContents != null && ingrHopperContents.length > 0)
{
dictionary dictIngrHopperContents = new dictionary();
for (obj_id ingrHopperContent : ingrHopperContents) {
if (!isObjectPersisted(ingrHopperContent)) {
continue;
}
int ot = getGameObjectType(ingrHopperContent);
if (itemIsAllowedToTransfer(ingrHopperContent, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0]))) {
dictionary dictIngrHopperContent = packItem(ingrHopperContent, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (dictIngrHopperContent != null) {
dictIngrHopperContents.put(ingrHopperContent, dictIngrHopperContent);
}
}
}
itemDictionary.put("ingr_hopper_contents", dictIngrHopperContents);
}
}
obj_id outputHopper = getObjectInSlot(item, "output_hopper");
if (isIdValid(outputHopper))
{
obj_id outputHopperContents[] = getContents(outputHopper);
if (outputHopperContents != null && outputHopperContents.length > 0)
{
dictionary dictOutputHopperContents = new dictionary();
for (obj_id outputHopperContent : outputHopperContents) {
if (!isObjectPersisted(outputHopperContent)) {
continue;
}
int ot = getGameObjectType(outputHopperContent);
if (itemIsAllowedToTransfer(outputHopperContent, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0]))) {
dictionary dictOutputHopperContent = packItem(outputHopperContent, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (dictOutputHopperContent != null) {
dictOutputHopperContents.put(outputHopperContent, dictOutputHopperContent);
}
}
}
itemDictionary.put("output_hopper_contents", dictOutputHopperContents);
}
}
}
if (objectType == GOT_misc_crafting_station)
{
obj_id inputHopper = getObjectInSlot(item, "ingredient_hopper");
if (isIdValid(inputHopper))
{
obj_id inputHopperContents[] = getContents(inputHopper);
if (inputHopperContents != null && inputHopperContents.length > 0)
{
dictionary dictInputHopperContents = new dictionary();
for (obj_id inputHopperContent : inputHopperContents) {
if (!isObjectPersisted(inputHopperContent)) {
continue;
}
int ot = getGameObjectType(inputHopperContent);
if (itemIsAllowedToTransfer(inputHopperContent, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0]))) {
dictionary dictInputHopperContent = packItem(inputHopperContent, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (dictInputHopperContent != null) {
dictInputHopperContents.put(inputHopperContent, dictInputHopperContent);
}
}
}
itemDictionary.put("input_hopper_contents", dictInputHopperContents);
}
}
}
{
if (isGameObjectTypeOf(objectType, GOT_building) || space_utils.isPobType(objectTemplateName))
{
if (isGameObjectTypeOf(objectType, GOT_building))
{
obj_id lotOverlimitStructure = getObjIdObjVar(self, "lotOverlimit.structure_id");
if (isIdValid(lotOverlimitStructure) && (lotOverlimitStructure == item))
{
itemDictionary.put("lotOverlimitStructureId", item);
}
}
String[] cells = getCellNames(item);
if (cells != null)
{
dictionary house_contents = new dictionary();
for (String cell : cells) {
obj_id cellid = getCellId(item, cell);
obj_id contents[] = getContents(cellid);
if (contents != null && contents.length > 0) {
for (obj_id house_item : contents) {
if (!isObjectPersisted(house_item)) {
continue;
}
int ot = getGameObjectType(house_item);
if (itemIsAllowedToTransfer(house_item, self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0]))) {
dictionary house_item_dict = packItem(house_item, ot, true, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (house_item_dict != null) {
house_item_dict.put("house_cell", cell);
house_item_dict.put("house_cell_loc", getLocation(house_item));
float[] quaternion = getQuaternion(house_item);
if ((quaternion != null) && (quaternion.length == 4)) {
house_item_dict.put("quaternion", quaternion);
}
house_contents.put(house_item, house_item_dict);
}
}
}
}
}
itemDictionary.put("house_contents", house_contents);
}
}
}
int containerType = getContainerType(item);
itemDictionary.put("containerType", containerType);
obj_id[] contents = null;
obj_id saberInv = null;
boolean b_is_ship = false;
if (containerType == 2 && !isGameObjectTypeOf(objectType, GOT_building))
{
contents = getContents(item);
}
else if (jedi.isLightsaber(item))
{
saberInv = getObjectInSlot(item, "saber_inv");
if (isIdValid(saberInv))
{
contents = getContents(saberInv);
}
}
else if (isGameObjectTypeOf(objectType, GOT_data_ship_control_device))
{
contents = getContents(item);
}
else if (isGameObjectTypeOf(objectType, GOT_ship))
{
contents = getContents(item);
}
else if (isGameObjectTypeOf(objectType, GOT_data_droid_control_device))
{
contents = getContents(item);
}
else if (isGameObjectTypeOf(objectType, GOT_data_house_control_device))
{
contents = getContents(item);
}
if (contents != null && contents.length > 0)
{
dictionary container = new dictionary();
int i = 0;
for (i = 0; i < contents.length; ++i)
{
if (guild.STR_GUILD_REMOTE_DEVICE.equals(getTemplateName(contents[i])))
{
continue;
}
int ot = getGameObjectType(contents[i]);
if (itemIsAllowedToTransfer(contents[i], self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary containedItem = packItem(contents[i], ot, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (containedItem != null)
{
container.put(contents[i], containedItem);
if (objectType == GOT_misc_factory_crate)
{
break;
}
}
else
{
if (!allowOverride)
{
return null;
}
}
}
}
itemDictionary.put("contents", container);
}
}
catch(Throwable t)
{
CustomerServiceLog("CharacterTransfer", "packItem() FAILED: item=" + item + ", allowOverride=" + allowOverride + ", itemDictionary= " + itemDictionary + " EXCEPTION: " + t);
return null;
}
return itemDictionary;
}
public int OnUploadCharacter(obj_id self, dictionary characterData) throws InterruptedException
{
int resourceCrateCountLimit = 0;
String config = getConfigSetting("GameServer", "ctsResourceCrateCountLimit");
if (config != null)
{
resourceCrateCountLimit = utils.stringToInt(config);
}
int[] resourceCurrentCrateCount = new int[1];
resourceCurrentCrateCount[0] = 0;
long resourceUnitCountLimit = 0L;
config = getConfigSetting("GameServer", "ctsResourceUnitCountLimit");
if (config != null)
{
resourceUnitCountLimit = utils.stringToLong(config);
}
long[] resourceCurrentUnitCount = new long[1];
resourceCurrentUnitCount[0] = 0L;
try
{
final boolean withItems = characterData.getBoolean("withItems");
final boolean allowOverride = characterData.getBoolean("allowOverride");
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter(withItems=" + withItems + ", allowOverride=" + allowOverride + ") begin");
if (hasObjVar(self, "disableLoginCtsInProgress"))
{
int timeOut = getIntObjVar(self, "disableLoginCtsInProgress");
if (timeOut > getGameTime())
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED because of CTS completed or in progress for character");
return SCRIPT_OVERRIDE;
}
else
{
removeObjVar(self, "disableLoginCtsInProgress");
}
}
if (hasObjVar(self, "disableLoginCtsCompleted"))
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED because of CTS completed or in progress for character");
return SCRIPT_OVERRIDE;
}
String skillTemplate = getSkillTemplate(self);
if (skillTemplate == null || skillTemplate.equals("") || skillTemplate.equals("a"))
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : skillTemplate not set! (pre-NGE source characters must choose profession prior to transfer) TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
characterData.put("skillTemplate", skillTemplate);
int combatLevel = getLevel(self);
characterData.put("combatLevel", combatLevel);
String workingSkill = getWorkingSkill(self);
if (workingSkill == null || workingSkill.equals(""))
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : workingSkill not set! (pre-NGE source characters must choose profession prior to transfer) TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
characterData.put("workingSkill", workingSkill);
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : skillTemplate == " + skillTemplate + ", workingSkill == " + workingSkill + ", combatLevel == " + combatLevel);
characterData.put("commands", getCommandListingForPlayer(self));
characterData.put("skills", getSkillListingForPlayer(self));
final String[] strObjVarLists =
{
"badge",
factions.FACTION,
groundquests.questBaseObjVar,
"live_conversions",
space_flags.IMPERIAL_CORELLIA,
space_flags.IMPERIAL_NABOO,
space_flags.IMPERIAL_TATOOINE,
space_flags.PRIVATEER_CORELLIA,
space_flags.PRIVATEER_NABOO,
space_flags.PRIVATEER_TATOOINE,
space_flags.REBEL_CORELLIA,
space_flags.REBEL_NABOO,
space_flags.REBEL_TATOOINE,
space_quest.QUEST_STATUS,
township.OBJVAR_NOVA_ORION_FACTION,
pgc_quests.PGC_GRANTED_ROADMAP_REWARDS_OBJVAR,
"spaceTrackFlagListName",
"veteran_rewards",
"_notskill.schematics",
"_notskill.mods",
"respec_voucher",
"mand.acknowledge",
respec.EXPERTISE_VERSION_OBJVAR,
"publish_gift",
"legacy",
temp_schematic.VAR_TEMP_SCHEMATIC_BASE,
"cts",
"ctsHistory",
utils.CTS_OBJVAR_HISTORY,
"hoth.flawless_reward",
"instance_player_protected_data",
"bornOnGalaxyTitleSet",
"beast_master",
"playerRespec",
"respecsBought",
player_structure.HOUSE_PACKUP_ARRAY_OBJVAR,
"space.dantooine_landing_permission",
"lotOverlimit",
"renameCharacterRequest.requestTime",
"galactic_reserve",
"preserve_existing_lightsaber_crystal_owner_objvar",
"testing_only_force_cts_failure_testing_only"
};
dictionary experiencePoints = getExperiencePoints(self);
if (experiencePoints != null)
{
characterData.put("experience_points", experiencePoints);
}
characterData.put("pvp_type", pvpGetType(self));
characterData.put("pvp_aligned_faction", pvpGetAlignedFaction(self));
characterData.put("gcw_current_point", pvpGetCurrentGcwPoints(self));
characterData.put("gcw_current_rating", pvpGetCurrentGcwRating(self));
characterData.put("gcw_current_pvp_kill", pvpGetCurrentPvpKills(self));
characterData.put("gcw_lifetime_point", pvpGetLifetimeGcwPoints(self));
characterData.put("gcw_max_imperial_rating", pvpGetMaxGcwImperialRating(self));
characterData.put("gcw_max_rebel_rating", pvpGetMaxGcwRebelRating(self));
characterData.put("gcw_lifetime_pvp_kill", pvpGetLifetimePvpKills(self));
characterData.put("gcw_next_rating_calc_time", pvpGetNextGcwRatingCalcTime(self));
characterData.put("source_character_oid", self);
characterData.put("source_character_name", getName(self));
characterData.put("source_cluster", getClusterName());
if (hasObjVar(self, "freeCtsTransactionRuleName"))
{
characterData.put("freeCtsTransactionRuleName", getStringObjVar(self, "freeCtsTransactionRuleName"));
}
obj_id playerObject = getPlayerObject(self);
if (isIdValid(playerObject))
{
byte[] quests = getByteStreamFromAutoVariable(playerObject, "quests");
if (quests != null && quests.length > 0)
{
characterData.put("quests", quests);
}
byte[] activeQuests = getByteStreamFromAutoVariable(playerObject, "activeQuests");
if (activeQuests != null && activeQuests.length > 0)
{
characterData.put("activeQuests", activeQuests);
}
byte[] completedQuests = getByteStreamFromAutoVariable(playerObject, "completedQuests");
if (completedQuests != null && completedQuests.length > 0)
{
characterData.put("completedQuests", completedQuests);
}
byte[] currentQuest = getByteStreamFromAutoVariable(playerObject, "currentQuest");
if (currentQuest != null && currentQuest.length > 0)
{
characterData.put("currentQuest", currentQuest);
}
byte[] bornDate = getByteStreamFromAutoVariable(playerObject, "bornDate");
if (bornDate != null && bornDate.length > 0)
{
characterData.put("bornDate", bornDate);
}
byte[] playedTime = getByteStreamFromAutoVariable(playerObject, "playedTime");
if (playedTime != null && playedTime.length > 0)
{
characterData.put("playedTime", playedTime);
}
byte[] food = getByteStreamFromAutoVariable(playerObject, "food");
if (food != null && food.length > 0)
{
characterData.put("food", food);
}
byte[] maxFood = getByteStreamFromAutoVariable(playerObject, "maxFood");
if (maxFood != null && maxFood.length > 0)
{
characterData.put("maxFood", maxFood);
}
byte[] drink = getByteStreamFromAutoVariable(playerObject, "drink");
if (drink != null && drink.length > 0)
{
characterData.put("drink", drink);
}
byte[] maxDrink = getByteStreamFromAutoVariable(playerObject, "maxDrink");
if (maxDrink != null && maxDrink.length > 0)
{
characterData.put("maxDrink", maxDrink);
}
byte[] meds = getByteStreamFromAutoVariable(playerObject, "meds");
if (meds != null && meds.length > 0)
{
characterData.put("meds", meds);
}
byte[] maxMeds = getByteStreamFromAutoVariable(playerObject, "maxMeds");
if (maxMeds != null && maxMeds.length > 0)
{
characterData.put("maxMeds", maxMeds);
}
byte[] matchMakingPersonalProfileId = getByteStreamFromAutoVariable(playerObject, "matchMakingPersonalProfileId");
if (matchMakingPersonalProfileId != null && matchMakingPersonalProfileId.length > 0)
{
characterData.put("matchMakingPersonalProfileId", matchMakingPersonalProfileId);
}
byte[] matchMakingCharacterProfileId = getByteStreamFromAutoVariable(playerObject, "matchMakingCharacterProfileId");
if (matchMakingCharacterProfileId != null && matchMakingCharacterProfileId.length > 0)
{
characterData.put("matchMakingCharacterProfileId", matchMakingCharacterProfileId);
}
byte[] playerObjectWorkingSkill = getByteStreamFromAutoVariable(playerObject, "workingSkill");
if (playerObjectWorkingSkill != null && playerObjectWorkingSkill.length > 0)
{
characterData.put("workingSkill", playerObjectWorkingSkill);
}
byte[] playerObjectSkillTemplate = getByteStreamFromAutoVariable(playerObject, "skillTemplate");
if (playerObjectSkillTemplate != null && playerObjectSkillTemplate.length > 0)
{
characterData.put("skillTemplate", playerObjectSkillTemplate);
}
byte[] collections = getByteStreamFromAutoVariable(playerObject, "collections");
if (collections != null && collections.length > 0)
{
characterData.put("collections", collections);
}
byte[] collections2 = getByteStreamFromAutoVariable(playerObject, "collections2");
if (collections2 != null && collections2.length > 0)
{
characterData.put("collections2", collections2);
}
}
int[] quests = questGetAllActiveQuestIds(self);
dictionary questWaypoints = new dictionary();
for (int questCrc : quests) {
for (int taskId = 0; taskId < 16; ++taskId) {
obj_id waypoint = groundquests.getObjIdForWaypoint(questCrc, taskId, self);
obj_id entryWaypoint = groundquests.getObjIdForEntranceWaypoint(questCrc, taskId, self);
if (isIdValid(waypoint)) {
questWaypoints.put(waypoint, 1);
}
if (isIdValid(entryWaypoint)) {
questWaypoints.put(entryWaypoint, 1);
}
}
}
dictionary staticQuestWaypoints = new dictionary();
String[] questIDs = dataTableGetStringColumnNoDefaults("datatables/npc/static_quest/all_quest_names.iff", "quest_ids");
if ((questIDs != null) && (questIDs.length > 0))
{
for (String questID : questIDs) {
if (hasObjVar(self, questID + ".waypoint")) {
obj_id waypoint = getObjIdObjVar(self, questID + ".waypoint");
if (isIdValid(waypoint)) {
staticQuestWaypoints.put(waypoint, 1);
}
}
if (hasObjVar(self, questID + ".waypointhome")) {
obj_id waypoint = getObjIdObjVar(self, questID + ".waypointhome");
if (isIdValid(waypoint)) {
staticQuestWaypoints.put(waypoint, 1);
}
}
}
}
obj_id[] waypoints = getWaypointsInDatapad(self);
if (waypoints != null && waypoints.length > 0)
{
dictionary waypointDictionaries = new dictionary();
for (obj_id waypoint : waypoints) {
if (questWaypoints.containsKey(waypoint)) {
continue;
}
if (staticQuestWaypoints.containsKey(waypoint)) {
continue;
}
waypointDictionaries.put(waypoint, packWaypoint(waypoint));
}
characterData.put("waypoints", waypointDictionaries);
}
if (withItems == true)
{
int moneyFromCash = getCashBalance(self);
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter : packing " + moneyFromCash + " credits from cash");
characterData.put("moneyFromCash", moneyFromCash);
int moneyFromBank = getBankBalance(self);
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter : packing " + moneyFromBank + " credits from bank");
characterData.put("moneyFromBank", moneyFromBank);
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing inventory items");
dictionary inventoryDictionary = new dictionary();
obj_id[] inventoryItems = getInventoryAndEquipment(self);
obj_id playerInventory = getObjectInSlot(self, "inventory");
if (inventoryItems != null && inventoryItems.length > 0)
{
int inventoryIter = 0;
for (inventoryIter = 0; inventoryIter < inventoryItems.length; ++inventoryIter)
{
doItemPrepack(inventoryItems[inventoryIter]);
}
for (inventoryIter = 0; inventoryIter < inventoryItems.length; ++inventoryIter)
{
if (!isValidId(inventoryItems[inventoryIter]))
{
continue;
}
if (hasScript(inventoryItems[inventoryIter], "event.housepackup.cts_greeter"))
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of inventory item " + inventoryItems[inventoryIter] + ". This item was a unique object for Free CTS and cannot be transfered to another server.");
continue;
}
if (getContainedBy(inventoryItems[inventoryIter]) != self && getContainedBy(inventoryItems[inventoryIter]) != playerInventory)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of inventory item " + inventoryItems[inventoryIter] + " due to incorrect containment");
continue;
}
if (hasCondition(inventoryItems[inventoryIter], CONDITION_VENDOR))
{
continue;
}
int ot = getGameObjectType(inventoryItems[inventoryIter]);
if (itemIsAllowedToTransfer(inventoryItems[inventoryIter], self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(inventoryItems[inventoryIter], ot, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
inventoryDictionary.put(inventoryItems[inventoryIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("inventoryDictionary", inventoryDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : inventory items packed (" + inventoryDictionary.toString() + ")");
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing bank items");
dictionary bankDictionary = new dictionary();
obj_id playerBank = utils.getPlayerBank(self);
if (isIdValid(playerBank))
{
obj_id[] bankItems = getContents(playerBank);
if (bankItems != null && bankItems.length > 0)
{
int bankIter = 0;
for (bankIter = 0; bankIter < bankItems.length; ++bankIter)
{
doItemPrepack(bankItems[bankIter]);
}
for (bankIter = 0; bankIter < bankItems.length; ++bankIter)
{
if (!isValidId(bankItems[bankIter]))
{
continue;
}
if (getContainedBy(bankItems[bankIter]) != self && getContainedBy(bankItems[bankIter]) != playerBank)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of bank item " + bankItems[bankIter] + " due to incorrect containment");
continue;
}
if (hasCondition(bankItems[bankIter], CONDITION_VENDOR))
{
continue;
}
int ot = getGameObjectType(bankItems[bankIter]);
if (itemIsAllowedToTransfer(bankItems[bankIter], self) && (!isGameObjectTypeOf(ot, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(bankItems[bankIter], ot, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
bankDictionary.put(bankItems[bankIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("bankDictionary", bankDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : bank items packed (" + bankDictionary.toString() + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED to pack bank items. bank object is not valid. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing datapad items");
dictionary datapadDictionary = new dictionary();
obj_id playerDatapad = utils.getPlayerDatapad(self);
if (isIdValid(playerDatapad))
{
obj_id[] datapadItems = getContents(playerDatapad);
if (datapadItems != null && datapadItems.length > 0)
{
int datapadIter = 0;
for (datapadIter = 0; datapadIter < datapadItems.length; ++datapadIter)
{
doItemPrepack(datapadItems[datapadIter]);
}
for (datapadIter = 0; datapadIter < datapadItems.length; ++datapadIter)
{
if (!isValidId(datapadItems[datapadIter]))
{
continue;
}
if (getContainedBy(datapadItems[datapadIter]) != self && getContainedBy(datapadItems[datapadIter]) != playerDatapad)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of datapad item " + datapadItems[datapadIter] + " due to incorrect containment");
continue;
}
if (guild.STR_GUILD_REMOTE_DEVICE.equals(getTemplateName(datapadItems[datapadIter])))
{
continue;
}
if (hasCondition(datapadItems[datapadIter], CONDITION_VENDOR))
{
continue;
}
int objtype = getGameObjectType(datapadItems[datapadIter]);
if (isGameObjectTypeOf(objtype, GOT_data_house_control_device))
{
}
if (isGameObjectTypeOf(objtype, GOT_data_ship_control_device) && (TRANSFER_SHIPS == 0))
{
continue;
}
if (isGameObjectTypeOf(objtype, GOT_data_droid_control_device) && (TRANSFER_DROIDS == 0))
{
continue;
}
if (isGameObjectTypeOf(objtype, GOT_data_manufacturing_schematic))
{
}
if (isGameObjectTypeOf(objtype, GOT_data_vendor_control_device))
{
continue;
}
if (objtype == GOT_data_mission_object)
{
String missionType = getMissionType(datapadItems[datapadIter]);
if ((missionType != null) && missionType.equals("bounty"))
{
continue;
}
}
if (itemIsAllowedToTransfer(datapadItems[datapadIter], self) && (!isGameObjectTypeOf(objtype, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(datapadItems[datapadIter], objtype, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
datapadDictionary.put(datapadItems[datapadIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("datapadDictionary", datapadDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : datapad items packed (" + datapadDictionary.toString() + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED to pack datapad items. datapad object is not valid. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing appearance buy back items");
dictionary buyBackDictionary = new dictionary();
obj_id buyBackContainer = getObjIdObjVar(self, smuggler.BUYBACK_CONTAINER_VAR);
if (!isIdValid(buyBackContainer))
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED to find a buy back container object.");
}
else
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SUCCESS finding a buy back container object.");
obj_id[] buyBackItems = getContents(buyBackContainer);
if (buyBackItems != null && buyBackItems.length > 0)
{
int buyBackIter = 0;
for (buyBackIter = 0; buyBackIter < buyBackItems.length; ++buyBackIter)
{
doItemPrepack(buyBackItems[buyBackIter]);
}
for (buyBackIter = 0; buyBackIter < buyBackItems.length; ++buyBackIter)
{
if (!isValidId(buyBackItems[buyBackIter]))
{
continue;
}
if (getContainedBy(buyBackItems[buyBackIter]) != self && getContainedBy(buyBackItems[buyBackIter]) != buyBackContainer)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of buy back item " + buyBackItems[buyBackIter] + " due to incorrect containment");
continue;
}
int objtype = getGameObjectType(buyBackItems[buyBackIter]);
if (isGameObjectTypeOf(objtype, GOT_data_ship_control_device) && (TRANSFER_SHIPS == 0))
{
continue;
}
if (itemIsAllowedToTransfer(buyBackItems[buyBackIter], self) && (!isGameObjectTypeOf(objtype, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(buyBackItems[buyBackIter], objtype, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
buyBackDictionary.put(buyBackItems[buyBackIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("buyBackDictionary", buyBackDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : buy back items packed (" + buyBackDictionary.toString() + ")");
}
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing hangar items");
dictionary hangarDictionary = new dictionary();
obj_id playerHangar = utils.getPlayerHangar(self);
if (isIdValid(playerHangar))
{
obj_id[] hangarItems = getContents(playerHangar);
if (hangarItems != null && hangarItems.length > 0)
{
int hangarIter = 0;
for (hangarIter = 0; hangarIter < hangarItems.length; ++hangarIter)
{
doItemPrepack(hangarItems[hangarIter]);
}
for (hangarIter = 0; hangarIter < hangarItems.length; ++hangarIter)
{
if (!isValidId(hangarItems[hangarIter]))
{
continue;
}
if (getContainedBy(hangarItems[hangarIter]) != self && getContainedBy(hangarItems[hangarIter]) != playerHangar)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : SKIPPING pack of hangar item " + hangarItems[hangarIter] + " due to incorrect containment");
continue;
}
int objtype = getGameObjectType(hangarItems[hangarIter]);
if (isGameObjectTypeOf(objtype, GOT_data_ship_control_device) && (TRANSFER_SHIPS == 0))
{
continue;
}
if (itemIsAllowedToTransfer(hangarItems[hangarIter], self) && (!isGameObjectTypeOf(objtype, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(hangarItems[hangarIter], objtype, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
hangarDictionary.put(hangarItems[hangarIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("hangarDictionary", hangarDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : hangar items packed (" + hangarDictionary.toString() + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED to pack hangar items. hangar object is not valid. The player doesnt have a hangar object, transfer continuing.");
}
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : packing appearance inventory items");
dictionary appearanceDictionary = new dictionary();
obj_id playerAppearance = getAppearanceInventory(self);
if (isIdValid(playerAppearance))
{
obj_id[] appearanceItems = getContents(playerAppearance);
if (appearanceItems != null && appearanceItems.length > 0)
{
int appearanceIter = 0;
for (appearanceIter = 0; appearanceIter < appearanceItems.length; ++appearanceIter)
{
doItemPrepack(appearanceItems[appearanceIter]);
}
for (appearanceIter = 0; appearanceIter < appearanceItems.length; ++appearanceIter)
{
if (!isValidId(appearanceItems[appearanceIter]))
{
continue;
}
int objtype = getGameObjectType(appearanceItems[appearanceIter]);
if (itemIsAllowedToTransfer(appearanceItems[appearanceIter], self) && (!isGameObjectTypeOf(objtype, GOT_resource_container) || !ctsHasExceededResourceTransferLimit(resourceCrateCountLimit, resourceCurrentCrateCount[0], resourceUnitCountLimit, resourceCurrentUnitCount[0])))
{
dictionary itemDictionary = packItem(appearanceItems[appearanceIter], objtype, allowOverride, resourceCrateCountLimit, resourceCurrentCrateCount, resourceUnitCountLimit, resourceCurrentUnitCount);
if (itemDictionary != null)
{
appearanceDictionary.put(appearanceItems[appearanceIter], itemDictionary);
}
else
{
if (!allowOverride)
{
return SCRIPT_OVERRIDE;
}
}
}
}
}
characterData.put("appearanceDictionary", appearanceDictionary);
LIVE_LOG("CharacterTransfer", "OnUploadCharacter() : appearance inventory items packed (" + appearanceDictionary.toString() + ")");
}
else
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : FAILED to pack appearance inventory items. appearance inventory object is not valid. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
}
if (hasScript(self, "space.quest_logic.player_spacequest"))
{
characterData.put("attachSpacequestScript", true);
}
String[] strObjVars = new String[strObjVarLists.length];
for (int intI = 0; intI < strObjVarLists.length; intI++)
{
String strObjVar = getPackedObjvars(self, strObjVarLists[intI]);
strObjVars[intI] = strObjVar;
}
characterData.put("strObjVars", strObjVars);
}
catch(Throwable t)
{
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() : an exception was thrown! characterData(" + characterData + ") TRANSFER FAILED : " + t);
return SCRIPT_OVERRIDE;
}
removeObjVar(self, "cts");
CustomerServiceLog("CharacterTransfer", "OnUploadCharacter() complete");
setObjVar(self, "disableLoginCtsInProgress", (getGameTime() + 600));
messageTo(self, "disconnectPlayerCtsCompletedOrInProgress", null, 0.1f, false);
return SCRIPT_CONTINUE;
}
public static final String[][] STARTING_CLOTHES =
{
{
"object/tangible/wearables/shirt/shirt_s14.iff",
"object/tangible/wearables/jacket/jacket_s16.iff",
"object/tangible/wearables/pants/pants_s14.iff",
"object/tangible/wearables/boots/boots_s05.iff"
},
{
"object/tangible/wearables/shirt/shirt_s27.iff",
"object/tangible/wearables/pants/pants_s07.iff",
"object/tangible/wearables/boots/boots_s05.iff",
"object/tangible/wearables/gloves/gloves_s03.iff"
},
{
"object/tangible/wearables/shirt/shirt_s27.iff",
"object/tangible/wearables/pants/pants_s07.iff",
"object/tangible/wearables/boots/boots_s05.iff",
"object/tangible/wearables/gloves/gloves_s02.iff"
},
{
"object/tangible/wearables/shirt/shirt_s14.iff",
"object/tangible/wearables/jacket/jacket_s16.iff",
"object/tangible/wearables/pants/pants_s14.iff"
},
{
"object/tangible/wearables/shirt/shirt_s27.iff",
"object/tangible/wearables/pants/pants_s07.iff",
"object/tangible/wearables/gloves/gloves_s03.iff"
}
};
public void createStartingEquipment(obj_id objPlayer) throws InterruptedException
{
obj_id playerInv = utils.getInventoryContainer(objPlayer);
int gender = getGender(objPlayer);
int species = getSpecies(objPlayer);
int idx = -1;
if (gender == GENDER_MALE)
{
if (species == SPECIES_HUMAN || species == SPECIES_ZABRAK || species == SPECIES_BOTHAN || species == SPECIES_MON_CALAMARI || species == SPECIES_RODIAN || species == SPECIES_TWILEK)
{
idx = 0;
}
if (species == SPECIES_TRANDOSHAN)
{
idx = 3;
}
}
else
{
if (species == SPECIES_HUMAN || species == SPECIES_ZABRAK || species == SPECIES_BOTHAN || species == SPECIES_RODIAN || species == SPECIES_TWILEK)
{
idx = 1;
}
if (species == SPECIES_MON_CALAMARI)
{
idx = 2;
}
if (species == SPECIES_TRANDOSHAN)
{
idx = 4;
}
}
if (idx >= 0)
{
for (int i = 0; i < STARTING_CLOTHES[idx].length; i++)
{
obj_id newItem = createObject(STARTING_CLOTHES[idx][i], playerInv, "");
if (isIdValid(newItem))
{
equip(newItem, playerInv);
}
}
}
}
public int OnDownloadCharacter(obj_id self, byte[] packedData) throws InterruptedException
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() begin");
try
{
if (hasObjVar(self, "hasTransferred"))
{
return SCRIPT_OVERRIDE;
}
utils.setLocalVar(self, "ctsBeingUnpacked", true);
setObjVar(self, "hasTransferred", 1);
dictionary characterData = dictionary.unpack(packedData);
if (characterData != null)
{
String skillTemplate = characterData.getString("skillTemplate");
String workingSkill = characterData.getString("workingSkill");
int combatLevel = characterData.getInt("combatLevel");
CustomerServiceLog("CharacterTransfer", "setSkillTemplate(" + self + ", " + skillTemplate + ") (combatLevel == " + combatLevel + ", workingSkill == " + workingSkill + ")");
setObjVar(self, "clickRespec.combatLevel", combatLevel);
setObjVar(self, "clickRespec.workingSkill", workingSkill);
setObjVar(self, "clickRespec.cts", true);
setSkillTemplate(self, skillTemplate);
String[] skills = characterData.getStringArray("skills");
for (String skill : skills) {
if (!hasSkill(self, skill)) {
if (grantSkill(self, skill)) {
CustomerServiceLog("CharacterTransfer", "grantSkill(" + self + ", " + skill + ")");
} else {
CustomerServiceLog("CharacterTransfer", "grantSkill(" + self + ", " + skill + ") FAILED");
return SCRIPT_OVERRIDE;
}
}
}
String[] commands = characterData.getStringArray("commands");
for (String command : commands) {
if (!hasCommand(self, command)) {
if (grantCommand(self, command)) {
CustomerServiceLog("CharacterTransfer", "grantCommand(" + self + ", " + command + ")");
} else {
CustomerServiceLog("CharacterTransfer", "grantCommand(" + self + ", " + command + ") FAILED");
return SCRIPT_OVERRIDE;
}
}
}
dictionary experiencePoints = characterData.getDictionary("experience_points");
if (experiencePoints != null)
{
Set keySet = experiencePoints.keySet();
for (Object o : keySet) {
String expType = (String) o;
if (expType != null) {
int expValue = experiencePoints.getInt(expType);
if (getExperiencePoints(self, expType) != expValue) {
int result = grantExperiencePoints(self, expType, expValue);
if (result == XP_ERROR) {
CustomerServiceLog("CharacterTransfer", "grantExperiencePoints(" + self + ", " + expType + ", " + expValue + ") FAILED");
return SCRIPT_OVERRIDE;
} else {
CustomerServiceLog("CharacterTransfer", "grantExperiencePoints(" + self + ", " + expType + ", " + expValue + ") (non-roadmap exp)");
}
}
}
}
}
String[] strObjVars = characterData.getStringArray("strObjVars");
for (String strObjVar : strObjVars) {
setPackedObjvars(self, strObjVar);
}
removeObjVar(self, "galactic_reserve_cooldown");
if (hasObjVar(self, CTS_LOT_COUNT))
{
int lot_count = getIntObjVar(self, CTS_LOT_COUNT);
CustomerServiceLog("CharacterTransfer", "adjusting lot count(" + self + ", " + lot_count + ")");
player_structure.adjustLotCount(getPlayerObject(self), lot_count);
}
int sourceCharacterAlignedFaction = characterData.getInt("pvp_aligned_faction");
int sourceCharacterPvpType = characterData.getInt("pvp_type");
switch (sourceCharacterPvpType)
{
case PVPTYPE_NEUTRAL:
if (sourceCharacterAlignedFaction == 0)
{
pvpMakeNeutral(self);
}
break;
case PVPTYPE_COVERT:
pvpMakeCovert(self);
break;
case PVPTYPE_DECLARED:
pvpMakeDeclared(self);
break;
}
pvpSetAlignedFaction(self, sourceCharacterAlignedFaction);
if ((sourceCharacterAlignedFaction != 0) && (sourceCharacterPvpType == PVPTYPE_NEUTRAL))
{
pvpMakeOnLeave(self);
}
ctsUseOnlySetGcwInfo(self, characterData.getInt("gcw_current_point"), characterData.getInt("gcw_current_rating"), characterData.getInt("gcw_current_pvp_kill"), characterData.getLong("gcw_lifetime_point"), characterData.getInt("gcw_max_imperial_rating"), characterData.getInt("gcw_max_rebel_rating"), characterData.getInt("gcw_lifetime_pvp_kill"), characterData.getInt("gcw_next_rating_calc_time"));
obj_id[] old_waypoints = getWaypointsInDatapad(self);
if (old_waypoints != null && old_waypoints.length > 0)
{
for (obj_id old_waypoint : old_waypoints) {
destroyWaypointInDatapad(old_waypoint, self);
}
}
dictionary waypoints = characterData.getDictionary("waypoints");
if (waypoints != null)
{
Set keySet = waypoints.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
dictionary waypointDict = waypoints.getDictionary(key);
unpackWaypoint(waypointDict);
}
}
obj_id playerObject = getPlayerObject(self);
if (isIdValid(playerObject))
{
if (characterData.containsKey("quests"))
{
byte[] quests = characterData.getByteArray("quests");
setAutoVariableFromByteStream(playerObject, "quests", quests);
}
if (characterData.containsKey("activeQuests"))
{
byte[] activeQuests = characterData.getByteArray("activeQuests");
setAutoVariableFromByteStream(playerObject, "activeQuests", activeQuests);
}
if (characterData.containsKey("completedQuests"))
{
byte[] completedQuests = characterData.getByteArray("completedQuests");
setAutoVariableFromByteStream(playerObject, "completedQuests", completedQuests);
}
if (characterData.containsKey("currentQuest"))
{
byte[] currentQuest = characterData.getByteArray("currentQuest");
setAutoVariableFromByteStream(playerObject, "currentQuest", currentQuest);
}
groundquests.reattachQuestScripts(self);
if (characterData.containsKey("bornDate"))
{
byte[] bornDate = characterData.getByteArray("bornDate");
setAutoVariableFromByteStream(playerObject, "bornDate", bornDate);
}
if (characterData.containsKey("playedTime"))
{
byte[] playedTime = characterData.getByteArray("playedTime");
setAutoVariableFromByteStream(playerObject, "playedTime", playedTime);
}
if (characterData.containsKey("food"))
{
byte[] food = characterData.getByteArray("food");
setAutoVariableFromByteStream(playerObject, "food", food);
}
if (characterData.containsKey("maxFood"))
{
byte[] maxFood = characterData.getByteArray("maxFood");
setAutoVariableFromByteStream(playerObject, "maxFood", maxFood);
}
if (characterData.containsKey("drink"))
{
byte[] drink = characterData.getByteArray("drink");
setAutoVariableFromByteStream(playerObject, "drink", drink);
}
if (characterData.containsKey("maxDrink"))
{
byte[] maxDrink = characterData.getByteArray("maxDrink");
setAutoVariableFromByteStream(playerObject, "maxDrink", maxDrink);
}
if (characterData.containsKey("meds"))
{
byte[] meds = characterData.getByteArray("meds");
setAutoVariableFromByteStream(playerObject, "meds", meds);
}
if (characterData.containsKey("maxMeds"))
{
byte[] maxMeds = characterData.getByteArray("maxMeds");
setAutoVariableFromByteStream(playerObject, "maxMeds", maxMeds);
}
if (characterData.containsKey("matchMakingPersonalProfileId"))
{
byte[] matchMakingPersonalProfileId = characterData.getByteArray("matchMakingPersonalProfileId");
setAutoVariableFromByteStream(playerObject, "matchMakingPersonalProfileId", matchMakingPersonalProfileId);
}
if (characterData.containsKey("matchMakingCharacterProfileId"))
{
byte[] matchMakingCharacterProfileId = characterData.getByteArray("matchMakingCharacterProfileId");
setAutoVariableFromByteStream(playerObject, "matchMakingCharacterProfileId", matchMakingCharacterProfileId);
}
if (characterData.containsKey("workingSkill"))
{
byte[] playerObjectWorkingSkill = characterData.getByteArray("workingSkill");
setAutoVariableFromByteStream(playerObject, "workingSkill", playerObjectWorkingSkill);
}
if (characterData.containsKey("skillTemplate"))
{
byte[] playerObjectSkillTemplate = characterData.getByteArray("skillTemplate");
setAutoVariableFromByteStream(playerObject, "skillTemplate", playerObjectSkillTemplate);
}
if (characterData.containsKey("collections"))
{
byte[] collections = characterData.getByteArray("collections");
setAutoVariableFromByteStream(playerObject, "collections", collections);
}
if (characterData.containsKey("collections2"))
{
byte[] collections2 = characterData.getByteArray("collections2");
setAutoVariableFromByteStream(playerObject, "collections2", collections2);
}
if (characterData.containsKey("source_cluster"))
{
String sourceCluster = characterData.getString("source_cluster");
if (characterData.containsKey("source_character_oid") && characterData.containsKey("source_character_name"))
{
int ctsHistoryIndex = 1;
while (true)
{
if (!hasObjVar(self, "ctsHistory." + ctsHistoryIndex))
{
setObjVar(self, "ctsHistory." + ctsHistoryIndex, "" + getCalendarTime() + " " + sourceCluster + " " + characterData.getObjId("source_character_oid") + " " + characterData.getString("source_character_name"));
break;
}
++ctsHistoryIndex;
}
}
String currentCluster = getClusterName();
boolean grantCtsTitle = !sourceCluster.equals(currentCluster);
sourceCluster = toLower(sourceCluster);
sourceCluster = sourceCluster.replace('-', '_');
if (grantCtsTitle)
{
modifyCollectionSlotValue(self, "cts_from_" + sourceCluster, 1L);
}
if (characterData.containsKey("freeCtsTransactionRuleName"))
{
setObjVar(self, characterData.getString("freeCtsTransactionRuleName") + "." + sourceCluster, currentCluster);
}
}
int[] quests = questGetAllActiveQuestIds(self);
for (int questId : quests) {
for (int taskId = 0; taskId < 16; ++taskId) {
if (questIsTaskActive(questId, taskId, self)) {
groundquests.refreshQuestWaypoints(questId, taskId, true, self);
}
}
}
}
boolean withItems = characterData.getBoolean("withItems");
if (withItems == true)
{
obj_id[] existingItems = getInventoryAndEquipment(self);
obj_id inv = utils.getInventoryContainer(self);
if (existingItems != null)
{
int existingIter;
for (existingIter = 0; existingIter < existingItems.length; ++existingIter)
{
if (existingItems[existingIter] != self && existingItems[existingIter] != inv)
{
LIVE_LOG("CharacterTransfer", "OnDownloadCharacter() : destroying unwanted pre-existing destination item : " + getTemplateName(existingItems[existingIter]));
destroyObject(existingItems[existingIter]);
}
}
}
int maxMoneyTransferAmount = 100000000;
{
int tempMaxMoneyTransferAmount = utils.stringToInt(getConfigSetting("GameServer", "maxMoneyTransfer"));
if (tempMaxMoneyTransferAmount > 0)
{
maxMoneyTransferAmount = tempMaxMoneyTransferAmount;
}
}
if (characterData.containsKey("moneyFromCash"))
{
int moneyFromCash = characterData.getInt("moneyFromCash");
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking " + moneyFromCash + " credits to cash");
while (moneyFromCash > 0)
{
int transferAmount = utils.clipRange(moneyFromCash, 0, maxMoneyTransferAmount);
if (!transferBankCreditsFromNamedAccount("characterTransfer", self, transferAmount, null, null, null))
{
CustomerServiceLog("CharacterTransfer", "transferBankCreditsFromNamedAccount(characterTransfer, " + self + ", " + transferAmount + ", null, null, null) FAILED");
break;
}
else
{
if (!withdrawCashFromBank(self, transferAmount, null, null, null))
{
CustomerServiceLog("CharacterTransfer", "withdrawCashFromBank(characterTransfer, " + self + ", " + transferAmount + ", null, null, null) FAILED");
break;
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : +" + transferAmount + " credits to cash");
}
moneyFromCash -= maxMoneyTransferAmount;
}
}
if (characterData.containsKey("moneyFromBank"))
{
int moneyFromBank = characterData.getInt("moneyFromBank");
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking " + moneyFromBank + " credits to bank");
while (moneyFromBank > 0)
{
int transferAmount = utils.clipRange(moneyFromBank, 0, maxMoneyTransferAmount);
if (!transferBankCreditsFromNamedAccount("characterTransfer", self, transferAmount, null, null, null))
{
CustomerServiceLog("CharacterTransfer", "transferBankCreditsFromNamedAccount(characterTransfer, " + self + ", " + transferAmount + ", null, null, null) FAILED");
break;
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : +" + transferAmount + " credits to bank");
moneyFromBank -= maxMoneyTransferAmount;
}
}
obj_id playerInventory = utils.getInventoryContainer(self);
obj_id playerBank = utils.getPlayerBank(self);
utils.setScriptVar(self, "autostack.ignoreitems", true);
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking inventory items");
dictionary inventoryDictionary = characterData.getDictionary("inventoryDictionary");
if (inventoryDictionary == null)
{
return SCRIPT_OVERRIDE;
}
else
{
Set keySet = inventoryDictionary.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the inventory dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = inventoryDictionary.getDictionary(key);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(playerInventory, itemDictionary)) {
continue;
}
obj_id unpackedItem = unpackItem(playerInventory, itemDictionary);
if (!isIdValid(unpackedItem)) {
if (isIdNull(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : unpackItem() returned NULL id for item: " + itemDictionary);
return SCRIPT_OVERRIDE;
} else {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : unpackItem() returned invalid id " + unpackedItem + " for item: " + itemDictionary);
continue;
}
}
}
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking bank items");
dictionary bankDictionary = characterData.getDictionary("bankDictionary");
if (bankDictionary == null)
{
return SCRIPT_OVERRIDE;
}
else
{
Set keySet = bankDictionary.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the bank dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = bankDictionary.getDictionary(key);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(playerInventory, itemDictionary)) {
continue;
}
obj_id unpackedItem = unpackItem(playerInventory, itemDictionary);
if (!isIdValid(unpackedItem)) {
if (isIdNull(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : unpackItem() returned NULL id for item: " + itemDictionary);
return SCRIPT_OVERRIDE;
} else {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : unpackItem() returned invalid id " + unpackedItem + " for item: " + itemDictionary);
continue;
}
}
if (putIn(unpackedItem, playerBank)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : moved item " + unpackedItem + " into bank " + playerBank);
} else {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to move item " + unpackedItem + " into bank " + playerBank);
}
}
}
obj_id playerDatapad = utils.getPlayerDatapad(self);
obj_id datapadObjects[] = getContents(playerDatapad);
for (obj_id datapadObject : datapadObjects) {
destroyObject(datapadObject);
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking datapad items");
dictionary datapadDictionary = characterData.getDictionary("datapadDictionary");
if (datapadDictionary == null)
{
return SCRIPT_OVERRIDE;
}
else
{
dictionary datapadItemOidTranslation = new dictionary();
Vector shipsWithDroidControlDevice = new Vector();
shipsWithDroidControlDevice.setSize(0);
Set keySet = datapadDictionary.keySet();
for (Object o1 : keySet) {
obj_id key = (obj_id) o1;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the datapad dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = datapadDictionary.getDictionary(key);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(playerDatapad, itemDictionary)) {
continue;
}
obj_id unpackedItem = unpackItem(playerDatapad, itemDictionary);
if (!isIdValid(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to unpack datapad item (original oid " + key + ") into datapad " + playerDatapad);
} else {
datapadItemOidTranslation.put(key, unpackedItem);
if (utils.hasScript(unpackedItem, "space.ship_control_device.ship_control_device")) {
obj_id ship = space_transition.getShipFromShipControlDevice(unpackedItem);
if (isIdValid(ship) && utils.hasLocalVar(ship, "droid_control_device")) {
utils.addElement(shipsWithDroidControlDevice, ship);
}
}
}
}
for (Object o : shipsWithDroidControlDevice) {
obj_id originalDroidControlDevice = utils.getObjIdLocalVar(((obj_id) o), "droid_control_device");
if (isIdValid(originalDroidControlDevice) && datapadItemOidTranslation.containsKey(originalDroidControlDevice)) {
obj_id newDroidControlDevice = datapadItemOidTranslation.getObjId(originalDroidControlDevice);
if (isIdValid(newDroidControlDevice)) {
associateDroidControlDeviceWithShip(((obj_id) o), newDroidControlDevice);
}
}
}
}
obj_id buyBackContainer = getObjIdObjVar(self, smuggler.BUYBACK_CONTAINER_VAR);
if (isIdValid(buyBackContainer))
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character had an existing buy back container: " + buyBackContainer);
obj_id buyBackObjects[] = getContents(buyBackContainer);
if (buyBackObjects != null && buyBackObjects.length > 0)
{
for (obj_id buyBackObject : buyBackObjects) {
destroyObject(buyBackObject);
}
}
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking buy back items");
dictionary buyBackDictionary = characterData.getDictionary("buyBackDictionary");
if (buyBackDictionary == null || buyBackDictionary.isEmpty())
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character did not have a buy back dictionary data!!");
}
else
{
if (!isIdValid(buyBackContainer))
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character did not have a valid buy back container.");
buyBackContainer = smuggler.getBuyBackContainerObjVar(self);
}
if (!isIdValid(buyBackContainer))
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character could not create buy back container. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
Set keySet = buyBackDictionary.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the buy back dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = buyBackDictionary.getDictionary(key);
obj_id unpackedItem = unpackItem(buyBackContainer, itemDictionary);
if (!isIdValid(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to unpack buy back item (original oid " + key + ") into buy back container " + buyBackContainer);
}
}
}
obj_id playerHangar = utils.getPlayerHangar(self);
if (isIdValid(playerHangar))
{
obj_id hangarObjects[] = getContents(playerHangar);
for (obj_id hangarObject : hangarObjects) {
destroyObject(hangarObject);
}
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking hangar items");
dictionary hangarDictionary = characterData.getDictionary("hangarDictionary");
if (hangarDictionary == null || hangarDictionary.isEmpty())
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character did not have a hangar object.");
}
else
{
if (!isIdValid(playerHangar))
{
playerHangar = createObject("object/tangible/datapad/character_hangar_datapad.iff", self, "hangar");
}
if (!isIdValid(playerHangar))
{
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : source character could not create hangar. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
setObjVar(self, player_structure.OBJVAR_HANGAR_CREATED, playerHangar);
persistObject(playerHangar);
dictionary hangarItemOidTranslation = new dictionary();
Vector shipsWithDroidControlDevice = new Vector();
shipsWithDroidControlDevice.setSize(0);
Set keySet = hangarDictionary.keySet();
for (Object o1 : keySet) {
obj_id key = (obj_id) o1;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the hangar dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = hangarDictionary.getDictionary(key);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(playerDatapad, itemDictionary)) {
continue;
}
obj_id unpackedItem = unpackItem(playerHangar, itemDictionary);
if (!isIdValid(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to unpack hangar item (original oid " + key + ") into hangar " + playerHangar);
} else {
hangarItemOidTranslation.put(key, unpackedItem);
if (utils.hasScript(unpackedItem, "space.ship_control_device.ship_control_device")) {
obj_id ship = space_transition.getShipFromShipControlDevice(unpackedItem);
if (isIdValid(ship) && utils.hasLocalVar(ship, "droid_control_device")) {
utils.addElement(shipsWithDroidControlDevice, ship);
}
}
}
}
for (Object o : shipsWithDroidControlDevice) {
obj_id originalDroidControlDevice = utils.getObjIdLocalVar(((obj_id) o), "droid_control_device");
if (isIdValid(originalDroidControlDevice) && hangarItemOidTranslation.containsKey(originalDroidControlDevice)) {
obj_id newDroidControlDevice = hangarItemOidTranslation.getObjId(originalDroidControlDevice);
if (isIdValid(newDroidControlDevice)) {
associateDroidControlDeviceWithShip(((obj_id) o), newDroidControlDevice);
}
}
}
}
obj_id playerAppearance = getAppearanceInventory(self);
obj_id appearanceObjects[] = getContents(playerAppearance);
for (obj_id appearanceObject : appearanceObjects) {
destroyObject(appearanceObject);
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter : unpacking appearance inventory items");
dictionary appearanceDictionary = characterData.getDictionary("appearanceDictionary");
if (appearanceDictionary == null)
{
return SCRIPT_OVERRIDE;
}
else
{
Set keySet = appearanceDictionary.keySet();
for (Object o : keySet) {
obj_id key = (obj_id) o;
if (isIdNull(key)) {
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : could not retrieve a key from the appearance dictionary iterator. TRANSFER FAILED");
return SCRIPT_OVERRIDE;
}
dictionary itemDictionary = appearanceDictionary.getDictionary(key);
if (ctsCheckAndLogUniqueStaticItemAlreadyExists(playerAppearance, itemDictionary)) {
continue;
}
obj_id unpackedItem = unpackItem(playerInventory, itemDictionary);
if (!isIdValid(unpackedItem)) {
CustomerServiceLog("CharacterTransfer", "unpackItem() : FAILED to unpack appearance inventory item (original oid " + key + ") into appearance inventory " + playerAppearance);
}
}
}
utils.removeScriptVar(self, "autostack.ignoreitems");
}
else
{
obj_id inventory = getObjectInSlot(self, "inventory");
if (isIdValid(inventory))
{
weapons.createWeapon("object/weapon/ranged/pistol/pistol_cdef.iff", inventory, 0.90f);
createObject("object/tangible/survey_tool/survey_tool_mineral.iff", inventory, "");
weapons.createWeapon("object/weapon/melee/knife/knife_survival.iff", inventory, 0.90f);
createObject("object/tangible/crafting/station/generic_tool.iff", inventory, "");
if (utils.isProfession(self, utils.ENTERTAINER))
{
createObject("object/tangible/instrument/slitherhorn.iff", inventory, "");
}
createStartingEquipment(self);
}
}
if (characterData.containsKey("attachSpacequestScript") && characterData.getBoolean("attachSpacequestScript"))
{
attachScript(self, "space.quest_logic.player_spacequest");
}
}
else
{
return SCRIPT_OVERRIDE;
}
}
catch(Throwable t)
{
removeObjVar(self, "cts");
utils.removeLocalVar(self, "ctsBeingUnpacked");
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() : an exception was thrown! TRANSFER FAILED : " + t);
return SCRIPT_OVERRIDE;
}
CustomerServiceLog("CharacterTransfer", "OnDownloadCharacter() complete");
removeObjVar(self, "cts");
removeObjVar(self, "preserve_existing_lightsaber_crystal_owner_objvar");
utils.removeLocalVar(self, "ctsBeingUnpacked");
return SCRIPT_CONTINUE;
}
public int OnSkillModDone(obj_id self, String modName, boolean isDead) throws InterruptedException
{
if (modName == null)
{
return SCRIPT_CONTINUE;
}
if (modName.indexOf("food_") == 0)
{
utils.removeScriptVar(self, modName);
}
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
return SCRIPT_CONTINUE;
}
public int removeDelayedFoodEffect(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
String type = params.getString("type");
if (!utils.hasScriptVar(self, "food." + type + ".dur"))
{
return SCRIPT_CONTINUE;
}
int time = utils.getIntScriptVar(self, "food." + type + ".time");
if (getGameTime() - time < 1799)
{
return SCRIPT_CONTINUE;
}
utils.removeScriptVarTree(self, "food." + type);
return SCRIPT_CONTINUE;
}
public int removeDurationFoodEffect(obj_id self, dictionary params) throws InterruptedException
{
if (params == null)
{
return SCRIPT_CONTINUE;
}
String type = params.getString("type");
if (!utils.hasScriptVar(self, "food." + type + ".dur"))
{
return SCRIPT_CONTINUE;
}
int time = utils.getIntScriptVar(self, "food." + type + ".time");
if (getGameTime() - time < 1799)
{
return SCRIPT_CONTINUE;
}
utils.removeScriptVarTree(self, "food." + type);
return SCRIPT_CONTINUE;
}
public int handleSpiceDownerEffect(obj_id self, dictionary params) throws InterruptedException
{
if (buff.hasBuff(self, "spice_downer"))
{
buff.removeBuff(self, "spice_downer");
}
float duration = buff.getDuration("spice_downer");
float downerModified = getEnhancedSkillStatisticModifierUncapped(self, "resistance_spice_downer");
if (downerModified > 0)
{
duration -= downerModified;
if (duration <= 0)
{
sendSystemMessage(self, SID_SPICE_DOWNER_DURATION_NEGATED);
return SCRIPT_CONTINUE;
}
sendSystemMessage(self, SID_SPICE_DOWNER_DURATION_REDUCED);
}
if (buff.applyBuff(self, "spice_downer", duration))
{
doAnimationAction(self, anims.PLAYER_HEAVY_COUGH_VOMIT);
}
return SCRIPT_CONTINUE;
}
public int handleGenericDownerEffect(obj_id self, dictionary params) throws InterruptedException
{
if (buff.hasBuff(self, "generic_downer"))
{
buff.removeBuff(self, "generic_downer");
}
float duration = buff.getDuration("generic_downer");
if (buff.applyBuff(self, "generic_downer", duration))
{
doAnimationAction(self, anims.PLAYER_HEAVY_COUGH_VOMIT);
}
return SCRIPT_CONTINUE;
}
public int OnStomachUpdate(obj_id self) throws InterruptedException
{
player_stomach.getStomach(self, 0);
player_stomach.getStomach(self, 1);
return SCRIPT_CONTINUE;
}
public int grantUnmodifiedExperienceOnSelf(obj_id self, dictionary params) throws InterruptedException
{
if (npe.hasReachedMaxTutorialLevel(self))
{
int hadNotif = utils.getIntScriptVar(self, "npe.level_capped");
if (hadNotif == 0)
{
string_id chat = new string_id("npe", "pop_level_cap");
obj_id building = getTopMostContainer(self);
obj_id droid = utils.getObjIdScriptVar(building, "objDroidInvis");
npe.commTutorialPlayer(droid, self, 10, chat, "sound/dro_r2_3_danger.snd", "object/mobile/r2.iff");
utils.setScriptVar(self, "npe.level_capped", 1);
}
return SCRIPT_CONTINUE;
}
int playerLevel = getLevel(self);
if (isFreeTrialAccount(self))
{
if (playerLevel >= xp.TRIAL_LEVEL_CAP)
{
return SCRIPT_CONTINUE;
}
}
String xp_type = params.getString("xp_type");
int amt = params.getInt("amt");
String fromCallback = params.getString("fromCallback");
dictionary fromCallbackData = params.getDictionary("fromCallbackData");
obj_id fromId = params.getObjId("fromId");
if (luck.isLucky(self, 0.001f))
{
float bonus = amt * 0.1f;
if (bonus < 1.0f)
{
bonus = 1.0f;
}
amt += bonus;
}
xp._grantUnmodifiedExperience(self, xp_type, amt, fromCallback, fromCallbackData, fromId);
return SCRIPT_CONTINUE;
}
public int grantSquadLeaderXpResult(obj_id self, dictionary params) throws InterruptedException
{
int granted = params.getInt(xp.GRANT_XP_RESULT_VALUE);
dictionary data = params.getDictionary(xp.GRANT_XP_RETURN_DATA);
obj_id player = data.getObjId("player");
int amt = data.getInt("amt");
xp.grantSquadLeaderXpResult(player, granted, amt);
return SCRIPT_CONTINUE;
}
public int cmdSetExperienceResult(obj_id self, dictionary params) throws InterruptedException
{
if (isGod(self))
{
int granted = params.getInt(xp.GRANT_XP_RESULT_VALUE);
dictionary data = params.getDictionary(xp.GRANT_XP_RETURN_DATA);
obj_id target = data.getObjId("target");
String xp_type = data.getString("xp_type");
sendSystemMessageTestingOnly(self, "/setExperience: granted (" + target + ")" + utils.getStringName(target) + " " + granted + "pts of " + getString(new string_id("exp_n", xp_type)) + " (" + xp_type + ") experience");
}
return SCRIPT_CONTINUE;
}
public int OnPerformEmote(obj_id self, String emote) throws InterruptedException
{
int[] emotes = dataTableGetIntColumn(veteran_deprecated.EMOTES_DATATABLE, veteran_deprecated.EMOTES_COLUMN_EMOTE);
if (emotes == null)
{
return SCRIPT_CONTINUE;
}
int emoteCrc = getStringCrc(emote);
for (int i = 0; i < emotes.length; ++i)
{
if (emoteCrc == emotes[i])
{
int[] playerEmotes = getIntArrayObjVar(self, veteran_deprecated.OBJVAR_VETERAN_EMOTES);
if (playerEmotes != null)
{
int emoteGroup = dataTableGetInt(veteran_deprecated.EMOTES_DATATABLE, i, veteran_deprecated.EMOTES_COLUMN_GROUP);
for (int playerEmote : playerEmotes) {
if (emoteGroup == playerEmote) {
return SCRIPT_CONTINUE;
}
}
}
return SCRIPT_OVERRIDE;
}
}
return SCRIPT_CONTINUE;
}
public int cmdGetVeteranRewardTime(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!("true").equals(getConfigSetting("GameServer", "enableVeteranRewards")))
{
return SCRIPT_CONTINUE;
}
if (isGod(self))
{
if (!isIdValid(target))
{
target = self;
}
if (veteran_deprecated.checkVeteranTarget(target))
{
int veteranTime = getIntObjVar(target, veteran_deprecated.OBJVAR_TIME_ACTIVE);
prose_package pp = new prose_package();
pp.stringId = veteran_deprecated.SID_VETERAN_TIME_ACTIVE;
pp.target.id = target;
pp.digitInteger = veteranTime;
sendSystemMessageProse(self, pp);
}
}
else
{
if (hasObjVar(self, veteran_deprecated.OBJVAR_TIME_ACTIVE))
{
int veteranTime = getIntObjVar(self, veteran_deprecated.OBJVAR_TIME_ACTIVE);
prose_package pp = new prose_package();
pp.stringId = veteran_deprecated.SID_VETERAN_SELF_TIME_ACTIVE;
pp.digitInteger = veteranTime;
sendSystemMessageProse(self, pp);
}
else
{
sendSystemMessage(self, veteran_deprecated.SID_SYSTEM_INACTIVE);
}
}
return SCRIPT_CONTINUE;
}
public int cmdListVeteranRewards(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (!("true").equals(getConfigSetting("GameServer", "enableVeteranRewards")))
{
return SCRIPT_CONTINUE;
}
if (!isGod(self) && !hasObjVar(self, veteran_deprecated.OBJVAR_TIME_ACTIVE))
{
sendSystemMessage(self, veteran_deprecated.SID_SYSTEM_INACTIVE);
return SCRIPT_CONTINUE;
}
int[] templateCrcs = dataTableGetIntColumn(veteran_deprecated.REWARDS_DATATABLE, veteran_deprecated.REWARDS_COLUMN_TEMPLATE);
if (templateCrcs == null)
{
return SCRIPT_CONTINUE;
}
int[] milestones = dataTableGetIntColumn(veteran_deprecated.REWARDS_DATATABLE, veteran_deprecated.REWARDS_COLUMN_MILESTONE);
if (milestones == null)
{
return SCRIPT_CONTINUE;
}
string_id[] nameIds = getNamesFromTemplates(templateCrcs);
if (nameIds == null)
{
return SCRIPT_CONTINUE;
}
if (milestones.length != nameIds.length)
{
return SCRIPT_CONTINUE;
}
String[] milestonesText = new String[nameIds.length];
String daysText = getString(veteran_deprecated.SID_DAYS);
for (int i = 0; i < nameIds.length; ++i)
{
if (nameIds[i] != null)
{
milestonesText[i] = "@" + nameIds[i] + " :\\>200" + (milestones[i] * veteran_deprecated.DAYS_PER_MILESTONE) + daysText;
}
else
{
milestonesText[i] = "<error>";
}
}
int pid = sui.listbox(self, "", milestonesText);
if (pid < 0)
{
CustomerServiceLog("veteran", "Could not create sui reward list, error = " + pid);
}
return SCRIPT_CONTINUE;
}
public int handleVeteranMilestoneSelected(obj_id self, dictionary params) throws InterruptedException
{
if ((params == null) || (params.isEmpty()))
{
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int rowSelected = sui.getListboxSelectedRow(params);
int[] milestones = (self.getScriptVars()).getIntArray(veteran_deprecated.SCRIPTVAR_AVAILABLE_MILESTONES);
if (milestones == null || milestones.length < 1 || rowSelected < 0)
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_BAD_MILESTONE);
return SCRIPT_CONTINUE;
}
rowSelected = 1;
for (int milestone : milestones) {
if ((rowSelected + 1) == milestone) {
veteran_deprecated.requestVeteranRewards(self, milestone);
return SCRIPT_CONTINUE;
}
}
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_BAD_MILESTONE);
return SCRIPT_CONTINUE;
}
public int handleVeteranRewardSelected(obj_id self, dictionary params) throws InterruptedException
{
if ((params == null) || (params.isEmpty()))
{
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int rowSelected = sui.getListboxSelectedRow(params);
if (rowSelected < 0)
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_BAD_REWARD);
return SCRIPT_CONTINUE;
}
int result = veteran_deprecated.givePlayerReward(self, rowSelected, true);
if (result == veteran_deprecated.GIVE_PLAYER_REWARD_SUCCESS)
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_REWARD_GIVEN);
}
else if (result == veteran_deprecated.GIVE_PLAYER_REWARD_FAILED)
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_REWARD_ERROR);
}
else
{
}
return SCRIPT_CONTINUE;
}
public int handleVeteranRewardConfirmed(obj_id self, dictionary params) throws InterruptedException
{
if ((params == null) || (params.isEmpty()))
{
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
if (!(self.getScriptVars()).hasKey(veteran_deprecated.SCRIPTVAR_SELECTED_MILESTONE))
{
veteran_deprecated.cleanupPlayerData(self);
}
else
{
(self.getScriptVars()).remove(veteran_deprecated.SCRIPTVAR_SELECTED_REWARD);
int milestone = (self.getScriptVars()).getInt(veteran_deprecated.SCRIPTVAR_SELECTED_MILESTONE);
veteran_deprecated.requestVeteranRewards(self, milestone);
}
return SCRIPT_CONTINUE;
}
if (!(self.getScriptVars()).hasKey(veteran_deprecated.SCRIPTVAR_SELECTED_REWARD))
{
CustomerServiceLog("veteran", "handleVeteranRewardConfirmed could not find SCRIPTVAR_SELECTED_REWARD for player %TU", self);
veteran_deprecated.cleanupPlayerData(self);
return SCRIPT_CONTINUE;
}
int rewardIndex = (self.getScriptVars()).getInt(veteran_deprecated.SCRIPTVAR_SELECTED_REWARD);
int result = veteran_deprecated.givePlayerReward(self, rewardIndex, false);
if (result == veteran_deprecated.GIVE_PLAYER_REWARD_SUCCESS)
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_REWARD_GIVEN);
}
else
{
veteran_deprecated.cleanupPlayerData(self);
sendSystemMessage(self, veteran_deprecated.SID_REWARD_ERROR);
}
return SCRIPT_CONTINUE;
}
public int cmdFlashSpeeder(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
String config = getConfigSetting("GameServer", "flashSpeederReward");
if (config == null || !config.equals("true"))
{
return SCRIPT_CONTINUE;
}
int sub_bits = getGameFeatureBits(self);
if (hasObjVar(self, "flash_speeder.eligible"))
{
sub_bits = getIntObjVar(self, "flash_speeder.eligible");
}
if (features.isSpaceEdition(self) && utils.checkBit(sub_bits, 3) || features.isJPCollectorEdition(self))
{
if (!hasObjVar(self, "flash_speeder.granted"))
{
obj_id inv = getObjectInSlot(self, "inventory");
int free_space = getVolumeFree(inv);
if (free_space < 1)
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_no_inv_space"));
return SCRIPT_CONTINUE;
}
if (veteran_deprecated.checkFlashSpeederReward(self))
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_granted"));
}
else
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_grant_failed"));
}
}
else
{
sui.msgbox(self, self, "@" + veteran_deprecated.VETERAN_STRING_TABLE + ":flash_speeder_replace_prompt", sui.YES_NO, "msgFlashSpeederConfirmed");
}
}
else
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_not_eligible"));
}
return SCRIPT_CONTINUE;
}
public int msgFlashSpeederConfirmed(obj_id self, dictionary params) throws InterruptedException
{
String button = params.getString("buttonPressed");
if (button.equals("Cancel"))
{
return SCRIPT_CONTINUE;
}
if (getTotalMoney(self) < veteran_deprecated.FLASH_SPEEDER_COST)
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_no_credits"));
return SCRIPT_CONTINUE;
}
obj_id inv = getObjectInSlot(self, "inventory");
int free_space = getVolumeFree(inv);
if (free_space < 1)
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_no_inv_space"));
return SCRIPT_CONTINUE;
}
money.pay(self, money.ACCT_VEHICLE_REPAIRS, veteran_deprecated.FLASH_SPEEDER_COST, "msgFlashSpeederPaid", null);
return SCRIPT_CONTINUE;
}
public int msgFlashSpeederPaid(obj_id self, dictionary params) throws InterruptedException
{
int result = money.getReturnCode(params);
if (result == money.RET_SUCCESS)
{
createObjectInInventoryAllowOverload("object/tangible/deed/vehicle_deed/speederbike_flash_deed.iff", self);
CustomerServiceLog("flash_speeder", "%TU has purchased a new JtL pre-order Flash Speeder.", self);
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_granted"));
}
else
{
sendSystemMessage(self, new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "flash_speeder_grant_failed"));
}
return SCRIPT_CONTINUE;
}
public int playDelayedClientEffect(obj_id self, dictionary params) throws InterruptedException
{
String clientEffect = params.getString("effect");
obj_id target = params.getObjId("target");
playClientEffectObj(target, clientEffect, target, "");
return SCRIPT_CONTINUE;
}
public int clearScriptVar(obj_id self, dictionary params) throws InterruptedException
{
String scriptVarName = params.getString("name");
utils.removeScriptVar(self, scriptVarName);
return SCRIPT_CONTINUE;
}
public int OnEnterRegion(obj_id self, String planetName, String regionName) throws InterruptedException
{
obj_id pvpRegionController = gcw.getPvpRegionControllerIdByName(self, regionName);
if (isIdValid(pvpRegionController) && exists(pvpRegionController))
{
gcw.notifyPvpRegionControllerOfPlayerEnter(pvpRegionController, self);
}
if (regionName.equals(restuss_event.PVP_REGION_NAME))
{
if ((!factions.isImperial(self) && !factions.isRebel(self)) || !factions.isCovert(self) || getLevel(self) < 75)
{
if (getLevel(self) < 75)
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_level_low"));
}
else
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_not_allowed"));
}
int attempts = 0;
String enterAttempt = "enterRestussAttempt";
if (utils.hasScriptVar(self, enterAttempt))
{
attempts = utils.getIntScriptVar(self, enterAttempt);
}
if (attempts > 5)
{
utils.removeScriptVar(self, enterAttempt);
warpPlayer(self, "rori", 5305, 80, 6188, null, 0, 0, 0);
return SCRIPT_CONTINUE;
}
attempts++;
utils.setScriptVar(self, enterAttempt, attempts);
return SCRIPT_OVERRIDE;
}
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_entered"));
pvpMakeDeclared(self);
utils.setScriptVar(self, factions.IN_ADHOC_PVP_AREA, true);
return SCRIPT_CONTINUE;
}
else if (regionName.startsWith(gcw.PVP_BATTLEFIELD_REGION))
{
obj_id controllerOnPlayer = utils.getObjIdScriptVar(self, "battlefield.active");
if (!isIdValid(controllerOnPlayer))
{
if (utils.hasObjIdBatchScriptVar(pvpRegionController, "battlefield.active_players"))
{
obj_id[] allPlayers = utils.getObjIdBatchScriptVar(pvpRegionController, "battlefield.active_players");
if (allPlayers != null && allPlayers.length > 0)
{
boolean found = false;
for (obj_id allPlayer : allPlayers) {
if (allPlayer == self) {
utils.setScriptVar(self, "battlefield.active", pvpRegionController);
found = true;
pvp.bfLog(pvpRegionController, "Player " + getName(self) + "(" + self + ") Entered the Battlefield and was missing the 'battlefield.active_players' scriptvar. Player was just found and the scriptvar was added.");
break;
}
}
if (!found)
{
pvp.bfLog(pvpRegionController, "Player " + getName(self) + "(" + self + ") Entered the Battlefield and was missing the 'battlefield.active_players' scriptvar. After reviewing the list of players allowed, they were not found. They need to be removed from the Battlefield");
}
}
}
}
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_entered"));
pvpMakeDeclared(self);
utils.setScriptVar(self, factions.IN_ADHOC_PVP_AREA, true);
buff.applyBuff(self, "battlefield_radar_invisibility");
}
else if (regionName.startsWith(gcw.PVP_PUSHBACK_REGION))
{
if (((!factions.isImperial(self) && !factions.isRebel(self)) || getLevel(self) < 75) && !isGod(self))
{
if (getLevel(self) < 75)
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_level_low"));
}
else
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_not_allowed"));
}
String enterAttempt = "enterBattlefieldAttempt";
int attempts = utils.getIntScriptVar(self, enterAttempt);
if (attempts > 5)
{
utils.removeScriptVar(self, enterAttempt);
}
else
{
attempts++;
utils.setScriptVar(self, enterAttempt, attempts);
playMusic(self, "sound/wall_of_mist_barrier_os.snd");
return SCRIPT_OVERRIDE;
}
}
obj_id controller = gcw.getPushbackControllerByPlayer(self);
if (isIdValid(controller))
{
dictionary params = new dictionary();
params.put("player", self);
messageTo(controller, "validateTeamPlayer", params, 1.0f, false);
}
return SCRIPT_CONTINUE;
}
else if (regionName.equals("dathomir_fs_village_unpassable"))
{
String config = getConfigSetting("GameServer", "fsWallOfMistEnabled");
if (config != null)
{
if (config.equals("false"))
{
return SCRIPT_CONTINUE;
}
}
if (!township.isTownshipEligible(self) || ai_lib.isInCombat(self))
{
boolean playEffect = false;
int gameTime = getGameTime();
if (utils.hasScriptVar(self, "lastTownshipUnpassable"))
{
int lastNotice = utils.getIntScriptVar(self, "lastTownshipUnpassable");
if (gameTime - 30 > lastNotice)
{
playEffect = true;
}
}
else
{
playEffect = true;
}
if (playEffect)
{
playMusic(self, "sound/wall_of_mist_barrier_os.snd");
string_id sid = null;
if (!fs_quests.isVillageEligible(self))
{
sid = new string_id("base_player", "fs_village_unavailable");
}
else if (ai_lib.isInCombat(self))
{
sid = new string_id("base_player", "fs_village_no_combat");
}
if (sid != null)
{
sendSystemMessage(self, sid);
}
utils.setScriptVar(self, "lastFsUnpassable", gameTime);
}
return SCRIPT_OVERRIDE;
}
}
else if (regionName.equals("@dathomir_region_names:black_mesa") && hasObjVar(self, "outbreak.usedGate"))
{
buff.applyBuff(self, "death_troopers_no_vehicle");
}
else if (regionName.equals("outbreak_infected_area_01") || regionName.equals("outbreak_infected_area_02") || regionName.equals("outbreak_infected_area_03") || regionName.equals("outbreak_infected_area_04"))
{
if (!isGod(self))
{
if (needsBlackwingLightInfection(self))
{
messageTo(self, "death_troopers_apply_virus", null, 3.0f, false);
}
if (!buff.hasBuff(self, "death_troopers_no_vehicle"))
{
buff.applyBuff(self, "death_troopers_no_vehicle");
}
obj_id currentMount = getMountId(self);
if (isIdValid(currentMount))
{
sendSystemMessage(self, new string_id("base_player", "dismounting"));
utils.dismountRiderJetpackCheck(self);
if (exists(currentMount))
{
obj_id petControlDevice = callable.getCallableCD(currentMount);
vehicle.storeVehicle(petControlDevice, self);
}
}
}
}
else
{
region enteredRegion = getRegion(planetName, regionName);
if (enteredRegion != null && enteredRegion.getPvPType() == regions.PVP_REGION_TYPE_ADVANCED)
{
if ((!factions.isImperial(self) && !factions.isRebel(self)) || !factions.isCovert(self))
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_not_allowed"));
return SCRIPT_OVERRIDE;
}
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_entered"));
if (hasObjVar(self, "intChangingFactionStatus"))
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_faction_type_change_cancel"));
}
pvpMakeDeclared(self);
utils.setScriptVar(self, factions.IN_ADHOC_PVP_AREA, true);
return SCRIPT_CONTINUE;
}
}
return SCRIPT_CONTINUE;
}
public int OnExitRegion(obj_id self, String planetName, String regionName) throws InterruptedException
{
if (regionName.startsWith(gcw.PVP_BATTLEFIELD_REGION) && !utils.hasScriptVar(self, "battlefield.kicked_out"))
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_leaving_battlefield"));
if (buff.hasBuff(self, "battlefield_communication_run"))
{
return SCRIPT_OVERRIDE;
}
}
if (regionName.startsWith(gcw.PVP_BATTLEFIELD_REGION))
{
buff.removeBuff(self, "battlefield_radar_invisibility");
utils.removeScriptVar(self, factions.IN_ADHOC_PVP_AREA);
}
if (regionName.startsWith(gcw.PVP_PUSHBACK_REGION))
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_leaving_pushback"));
}
if (utils.hasScriptVar(self, "battlefield.kicked_out"))
{
utils.removeScriptVar(self, "battlefield.kicked_out");
}
if (regionName.equals(restuss_event.PVP_REGION_NAME))
{
sendSystemMessage(self, restuss_event.SID_PVP_EXIT_MESSAGE);
if (utils.hasScriptVar(self, factions.IN_ADHOC_PVP_AREA))
{
utils.removeScriptVar(self, factions.IN_ADHOC_PVP_AREA);
}
return SCRIPT_CONTINUE;
}
else if (regionName.equals("@dathomir_region_names:black_mesa"))
{
if (isGod(self))
{
sendSystemMessage(self, "[GodMode] Now Leaving the Infected Zone. We hope you enjoyed your visit.", "");
}
obj_id building = getTopMostContainer(self);
if (isIdValid(building) && (getTemplateName(building)).equals("object/building/dathomir/imperial_blackwing_facility.iff"))
{
if (isGod(self))
{
sendSystemMessage(self, "[GodMode] Please disregard that previous message as you are clearly still within the Blackwing facility. Be sure to enjoy your infection while you are here.", "");
}
}
else
{
buff.removeBuff(self, "death_troopers_infection_1");
buff.removeBuff(self, "death_troopers_infection_2");
buff.removeBuff(self, "death_troopers_infection_3");
buff.removeBuff(self, "death_troopers_no_vehicle");
}
}
else
{
region exitedRegion = getRegion(planetName, regionName);
if (exitedRegion != null && exitedRegion.getPvPType() == regions.PVP_REGION_TYPE_ADVANCED)
{
sendSystemMessage(self, new string_id("gcw", "pvp_advanced_region_exited"));
if (utils.hasScriptVar(self, factions.IN_ADHOC_PVP_AREA))
{
utils.removeScriptVar(self, factions.IN_ADHOC_PVP_AREA);
}
return SCRIPT_CONTINUE;
}
}
return SCRIPT_CONTINUE;
}
public boolean setupNovicePilotSkill(obj_id self, String skillName) throws InterruptedException
{
if (!skillName.startsWith("pilot_"))
{
return true;
}
if (skillName.equals("pilot_imperial_navy_novice"))
{
int intAlignedFaction = pvpGetAlignedFaction(self);
if (intAlignedFaction == (370444368))
{
sendSystemMessage(self, new string_id("faction_recruiter", "no_rebel_imp_pilots"));
if (!isGod(self))
{
return false;
}
else
{
sendSystemMessageTestingOnly(self, "GODMODE MSG: You can only acquire this skill BECAUSE you are in god mode");
}
}
else
{
pvpSetAlignedFaction(self, (-615855020));
if (pvpGetType(self) == PVPTYPE_NEUTRAL)
{
if (!factions.isOnLeave(self))
{
pvpMakeCovert(self);
}
}
else
{
}
}
}
else if (skillName.equals("pilot_rebel_navy_novice"))
{
int intAlignedFaction = pvpGetAlignedFaction(self);
if (intAlignedFaction == (-615855020))
{
sendSystemMessage(self, new string_id("faction_recruiter", "no_imp_rebel_pilots"));
if (!isGod(self))
{
return false;
}
else
{
sendSystemMessageTestingOnly(self, "GODMODE MSG: You can only acquire this skill BECAUSE you are in god mode");
}
}
else
{
pvpSetAlignedFaction(self, (370444368));
if (pvpGetType(self) == PVPTYPE_NEUTRAL)
{
if (!factions.isOnLeave(self))
{
pvpMakeCovert(self);
}
}
else
{
}
}
}
if (!hasObjVar(self, space_flags.SPACE_TRACK_FLAG))
{
if (skillName.equals("pilot_imperial_navy_novice"))
{
space_flags.setSpaceTrack(self, space_flags.IMPERIAL_TATOOINE);
}
else if (skillName.equals("pilot_rebel_navy_novice"))
{
space_flags.setSpaceTrack(self, space_flags.REBEL_TATOOINE);
}
else
{
space_flags.setSpaceTrack(self, space_flags.PRIVATEER_TATOOINE);
}
}
return true;
}
public boolean allowedBySpaceExpansion(obj_id self, String skillName) throws InterruptedException
{
if (skillName.startsWith("pilot_") || skillName.startsWith("crafting_shipwright_"))
{
if (!features.isSpaceEdition(self))
{
sendSystemMessage(self, new string_id("skl_use", "need_space_expansion"));
return false;
}
}
return true;
}
public int gmForceCommand(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if ((params == null) || (params.equals("")))
{
sendSystemMessageTestingOnly(self, "Incorrect syntax. Syntax is /gmForceCommand <command> <target_object_id> <command parameters>. You can use 0 instead of a valid object_id if needed. Params are optionsl");
return SCRIPT_CONTINUE;
}
if (!isIdValid(target))
{
target = getLookAtTarget(self);
}
if (!isIdValid(target))
{
sendSystemMessageTestingOnly(self, "You must target the player you wish to call this command on");
return SCRIPT_CONTINUE;
}
String[] strText = split(params, ',');
if (strText.length < 2)
{
sendSystemMessageTestingOnly(self, "Incorrect syntax. Syntax is /gmForceCommand <command> <target_object_id> <command parameters>. You can use 0 instead of a valid object_id if needed. Params are optionsl");
return SCRIPT_CONTINUE;
}
String strCommand = strText[0];
if (strCommand.equals("gmForceCommand"))
{
sendSystemMessageTestingOnly(self, "You are not permitted to use this command to force this command. Don't do that");
return SCRIPT_CONTINUE;
}
String strCommandTarget = strText[1];
String strParams = "";
if (strText.length == 3)
{
strParams = strText[2];
}
Long lngId;
try
{
lngId = Long.valueOf(strCommandTarget);
}
catch(NumberFormatException err)
{
sendSystemMessageTestingOnly(self, strCommandTarget + " is not a valid number to use. Please retry.");
return SCRIPT_CONTINUE;
}
obj_id objCommandTarget = obj_id.getObjId(lngId.longValue());
if (isIdValid(objCommandTarget) && (!exists(objCommandTarget)))
{
sendSystemMessageTestingOnly(self, "That command target does not exist and it is not 0. Object id was " + objCommandTarget);
return SCRIPT_CONTINUE;
}
dictionary dctParams = new dictionary();
dctParams.put("objTarget", objCommandTarget);
int intCommand = getStringCrc(strCommand);
dctParams.put("intCommand", intCommand);
dctParams.put("strParams", strParams);
messageTo(target, "doForcedGmCommand", dctParams, 0, false);
sendSystemMessageTestingOnly(self, "Forcing " + target + " to do command " + strCommand + " to target " + objCommandTarget + " with Parameters " + strParams);
return SCRIPT_CONTINUE;
}
public int doForcedGmCommand(obj_id self, dictionary params) throws InterruptedException
{
int intCommand = params.getInt("intCommand");
obj_id objTarget = params.getObjId("objTarget");
String strParams = params.getString("strParams");
queueCommand(self, intCommand, objTarget, strParams, COMMAND_PRIORITY_DEFAULT);
sendSystemMessageTestingOnly(self, "A GM Forced you to do a command");
return SCRIPT_CONTINUE;
}
public int factionBaseLotRefund(obj_id self, dictionary params) throws InterruptedException
{
int baseLotRefund = params.getInt("baseLotRefund");
obj_id playerObject = getPlayerObject(self);
adjustLotCount(playerObject, (baseLotRefund * -1));
float baseFactionRefund = params.getFloat("baseFactionRefund");
int baseFaction = params.getInt("baseFaction");
factions.addFactionStanding(self, baseFaction, baseFactionRefund);
if ((int)(baseFactionRefund) > 0)
{
int intBaseFactionRefund = (int)(baseFactionRefund);
sendSystemMessageProse(self, prose.getPackage(new string_id("faction_perk", "old_fbase_refunded"), baseLotRefund, intBaseFactionRefund));
}
else
{
sendSystemMessageProse(self, prose.getPackage(new string_id("faction_perk", "new_old_fbase_refunded"), baseLotRefund));
}
return SCRIPT_CONTINUE;
}
public int transferMoneyToNamedAccount(obj_id self, dictionary params) throws InterruptedException
{
transferBankCreditsToNamedAccount(self, params.getString("account"), params.getInt("amount"), "transferMoneyToNamedAccount_successCallback", "transferMoneyToNamedAccount_failCallback", params);
return SCRIPT_CONTINUE;
}
public int transferMoneyToNamedAccount_successCallback(obj_id self, dictionary params) throws InterruptedException
{
messageTo(params.getObjId("replyTo"), params.getString("successCallback"), params, 0, false);
return SCRIPT_CONTINUE;
}
public int transferMoneyToNamedAccount_failCallback(obj_id self, dictionary params) throws InterruptedException
{
messageTo(params.getObjId("replyTo"), params.getString("failCallback"), params, 0, false);
return SCRIPT_CONTINUE;
}
public int sendSystemMessageProseAuthoritative(obj_id self, dictionary params) throws InterruptedException
{
if ((params == null) || (params.isEmpty()))
{
debugSpeakMsg(self, "sendSystemMessageProseAuthoritative called with no params");
return SCRIPT_CONTINUE;
}
String stf = params.getString("stf");
String message = params.getString("message");
obj_id TO = params.getObjId("TO");
obj_id TT = params.getObjId("TT");
prose_package pp = new prose_package();
string_id msg = new string_id(stf, message);
pp = prose.setStringId(pp, msg);
pp = prose.setTO(pp, TO);
pp = prose.setTT(pp, TT);
sendSystemMessageProse(self, pp);
return SCRIPT_CONTINUE;
}
public int OnRecapacitated(obj_id self) throws InterruptedException
{
dictionary params = new dictionary();
params.put("player", self);
broadcastMessage("handleSawRecapacitation", params);
final int aggroImmuneDuration = 12;
setAggroImmuneDuration(self, aggroImmuneDuration);
debugSpeakMsgc(aiLoggingEnabled(self), self, "AggroImmune(" + aggroImmuneDuration + "s)");
utils.removeScriptVar(self, "incap.timeStamp");
combat.clearCombatDebuffs(self);
static_item.validateWornEffects(self);
reverse_engineering.checkPowerUpReApply(self);
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
if (utils.isProfession(self, utils.SMUGGLER))
{
messageTo(self, "applySmugglingBonuses", null, 1.0f, false);
}
if (utils.isProfession(self, utils.FORCE_SENSITIVE) && getLevel(self) > 3)
{
if (!buff.isInStance(self) && !buff.isInFocus(self))
{
messageTo(self, "applyJediStance", null, 1.0f, false);
}
}
if (factions.isInAdhocPvpArea(self))
{
pvpMakeDeclared(self);
}
return SCRIPT_CONTINUE;
}
public int handleInstanceTimeRemainingMessage(obj_id self, dictionary params) throws InterruptedException
{
String message = params.getString("message");
sendSystemMessageTestingOnly(self, message);
return SCRIPT_CONTINUE;
}
public int setRespecVersion(obj_id self, dictionary params) throws InterruptedException
{
respec.setRespecVersion(self);
return SCRIPT_CONTINUE;
}
public int receiveCreditForKill(obj_id self, dictionary params) throws InterruptedException
{
String creatureName = params.getString("creatureName");
if (creatureName != null && !creatureName.equals(""))
{
location creatureLoc = params.getLocation("location");
location playerLoc = getLocation(self);
if (!playerLoc.area.equals(creatureLoc.area))
{
return SCRIPT_CONTINUE;
}
String col_faction = params.getString("col_faction");
int col_difficulty = params.getInt("difficultyClass");
if (col_faction != null && !col_faction.equals(""))
{
String[] col_factionArray = split(col_faction, ',');
for (int i = 0; i < col_factionArray.length; i++)
{
if (col_faction.equals("rebel"))
{
if (col_difficulty == 0)
{
modifyCollectionSlotValue(self, "kill_rebel_01", 1);
}
else
{
modifyCollectionSlotValue(self, "kill_rebel_boss_01", 1);
}
}
if (col_faction.equals("imperial"))
{
if (col_difficulty == 0)
{
modifyCollectionSlotValue(self, "kill_imperial_01", 1);
}
else
{
modifyCollectionSlotValue(self, "kill_imperial_boss_01", 1);
}
}
}
}
if (getDistance(getLocation(self), creatureLoc) <= xp.MAX_DISTANCE)
{
badge.checkForCombatTargetBadge(self, creatureName);
String[] slotNames = getAllCollectionSlotsInCategory("kill_" + creatureName);
if (slotNames == null || slotNames.length <= 0)
{
return SCRIPT_CONTINUE;
}
for (String slotName : slotNames) {
if (!hasCompletedCollectionSlot(self, slotName)) {
modifyCollectionSlotValue(self, slotName, 1);
}
}
}
obj_id target = params.getObjId("target");
if (isValidId(target))
{
if (hasObjVar(target, gcw.GCW_PARTICIPATION_FLAG))
{
obj_id parent = trial.getParent(target);
if (isIdValid(parent))
{
trial.addNonInstanceFactionParticipant(self, parent);
}
}
}
}
if (utils.hasScriptVar(self, "currentBounty") && utils.hasScriptVar(self, "currentBountyValue"))
{
obj_id target = params.getObjId("target");
obj_id storedTarget = utils.getObjIdScriptVar(self, "currentBounty");
if (storedTarget == target)
{
int amount = utils.getIntScriptVar(self, "currentBountyValue");
bounty_hunter.awardBounty(self, creatureName, amount);
}
}
return SCRIPT_CONTINUE;
}
public int HandleSetCoverCharge(obj_id self, dictionary params) throws InterruptedException
{
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
String strAmount = sui.getInputBoxText(params);
int amount = utils.stringToInt(strAmount);
if (amount > 0)
{
performance.covercharge(self, amount);
}
return SCRIPT_CONTINUE;
}
public int HandleCoverCharge(obj_id self, dictionary params) throws InterruptedException
{
int bp = sui.getIntButtonPressed(params);
obj_id audience = sui.getPlayerId(params);
int charge = utils.getIntScriptVar(audience, performance.VAR_PERFORM_PAY_WAIT);
if (bp == 0)
{
if (money.hasFunds(audience, money.MT_TOTAL, charge))
{
utils.removeScriptVar(audience, performance.VAR_PERFORM_PAY_WAIT);
utils.setScriptVar(audience, performance.VAR_PERFORM_PAY_AGREE, charge);
money.pay(audience, money.ACCT_PERFORM_ESCROW, charge, "handlePayment", null);
if (utils.hasScriptVar(audience, "dancerID"))
{
obj_id targetDancer = utils.getObjIdScriptVar(audience, "dancerID");
String audienceName = getFirstName(audience);
if ((audienceName == null) || (audienceName.equals("")))
{
audienceName = getPlayerName(audience);
}
prose_package dancerProse = new prose_package();
prose.setTU(dancerProse, audienceName);
prose.setDI(dancerProse, charge);
prose.setStringId(dancerProse, COVERCHARGE_DANCER_MESSAGE);
sendSystemMessageProse(targetDancer, dancerProse);
utils.removeScriptVar(audience, "dancerID");
}
}
else
{
sendSystemMessage(audience, performance.SID_CC_NO_FUNDS);
utils.removeScriptVar(audience, performance.VAR_PERFORM_PAY_WAIT);
performance.stopListen(audience);
performance.stopWatch(audience);
if (utils.hasScriptVar(audience, "dancerID"))
{
utils.removeScriptVar(audience, "dancerID");
}
}
}
else
{
utils.removeScriptVar(audience, performance.VAR_PERFORM_PAY_WAIT);
utils.setScriptVar(audience, performance.VAR_PERFORM_PAY_DISAGREE, charge);
performance.stopListen(audience);
performance.stopWatch(audience);
if (utils.hasScriptVar(audience, "dancerID"))
{
utils.removeScriptVar(audience, "dancerID");
}
}
return SCRIPT_CONTINUE;
}
public int messageUpdateMissionCriticalObjects(obj_id self, dictionary params) throws InterruptedException
{
obj_id[] addObjects = params.getObjIdArray("addObjects");
obj_id[] removeObjects = params.getObjIdArray("removeObjects");
if (addObjects != null && addObjects.length > 0)
{
for (obj_id addObject : addObjects) {
addMissionCriticalObject(self, addObject);
}
}
if (removeObjects != null && removeObjects.length > 0)
{
for (obj_id removeObject : removeObjects) {
removeMissionCriticalObject(self, removeObject);
}
}
return SCRIPT_CONTINUE;
}
public int messageSendQuestSystemMessage(obj_id self, dictionary params) throws InterruptedException
{
string_id sid = params.getStringId("sid");
string_id to = params.getStringId("to");
prose_package pp = prose.getPackage(sid, to);
sendQuestSystemMessage(self, pp);
return SCRIPT_CONTINUE;
}
public int cmdShowLockout(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
space_dungeon.displayAllDungeonLockoutTimers(self);
return SCRIPT_CONTINUE;
}
public int OnPvpTypeChanged(obj_id self, int oldType, int newType) throws InterruptedException
{
if (oldType == PVPTYPE_DECLARED)
{
if ((newType == PVPTYPE_COVERT) || (newType == PVPTYPE_NEUTRAL))
{
obj_id playerCurrentMount = getMountId(self);
if (isIdValid(playerCurrentMount))
{
if (group.isGrouped(self))
{
obj_id gid = getGroupObject(self);
obj_id[] members = getGroupMemberIds(gid);
for (obj_id member : members) {
if (isIdValid(member) && member.isLoaded() && isPlayer(member)) {
obj_id groupMemberCurrentMount = getMountId(member);
if (isIdValid(groupMemberCurrentMount)) {
if (groupMemberCurrentMount == playerCurrentMount) {
if (factions.isDeclared(member)) {
}
}
}
}
}
}
}
}
}
return SCRIPT_CONTINUE;
}
public int OnQuestActivated(obj_id self, int questCrc) throws InterruptedException
{
if (groundquests.isQuestVisible(questCrc))
{
String questCategory = groundquests.getQuestStringDataEntry(questCrc, groundquests.datatableColumnCategory);
String questTitle = groundquests.getQuestStringDataEntry(questCrc, groundquests.datatableColumnjournalEntryTitle);
prose_package pp = prose.getPackage(groundquests.SID_QUEST_RECEIVED);
prose.setTT(pp, questCategory);
prose.setTO(pp, questTitle);
sendQuestSystemMessage(self, pp);
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_ACTIVATED);
}
return SCRIPT_CONTINUE;
}
public int OnQuestReceivedReward(obj_id self, int questCrc, String exclusiveItemChoice) throws InterruptedException
{
int questLevel = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnLevel);
int questTier = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnTier);
String experienceType = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExperienceType);
int experienceAmount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExperienceAmount);
String factionName = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardFactionName);
int factionAmount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardFactionAmount);
boolean grantGcwReward = groundquests.getQuestBoolDataEntry(questCrc, groundquests.dataTableColumnGcwGrant, false);
int grantGcwOverwriteAmt = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnGcwOverwriteAmt);
int grantGcwSFModifier = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnGcwOvrwrtSFMod);
String grantGcwRebReward = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnGcwRebReward);
int grantGcwRebRewardCount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnGcwRebRewardCnt);
String grantGcwImpReward = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnGcwImpReward);
int grantGcwImpRewardCount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnGcwImpRewardCnt);
int grantGcwSFRewardMultip = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnGcwRewardMultip);
int bankCredits = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardBankCredits);
String item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardItem);
int itemCount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardCount);
String weapon = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardWeapon);
int weaponCount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardCountWeapon);
float weaponSpeed = utils.stringToFloat(groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardSpeed));
float weaponDamage = utils.stringToFloat(groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardDamage));
float weaponEfficiency = utils.stringToFloat(groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardEfficiency));
float weaponElementalValue = utils.stringToFloat(groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardElementalValue));
String armor = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardArmor);
int armorCount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardCountArmor);
int armorQuality = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardQuality);
String[] inclusiveLootNames = new String[3];
int[] inclusiveLootCounts = new int[3];
inclusiveLootNames[0] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName);
inclusiveLootCounts[0] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootCount);
inclusiveLootNames[1] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName2);
inclusiveLootCounts[1] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootCount2);
inclusiveLootNames[2] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName3);
inclusiveLootCounts[2] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootCount3);
String[] exclusiveLootNames = new String[10];
int[] exclusiveLootCounts = new int[10];
exclusiveLootNames[0] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName);
exclusiveLootCounts[0] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount);
exclusiveLootNames[1] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName2);
exclusiveLootCounts[1] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount2);
exclusiveLootNames[2] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName3);
exclusiveLootCounts[2] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount3);
exclusiveLootNames[3] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName4);
exclusiveLootCounts[3] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount4);
exclusiveLootNames[4] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName5);
exclusiveLootCounts[4] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount5);
exclusiveLootNames[5] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName6);
exclusiveLootCounts[5] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount6);
exclusiveLootNames[6] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName7);
exclusiveLootCounts[6] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount7);
exclusiveLootNames[7] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName8);
exclusiveLootCounts[7] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount8);
exclusiveLootNames[8] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName9);
exclusiveLootCounts[8] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount9);
exclusiveLootNames[9] = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName10);
exclusiveLootCounts[9] = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootCount10);
String badge = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnBadge);
int exclusiveLootCountChoice = groundquests.getExclusiveItemRewardCount(questGetQuestName(questCrc), exclusiveItemChoice);
groundquests.grantQuestReward(self, questCrc, questLevel, questTier, experienceType, experienceAmount, factionName, factionAmount, grantGcwReward, bankCredits, item, itemCount, weapon, weaponCount, weaponSpeed, weaponDamage, weaponEfficiency, weaponElementalValue, armor, armorCount, armorQuality, inclusiveLootNames, inclusiveLootCounts, exclusiveItemChoice, exclusiveLootCountChoice, badge, (questIsQuestForceAccept(questCrc) || !questDoesUseAcceptanceUI(questCrc)), grantGcwOverwriteAmt, grantGcwSFModifier, grantGcwRebReward, grantGcwRebRewardCount, grantGcwImpReward, grantGcwImpRewardCount, grantGcwSFRewardMultip);
experienceAmount = groundquests.getQuestExperienceReward(self, questLevel, questTier, experienceAmount);
metrics.doQuestMetrics(self, questCrc, questLevel, questTier, experienceType, experienceAmount);
return SCRIPT_CONTINUE;
}
public int OnQuestCompleted(obj_id self, int questCrc) throws InterruptedException
{
String conditionalQuestToGrant = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnConditionQuestGrantQuest);
String listOfQuestsThatMustBeCompleted = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnConditionQuestGrantListOfCompletedQuests);
if (conditionalQuestToGrant != null && conditionalQuestToGrant.length() > 0 && listOfQuestsThatMustBeCompleted != null && listOfQuestsThatMustBeCompleted.length() > 0)
{
String[] completedQuestList = split(listOfQuestsThatMustBeCompleted, ',');
boolean grantQuest = completedQuestList.length > 0;
for (int i = 0; i < completedQuestList.length && grantQuest; ++i)
{
String quest = completedQuestList[i];
if (!groundquests.isValidQuestName(quest) || !groundquests.hasCompletedQuest(self, quest))
{
grantQuest = false;
}
}
if (groundquests.isValidQuestName(conditionalQuestToGrant) && grantQuest)
{
groundquests.requestGrantQuest(self, conditionalQuestToGrant);
}
}
if (groundquests.isQuestVisible(questCrc))
{
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_COMPLETED);
}
String questString = questGetQuestName(questCrc);
int tableRow = dataTableSearchColumnForString(questString, "questName", collection.QUEST__COMPLETED_COLLECTIONS);
if (tableRow > -1)
{
collection.grantQuestBasedCollections(questString, self);
}
smuggler.removeFromBountyTerminal(self, questCrc, false);
return SCRIPT_CONTINUE;
}
public int OnQuestCleared(obj_id self, int questCrc) throws InterruptedException
{
String factionName = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestPenaltyFactionName);
int factionAmount = groundquests.getQuestIntDataEntry(questCrc, groundquests.dataTableColumnQuestPenaltyFactionAmount);
LOG("QUEST", "Quest " + questCrc + " cleared!");
groundquests.applyQuestPenalty(self, factionName, factionAmount);
smuggler.removeFromBountyTerminal(self, questCrc, true);
return SCRIPT_CONTINUE;
}
public int OnRequestStaticItemData(obj_id self, String itemName) throws InterruptedException
{
dictionary itemData = static_item.getMergedItemDictionary(itemName);
if (itemData != null)
{
String[] keysStringVector = itemData.keysStringVector();
String[] valuesStringVector = itemData.valuesStringVector();
sendStaticItemDataToPlayer(self, keysStringVector, valuesStringVector);
}
return SCRIPT_CONTINUE;
}
public int handleClientLogin(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
int[] quests = questGetAllActiveQuestIds(self);
for (int questCrc : quests) {
Vector objectsToTellClientAbout = new Vector();
objectsToTellClientAbout.setSize(0);
String item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName2);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardLootName3);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName2);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName3);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName4);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName5);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName6);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName7);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName8);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName9);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
item = groundquests.getQuestStringDataEntry(questCrc, groundquests.dataTableColumnQuestRewardExclusiveLootName10);
if (item != null) {
utils.addElement(objectsToTellClientAbout, item);
}
for (Object o : objectsToTellClientAbout) {
String itemName = ((String) o);
if (itemName != null && !itemName.equals("")) {
dictionary itemData = static_item.getMergedItemDictionary(itemName);
if (itemData != null) {
String[] keysStringVector = itemData.keysStringVector();
String[] valuesStringVector = itemData.valuesStringVector();
sendStaticItemDataToPlayer(self, keysStringVector, valuesStringVector);
}
}
}
}
obj_id building = getTopMostContainer(self);
if (isIdValid(building) && (getTemplateName(building)).equals("object/building/dathomir/imperial_blackwing_facility.iff"))
{
if (needsBlackwingLightInfection(self))
{
buff.applyBuff(self, "death_troopers_infection_1");
}
}
return SCRIPT_CONTINUE;
}
public int OnGetStaticItemsAttributes(obj_id self, String staticItemName, String[] names, String[] attribs) throws InterruptedException
{
if ((names == null) || (attribs == null) || (names.length != attribs.length))
{
return SCRIPT_CONTINUE;
}
static_item.getAttributes(self, staticItemName, names, attribs);
return SCRIPT_CONTINUE;
}
public int handleSmugglerFenceAbility(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
smuggler.showSellJunkSui(self, self, true, true);
return SCRIPT_CONTINUE;
}
public int handleSellJunkSui(obj_id self, dictionary params) throws InterruptedException
{
obj_id player = sui.getPlayerId(params);
if (!isIdValid(player))
{
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
int bp = sui.getIntButtonPressed(params);
obj_id[] junk = utils.getObjIdBatchScriptVar(player, smuggler.SCRIPTVAR_JUNK_IDS);
boolean reshowSui = true;
if (junk.length < 1)
{
reshowSui = false;
}
boolean fence = utils.getBooleanScriptVar(self, "fence");
smuggler.cleanupSellJunkSui(player);
if (bp == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
else if (bp == sui.BP_REVERT)
{
if (idx >= 0 && idx <= junk.length - 1)
{
if ((junk != null) || (junk.length > 0))
{
openExamineWindow(player, junk[idx]);
}
}
if (fence)
{
smuggler.showSellJunkSui(player, self, true, false);
}
else
{
smuggler.showSellJunkSui(player, self, false, false);
}
return SCRIPT_CONTINUE;
}
else
{
if (idx < 0)
{
if (reshowSui)
{
smuggler.showSellJunkSui(self, self, true, true);
}
return SCRIPT_CONTINUE;
}
if ((junk == null) || (junk.length == 0))
{
return SCRIPT_CONTINUE;
}
if (idx > junk.length - 1)
{
if (reshowSui)
{
smuggler.showSellJunkSui(self, self, true, true);
}
return SCRIPT_CONTINUE;
}
smuggler.sellJunkItem(player, junk[idx], fence, reshowSui);
}
return SCRIPT_CONTINUE;
}
public int handleSoldJunk(obj_id self, dictionary params) throws InterruptedException
{
blog("base_player.handleSoldJunk() - init");
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
obj_id player = params.getObjId(money.DICT_TARGET_ID);
if (!isIdValid(player))
{
CustomerServiceLog("Junk_Dealer: ", "junk_dealer.handleSoldJunk() - Player: " + self + " cannot sell an item because the junk dealer failed to send a valid obj_id.");
return SCRIPT_CONTINUE;
}
obj_id item = params.getObjId("item");
if (!isIdValid(item))
{
CustomerServiceLog("Junk_Dealer: ", "junk_dealer.handleSoldJunk() - Player: " + self + " cannot sell an item because the item was found to be invalid.");
return SCRIPT_CONTINUE;
}
boolean fence = params.getBoolean("fence");
blog("base_player.handleSoldJunk() - fence: " + fence);
int retCode = params.getInt(money.DICT_CODE);
if (retCode == money.RET_FAIL)
{
prose_package ppNoSale = prose.getPackage(smuggler.PROSE_NO_SALE, self, item);
if (fence)
{
ppNoSale = prose.getPackage(smuggler.PROSE_NO_SALE_FENCE, self, item);
}
sendSystemMessageProse(player, ppNoSale);
return SCRIPT_CONTINUE;
}
int price = params.getInt("price");
prose_package ppSoldJunk = prose.getPackage(smuggler.PROSE_SOLD_JUNK, item, price);
if (fence)
{
ppSoldJunk = prose.getPackage(smuggler.PROSE_SOLD_JUNK_FENCE, item, price);
}
sendSystemMessageProse(player, ppSoldJunk);
setObjVar(item, smuggler.BUYBACK_OBJ_SOLD, getGameTime());
smuggler.moveBuyBackObjectIntoContainer(player, item, price);
CustomerServiceLog("Junk_Dealer: ", "junk_dealer.handleSoldJunk() - Player: " + self + " has sold item: " + item + " and the item has been marked sold. The item is about to be moved to the buy back container.");
boolean reshowSui = params.getBoolean("reshowSui");
if (reshowSui && fence)
{
smuggler.showSellJunkSui(player, self, true, false);
}
else if (reshowSui && !fence)
{
smuggler.showSellJunkSui(player, self, false, false);
}
return SCRIPT_CONTINUE;
}
public int OnSkillModsChanged(obj_id self, String[] modNames, int[] modValues) throws InterruptedException
{
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
for (String modName : modNames) {
if ((modName.startsWith("constitution")) || (modName.startsWith("stamina"))) {
skill.recalcPlayerPools(self, false);
return SCRIPT_CONTINUE;
}
if (modName.startsWith("movement_resist")) {
messageTo(self, "check_movement_immunity", null, 0.1f, false);
}
}
return SCRIPT_CONTINUE;
}
public int handlePlayerBountyEngagement(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
pvpSetPermanentPersonalEnemyFlag(self, target);
messageTo(self, "handlePlayerBountyTimeout", params, bounty_hunter.BOUNTY_COLLECT_TIME_LIMIT, true);
return SCRIPT_CONTINUE;
}
public int handlePlayerBountyTimeout(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
int id = params.getInt("id");
if (utils.hasScriptVar(self, "bounty.id"))
{
int bounty_id = utils.getIntScriptVar(self, "bounty.id");
if (bounty_id != id)
{
return SCRIPT_CONTINUE;
}
}
if (pvpHasPersonalEnemyFlag(self, target))
{
pvpRemovePersonalEnemyFlags(self, target);
sendSystemMessage(self, new string_id("bounty_hunter", "time_expired"));
}
utils.removeScriptVarTree(self, "bounty");
return SCRIPT_CONTINUE;
}
public int handleAwardedBountyCheck(obj_id self, dictionary params) throws InterruptedException
{
if (utils.hasScriptVar(self, "currentBounty"))
{
utils.removeScriptVar(self, "currentBounty");
}
if (utils.hasScriptVar(self, "currentBountyValue"))
{
utils.removeScriptVar(self, "currentBountyValue");
}
if (params == null || params.isEmpty())
{
return SCRIPT_CONTINUE;
}
obj_id player = params.getObjId(money.DICT_TARGET_ID);
if (!isIdValid(player))
{
return SCRIPT_CONTINUE;
}
int retCode = params.getInt(money.DICT_CODE);
if (retCode == money.RET_FAIL)
{
prose_package pp = new prose_package();
pp.stringId = new string_id("bounty_hunter", "no_reward_possible");
sendSystemMessageProse(player, pp);
return SCRIPT_CONTINUE;
}
int amount = params.getInt("amount");
String creatureName = params.getString("creatureName");
prose_package pp = new prose_package();
pp.stringId = new string_id("bounty_hunter", "reward");
pp.digitInteger = amount;
pp.other.set(creatureName);
sendSystemMessageProse(player, pp);
return SCRIPT_CONTINUE;
}
public int handleAwardedPlayerBounty(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
int amount = params.getInt("bounty");
int retCode = params.getInt(money.DICT_CODE);
if (retCode == money.RET_FAIL)
{
sendSystemMessage(self, new string_id("bounty_hunter", "player_bounty_reward_fail"));
CustomerServiceLog("bounty", "%TU has defeated %TT but an error occured during the bounty (" + amount + " credits) payout!", self, target);
return SCRIPT_CONTINUE;
}
CustomerServiceLog("bounty", "%TU has defeated %TT and collected a bounty worth " + amount + " credits", self, target);
return SCRIPT_CONTINUE;
}
public int handleSurveyToolbarSetup(obj_id self, dictionary params) throws InterruptedException
{
obj_id objInv = utils.getInventoryContainer(self);
createObject("object/tangible/survey_tool/survey_tool_mineral.iff", objInv, "");
newbieTutorialSetToolbarElement(self, 10, "/survey");
return SCRIPT_CONTINUE;
}
public int factionBaseUnitRefund(obj_id self, dictionary params) throws InterruptedException
{
debugServerConsoleMsg(null, "+++ base_player.factionBaseUnitRefund +++ entered message handler");
if (hasObjVar(self, "factionBaseCount"))
{
int factionBaseCount = getIntObjVar(self, "factionBaseCount");
int updatedFactionBaseCount = factionBaseCount - 1;
if (updatedFactionBaseCount > 0)
{
setObjVar(self, "factionBaseCount", updatedFactionBaseCount);
}
else
{
removeObjVar(self, "factionBaseCount");
}
if (updatedFactionBaseCount == player_structure.MAX_BASE_COUNT - 1)
{
sendSystemMessage(self, SID_CAN_PLACE_ONE_BASE);
}
else
{
sendSystemMessageProse(self, prose.getPackage(new string_id("faction_perk", "faction_base_unit_refunded"), (player_structure.MAX_BASE_COUNT - updatedFactionBaseCount)));
}
}
return SCRIPT_CONTINUE;
}
public int OnSkillTemplateChanged(obj_id self, String skillTemplateName, boolean clientSelected) throws InterruptedException
{
if (skillTemplateName == null || skillTemplateName.equals("") || skillTemplateName.equals("a"))
{
if (hasObjVar(self, "clickRespec.tokenId"))
{
removeObjVar(self, "clickRespec.tokenId");
}
if (hasObjVar(self, "npcRespec.inProgress"))
{
removeObjVar(self, "npcRespec.inProgress");
}
return SCRIPT_CONTINUE;
}
if (!hasObjVar(self, "clickRespec") && !hasObjVar(self, "npcRespec.inProgress"))
{
return SCRIPT_CONTINUE;
}
if (hasObjVar(self, "npcRespec.inProgress"))
{
respec.handleNpcRespec(self, skillTemplateName);
respec.setRespecVersion(self);
return SCRIPT_CONTINUE;
}
else if (hasObjVar(self, "clickRespec.tokenId"))
{
obj_id token = getObjIdObjVar(self, "clickRespec.tokenId");
if (hasObjVar(self, "clickRespec.oldTemplate"))
{
String oldTemplate = getStringObjVar(self, "clickRespec.oldTemplate");
if (oldTemplate.equals(getSkillTemplate(self)))
{
removeObjVar(self, "clickRespec");
detachScript(self, "systems.respec.click_combat_respec");
return SCRIPT_CONTINUE;
}
static_item.decrementStaticItem(token);
removeObjVar(self, "clickRespec.tokenId");
}
}
boolean withItems = true;
if (hasObjVar(self, "clickRespec.cts"))
{
withItems = false;
}
respec.earnProfessionSkills(self, skillTemplateName, withItems);
return SCRIPT_CONTINUE;
}
public void givePublishGift(obj_id self) throws InterruptedException
{
final String OBJVAR_PUBLISH_GIFT = "publish_gift";
final String GIFT_DATATABLE = "datatables/veteran_rewards/publish_gift.iff";
int currentBD = getCurrentBirthDate();
int playerBD = getPlayerBirthDate(self);
if (playerBD < 0)
{
return;
}
if ((currentBD - playerBD) < 10)
{
return;
}
if (isInTutorialArea(self))
{
return;
}
int old_publish = -1;
if (hasObjVar(self, OBJVAR_PUBLISH_GIFT))
{
old_publish = getIntObjVar(self, OBJVAR_PUBLISH_GIFT);
}
int[] publish_numbers = dataTableGetIntColumn(GIFT_DATATABLE, "PUBLISH");
if (publish_numbers == null || publish_numbers.length == 0)
{
return;
}
int last_publish = -1;
Vector gifts = new Vector();
for (int i = 0; i < publish_numbers.length; i++)
{
if (publish_numbers[i] > last_publish)
{
last_publish = publish_numbers[i];
gifts = new Vector();
gifts.addElement(dataTableGetString(GIFT_DATATABLE, i, "ITEM"));
}
else if (publish_numbers[i] == last_publish)
{
gifts.addElement(dataTableGetString(GIFT_DATATABLE, i, "ITEM"));
}
}
if (gifts == null || gifts.size() == 0)
{
return;
}
if (old_publish >= last_publish)
{
return;
}
obj_id inv = utils.getInventoryContainer(self);
Vector objects = new Vector();
boolean noGift = false;
for (Object gift : gifts) {
String item = (String) gift;
if (item.equals("none")) {
noGift = true;
continue;
}
obj_id new_gift = static_item.createNewItemFunction(item, inv);
if (isIdValid(new_gift)) {
objects.addElement(new_gift);
CustomerServiceLog("grantGift", "%TU has received the gift(s) for Publish " + last_publish + ". Item given was " + item + ". Item OID was " + new_gift, self);
}
}
obj_id[] object_array = utils.toStaticObjIdArray(objects);
if ((object_array == null || object_array.length == 0))
{
if (noGift)
{
setObjVar(self, OBJVAR_PUBLISH_GIFT, last_publish);
}
return;
}
sendSystemMessage(self, new string_id("base_player", "received_gift"));
setObjVar(self, OBJVAR_PUBLISH_GIFT, last_publish);
showLootBox(self, object_array);
}
public void respecNewEntertainerSkills(obj_id self) throws InterruptedException
{
String template = getSkillTemplate(self);
if (template == null)
{
return;
}
if (!template.equals("entertainer_2a"))
{
return;
}
String oldSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, "entertainer_2a", "template");
String[] oldSkillList = split(oldSkills, ',');
if (oldSkillList == null || oldSkillList.length == 0)
{
return;
}
int oldSkillCount = 0;
float oldSkillPct = 0.0f;
for (String s : oldSkillList) {
if (hasSkill(self, s)) {
oldSkillCount++;
}
}
oldSkillPct = (float)oldSkillCount / oldSkillList.length;
skill.revokeAllProfessionSkills(self);
dictionary d = new dictionary();
d.put("oldSkillPct", oldSkillPct);
messageTo(self, "finishEntertainerRespec", d, 1.0f, true);
}
public void respecNewCrafterSkills(obj_id self) throws InterruptedException
{
String template = getSkillTemplate(self);
if (template == null)
{
return;
}
if (!template.startsWith("trader_1"))
{
return;
}
float pctDone = respec.getPercentageCompletion(self, template);
String newTemplate = getCorrectTraderTemplate(template);
skill.revokeAllProfessionSkills(self);
setSkillTemplate(self, newTemplate);
respec.setPercentageCompletion(self, newTemplate, pctDone, true);
skill.recalcPlayerPools(self, true);
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
}
public String getCorrectTraderTemplate(String template) throws InterruptedException
{
if (template.endsWith("1a"))
{
return "trader_0a";
}
if (template.endsWith("1b"))
{
return "trader_0b";
}
if (template.endsWith("1c"))
{
return "trader_0c";
}
if (template.endsWith("1d"))
{
return "trader_0d";
}
return "trader_0a";
}
public int finishEntertainerRespec(obj_id self, dictionary params) throws InterruptedException
{
float oldSkillPct = params.getFloat("oldSkillPct");
String newSkills = dataTableGetString(skill_template.TEMPLATE_TABLE, "entertainer_1a", "template");
String[] newSkillList = split(newSkills, ',');
int newSkillCount = (int)Math.ceil(oldSkillPct * newSkillList.length);
setSkillTemplate(self, "entertainer_1a");
for (int i = 0; i < newSkillCount; i++)
{
skill.grantSkillToPlayer(self, newSkillList[i]);
}
if (newSkillCount < newSkillList.length)
{
setWorkingSkill(self, newSkillList[newSkillCount]);
}
skill.recalcPlayerPools(self, true);
trial.bumpSession(self, "displayDefensiveMods");
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
return SCRIPT_CONTINUE;
}
public int handleSetBounty(obj_id self, dictionary params) throws InterruptedException
{
int bp = sui.getIntButtonPressed(params);
if (bp == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
if (!utils.hasScriptVar(self, "setbounty.killer"))
{
return SCRIPT_CONTINUE;
}
obj_id killer = utils.getObjIdScriptVar(self, "setbounty.killer");
utils.removeScriptVar(self, "setbounty.killer");
int amount = utils.stringToInt(sui.getInputBoxText(params));
if (amount < 0)
{
sendSystemMessage(self, new string_id("bounty_hunter", "setbounty_invalid_number"));
bounty_hunter.showSetBountySUI(self, killer);
return SCRIPT_CONTINUE;
}
if (amount > bounty_hunter.MAX_BOUNTY_SET)
{
sendSystemMessage(self, new string_id("bounty_hunter", "setbounty_cap"));
amount = bounty_hunter.MAX_BOUNTY_SET;
}
if (amount < bounty_hunter.MIN_BOUNTY_SET)
{
sendSystemMessage(self, new string_id("bounty_hunter", "setbounty_too_little"));
bounty_hunter.showSetBountySUI(self, killer);
return SCRIPT_CONTINUE;
}
if (hasObjVar(killer, "bounty.amount"))
{
int bounty = getIntObjVar(killer, "bounty.amount");
if (bounty >= bounty_hunter.MAX_BOUNTY)
{
sendSystemMessage(self, new string_id("bounty_hunter", "max_bounty"));
return SCRIPT_CONTINUE;
}
else if ((bounty + amount) > bounty_hunter.MAX_BOUNTY)
{
amount = (bounty + amount) - bounty_hunter.MAX_BOUNTY;
}
}
int total = getTotalMoney(self);
if (amount > total)
{
sendSystemMessage(self, new string_id("bounty_hunter", "setbounty_too_much"));
bounty_hunter.showSetBountySUI(self, killer);
return SCRIPT_CONTINUE;
}
dictionary d = new dictionary();
d.put("killer", killer);
d.put("amt", amount);
money.pay(self, money.ACCT_BOUNTY, amount, "handleSetBountyTransaction", d, true);
return SCRIPT_CONTINUE;
}
public int handleSetBountyTransaction(obj_id self, dictionary params) throws InterruptedException
{
int code = money.getReturnCode(params);
if (code == money.RET_FAIL)
{
return SCRIPT_CONTINUE;
}
obj_id killer = params.getObjId("killer");
int amount = params.getInt("amt");
int bounty = 0;
if (hasObjVar(killer, "bounty.amount"))
{
bounty = getIntObjVar(killer, "bounty.amount");
}
bounty += amount;
if (bounty >= 10000)
{
setJediBountyValue(killer, bounty);
}
setObjVar(killer, "bounty.amount", bounty);
CustomerServiceLog("bounty", "%TU has taken a bounty of " + amount + " credits out on %TT", self, killer);
return SCRIPT_CONTINUE;
}
public int handleBountyMissionIncomplete(obj_id self, dictionary params) throws InterruptedException
{
obj_id target = params.getObjId("target");
removeJediBounty(target, self);
obj_id mission = bounty_hunter.getBountyMission(self, target);
if (isIdValid(mission))
{
sendSystemMessage(self, new string_id("bounty_hunter", "bounty_incomplete"));
endMission(mission);
}
return SCRIPT_CONTINUE;
}
public int handleUpdateBountyMissionTime(obj_id self, dictionary params) throws InterruptedException
{
int gameTime = params.getInt("gameTime");
int lastMission = 0;
if (hasObjVar(self, "bounty.lastMissionTime"))
{
lastMission = getIntObjVar(self, "bounty.lastMissionTime");
}
if (lastMission < gameTime)
{
setObjVar(self, "bounty.lastMissionTime", gameTime);
}
return SCRIPT_CONTINUE;
}
public int handleBountyMissionTimeout(obj_id self, dictionary params) throws InterruptedException
{
int gameTime = getGameTime();
int lastMission = 0;
if (hasObjVar(self, "bounty.lastMissionTime"))
{
lastMission = getIntObjVar(self, "bounty.lastMissionTime");
}
if ((gameTime - lastMission) > bounty_hunter.BOUNTY_MISSION_TIME_LIMIT)
{
obj_id[] hunters = getJediBounties(self);
if (hunters != null && hunters.length > 0)
{
for (obj_id hunter : hunters) {
dictionary d = new dictionary();
d.put("target", self);
messageTo(hunter, "handleBountyMissionIncomplete", d, 0.0f, true);
}
}
removeAllJediBounties(self);
removeObjVar(self, "bounty.lastMissionTime");
}
return SCRIPT_CONTINUE;
}
public boolean performCriticalHeal(obj_id self) throws InterruptedException
{
int[] buffs = buff.getAllBuffs(self);
if (buffs == null || buffs.length == 0)
{
return false;
}
for (int b : buffs) {
String type = buff.getEffectParam(b, 1);
if (type.equals("avoid_incap_heal")) {
String subType = dataTableGetString("datatables/buff/effect_mapping.iff", "avoid_incap_heal", "SUBTYPE");
float value = utils.getFloatScriptVar(self, "buff_handler." + subType);
healing.healDamage(self, self, HEALTH, (int) value);
buff.removeBuff(self, buff.getBuffNameFromCrc(b));
buff.applyBuff(self, "gcw_base_critical_heal_recourse");
string_id SID_INCAP_HEAL = new string_id("cbt_spam", "incap_heal");
prose_package pp = new prose_package();
pp = prose.setStringId(pp, SID_INCAP_HEAL);
pp = prose.setDF(pp, value);
pp = prose.setTU(pp, self);
sendCombatSpamMessageProse(self, self, pp, true, true, true, COMBAT_RESULT_MEDICAL);
return true;
}
}
return false;
}
public void sendSmugglerSystemBootstrap(obj_id self) throws InterruptedException
{
if (utils.isProfession(self, utils.SMUGGLER))
{
if (isInTutorialArea(self))
{
return;
}
if (hasObjVar(self, "smuggler_bootstrap"))
{
return;
}
messageTo(self, "handleSendSmugglerBootstrapRequest", null, 120.0f, false);
}
}
public int handleSendSmugglerBootstrapRequest(obj_id self, dictionary params) throws InterruptedException
{
string_id subject = new string_id("smuggler/messages", "bootstrap_subject");
string_id body = new string_id("smuggler/messages", "bootstrap_body");
String body_oob = chatMakePersistentMessageOutOfBandBody(null, body);
body_oob = chatAppendPersistentMessageWaypointData(body_oob, "tatooine", -1049.0f, -3538.0f, new string_id("mob/creature_names", "smuggler_broker_barak"), null);
String subject_str = "@" + subject.toString();
chatSendPersistentMessage("Barak", self, subject_str, null, body_oob);
setObjVar(self, "smuggler_bootstrap", 1);
return SCRIPT_CONTINUE;
}
public int handleSmugglerMissionFailureSignal(obj_id self, dictionary params) throws InterruptedException
{
groundquests.sendSignal(self, "smugglerEnemyIncap");
return SCRIPT_CONTINUE;
}
public int OnClusterWideDataResponse(obj_id self, String manage_name, String data_name, int request_id, String[] element_name_list, dictionary[] dungeon_data, int lock_key) throws InterruptedException
{
if (dungeon_data == null || dungeon_data.length == 0)
{
return SCRIPT_CONTINUE;
}
if (data_name.startsWith("base_cwdata_manager"))
{
int myBases = 0;
for (dictionary dungeon_datum : dungeon_data) {
if (dungeon_datum.getObjId("ownerId") == self) {
myBases++;
}
}
int recordedBases = getIntObjVar(self, "factionBaseCount");
if (recordedBases != myBases)
{
int correction = recordedBases - myBases;
prose_package pp = new prose_package();
pp = prose.setStringId(pp, new string_id("gcw", "faction_base_correction"));
pp = prose.setDI(pp, correction);
pp = prose.setTO(pp, "" + myBases);
sendSystemMessageProse(self, pp);
setObjVar(self, "factionBaseCount", myBases);
}
}
return SCRIPT_CONTINUE;
}
public int removeIncubatorFromUser(obj_id self, dictionary params) throws InterruptedException
{
obj_id station = params.getObjId("station");
incubator.forceRemoveIncubatorFromUser(station, self);
return SCRIPT_CONTINUE;
}
public int handleStoryTellerAssistantRequest(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
if (isIdValid(storytellerPlayer))
{
if (storyteller.doIAutoDeclineStorytellerInvites(self))
{
dictionary webster = new dictionary();
webster.put("targetName", getName(self));
messageTo(storytellerPlayer, "handleStorytellerAssistantDeclined", webster, 0, false);
}
else
{
if (!utils.hasScriptVar(self, "storytellerAssistant"))
{
storyteller.storyAssistantSui(storytellerPlayer, storytellerName, self);
}
else
{
boolean alreadyAStorytellersAssistant = false;
obj_id storytellerId = utils.getObjIdScriptVar(self, "storytellerAssistant");
if (storytellerId == storytellerPlayer)
{
alreadyAStorytellersAssistant = true;
}
dictionary webster = new dictionary();
webster.put("alreadyAStorytellersAssistant", alreadyAStorytellersAssistant);
webster.put("targetName", getName(self));
messageTo(storytellerPlayer, "handleStorytellerAlreadyAnAssistant", webster, 0, false);
}
}
}
return SCRIPT_CONTINUE;
}
public int handleTellStorytellerIDeclinedAssistant(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
if (isIdValid(storytellerPlayer))
{
dictionary webster = new dictionary();
webster.put("targetName", getName(self));
messageTo(storytellerPlayer, "handleStorytellerAssistantDeclined", webster, 0, false);
}
return SCRIPT_CONTINUE;
}
public int handleStoryTellerAssistantAccepted(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
if (isIdValid(storytellerPlayer))
{
storyteller.storyAssistantAcepted(storytellerPlayer, storytellerName, self);
}
return SCRIPT_CONTINUE;
}
public int handleStoryTellerRemoveAssistant(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
if (isIdValid(storytellerPlayer))
{
dictionary webster = new dictionary();
webster.put("removedPlayerName", getName(self));
if (utils.hasScriptVar(self, "storytellerAssistant"))
{
obj_id targetStorytellerId = utils.getObjIdScriptVar(self, "storytellerAssistant");
if (targetStorytellerId == storytellerPlayer)
{
storyteller.storyPlayerRemoveAssistant(storytellerPlayer, storytellerName, self);
}
else
{
messageTo(storytellerPlayer, "handleStorytellerRemovePlayerNotAssistant", webster, 0, false);
}
}
else
{
messageTo(storytellerPlayer, "handleStorytellerRemovePlayerNotAssistant", webster, 0, false);
}
}
return SCRIPT_CONTINUE;
}
public int handleStoryTellerInviteRequest(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
obj_id storytellerAssistant = params.getObjId("storytellerAssistant");
if (isIdValid(storytellerPlayer))
{
if (storyteller.doIAutoDeclineStorytellerInvites(self))
{
dictionary webster = new dictionary();
webster.put("targetName", getName(self));
messageTo(storytellerPlayer, "handleStorytellerInviteDeclined", webster, 0, false);
}
else
{
if (!utils.hasScriptVar(self, "storytellerid"))
{
if (isIdValid(storytellerAssistant))
{
storyteller.storyInviteSui(storytellerAssistant, storytellerName, self);
}
else
{
storyteller.storyInviteSui(storytellerPlayer, storytellerName, self);
}
}
else
{
boolean alreadyInStorytellersStory = false;
obj_id storytellerId = utils.getObjIdScriptVar(self, "storytellerid");
if (storytellerId == storytellerPlayer)
{
alreadyInStorytellersStory = true;
}
dictionary webster = new dictionary();
webster.put("alreadyInStorytellersStory", alreadyInStorytellersStory);
webster.put("targetName", getName(self));
webster.put("storytellerName", storytellerName);
if (isIdValid(storytellerAssistant))
{
messageTo(storytellerAssistant, "handleStorytellerInviteAlreadyInAStory", webster, 0, false);
}
else
{
messageTo(storytellerPlayer, "handleStorytellerInviteAlreadyInAStory", webster, 0, false);
}
}
}
}
return SCRIPT_CONTINUE;
}
public int handleTellStorytellerIDeclinedInvite(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
if (isIdValid(storytellerPlayer))
{
dictionary webster = new dictionary();
webster.put("targetName", getName(self));
messageTo(storytellerPlayer, "handleStorytellerInviteDeclined", webster, 0, false);
}
return SCRIPT_CONTINUE;
}
public int handleStoryTellerInviteAccepted(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
obj_id storytellerAssistant = params.getObjId("storytellerAssistant");
if (isIdValid(storytellerPlayer))
{
storyteller.storyInviteAcepted(storytellerPlayer, storytellerName, self, storytellerAssistant);
}
return SCRIPT_CONTINUE;
}
public int handleStoryTellerRemovedFromStory(obj_id self, dictionary params) throws InterruptedException
{
obj_id storytellerPlayer = params.getObjId("storytellerPlayer");
String storytellerName = params.getString("storytellerName");
if (isIdValid(storytellerPlayer))
{
dictionary webster = new dictionary();
webster.put("removedPlayerName", getName(self));
if (utils.hasScriptVar(self, "storytellerid"))
{
obj_id targetStorytellerId = utils.getObjIdScriptVar(self, "storytellerid");
if (targetStorytellerId == storytellerPlayer)
{
storyteller.storyPlayerRemovedFromStory(storytellerPlayer, storytellerName, self);
}
else
{
messageTo(storytellerPlayer, "handleStorytellerRemovePlayerNotInStory", null, 0, false);
}
}
else
{
messageTo(storytellerPlayer, "handleStorytellerRemovePlayerNotInStory", null, 0, false);
}
}
return SCRIPT_CONTINUE;
}
public int setDisplayOnlyDefensiveMods(obj_id self, dictionary params) throws InterruptedException
{
if (!trial.verifySession(self, params, "displayDefensiveMods"))
{
return SCRIPT_CONTINUE;
}
String[] variousMods =
{
"display_only_glancing_blow",
"display_only_dodge",
"display_only_parry",
"display_only_block",
"display_only_tohit",
"display_only_evasion",
"display_only_strikethrough",
"display_only_crit_resistance",
"display_only_critical",
"display_only_parry_reduction",
"display_only_opp_block_reduction",
"display_only_opp_dodge_reduction",
"display_only_expertise_critical_hit_reduction",
"display_only_expertise_critical_hit_pvp_reduction"
};
float glancingBlowChance = combat.getDefenderGlancingBlowChance(self) * 100;
float dodgeChance = combat.getDefenderDodgeChance(self) * 100;
float parryChance = combat.getDefenderParryChance(self) * 100;
float blockChance = combat.getDefenderBlockChance(self) * 100;
float evasionChance = combat.getDefenderEvasionChance(self) * 100;
float strikeThroughChance = combat.getAttackerStrikethroughChance(self) * 100;
float toHitBonus = combat.getToHitBonus(self) * 100;
float criticalChance = (combat.getAttackerCritMod(self)) * 100;
float parryRedcution = combat.getAttackerParryReduction(self) * 100;
float dodgeReduction = combat.getAttackerDodgeReduction(self) * 100;
float blockReduction = combat.getAttackerBlockReduction(self) * 100;
float hitReduction = combat.getDefenderCriticalChance(self) * 100;
float hitPvPReduction = (combat.getDefenderCriticalChance(self) + combat.getPvPHitReductionChance(self)) * 100;
for (String variousMod : variousMods) {
removeAttribOrSkillModModifier(self, variousMod);
}
addSkillModModifier(self, "display_only_glancing_blow", "display_only_glancing_blow", (int)glancingBlowChance, -1, false, false);
addSkillModModifier(self, "display_only_dodge", "display_only_dodge", (int)dodgeChance, -1, false, false);
addSkillModModifier(self, "display_only_parry", "display_only_parry", (int)parryChance, -1, false, false);
addSkillModModifier(self, "display_only_block", "display_only_block", (int)blockChance, -1, false, false);
addSkillModModifier(self, "display_only_tohit", "display_only_tohit", (int)toHitBonus, -1, false, false);
addSkillModModifier(self, "display_only_evasion", "display_only_evasion", (int)evasionChance, -1, false, false);
addSkillModModifier(self, "display_only_strikethrough", "display_only_strikethrough", (int)strikeThroughChance, -1, false, false);
addSkillModModifier(self, "display_only_critical", "display_only_critical", (int)criticalChance, -1, false, false);
addSkillModModifier(self, "display_only_parry_reduction", "display_only_parry_reduction", (int)parryRedcution, -1, false, false);
addSkillModModifier(self, "display_only_opp_dodge_reduction", "display_only_opp_dodge_reduction", (int)dodgeReduction, -1, false, false);
addSkillModModifier(self, "display_only_opp_block_reduction", "display_only_opp_block_reduction", (int)blockReduction, -1, false, false);
addSkillModModifier(self, "display_only_expertise_critical_hit_reduction", "display_only_expertise_critical_hit_reduction", (int)hitReduction, -1, false, false);
addSkillModModifier(self, "display_only_expertise_critical_hit_pvp_reduction", "display_only_expertise_critical_hit_pvp_reduction", (int)hitPvPReduction, -1, false, false);
return SCRIPT_CONTINUE;
}
public int OnGetAttributes(obj_id self, obj_id player, String[] names, String[] attribs) throws InterruptedException
{
int idx = utils.getValidAttributeIndex(names);
if (idx == -1)
{
return SCRIPT_CONTINUE;
}
if (utils.hasScriptVar(self, "storytellerName"))
{
String storytellerName = utils.getStringScriptVar(self, "storytellerName");
names[idx] = "storyteller_name";
attribs[idx] = storytellerName;
idx++;
if (idx >= names.length)
{
return SCRIPT_CONTINUE;
}
}
if (utils.hasScriptVar(self, "storytellerAssistantName"))
{
String storytellerAssistantName = utils.getStringScriptVar(self, "storytellerAssistantName");
names[idx] = "storyteller_assistant_name";
attribs[idx] = storytellerAssistantName;
idx++;
if (idx >= names.length)
{
return SCRIPT_CONTINUE;
}
}
return SCRIPT_CONTINUE;
}
public int cmdGetGalaxyMessage(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
obj_id planetId = getPlanetByName("tatooine");
if (!isIdNull(planetId))
{
if (hasObjVar(planetId, "galaxyMessage"))
{
String strGalaxyMessage = "\\#FF0000" + utils.getStringObjVar(planetId, "galaxyMessage") + "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
else
{
String strGalaxyMessage = "\\#FF0000" + "Welcome to Star Wars Galaxies" + "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
boolean warden = isWarden(self);
if (warden || (getGodLevel(self) >= 10))
{
String strGalaxyMessage = "\\#FF0000";
if (!warden)
{
strGalaxyMessage += "Displaying warden MOTD to you even though you are not a warden, because you are of the appropriate god level:\n";
}
if (hasObjVar(planetId, "galaxyWardenMessage"))
{
strGalaxyMessage += utils.getStringObjVar(planetId, "galaxyWardenMessage");
}
else
{
strGalaxyMessage += "Welcome warden";
}
strGalaxyMessage += "\\#FFFFFF";
sendConsoleMessage(self, strGalaxyMessage);
}
}
else
{
sendConsoleMessage(self, "Welcome to Star Wars Galaxies");
}
return SCRIPT_CONTINUE;
}
public int myCityMotdResponse(obj_id self, dictionary params) throws InterruptedException
{
String city_motd = params.getString("city_motd");
if (city_motd != null && city_motd.length() > 0)
{
sendConsoleMessage(self, city_motd + "\\#DFDFDF");
}
utils.setScriptVar(self, "recieved_city_motd", 1);
return SCRIPT_CONTINUE;
}
// public int stampDungeonArea(obj_id self, dictionary params) throws InterruptedException
// {
// LOG("space_dungeon", "base_player.stampDungeonArea -- Stamping player with obj vars.");
// String dungeon_area = params.getString("buildout_area");
//
// if (dungeon_area.equals("invalid"))
// {
// return SCRIPT_CONTINUE;
// }
// int buildout_row = params.getInt("buildout_row");
// if (buildout_row == -1)
// {
// return SCRIPT_CONTINUE;
// }
// setObjVar(self, space_dungeon.VAR_BUILDOUT_AREA, dungeon_area);
// setObjVar(self, space_dungeon.VAR_BUILDOUT_ROW, buildout_row);
// return SCRIPT_CONTINUE;
// }
public int removeDungeonArea(obj_id self, dictionary params) throws InterruptedException
{
String dungeon_area = params.getString("buildout_area");
if (dungeon_area.equals("invalid"))
{
return SCRIPT_CONTINUE;
}
int buildout_row = params.getInt("buildout_row");
if (buildout_row == -1)
{
return SCRIPT_CONTINUE;
}
if (!hasObjVar(self, space_dungeon.VAR_BUILDOUT_AREA) || getStringObjVar(self, space_dungeon.VAR_BUILDOUT_AREA) != dungeon_area)
{
return SCRIPT_CONTINUE;
}
removeObjVar(self, space_dungeon.VAR_BUILDOUT_AREA);
removeObjVar(self, space_dungeon.VAR_BUILDOUT_ROW);
return SCRIPT_CONTINUE;
}
public int handleStopDanceMessage(obj_id self, dictionary params) throws InterruptedException
{
utils.removeScriptVar(self, "stopDanceMessage");
return SCRIPT_CONTINUE;
}
public int onGuildCreateTerminalDataObject(obj_id self, dictionary params) throws InterruptedException
{
boolean hasTerminal = utils.playerHasItemByTemplateInDataPad(self, guild.STR_GUILD_REMOTE_DEVICE);
if (!hasTerminal)
{
obj_id pDataPad = utils.getPlayerDatapad(self);
createObjectOverloaded(guild.STR_GUILD_REMOTE_DEVICE, utils.getPlayerDatapad(self));
string_id stringMessage = new string_id("guild", "datapad_terminal_created");
sendSystemMessage(self, stringMessage);
}
return SCRIPT_CONTINUE;
}
public int applyMountBuff(obj_id self, dictionary params) throws InterruptedException
{
obj_id playerCurrentMount = getMountId(self);
if (isIdValid(playerCurrentMount))
{
vehicle.applyVehicleBuffs(self, playerCurrentMount);
}
return SCRIPT_CONTINUE;
}
public int handleDailyMissionReset(obj_id self, dictionary params) throws InterruptedException
{
missions.clearDailyObjVars(self);
return SCRIPT_CONTINUE;
}
public int cmdMeditate(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
if (getPosture(self) != POSTURE_SITTING)
{
sendSystemMessage(self, new string_id("jedi_spam", "meditate_not_sitting"));
return SCRIPT_CONTINUE;
}
stealth.checkForAndMakeVisibleNoRecourse(self);
if (getState(self, STATE_MEDITATE) == 1)
{
sendSystemMessage(self, new string_id("jedi_spam", "already_in_meditative_state"));
return SCRIPT_CONTINUE;
}
meditation.startMeditation(self);
return SCRIPT_CONTINUE;
}
public int cmdMeditateFail(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
{
sendSystemMessage(self, meditation.SID_MED_FAIL);
return SCRIPT_CONTINUE;
}
public int handleMeditationTick(obj_id self, dictionary params) throws InterruptedException
{
if (!meditation.isMeditating(self))
{
meditation.endMeditation(self, false);
return SCRIPT_CONTINUE;
}
if (!trial.verifySession(self, params, meditation.HANDLER_MEDITATION_TICK))
{
return SCRIPT_CONTINUE;
}
if (utils.isProfession(self, utils.FORCE_SENSITIVE))
{
int value = 0;
if (utils.hasScriptVar(self, meditation.VAR_MEDITATION_BASE))
{
value = utils.getIntScriptVar(self, meditation.VAR_MEDITATION_BASE);
value++;
if (value >= 3)
{
stealth.checkForAndMakeVisibleNoRecourse(self);
String meditateBuff = meditation.MEDITATE_BUFFS[rand(0, meditation.MEDITATE_BUFFS.length - 1)];
buff.applyBuff(self, meditateBuff);
value = 0;
}
}
utils.setScriptVar(self, meditation.VAR_MEDITATION_BASE, value);
}
messageTo(self, meditation.HANDLER_MEDITATION_TICK, trial.getSessionDict(self, meditation.HANDLER_MEDITATION_TICK), 10.0f, false);
return SCRIPT_CONTINUE;
}
public int msgCoupDeGraceAuthoritativeCheck(obj_id self, dictionary params) throws InterruptedException
{
if (!utils.hasScriptVar(self, "death.beingCoupDeGraced"))
{
return SCRIPT_CONTINUE;
}
if (params == null || params.isEmpty())
{
utils.removeScriptVar(self, "death.beingCoupDeGraced");
return SCRIPT_CONTINUE;
}
int numberOfTries = params.getInt("numberOfTries");
obj_id victim = params.getObjId("victim");
obj_id killer = params.getObjId("killer");
boolean playAnim = params.getBoolean("playAnim");
boolean usePVPRules = params.getBoolean("usePVPRules");
if (victim.isAuthoritative() && killer.isAuthoritative())
{
utils.removeScriptVar(self, "death.beingCoupDeGraced");
pclib.coupDeGrace(victim, killer, playAnim, usePVPRules);
}
else
{
if (numberOfTries >= 5)
{
CustomerServiceLog("player_death", "coupDeGrace:Player %TU was Death Blowed by %TT, " + numberOfTries + " attempts have been made to force them onto the same process, and has failed. %TU may be perma-incapped", victim, killer);
utils.removeScriptVar(self, "death.beingCoupDeGraced");
return SCRIPT_CONTINUE;
}
params.put("numberOfTries", ++numberOfTries);
messageTo(victim, "msgCoupDeGraceAuthoritativeCheck", params, 2, false);
}
return SCRIPT_CONTINUE;
}
public boolean lifeDayNewDay(obj_id player) throws InterruptedException
{
if (hasObjVar(player, "lifeday.time_stamp"))
{
int now = getCalendarTime();
int then = getIntObjVar(player, "lifeday.time_stamp");
if (now > then)
{
return true;
}
else
{
return false;
}
}
return true;
}
public boolean colorizeObject(obj_id self, obj_id object, obj_id tool, String params) throws InterruptedException
{
if (!isValidId(self) || !exists(self))
{
return false;
}
if (!isValidId(object) || !exists(object))
{
return false;
}
if (!isValidId(tool) || !exists(tool))
{
return false;
}
if (params == null || params.equals(""))
{
return false;
}
if (params == null || params.equals(""))
{
messageTo(tool, "cancelTool", null, 0, false);
return false;
}
String[] colorArray = split(params, ' ');
if (colorArray == null || colorArray.length <= 0)
{
return false;
}
for (int i = 0; i < colorArray.length; i += 2)
{
if (colorArray[i] == null || colorArray[i].equals(""))
{
break;
}
hue.setColor(object, colorArray[i], utils.stringToInt(colorArray[i + 1]));
}
messageTo(tool, "decrementTool", null, 0, false);
return true;
}
public boolean isPvpRelatedDeath(obj_id player) throws InterruptedException
{
if (!utils.hasScriptVar(player, "lastKiller"))
{
return false;
}
obj_id lastKillerOID = utils.getObjIdScriptVar(player, "lastKiller");
utils.removeScriptVar(player, "lastKiller");
if (!isIdValid(lastKillerOID))
{
return false;
}
if (isPlayer(lastKillerOID))
{
return true;
}
if (pet_lib.isPet(lastKillerOID) || pet_lib.isDroidPet(lastKillerOID) || pet_lib.isNpcPet(lastKillerOID) || pet_lib.isCombatDroid(lastKillerOID) || beast_lib.isBeast(lastKillerOID))
{
obj_id master = getMaster(lastKillerOID);
if (isIdValid(master) && isPlayer(master))
{
return true;
}
}
return false;
}
public boolean needsBlackwingLightInfection(obj_id self) throws InterruptedException
{
if (!buff.hasBuff(self, "death_troopers_infection_1") && !buff.hasBuff(self, "death_troopers_infection_2") && !buff.hasBuff(self, "death_troopers_infection_3") && !buff.hasBuff(self, "death_troopers_inoculation"))
{
return true;
}
return false;
}
public int death_troopers_apply_virus(obj_id self, dictionary params) throws InterruptedException
{
if (needsBlackwingLightInfection(self) && locations.isInRegion(self, "@dathomir_region_names:black_mesa"))
{
buff.applyBuff(self, "death_troopers_infection_1");
}
return SCRIPT_CONTINUE;
}
public int handleBuyBackSui(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.equals(""))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the message handler received not data.");
return SCRIPT_CONTINUE;
}
obj_id junkDealer = params.getObjId("dealer");
if (!isIdValid(junkDealer))
{
return SCRIPT_CONTINUE;
}
if (utils.outOfRange(junkDealer, self, 10.0f, true))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the action failed. The player was too far away from the TERMINAL.");
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
int bp = sui.getIntButtonPressed(params);
obj_id[] junk = utils.getObjIdBatchScriptVar(self, smuggler.SCRIPTVAR_JUNK_IDS);
smuggler.cleanupSellJunkSui(self);
if (bp == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
else if (bp == sui.BP_REVERT)
{
if (idx >= 0 && idx <= junk.length - 1)
{
if ((junk != null) || (junk.length > 0))
{
openExamineWindow(self, junk[idx]);
}
}
obj_id[] buyBackItems = smuggler.getBuyBackItemsInContainer(self);
if (buyBackItems != null && buyBackItems.length > 0)
{
smuggler.showBuyBackSui(self, junkDealer);
}
return SCRIPT_CONTINUE;
}
else
{
if (idx < 0)
{
return SCRIPT_CONTINUE;
}
if ((junk == null) || (junk.length == 0))
{
return SCRIPT_CONTINUE;
}
if (idx > junk.length - 1)
{
return SCRIPT_CONTINUE;
}
smuggler.buyBackJunkItem(self, junkDealer, junk[idx], true);
}
return SCRIPT_CONTINUE;
}
public int handleTheBuyBack(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.equals(""))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the message handler received not data.");
return SCRIPT_CONTINUE;
}
obj_id junkDealer = params.getObjId("dealer");
if (!isIdValid(junkDealer))
{
return SCRIPT_CONTINUE;
}
if (utils.outOfRange(junkDealer, self, 10.0f, true))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the action failed. The player was too far away from the TERMINAL.");
return SCRIPT_CONTINUE;
}
obj_id item = params.getObjId("item");
if (!isIdValid(item))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleTheBuyBack() - Player (OID: " + self + ") could not sell item because the item parameter was invalid.");
return SCRIPT_CONTINUE;
}
int price = params.getInt("price");
if (price <= 0)
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleTheBuyBack() - Player (OID: " + self + ") could not sell item because the price on the item was invalid.");
return SCRIPT_CONTINUE;
}
int retCode = params.getInt(money.DICT_CODE);
if (retCode == money.RET_FAIL)
{
prose_package ppNoSale = prose.getPackage(smuggler.PROSE_NO_BUY_BACK, item);
sendSystemMessageProse(self, ppNoSale);
CustomerServiceLog("Junk_Dealer: ", "base_player.handleTheBuyBack() - Player (OID: " + self + ") could not sell item (" + item + ") for (" + price + ") because the player did not have the credits.");
return SCRIPT_CONTINUE;
}
prose_package ppSoldJunk = prose.getPackage(smuggler.PROSE_PURCHASED_JUNK, item, price);
sendSystemMessageProse(self, ppSoldJunk);
CustomerServiceLog("Junk_Dealer: ", "base_player.handleTheBuyBack() - Player (OID: " + self + ") has paid: " + price + " for a buy back item and is about to retrieve that item: " + item + " from their buy back container.");
smuggler.moveBuyBackObjectIntoInventory(self, item);
obj_id[] buyBackItems = smuggler.getBuyBackItemsInContainer(self);
if (buyBackItems != null && buyBackItems.length > 0)
{
smuggler.showBuyBackSui(self, junkDealer);
}
return SCRIPT_CONTINUE;
}
public int handleFlagJunkSui(obj_id self, dictionary params) throws InterruptedException
{
if (params == null || params.equals(""))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the message handler received not data.");
return SCRIPT_CONTINUE;
}
obj_id junkDealer = params.getObjId("dealer");
if (!isIdValid(junkDealer))
{
return SCRIPT_CONTINUE;
}
if (utils.outOfRange(junkDealer, self, 10.0f, true))
{
CustomerServiceLog("Junk_Dealer: ", "base_player.handleBuyBackSui() - Player: " + self + " attempted to get a list of buy back items but the action failed. The player was too far away from the TERMINAL.");
return SCRIPT_CONTINUE;
}
int idx = sui.getListboxSelectedRow(params);
int bp = sui.getIntButtonPressed(params);
obj_id[] junk = utils.getObjIdBatchScriptVar(self, smuggler.SCRIPTVAR_JUNK_IDS);
boolean reshowSui = true;
if (junk.length < 1)
{
reshowSui = false;
}
smuggler.cleanupSellJunkSui(self);
if (bp == sui.BP_CANCEL)
{
return SCRIPT_CONTINUE;
}
else if (bp == sui.BP_REVERT)
{
if (idx >= 0 && idx <= junk.length - 1)
{
if ((junk != null) || (junk.length > 0))
{
openExamineWindow(self, junk[idx]);
smuggler.flagJunkSaleSui(self, junkDealer);
}
}
return SCRIPT_CONTINUE;
}
else
{
if (idx < 0)
{
if (junk != null && junk.length > 0)
{
smuggler.flagJunkSaleSui(self, junkDealer);
}
return SCRIPT_CONTINUE;
}
if (idx > junk.length - 1)
{
if (junk != null && junk.length > 0)
{
smuggler.flagJunkSaleSui(self, junkDealer);
}
return SCRIPT_CONTINUE;
}
if (hasObjVar(junk[idx], smuggler.JUNK_DEALKER_NO_SALE_FLAG))
{
removeObjVar(junk[idx], smuggler.JUNK_DEALKER_NO_SALE_FLAG);
}
else
{
setObjVar(junk[idx], smuggler.JUNK_DEALKER_NO_SALE_FLAG, getGameTime());
}
smuggler.flagJunkSaleSui(self, junkDealer);
}
return SCRIPT_CONTINUE;
}
public int setupLotteryListener(obj_id self, dictionary params) throws InterruptedException{
listenToMessage(getObjIdObjVar(self, "lottery.broker"), "updateLotteryStatus");
return SCRIPT_CONTINUE;
}
public int removeLotteryListener(obj_id self, dictionary params) throws InterruptedException{
stopListeningToMessage(getObjIdObjVar(self, "lottery.broker"), "updateLotteryStatus");
return SCRIPT_CONTINUE;
}
public int updateLotteryStatus(obj_id self, dictionary params) throws InterruptedException
{
setObjVar(self, "lottery.availableTickets", params.getInt("available"));
return SCRIPT_CONTINUE;
}
public boolean blog(String txt) throws InterruptedException
{
if (LOGGING_ON)
{
LOG(LOGNAME, txt);
}
return true;
}
}