mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-01-17 00:05:07 -05:00
5637 lines
252 KiB
Java
Executable File
5637 lines
252 KiB
Java
Executable File
package script.player;
|
|
|
|
import script.*;
|
|
import script.library.*;
|
|
|
|
import java.util.Vector;
|
|
|
|
public class player_building extends script.base_script
|
|
{
|
|
public player_building()
|
|
{
|
|
}
|
|
public static final String LOGGING_CATEGORY = "vendor";
|
|
public static final boolean LOGGING_ON = true;
|
|
public static final String DATATABLE_HEIGHT = "datatables/structure/cell_height.iff";
|
|
public static final String STF = "player_structure";
|
|
public static final String SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID = "saveRestoreDecorationSuiId";
|
|
public static final String SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID = "saveRestoreDecorationSaveSlotId";
|
|
public static final String SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE = "restoreDecorationSaveSlotChoice";
|
|
public static final String SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS = "restoreDecorationTargetRooms";
|
|
public static final String SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX = "restoreDecorationTargetRoomIndex";
|
|
public static final String SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS = "restoreDecorationCurrentPobRooms";
|
|
public static final string_id SID_TRIAL_STRUCTURE = new string_id(STF, "trial_structure");
|
|
public static final string_id SID_TRIAL_NO_MODIFY = new string_id(STF, "trial_no_modify");
|
|
public static final string_id SID_NO_DECLARE = new string_id(STF, "trial_no_declare");
|
|
public static final string_id SID_NO_TRANSFER = new string_id(STF, "trial_no_transfer");
|
|
public static final string_id SID_NO_VENDOR = new string_id(STF, "trial_no_vendor");
|
|
public static final string_id SID_NOT_IN_BUILDING = new string_id(STF, "not_in_building");
|
|
public static final string_id SID_CONTENTS_NOT_LOADED = new string_id(STF, "contents_not_loaded");
|
|
public static final string_id SID_BUILDING_HAS_NOTRADE = new string_id(STF, "building_has_notrade");
|
|
public static final string_id SID_CANT_TRANSFER_TO_CITY_BANNED = new string_id("city/city", "cant_transfer_to_city_banned");
|
|
public static final string_id SID_CONSTRUCTION_COMPLETE = new string_id("player_structure", "construction_complete");
|
|
public static final string_id SID_CONSTRUCTION_COMPLETE_LOT_LIMIT_EXCEEDED = new string_id("player_structure", "construction_complete_lot_limit_exceeded");
|
|
public static final string_id SID_CONSTRUCTION_COMPLETE_SUBJECT = new string_id("player_structure", "construction_complete_subject");
|
|
public static final string_id SID_CONSTRUCTION_COMPLETE_SENDER = new string_id("player_structure", "construction_complete_sender");
|
|
public static final string_id SID_SYS_FULL_VENDORS = new string_id("player_structure", "full_vendors");
|
|
public static final string_id SID_SYS_ALREADY_CREATING = new string_id("player_structure", "already_creating_vendor_greeter");
|
|
public static final string_id SID_SYS_VENDOR_NOT_INITIALIZED = new string_id("player_structure", "need_to_initialize_vendor");
|
|
public static final string_id SID_SYS_CREATE_FAILED = new string_id("player_structure", "create_failed");
|
|
public static final string_id SID_SYS_CREATE_SUCCESS = new string_id("player_structure", "create_success");
|
|
public static final string_id SID_SYS_CREATE_BAZAAR_FAILED = new string_id("player_structure", "create_bazaar_failed");
|
|
public static final string_id SID_SYS_CREATE_BAZAAR_SUCCESS = new string_id("player_structure", "create_bazaar_success");
|
|
public static final string_id SID_CANT_VENDOR = new string_id("player_structure", "cant_move_vendor");
|
|
public static final string_id SID_CANT_MOVE_OBJECT = new string_id("player_structure", "cant_move_object");
|
|
public static final string_id SID_TURNSTILE_EXPIRE = new string_id("player_structure", "turnstile_expire");
|
|
public static final string_id SID_CAN_RECLAIM_DEED = new string_id("player_structure", "can_reclaim_deed");
|
|
public static final string_id SID_DROID_ASSIGNED_TO_MAINTAIN = new string_id("player_structure", "droid_assigned_to_maintain");
|
|
public static final string_id SID_SUI_AMOUNT_TO_WITHDRAW = new string_id("player_structure", "sui_amount_to_withdraw");
|
|
public static final string_id INVENTORY_FULL_GENERIC = new string_id("player_structure", "inventory_full_generic");
|
|
public static final string_id SID_PACKUP_TOO_FAR_AWAY = new string_id("player_structure", "too_far_away_to_pack_house");
|
|
public static final string_id SID_HOUSE_PACKUP_FAILED = new string_id("player_structure", "house_packup_failed");
|
|
public static final String TBL_VENDOR_TYPES = "datatables/vendor/vendor_types.iff";
|
|
public static final String TBL_TERMINAL_TYPES = "datatables/vendor/vendor_terminal_types.iff";
|
|
public static final String TBL_DROID_TYPES = "datatables/vendor/vendor_droid_types.iff";
|
|
public static final String TBL_PLAYER_TYPES = "datatables/vendor/vendor_player_types.iff";
|
|
public static final String TBL_ALLNPC_TYPES = "datatables/vendor/vendor_allnpc_types.iff";
|
|
public static final String TBL_SPECIAL_PLAYER_VENDOR_TYPES = "datatables/vendor/vendor_player_types_special.iff";
|
|
public static final String VENDOR_VAR_PREFIX = "vendor_prefix";
|
|
public static final String CREATING_VENDOR = VENDOR_VAR_PREFIX + ".creatingVendor";
|
|
public static final string_id SID_VENDOR_MAINT_ACCEPTED = new string_id("player_structure", "vendor_maint_accepted");
|
|
public static final string_id SID_OBSCENE = new string_id("player_structure", "obscene");
|
|
public static final string_id SID_SET_NAME_TITLE = new string_id("sui", "set_name_title");
|
|
public static final string_id SID_SET_NAME_PROMPT = new string_id("sui", "set_name_prompt");
|
|
public static final string_id SID_ASSIGN_DROID_TITLE = new string_id("sui", "assign_droid_title");
|
|
public static final string_id SID_ASSIGN_DROID_PROMPT = new string_id("sui", "assign_droid_prompt");
|
|
public static final string_id PROSE_SIGN_NAME_UPDATED = new string_id("player_structure", "prose_sign_name_updated");
|
|
public static final string_id SID_DEACTIVATE_FACTORY_FOR_DELETE = new string_id("player_structure", "deactivate_factory_for_delete");
|
|
public static final string_id SID_REMOVE_SCHEMATIC_FOR_DELETE = new string_id("player_structure", "remove_schematic_for_delete");
|
|
public static final string_id SID_CLEAR_INPUT_HOPPER_FOR_DELETE = new string_id("player_structure", "clear_input_hopper_for_delete");
|
|
public static final string_id SID_CLEAR_OUTPUT_HOPPER_FOR_DELETE = new string_id("player_structure", "clear_output_hopper_for_delete");
|
|
public static final string_id SID_CLEAR_BUILDING_FOR_DELETE = new string_id("player_structure", "clear_building_for_delete");
|
|
public static final string_id SID_STORE_PETS_FOR_DELETE = new string_id("player_structure", "store_pets_for_delete");
|
|
public static final string_id SID_PENDING_DESTROY = new string_id("player_structure", "pending_destroy");
|
|
public static final string_id SID_CANT_PLACE_CIVIC = new string_id("player_structure", "cant_place_civic");
|
|
public static final string_id SID_CANT_PLACE_UNIQUE = new string_id("player_structure", "cant_place_unique");
|
|
public static final string_id SID_CANT_PLACE_JEDI = new string_id("player_structure", "cant_place_jedi");
|
|
public static final string_id SID_CANT_PLACE_MOUNTED = new string_id("player_structure", "cant_place_mounted");
|
|
public static final string_id SID_WRONG_STATE = new string_id("error_message", "wrong_state");
|
|
public static final string_id SID_PLACED_LAST_BASE = new string_id("faction_perk", "faction_base_unit_last");
|
|
public static final string_id SID_PLACED_NEXT_TO_LAST = new string_id("faction_perk", "faction_base_one_more");
|
|
public static final string_id SID_NO_RIGHTS = new string_id("player_structure", "no_transfer_rights");
|
|
public static final string_id SID_EVACUATE_FACILITY = new string_id("hq", "self_destruct_evacuate");
|
|
public static final string_id MOVED_CTRL_OBJ = new string_id("spam", "magic_painting_ctrl_moved");
|
|
public static final string_id MOVED_BACKDROP_GENERATOR = new string_id("spam", "backdrop_generator_moved");
|
|
public static final string_id MOVED_PAINTING = new string_id("spam", "magic_painting_moved");
|
|
public static final string_id NO_MOVE_ITEM = new string_id("spam", "no_move_item");
|
|
public static final string_id SID_UNABLE_TO_PARSE = new string_id(STF, "unable_to_parse");
|
|
public static final string_id SID_VALID_AMOUNT = new string_id(STF, "enter_valid_over_zero");
|
|
public static final string_id SID_RESERVE_REPORT = new string_id(STF, "reserve_report");
|
|
public static final string_id SID_DEPOSIT_SUCCESS = new string_id(STF, "deposit_successful");
|
|
public static final string_id SID_NOT_ENOUGH_ENERGY = new string_id(STF, "not_enough_energy");
|
|
public static final string_id SID_POWER_DEPOSIT_INCOMPLETE = new string_id(STF, "power_deposit_incomplete");
|
|
public static final string_id SID_ERROR_POWER_DEPOSIT = new string_id(STF, "error_power_deposit");
|
|
public static final string_id SID_POWER_DEPOSIT_FAIL = new string_id(STF, "power_deposit_failed");
|
|
public static final string_id SID_SELECT_POWER_AMOUNT = new string_id(STF, "select_power_amount");
|
|
public static final string_id SID_CURRENT_POWER_AMOUNT = new string_id(STF, "current_power_value");
|
|
public static final string_id SID_POWER_NAME = new string_id(STF, "power_name");
|
|
public static final string_id SID_POWER_QUALITY = new string_id(STF, "power_quality");
|
|
public static final string_id SID_NO_GEO_POWER = new string_id(STF, "incubator_no_geothermal");
|
|
public static final string_id SID_POWER_REMOVED = new string_id(STF, "power_removed");
|
|
public static final string_id SID_TCG_VENDOR_CTS_WARNING = new string_id("player_vendor", "tcg_vendor_in_player_inventory");
|
|
public static final string_id SID_ROTATE_CONFIRM_SAVE = new string_id(STF, "rotate_confirm_save");
|
|
public static final string_id SID_ROTATE_RESTORE_EMPTY_SLOT = new string_id(STF, "rotate_restore_empty_slot");
|
|
public static final string_id SID_DESTRUCTION_LOCKED = new string_id("city/city", "destruction_locked");
|
|
public static final int VAR_TRUE = 1;
|
|
public int OnPlaceStructure(obj_id self, obj_id player, obj_id deed, location position, int rotation) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::OnPlaceStructure");
|
|
LOG("LOG_CHANNEL", "player ->" + player + " deed ->" + deed + " pos ->" + position + " rotation ->" + rotation);
|
|
if (!isIdValid(player))
|
|
{
|
|
LOG("LOG_CHANNEL", "player_structure::OnPlaceStructure -- player is invalid.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isIdValid(deed))
|
|
{
|
|
LOG("LOG_CHANNEL", "player_structure::OnPlaceStructure -- deed is invalid.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id owner = utils.getContainingPlayer(deed);
|
|
if (player != owner) {
|
|
sendSystemMessage(player, new string_id(STF, "no_possession"));
|
|
if (isIdValid(owner))
|
|
{
|
|
CustomerServiceLog("playerStructure", "%TU tried to place a building, but no longer possesses the deed (" + deed + ")! %TT currently has the deed.", player, owner);
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("playerStructure", "%TU tried to place a building, but no longer possesses the deed (" + deed + ")!", player);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String template = player_structure.getDeedTemplate(deed);
|
|
if (template == null)
|
|
{
|
|
LOG("LOG_CHANNEL", "player_structure::OnPlaceStructure -- Unable to find template on deed.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String fp_template = player_structure.getFootprintTemplate(template);
|
|
if (fp_template == null || fp_template.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float placement_height = canPlaceStructure(fp_template, position, rotation);
|
|
LOG("LOG_CHANNEL", "placement_height ->" + placement_height);
|
|
if (placement_height == -9997.0f)
|
|
{
|
|
LOG("LOG_CHANNEL", player + " ->Internal code error: canPlaceStructure");
|
|
sendSystemMessage(player, new string_id(STF, "error_canplacestructure"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (placement_height == -9998.0f)
|
|
{
|
|
LOG("LOG_CHANNEL", player + " ->Internal script error: OnPlaceStructure");
|
|
sendSystemMessage(player, new string_id(STF, "error_onplacestructure"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (placement_height == -9999.0f)
|
|
{
|
|
LOG("LOG_CHANNEL", player + " ->There is no room to place the structure here.");
|
|
sendSystemMessage(player, new string_id(STF, "no_room"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivicTemplate(template) && (!template.contains("cityhall")))
|
|
{
|
|
if (!canPlaceCivic(player, deed, position, template))
|
|
{
|
|
sendSystemMessage(player, SID_CANT_PLACE_CIVIC);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!canPlaceUnique(player, deed, position, template))
|
|
{
|
|
sendSystemMessage(player, SID_CANT_PLACE_UNIQUE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!player_structure.canPlaceStructure(self, template, position, deed))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
position.y = getHeightAtLocation(position.x, position.z);
|
|
if (isGameObjectTypeOf(getGameObjectType(deed), GOT_data_house_control_device))
|
|
{
|
|
player_structure.replacePackedStructure(deed, self, position, rotation, placement_height);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id structure = player_structure.createTemporaryStructure(deed, self, position, rotation, placement_height);
|
|
if (!isIdValid(structure))
|
|
{
|
|
debugSpeakMsg(self, "OnPlaceStructure: createObject failed");
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (player_structure.isFactionPerkBase(template))
|
|
{
|
|
if (hasObjVar(player, "factionBaseCount"))
|
|
{
|
|
int factionBaseCount = getIntObjVar(player, "factionBaseCount");
|
|
int updatedFactionBaseCount = factionBaseCount + 1;
|
|
setObjVar(player, "factionBaseCount", updatedFactionBaseCount);
|
|
if (updatedFactionBaseCount == player_structure.MAX_BASE_COUNT)
|
|
{
|
|
sendSystemMessage(self, SID_PLACED_LAST_BASE);
|
|
}
|
|
else if (updatedFactionBaseCount == player_structure.MAX_BASE_COUNT - 1)
|
|
{
|
|
sendSystemMessage(self, SID_PLACED_NEXT_TO_LAST);
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id("faction_perk", "faction_base_unit_used"), (player_structure.MAX_BASE_COUNT - updatedFactionBaseCount)));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
setObjVar(player, "factionBaseCount", 1);
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id("faction_perk", "faction_base_unit_used"), (player_structure.MAX_BASE_COUNT - 1)));
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnPermissionListModify(obj_id self, obj_id player, String name, String listName, String action) throws InterruptedException
|
|
{
|
|
if (utils.isFreeTrial(player))
|
|
{
|
|
sendSystemMessage(player, SID_TRIAL_NO_MODIFY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("debug", "player_building::OnPermissionListModify");
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building, be near an installation, or have one targeted to do that.");
|
|
sendSystemMessage(player, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (name == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (name.length() > 40)
|
|
{
|
|
sendSystemMessage(player, new string_id(STF, "permission_40_char"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (listName.equals("ENTRY"))
|
|
{
|
|
player_structure.modifyEntryList(structure, name, self);
|
|
}
|
|
if (listName.equals("BAN"))
|
|
{
|
|
player_structure.modifyBanList(structure, name, self);
|
|
}
|
|
if (listName.equals("ADMIN"))
|
|
{
|
|
player_structure.modifyAdminList(structure, name, self);
|
|
}
|
|
if (listName.equals("HOPPER"))
|
|
{
|
|
player_structure.modifyHopperList(structure, name, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnContentsLoadedForBuildingToBePacked(obj_id self, obj_id structure) throws InterruptedException
|
|
{
|
|
LOG("sissynoid", "Loading Finished - Triggered OnContentsLoadedForBuildingToBePacked");
|
|
if (!isValidId(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.canPackStructureWithVendors(self, structure))
|
|
{
|
|
if (player_structure.isAbandoned(structure))
|
|
{
|
|
messageTo(self, "handleFailedStructurePackup", null, 0, false);
|
|
}
|
|
if (player_structure.isCityAbandoned(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id("player_structure", "unable_to_city_pack"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isAbandoned(structure))
|
|
{
|
|
player_structure.finalizePackUp(self, structure);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCityAbandoned(structure))
|
|
{
|
|
player_structure.finalizeCityPackUp(self, structure);
|
|
LOG("sissynoid", "Contents are Now Loaded - Messaging packUpCityAbandonedStructure");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnMadeAuthoritative(obj_id self) throws InterruptedException
|
|
{
|
|
LOG("sissynoid", "OnMadeAuthoritative: HouseAndPlayer have been made authoritative");
|
|
if (utils.hasScriptVar(self, "requestedSameServerToAbandonHouse"))
|
|
{
|
|
LOG("sissynoid", "Shoud not be here!");
|
|
obj_id house = utils.getObjIdScriptVar(self, "requestedSameServerToAbandonHouse");
|
|
utils.removeScriptVarTree(self, "requestedSameServerToAbandonHouse");
|
|
utils.removeScriptVarTree(self, "timeOfLastSameServerRequest");
|
|
if (!player_structure.canPlayerPackAbandonedStructure(self, house))
|
|
{
|
|
messageTo(self, "handleFailedStructurePackup", null, 0, false);
|
|
sendSystemMessage(self, new string_id("player_structure", "abandoned_structure_pack_up_try_again_later"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary params = new dictionary();
|
|
params.put("house", house);
|
|
params.put("player", self);
|
|
messageTo(house, "packAbandonedBuilding", params, 4, false);
|
|
if (!hasObjVar(self, "housePackup"))
|
|
{
|
|
String recipient = getPlayerName(self);
|
|
utils.sendMail(new string_id("spam", "email_title"), new string_id("spam", "email_body"), recipient, "Galactic Vacant Building Demolishing Movement");
|
|
}
|
|
}
|
|
if (utils.hasScriptVar(self, "cityRequestedSameServerToAbandonHouse"))
|
|
{
|
|
obj_id player = self;
|
|
obj_id house = utils.getObjIdScriptVar(self, "cityRequestedSameServerToAbandonHouse");
|
|
LOG("sissynoid", "OnMadeAuthoritative: City Packup is a Go for Structure(" + house + ") by player (" + player + ")");
|
|
utils.removeScriptVarTree(self, "cityRequestedSameServerToAbandonHouse");
|
|
utils.removeScriptVarTree(self, "cityTimeOfLastSameServerRequest");
|
|
player_structure.confirmCityAbandonedAndPack(house, player);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnPlayerVendorCountReply(obj_id self, int count) throws InterruptedException
|
|
{
|
|
if (count < 0)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int creatingVendor = 0;
|
|
if (utils.hasScriptVar(self, CREATING_VENDOR))
|
|
{
|
|
creatingVendor = utils.getIntScriptVar(self, CREATING_VENDOR);
|
|
}
|
|
blog("player_building.OnPlayerVendorCountReply -- " + creatingVendor + " / " + count);
|
|
if (creatingVendor == 1)
|
|
{
|
|
setObjVar(self, "used_vendor_slots", count);
|
|
if (getSkillStatMod(self, "manage_vendor") <= count)
|
|
{
|
|
removeVendorVars(self);
|
|
sendSystemMessage(self, SID_SYS_FULL_VENDORS);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] rawVendorTypes = dataTableGetStringColumn(TBL_VENDOR_TYPES, 0);
|
|
if (rawVendorTypes == null)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int hiringMod = getSkillStatMod(self, "hiring");
|
|
blog("player_building.OnPlayerVendorCountReply hiringMod: " + hiringMod);
|
|
int hiringRequirement = 10;
|
|
Vector vendorTypes = new Vector();
|
|
vendorTypes.setSize(0);
|
|
blog("player_building.OnPlayerVendorCountReply rawVendorTypes.length: " + rawVendorTypes.length);
|
|
String[] possibleVendorTypes = new String[rawVendorTypes.length];
|
|
for (int i = 0; i < rawVendorTypes.length; i++)
|
|
{
|
|
possibleVendorTypes[i] = "@player_structure:" + rawVendorTypes[i];
|
|
}
|
|
for (int i = 0; i < 3; i++)
|
|
{
|
|
if (hiringMod >= hiringRequirement)
|
|
{
|
|
vendorTypes = utils.addElement(vendorTypes, possibleVendorTypes[i]);
|
|
}
|
|
hiringRequirement += 10;
|
|
}
|
|
if (vendorTypes == null)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
sui.listbox(self, self, "@player_structure:vendor_type_d", sui.OK_CANCEL, "@player_structure:vendor_type_t", vendorTypes, "handleVendorTypeSelect", true);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int rotateFurniture(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (hasScript(self, performance.MUSIC_HEARTBEAT_SCRIPT))
|
|
{
|
|
string_id message = new string_id("player_structure", "cant_move_while_entertaining");
|
|
sendSystemMessage(self, message);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
boolean canRollAndPitch = (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self));
|
|
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
|
|
if (st.countTokens() == 0)
|
|
{
|
|
if (!canRollAndPitch)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "formet_enhanced_rotratefurniture_degrees"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String direction = (st.nextToken()).toUpperCase();
|
|
boolean actionYaw = false;
|
|
boolean actionPitch = false;
|
|
boolean actionRoll = false;
|
|
boolean actionRandom = false;
|
|
boolean actionReset = false;
|
|
boolean actionCopy = false;
|
|
boolean actionSave = false;
|
|
boolean actionRestore = false;
|
|
boolean actionSetQuaternion = false;
|
|
String internalOnly = "(^-,=+_)INTERNAL_USE_ONLY_" + self + "_QUATERNION(,+-=_^)";
|
|
if ("YAW".equals(direction)) {
|
|
actionYaw = true;
|
|
} else if ("PITCH".equals(direction)) {
|
|
if (!canRollAndPitch) {
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
actionPitch = true;
|
|
} else if ("ROLL".equals(direction)) {
|
|
if (!canRollAndPitch) {
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
actionRoll = true;
|
|
} else if ("RANDOM".equals(direction)) {
|
|
if (!canRollAndPitch) {
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
actionRandom = true;
|
|
} else if ("RESET".equals(direction)) {
|
|
actionReset = true;
|
|
} else if ("COPY".equals(direction)) {
|
|
actionCopy = true;
|
|
} else if ("SAVE".equals(direction)) {
|
|
actionSave = true;
|
|
} else if ("RESTORE".equals(direction)) {
|
|
actionRestore = true;
|
|
} else if (("(^-,=+_)INTERNAL_USE_ONLY_" + self + "_QUATERNION(,+-=_^)").equals(direction)) {
|
|
if (!canRollAndPitch) {
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
actionSetQuaternion = true;
|
|
} else {
|
|
if (!canRollAndPitch) {
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
} else {
|
|
sendSystemMessage(self, new string_id(STF, "formet_enhanced_rotratefurniture_degrees"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlot = 0;
|
|
int rotation = 0;
|
|
float qw = 1.0f;
|
|
float qx = 0.0f;
|
|
float qy = 0.0f;
|
|
float qz = 0.0f;
|
|
if (actionYaw || actionPitch || actionRoll)
|
|
{
|
|
if (st.hasMoreTokens())
|
|
{
|
|
String rot_str = (st.nextToken()).toUpperCase();
|
|
if (rot_str.equals("RANDOM"))
|
|
{
|
|
actionRandom = true;
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
rotation = Integer.parseInt(rot_str);
|
|
}
|
|
catch(NumberFormatException err)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (rotation < -180 || rotation > 180)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
rotation = getFurnitureRotationDegree(self);
|
|
}
|
|
if ((rotation == 0) && !actionRandom)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else if (actionSave || actionRestore)
|
|
{
|
|
if (st.hasMoreTokens())
|
|
{
|
|
saveSlot = utils.stringToInt(st.nextToken());
|
|
if (saveSlot < 1 || saveSlot > 10)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_save_slot_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!canRollAndPitch)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "formet_rotratefurniture_degrees"));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "formet_enhanced_rotratefurniture_degrees"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else if (actionSetQuaternion)
|
|
{
|
|
if (!st.hasMoreTokens())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
qw = utils.stringToFloat(st.nextToken());
|
|
if (!st.hasMoreTokens())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
qx = utils.stringToFloat(st.nextToken());
|
|
if (!st.hasMoreTokens())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
qy = utils.stringToFloat(st.nextToken());
|
|
if (!st.hasMoreTokens())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
qz = utils.stringToFloat(st.nextToken());
|
|
if (!st.hasMoreTokens())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
obj_id intendedTarget = getIntendedTarget(self);
|
|
obj_id lookAtTarget = getLookAtTarget(self);
|
|
if (st.hasMoreTokens())
|
|
{
|
|
target = obj_id.getObjId(Long.valueOf(st.nextToken()));
|
|
}
|
|
else
|
|
{
|
|
if (!actionCopy)
|
|
{
|
|
if (isIdValid(intendedTarget))
|
|
{
|
|
target = intendedTarget;
|
|
}
|
|
else if (isIdValid(lookAtTarget))
|
|
{
|
|
target = lookAtTarget;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (isIdValid(lookAtTarget))
|
|
{
|
|
target = lookAtTarget;
|
|
}
|
|
}
|
|
}
|
|
if (!isIdValid(target))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_what"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (actionCopy && !isIdValid(intendedTarget))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_move_copy_no_intended_target"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
boolean isVendor = hasCondition(target, CONDITION_VENDOR);
|
|
if (isVendor && (actionPitch || actionRoll || actionCopy || actionRestore || actionSetQuaternion))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "cant_rotate_vendor"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!actionSave)
|
|
{
|
|
if (!isMoveCommandValid(self, target))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
session.logActivity(self, session.ACTIVITY_DECORATE);
|
|
}
|
|
if (actionYaw)
|
|
{
|
|
if (actionRandom)
|
|
{
|
|
modifyYaw(target, rand(-180, 180));
|
|
}
|
|
else
|
|
{
|
|
modifyYaw(target, rotation);
|
|
}
|
|
}
|
|
else if (actionPitch)
|
|
{
|
|
if (actionRandom)
|
|
{
|
|
modifyPitch(target, rand(-180, 180));
|
|
}
|
|
else
|
|
{
|
|
modifyPitch(target, rotation);
|
|
}
|
|
}
|
|
else if (actionRoll)
|
|
{
|
|
if (actionRandom)
|
|
{
|
|
modifyRoll(target, rand(-180, 180));
|
|
}
|
|
else
|
|
{
|
|
modifyRoll(target, rotation);
|
|
}
|
|
}
|
|
else if (actionRandom)
|
|
{
|
|
modifyYaw(target, rand(-180, 180));
|
|
if (!isVendor)
|
|
{
|
|
modifyPitch(target, rand(-180, 180));
|
|
modifyRoll(target, rand(-180, 180));
|
|
}
|
|
}
|
|
else if (actionReset)
|
|
{
|
|
setQuaternion(target, 1.0f, 0.0f, 0.0f, 0.0f);
|
|
}
|
|
else if (actionCopy)
|
|
{
|
|
if (target != intendedTarget)
|
|
{
|
|
float[] quaternion = getQuaternion(intendedTarget);
|
|
if ((quaternion != null) && (quaternion.length == 4))
|
|
{
|
|
setQuaternion(target, quaternion[0], quaternion[1], quaternion[2], quaternion[3]);
|
|
}
|
|
}
|
|
}
|
|
else if (actionSave)
|
|
{
|
|
if (saveSlot >= 1 && saveSlot <= 10)
|
|
{
|
|
float[] quaternion = getQuaternion(target);
|
|
if ((quaternion != null) && (quaternion.length == 4))
|
|
{
|
|
setObjVar(self, "rotateFurnitureSaveSlot." + saveSlot, quaternion);
|
|
prose_package pp = prose.getPackage(SID_ROTATE_CONFIRM_SAVE);
|
|
prose.setDI(pp, saveSlot);
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
}
|
|
}
|
|
else if (actionRestore)
|
|
{
|
|
if (saveSlot >= 1 && saveSlot <= 10)
|
|
{
|
|
float[] quaternion = getFloatArrayObjVar(self, "rotateFurnitureSaveSlot." + saveSlot);
|
|
if ((quaternion != null) && (quaternion.length == 4))
|
|
{
|
|
setQuaternion(target, quaternion[0], quaternion[1], quaternion[2], quaternion[3]);
|
|
}
|
|
else
|
|
{
|
|
prose_package pp = prose.getPackage(SID_ROTATE_RESTORE_EMPTY_SLOT);
|
|
prose.setDI(pp, saveSlot);
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
}
|
|
}
|
|
else if (actionSetQuaternion)
|
|
{
|
|
setQuaternion(target, qw, qx, qy, qz);
|
|
}
|
|
messageTo(target, "furniture_rotated", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int moveFurniture(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (hasScript(self, performance.MUSIC_HEARTBEAT_SCRIPT))
|
|
{
|
|
string_id message = new string_id("player_structure", "cant_move_while_entertaining");
|
|
sendSystemMessage(self, message);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
|
|
if (st.countTokens() == 0)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "format_movefurniture_distance"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String direction = (st.nextToken()).toUpperCase();
|
|
String dist_str = null;
|
|
if (!direction.equals("FORWARD") && !direction.equals("BACK") && !direction.equals("LEFT") && !direction.equals("RIGHT") && !direction.equals("UP") && !direction.equals("DOWN") && !direction.equals("COPY"))
|
|
{
|
|
String targetName = (getEncodedName(target)).toUpperCase();
|
|
if (targetName.startsWith("@"))
|
|
{
|
|
targetName = (localize(getNameStringId(target))).toUpperCase();
|
|
}
|
|
if (!targetName.startsWith("FORWARD") && !targetName.startsWith("BACK") && !targetName.startsWith("LEFT") && !targetName.startsWith("RIGHT") && !targetName.startsWith("UP") && !targetName.startsWith("DOWN") && !targetName.startsWith("COPY"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "format_movefurniture_distance"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
dist_str = direction;
|
|
if (targetName.startsWith("UP"))
|
|
{
|
|
direction = "UP";
|
|
}
|
|
else if (targetName.startsWith("DOWN"))
|
|
{
|
|
direction = "DOWN";
|
|
}
|
|
else if (targetName.startsWith("BACK"))
|
|
{
|
|
direction = "BACK";
|
|
}
|
|
else if (targetName.startsWith("FORWARD"))
|
|
{
|
|
direction = "FORWARD";
|
|
}
|
|
else if (targetName.startsWith("LEFT"))
|
|
{
|
|
direction = "LEFT";
|
|
}
|
|
else if (targetName.startsWith("RIGHT"))
|
|
{
|
|
direction = "RIGHT";
|
|
}
|
|
else if (targetName.startsWith("COPY"))
|
|
{
|
|
direction = "COPY";
|
|
}
|
|
}
|
|
}
|
|
int distance = 0;
|
|
boolean copyLocation = false;
|
|
boolean copyHeight = false;
|
|
if (st.hasMoreTokens() && dist_str == null)
|
|
{
|
|
dist_str = (st.nextToken()).toUpperCase();
|
|
if (direction.equals("COPY"))
|
|
{
|
|
if (dist_str.equals("LOCATION"))
|
|
{
|
|
copyLocation = true;
|
|
}
|
|
else if (dist_str.equals("HEIGHT"))
|
|
{
|
|
copyHeight = true;
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "format_movefurniture_distance"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int dist_int = utils.stringToInt(dist_str);
|
|
if (dist_int != -1)
|
|
{
|
|
distance = dist_int;
|
|
}
|
|
if (distance < 1 || distance > 500)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "movefurniture_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
else if (dist_str != null)
|
|
{
|
|
dist_str = dist_str.toUpperCase();
|
|
if (direction.equals("COPY"))
|
|
{
|
|
if (dist_str.equals("LOCATION"))
|
|
{
|
|
copyLocation = true;
|
|
}
|
|
else if (dist_str.equals("HEIGHT"))
|
|
{
|
|
copyHeight = true;
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "format_movefurniture_distance"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
int dist_int = utils.stringToInt(dist_str);
|
|
if (dist_int != -1)
|
|
{
|
|
distance = dist_int;
|
|
}
|
|
if (distance < 1 || distance > 500)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "movefurniture_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
else if (direction.equals("COPY"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "format_movefurniture_distance"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
distance = 100;
|
|
}
|
|
obj_id intendedTarget = getIntendedTarget(self);
|
|
obj_id lookAtTarget = getLookAtTarget(self);
|
|
if (st.hasMoreTokens())
|
|
{
|
|
target = obj_id.getObjId(Long.valueOf(st.nextToken()));
|
|
}
|
|
else
|
|
{
|
|
if (!direction.equals("COPY"))
|
|
{
|
|
if (isIdValid(intendedTarget))
|
|
{
|
|
target = intendedTarget;
|
|
}
|
|
else if (isIdValid(lookAtTarget))
|
|
{
|
|
target = lookAtTarget;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (isIdValid(lookAtTarget))
|
|
{
|
|
target = lookAtTarget;
|
|
}
|
|
}
|
|
}
|
|
if (!isIdValid(target))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "move_what"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((direction.equals("COPY")) && !isIdValid(intendedTarget))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "rotate_move_copy_no_intended_target"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(target, "unmoveable"))
|
|
{
|
|
sendSystemMessage(self, SID_CANT_MOVE_OBJECT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasCondition(target, CONDITION_VENDOR))
|
|
{
|
|
sendSystemMessage(self, SID_CANT_VENDOR);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isMoveCommandValid(self, target))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location move_loc = null;
|
|
session.logActivity(self, session.ACTIVITY_DECORATE);
|
|
if (direction.equals("FORWARD") || direction.equals("BACK") || direction.equals("LEFT") || direction.equals("RIGHT"))
|
|
{
|
|
location loc = getLocation(target);
|
|
float facing = getYaw(self);
|
|
if (direction.equals("LEFT"))
|
|
{
|
|
facing -= 90;
|
|
direction = "FORWARD";
|
|
}
|
|
else if (direction.equals("RIGHT"))
|
|
{
|
|
facing += 90;
|
|
direction = "FORWARD";
|
|
}
|
|
float dist_scaled = distance / 100.0f;
|
|
float facing_rad = (float)Math.toRadians(facing);
|
|
float x = dist_scaled * (float) StrictMath.sin(facing_rad);
|
|
float z = dist_scaled * (float) StrictMath.cos(facing_rad);
|
|
if (direction.equals("BACK"))
|
|
{
|
|
x = x * -1;
|
|
z = z * -1;
|
|
}
|
|
LOG("LOG_CHANNEL", "x ->" + x + " z ->" + z + " dist ->" + dist_scaled);
|
|
move_loc = new location(x + loc.x, loc.y, z + loc.z, loc.area, loc.cell);
|
|
LOG("LOG_CHANNEL", "move_loc ->" + move_loc);
|
|
if (!isValidInteriorLocation(move_loc))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "not_valid_location"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else if (direction.equals("UP") || direction.equals("DOWN"))
|
|
{
|
|
location loc = getLocation(target);
|
|
float facing = getYaw(self);
|
|
float dist_scaled = distance / 100.0f;
|
|
float y = dist_scaled;
|
|
if (direction.equals("DOWN"))
|
|
{
|
|
y = y * -1;
|
|
}
|
|
LOG("LOG_CHANNEL", "y ->" + y + " dist ->" + dist_scaled);
|
|
move_loc = new location(loc.x, y + loc.y, loc.z, loc.area, loc.cell);
|
|
LOG("LOG_CHANNEL", "move_loc ->" + move_loc);
|
|
obj_id building = getTopMostContainer(target);
|
|
String bldgstr = getTemplateName(building);
|
|
String cellname = getCellName(building, loc.cell);
|
|
float new_y = y + loc.y;
|
|
if (!utils.hasScriptVar(target, "vertical.template") || !utils.hasScriptVar(target, "vertical.cell") || !utils.hasScriptVar(target, "vertical.min_height") || !utils.hasScriptVar(target, "vertical.max_height") || !(utils.getStringScriptVar(target, "vertical.template")).equals(bldgstr) || !(utils.getStringScriptVar(target, "vertical.cell")).equals(cellname))
|
|
{
|
|
String[] template = dataTableGetStringColumn(DATATABLE_HEIGHT, "template");
|
|
String[] cell = dataTableGetStringColumn(DATATABLE_HEIGHT, "cell");
|
|
float[] max_height = dataTableGetFloatColumn(DATATABLE_HEIGHT, "max_height");
|
|
float[] min_height = dataTableGetFloatColumn(DATATABLE_HEIGHT, "min_height");
|
|
for (int i = 0; i < template.length; i++)
|
|
{
|
|
if ((template[i].equals(bldgstr)) && (cell[i].equals(cellname)))
|
|
{
|
|
utils.setScriptVar(target, "vertical.template", template[i]);
|
|
utils.setScriptVar(target, "vertical.cell", cell[i]);
|
|
utils.setScriptVar(target, "vertical.min_height", min_height[i]);
|
|
utils.setScriptVar(target, "vertical.max_height", max_height[i]);
|
|
}
|
|
}
|
|
}
|
|
if (!utils.hasScriptVar(target, "vertical.min_height") || !utils.hasScriptVar(target, "vertical.max_height"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "error_move_item"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (new_y < utils.getFloatScriptVar(target, "vertical.min_height") || new_y > utils.getFloatScriptVar(target, "vertical.max_height"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "not_valid_location"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else if (target != intendedTarget)
|
|
{
|
|
location sourceLoc = getLocation(intendedTarget);
|
|
move_loc = getLocation(target);
|
|
if ((sourceLoc != null) && (move_loc != null) && (isIdValid(sourceLoc.cell)) && (isIdValid(move_loc.cell)))
|
|
{
|
|
if (sourceLoc.cell == move_loc.cell)
|
|
{
|
|
if (copyLocation)
|
|
{
|
|
move_loc.x = sourceLoc.x;
|
|
move_loc.z = sourceLoc.z;
|
|
}
|
|
else if (copyHeight)
|
|
{
|
|
move_loc.y = sourceLoc.y;
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "move_copy_objects_not_in_same_cell"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "move_copy_objects_not_in_same_cell"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (move_loc != null)
|
|
{
|
|
setLocation(target, move_loc);
|
|
location new_loc = getLocation(target);
|
|
LOG("LOG_CHANNEL", "new_loc ->" + new_loc);
|
|
dictionary parameters = new dictionary();
|
|
parameters.put("newLoc", move_loc);
|
|
messageTo(target, "furniture_moved", parameters, 1.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int DoRestoreItemDecorationLayout(obj_id self, obj_id item, obj_id cell, location loc, boolean restoreRotation, float qw, float qx, float qy, float qz) throws InterruptedException
|
|
{
|
|
if (!isIdValid(item) || !exists(item) || !isIdValid(cell) || !exists(cell) || (loc == null))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (hasScript(self, performance.MUSIC_HEARTBEAT_SCRIPT))
|
|
{
|
|
string_id message = new string_id("player_structure", "cant_move_while_entertaining");
|
|
sendSystemMessage(self, message);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (hasObjVar(item, "unmoveable"))
|
|
{
|
|
sendSystemMessage(self, SID_CANT_MOVE_OBJECT);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (hasCondition(item, CONDITION_VENDOR))
|
|
{
|
|
sendSystemMessage(self, SID_CANT_VENDOR);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (!isMoveCommandValid(self, item))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
session.logActivity(self, session.ACTIVITY_DECORATE);
|
|
loc.cell = cell;
|
|
setLocation(item, loc);
|
|
if (restoreRotation)
|
|
{
|
|
setQuaternion(item, qw, qx, qy, qz);
|
|
}
|
|
dictionary parameters = new dictionary();
|
|
parameters.put("newLoc", loc);
|
|
messageTo(item, "furniture_moved", parameters, 1.0f, false);
|
|
if (restoreRotation)
|
|
{
|
|
messageTo(item, "furniture_rotated", null, 1.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int DoRestoreItemDecorationLayoutRotationOnly(obj_id self, obj_id item, float qw, float qx, float qy, float qz) throws InterruptedException
|
|
{
|
|
if (!isIdValid(item) || !exists(item))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (hasScript(self, performance.MUSIC_HEARTBEAT_SCRIPT))
|
|
{
|
|
string_id message = new string_id("player_structure", "cant_move_while_entertaining");
|
|
sendSystemMessage(self, message);
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (!isMoveCommandValid(self, item))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
session.logActivity(self, session.ACTIVITY_DECORATE);
|
|
setQuaternion(item, qw, qx, qy, qz);
|
|
messageTo(item, "furniture_rotated", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int nameStructure(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You must in a building or near an installation to use that command.");
|
|
sendSystemMessage(self, new string_id(STF, "command_no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String template = getTemplateName(structure);
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
if (!(template.contains("cloning_")) && !(template.contains("garden_")))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be the owner to rename a structure.");
|
|
sendSystemMessage(self, new string_id(STF, "rename_must_be_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, hq.VAR_HQ_BASE))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_rename_hq"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id nameTarget = structure;
|
|
if (player_structure.isBuilding(structure))
|
|
{
|
|
obj_id sign = getObjIdObjVar(structure, player_structure.VAR_SIGN_ID);
|
|
if (isIdValid(sign))
|
|
{
|
|
nameTarget = sign;
|
|
}
|
|
}
|
|
int i = 0;
|
|
int textlen = params.length();
|
|
while (textlen > i && '@' == params.charAt(i))
|
|
{
|
|
++i;
|
|
}
|
|
params = params.substring(i, textlen);
|
|
if (params == null || params.length() < 1)
|
|
{
|
|
String title = utils.packStringId(SID_SET_NAME_TITLE);
|
|
String prompt = utils.packStringId(SID_SET_NAME_PROMPT);
|
|
sui.filteredInputbox(self, self, prompt, title, "msgNameStructure", player_structure.getStructureName(structure));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isAppropriateText(params))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->That is not a valid name.");
|
|
sendSystemMessage(self, new string_id(STF, "not_valid_name"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String abandonedText = "";
|
|
if (player_structure.isAbandoned(structure) || player_structure.isPreAbandoned(structure))
|
|
{
|
|
if (!params.contains(player_structure.ABANDONED_TEXT))
|
|
{
|
|
if (params.length() > 100)
|
|
{
|
|
params = params.substring(0, 99);
|
|
}
|
|
abandonedText = player_structure.ABANDONED_TEXT;
|
|
}
|
|
}
|
|
setName(nameTarget, params + abandonedText);
|
|
LOG("LOG_CHANNEL", nameTarget + " ->Structure renamed to '" + params + abandonedText + "'.");
|
|
if (nameTarget == structure)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "structure_renamed"));
|
|
}
|
|
else
|
|
{
|
|
setObjVar(structure, player_structure.VAR_SIGN_NAME, params);
|
|
prose_package ppSignNamed = prose.getPackage(PROSE_SIGN_NAME_UPDATED, params);
|
|
sendSystemMessageProse(self, ppSignNamed);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int paWithdraw(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isGuildHall(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You can only do that in a guild hall.");
|
|
sendSystemMessage(self, new string_id(STF, "only_in_guildhall"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isAdmin(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You must be an administrator to remove credits from the treasury.");
|
|
sendSystemMessage(self, new string_id(STF, "withdraw_admin_only"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
|
|
if (st.countTokens() == 0)
|
|
{
|
|
int pid = sui.inputbox(self, self, utils.packStringId(SID_SUI_AMOUNT_TO_WITHDRAW), "msgWithdrawMaintenance");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String amt_str = st.nextToken();
|
|
int amt = utils.stringToInt(amt_str);
|
|
if (amt < 1)
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->The amount must be greater than zero.");
|
|
sendSystemMessage(self, new string_id(STF, "amt_greater_than_zero"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!money.hasFunds(structure, money.MT_TOTAL, amt))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->Insufficent funds for withdrawal.");
|
|
sendSystemMessage(self, new string_id(STF, "insufficient_funds_withdrawal"));
|
|
}
|
|
else
|
|
{
|
|
player_structure.withdrawMaintenance(self, structure, amt);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateRight(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "yaw -" + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateLeft(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "yaw " + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateForward(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "pitch " + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateBackward(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "pitch -" + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateClockwise(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "roll " + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateCounterclockwise(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
int rotateDegrees = getFurnitureRotationDegree(self);
|
|
queueCommand(self, (-1460986552), target, "roll -" + rotateDegrees + " " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateRandom(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
queueCommand(self, (-1460986552), target, "random " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateRandomYaw(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (-1460986552), target, "yaw random " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateRandomPitch(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
queueCommand(self, (-1460986552), target, "pitch random " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateRandomRoll(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (player_structure.canRotateFurnitureInPitchRollAxes(self) || isGod(self))
|
|
{
|
|
queueCommand(self, (-1460986552), target, "roll random " + target, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateReset(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (-1460986552), target, "reset " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemRotateCopy(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (-1460986552), target, "copy " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveForward(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "forward 10 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveBack(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "back 10 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveLeft(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "left 10 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveRight(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "right 10 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveUp(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "up 1 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveDown(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "down 1 " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveCopyLocation(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "copy location " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int itemMoveCopyHeight(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
queueCommand(self, (1265935363), target, "copy height " + target, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cmdAddPower(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::cmdAddPower");
|
|
if (utils.hasScriptVar(self, "addPower.pid"))
|
|
{
|
|
int oldpid = utils.getIntScriptVar(self, "addPower.pid");
|
|
sui.closeSUI(self, oldpid);
|
|
utils.removeScriptVarTree(self, "addPower");
|
|
}
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
sendSystemMessage(self, SID_TRIAL_STRUCTURE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building, be near an installation, or have one targeted to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isAdmin(structure, self) && !charactersAreSamePlayer(self, getOwner(structure)))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be a building admin to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_admin"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (getPowerRate(structure) <= 0)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_power_needed"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int amt = 0;
|
|
if (params == null || params.equals(""))
|
|
{
|
|
int totalEnergy = resource.getEnergyTotalOnTarget(self);
|
|
int maint_pool = getBankBalance(structure);
|
|
int pid = sui.transfer(self, self, getString(new string_id(STF, "select_power_amount")) + "\n\n" + getString(new string_id(STF, "current_power_value")) + (int)getPowerValue(structure), "@player_structure:add_power", "@player_structure:total_energy", totalEnergy, "@player_structure:to_deposit", 0, "msgAddPower");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "addPower.pid", pid);
|
|
utils.setScriptVar(self, "addPower.target", structure);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
amt = utils.stringToInt(params);
|
|
if (amt < 1)
|
|
{
|
|
sendSystemMessage(self, SID_UNABLE_TO_PARSE);
|
|
sendSystemMessage(self, SID_VALID_AMOUNT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
int inInv = 0;
|
|
dictionary d = new dictionary();
|
|
obj_id[] contents = utils.getFilteredPlayerContents(self);
|
|
if ((contents == null) || (contents.length == 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (obj_id content : contents) {
|
|
int got = getGameObjectType(content);
|
|
if (isGameObjectTypeOf(got, GOT_resource_container)) {
|
|
obj_id crate = content;
|
|
if (isIdValid(crate)) {
|
|
obj_id rId = getResourceContainerResourceType(crate);
|
|
if (isIdValid(rId)) {
|
|
if (isResourceDerivedFrom(rId, "energy") || isResourceDerivedFrom(rId, "radioactive")) {
|
|
int inCrate = resource.getPotentialEnergyValue(crate);
|
|
inInv += inCrate;
|
|
d.put(crate.toString(), inCrate);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (inInv < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (amt > inInv)
|
|
{
|
|
sendSystemMessage(self, SID_NOT_ENOUGH_ENERGY);
|
|
sendSystemMessage(self, SID_POWER_DEPOSIT_INCOMPLETE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int toTransfer = amt;
|
|
java.util.Enumeration keys = d.keys();
|
|
while (keys.hasMoreElements())
|
|
{
|
|
String key = (String)(keys.nextElement());
|
|
obj_id crate = utils.stringToObjId(key);
|
|
if (isIdValid(crate))
|
|
{
|
|
int inCrate = d.getInt(key);
|
|
if (toTransfer < inCrate)
|
|
{
|
|
obj_id rId = getResourceContainerResourceType(crate);
|
|
if (isIdValid(rId))
|
|
{
|
|
int toRemove = (int)(Math.ceil(toTransfer / resource.getEnergyPowerRatio(rId)));
|
|
removeResourceFromContainer(crate, rId, toRemove);
|
|
toTransfer -= toTransfer;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
destroyObject(crate);
|
|
toTransfer -= inCrate;
|
|
}
|
|
}
|
|
if (toTransfer < 1)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
if (toTransfer > 0)
|
|
{
|
|
sendSystemMessage(self, SID_ERROR_POWER_DEPOSIT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float cur = player_structure.powerInstallation(structure, amt);
|
|
if (cur > -1.0f)
|
|
{
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id(STF, "deposit_successful"), amt));
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id(STF, "reserve_report"), (int)cur));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, SID_POWER_DEPOSIT_FAIL);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int assignDroid(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
sendSystemMessage(self, SID_TRIAL_STRUCTURE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You must in a building or near an installation to use that command.");
|
|
sendSystemMessage(self, new string_id(STF, "command_no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isAdmin(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be a building admin to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_admin"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id[] droid_list = player_structure.getMaintenanceDroids(self);
|
|
if (droid_list.length <= 0)
|
|
{
|
|
LOG("LOG_CHANNEL", "You do not have any maintenance capable droids.");
|
|
sendSystemMessage(self, new string_id(STF, "no_droids"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] list = new String[droid_list.length];
|
|
for (int i = 0; i < list.length; i++)
|
|
{
|
|
list[i] = getEncodedName(droid_list[i]);
|
|
}
|
|
String title = utils.packStringId(SID_ASSIGN_DROID_TITLE);
|
|
String prompt = utils.packStringId(SID_ASSIGN_DROID_PROMPT);
|
|
sui.listbox(self, self, prompt, sui.OK_CANCEL, title, list, "msgAssignDroid");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cmdDepositPowerIncubator(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id player = self;
|
|
obj_id station = target;
|
|
int amt = 0;
|
|
if (!incubator.validateActiveUser(station, player))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(player, "depositPowerIncubator.pid"))
|
|
{
|
|
int oldpid = utils.getIntScriptVar(player, "depositPowerIncubator.pid");
|
|
sui.closeSUI(player, oldpid);
|
|
utils.removeScriptVarTree(player, "depositPowerIncubator");
|
|
}
|
|
if (params == null || params.equals(""))
|
|
{
|
|
dictionary energyInfo = resource.getGeoThermalEnergyInformationOnTarget(player);
|
|
int totalEnergy = energyInfo.getInt("cnt");
|
|
int resourceQuality = energyInfo.getInt("resourceQuality");
|
|
String resourceName = energyInfo.getString("resourceName");
|
|
if (resourceName == null || resourceName.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (totalEnergy > 0)
|
|
{
|
|
if (totalEnergy >= incubator.RESOURCE_POWER_AMOUNT_CAP)
|
|
{
|
|
totalEnergy = incubator.RESOURCE_POWER_AMOUNT_CAP;
|
|
}
|
|
if (incubator.hasPower(station))
|
|
{
|
|
int amountInStation = incubator.getStationPowerAmount(station);
|
|
int totalEnergyCap = incubator.RESOURCE_POWER_AMOUNT_CAP - amountInStation;
|
|
if (totalEnergy >= totalEnergyCap)
|
|
{
|
|
totalEnergy = totalEnergyCap;
|
|
}
|
|
}
|
|
if (!incubator.addPowerPreCheck(station, player, totalEnergy, resourceName))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int pid = sui.transfer(player, player, getString(SID_SELECT_POWER_AMOUNT) + "\n" + getString(SID_CURRENT_POWER_AMOUNT) + incubator.getStationPowerAmount(station) + "\n" + getString(SID_POWER_NAME) + resourceName + "\n" + getString(SID_POWER_QUALITY) + resourceQuality, "@player_structure:add_power", "@player_structure:total_energy", totalEnergy, "@player_structure:to_deposit", 0, "msgDepositPowerIncubator");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "depositPowerIncubator.pid", pid);
|
|
utils.setScriptVar(self, "depositPowerIncubator.target", station);
|
|
utils.setScriptVar(self, "powerIncubator.resourceName", resourceName);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, SID_NO_GEO_POWER);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
amt = utils.stringToInt(params);
|
|
if (amt < 1)
|
|
{
|
|
sendSystemMessage(player, SID_UNABLE_TO_PARSE);
|
|
sendSystemMessage(player, SID_VALID_AMOUNT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
int inInventory = 0;
|
|
int resourceQuality = 0;
|
|
dictionary resourceInfo = new dictionary();
|
|
obj_id[] contents = utils.getFilteredPlayerContents(player);
|
|
Vector tempList = new Vector();
|
|
tempList.setSize(0);
|
|
String resourceName = utils.getStringScriptVar(self, "powerIncubator.resourceName");
|
|
if (resourceName != null && !resourceName.equals(""))
|
|
{
|
|
tempList.addElement(resourceName);
|
|
}
|
|
if ((contents == null) || (contents.length == 0) || (tempList.size() == 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (obj_id content : contents) {
|
|
int got = getGameObjectType(content);
|
|
if (isGameObjectTypeOf(got, GOT_resource_container)) {
|
|
obj_id resourceCrate = content;
|
|
if (isIdValid(resourceCrate)) {
|
|
obj_id resourceId = getResourceContainerResourceType(resourceCrate);
|
|
if (isIdValid(resourceId)) {
|
|
if (isResourceDerivedFrom(resourceId, "energy_renewable_site_limited_geothermal")) {
|
|
String tempResourceName = getResourceName(resourceId);
|
|
if (tempList.contains(tempResourceName)) {
|
|
resourceQuality = getResourceAttribute(resourceId, "res_quality");
|
|
int inCrate = getResourceContainerQuantity(resourceCrate);
|
|
inInventory += inCrate;
|
|
resourceInfo.put(resourceCrate.toString(), inCrate);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
utils.removeScriptVarTree(player, "powerIncubator");
|
|
if (inInventory < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (amt > inInventory)
|
|
{
|
|
sendSystemMessage(player, SID_NOT_ENOUGH_ENERGY);
|
|
sendSystemMessage(player, SID_POWER_DEPOSIT_INCOMPLETE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!incubator.addPowerPreCheck(station, player, amt, resourceName))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int toTransfer = amt;
|
|
java.util.Enumeration keys = resourceInfo.keys();
|
|
while (keys.hasMoreElements())
|
|
{
|
|
String key = (String)(keys.nextElement());
|
|
obj_id resourceCrate = utils.stringToObjId(key);
|
|
if (isIdValid(resourceCrate))
|
|
{
|
|
int inCrate = resourceInfo.getInt(key);
|
|
if (toTransfer < inCrate)
|
|
{
|
|
obj_id resourceId = getResourceContainerResourceType(resourceCrate);
|
|
if (isIdValid(resourceId))
|
|
{
|
|
int toRemove = toTransfer;
|
|
removeResourceFromContainer(resourceCrate, resourceId, toRemove);
|
|
toTransfer -= toTransfer;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
destroyObject(resourceCrate);
|
|
toTransfer -= inCrate;
|
|
}
|
|
}
|
|
if (toTransfer < 1)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
if (toTransfer > 0)
|
|
{
|
|
sendSystemMessage(player, SID_ERROR_POWER_DEPOSIT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (incubator.addPowerIncubator(station, player, amt, resourceQuality, resourceName))
|
|
{
|
|
sendSystemMessageProse(player, prose.getPackage((SID_DEPOSIT_SUCCESS), amt));
|
|
sendSystemMessageProse(player, prose.getPackage((SID_RESERVE_REPORT), incubator.getStationPowerAmount(station)));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, SID_POWER_DEPOSIT_FAIL);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cmdRemovePowerIncubator(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id player = self;
|
|
obj_id station = target;
|
|
if (!incubator.validateActiveUser(station, player))
|
|
{
|
|
sendSystemMessage(player, incubator.SID_NOT_YOUR_INCUBATOR);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (incubator.removeAllPowerIncubator(station, player))
|
|
{
|
|
sendSystemMessage(player, SID_POWER_REMOVED);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int placeStructureMode(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
player_structure.tryEnterPlacementMode(target, self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int failPlaceStructureMode(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::failPlaceStructureMode");
|
|
sendSystemMessage(self, SID_WRONG_STATE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int setPermission(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::setPermission-- params ->" + params + " target ->" + target);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
sendSystemMessage(self, SID_TRIAL_NO_MODIFY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("LOG_CHANNEL", "structure ->" + structure);
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building, be near an installation, or have one targeted to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, hq.VAR_HQ_BASE))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String template = getTemplateName(structure);
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
if (!(template.contains("cityhall_")))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (player_structure.isHarvester(structure) || player_structure.isGenerator(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isAdmin(structure, self) && !charactersAreSamePlayer(self, getOwner(structure)))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be a building admin to do that.");
|
|
string_id strSpam = new string_id("player_structure", "not_admin");
|
|
sendSystemMessage(self, strSpam);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isPlayer(target) && !isMob(target))
|
|
{
|
|
target = obj_id.NULL_ID;
|
|
}
|
|
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
|
|
if (st.countTokens() == 0)
|
|
{
|
|
LOG("LOG_CHANNEL", "Format: /setPermission <type> <player>");
|
|
sendSystemMessage(self, new string_id(STF, "format_setpermission_type_player"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String perm_type = (st.nextToken()).toUpperCase();
|
|
String target_str = "";
|
|
if (st.hasMoreTokens())
|
|
{
|
|
target_str = st.nextToken();
|
|
if (target_str.length() > 40)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "permission_40_char"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if ((target == null) || (target == obj_id.NULL_ID))
|
|
{
|
|
if (target_str.equals(""))
|
|
{
|
|
target = getLookAtTarget(self);
|
|
if (!isPlayer(target) && !isMob(target))
|
|
{
|
|
target = obj_id.NULL_ID;
|
|
}
|
|
}
|
|
}
|
|
LOG("LOG_CHANNEL", "perm_type ->" + perm_type + " target ->" + target + " target_str ->" + target_str);
|
|
int perm_switch = -1;
|
|
if (perm_type.equals("ENTRY"))
|
|
{
|
|
perm_switch = 1;
|
|
}
|
|
if (perm_type.equals("BAN"))
|
|
{
|
|
perm_switch = 2;
|
|
}
|
|
if (perm_type.equals("ADMIN"))
|
|
{
|
|
perm_switch = 3;
|
|
}
|
|
if (perm_type.equals("HOPPER"))
|
|
{
|
|
perm_switch = 5;
|
|
}
|
|
if (player_structure.isBuilding(structure))
|
|
{
|
|
if (perm_switch == 5)
|
|
{
|
|
LOG("LOG_CHANNEL", "Buildings do not have that permission list.");
|
|
sendSystemMessage(self, new string_id(STF, "building_no_permission_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (player_structure.isInstallation(structure))
|
|
{
|
|
if (perm_switch == 1 || perm_switch == 2 || perm_switch == 4)
|
|
{
|
|
LOG("LOG_CHANNEL", "Installations do not have that permission list.");
|
|
sendSystemMessage(self, new string_id(STF, "installations_no_permission_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (isGameObjectTypeOf(getGameObjectType(structure), GOT_ship))
|
|
{
|
|
if (perm_switch != 3)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "ships_no_permission_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if ((perm_switch == 3) && (getAccountNumLots(getPlayerObject(self)) > player_structure.MAX_LOTS))
|
|
{
|
|
obj_id lotOverlimitStructure = getObjIdObjVar(self, "lotOverlimit.structure_id");
|
|
if (isIdValid(lotOverlimitStructure) && (lotOverlimitStructure == structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "lot_overlimit_cannot_edit_admin_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (((target == null) || (target == obj_id.NULL_ID)) && (target_str.equals("")))
|
|
{
|
|
String[] dsrc;
|
|
String title;
|
|
String handler;
|
|
switch (perm_switch)
|
|
{
|
|
case 1:
|
|
if (isGod(self))
|
|
{
|
|
dsrc = player_structure.getCompleteEntryList(structure);
|
|
}
|
|
else
|
|
{
|
|
dsrc = player_structure.getEntryList(structure);
|
|
}
|
|
title = getString(new string_id(STF, "entry_permissions_list"));
|
|
handler = "msgEnterPermissions";
|
|
break;
|
|
case 2:
|
|
dsrc = player_structure.getBanList(structure);
|
|
title = getString(new string_id(STF, "ban_list"));
|
|
handler = "msgBanPermissions";
|
|
break;
|
|
case 3:
|
|
dsrc = player_structure.getAdminListNames(structure);
|
|
title = getString(new string_id(STF, "admin_permissions_list"));
|
|
handler = "msgAdminPermissions";
|
|
break;
|
|
case 4:
|
|
dsrc = player_structure.getVendorList(structure);
|
|
title = getString(new string_id(STF, "vendor_permissions_list"));
|
|
handler = "msgVendorPermissions";
|
|
break;
|
|
case 5:
|
|
dsrc = player_structure.getHopperListNames(structure);
|
|
title = getString(new string_id(STF, "hopper_permissions_list"));
|
|
handler = "msgHopperPermissions";
|
|
break;
|
|
default:
|
|
LOG("LOG_CHANNEL", "You must specify a valid permission list (Entry, Ban, Admin, Hopper)");
|
|
sendSystemMessage(self, new string_id(STF, "must_specify_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (dsrc == null)
|
|
{
|
|
dsrc = new String[0];
|
|
}
|
|
obj_id[] players;
|
|
if (player_structure.isBuilding(structure))
|
|
{
|
|
players = getPlayerCreaturesInRange(structure, 30.0f);
|
|
}
|
|
else
|
|
{
|
|
players = player_structure.getPlayersNearInstallation(structure);
|
|
}
|
|
Vector player_names = new Vector();
|
|
player_names.setSize(0);
|
|
if (players != null)
|
|
{
|
|
for (obj_id player : players) {
|
|
String player_name = getFirstName(player);
|
|
LOG("LOG_CHANNEL", "Found " + player_name);
|
|
int idx = utils.getElementPositionInArray(dsrc, player_name);
|
|
if (idx == -1) {
|
|
LOG("LOG_CHANNEL", " ...Adding " + player_name);
|
|
player_names = utils.addElement(player_names, player_name);
|
|
}
|
|
}
|
|
}
|
|
LOG("LOG_CHANNEL", "players #->" + player_names.size() + " self ->" + self);
|
|
String[] player_names_array = new String[0];
|
|
if (player_names != null)
|
|
{
|
|
player_names_array = new String[player_names.size()];
|
|
player_names.toArray(player_names_array);
|
|
}
|
|
displayStructurePermissionData(self, dsrc, player_names_array, perm_type);
|
|
}
|
|
else
|
|
{
|
|
if (target_str.equals(""))
|
|
{
|
|
switch (perm_switch)
|
|
{
|
|
case 1:
|
|
player_structure.modifyEntryList(structure, target, self);
|
|
break;
|
|
case 2:
|
|
player_structure.modifyBanList(structure, target, self);
|
|
break;
|
|
case 3:
|
|
player_structure.modifyAdminList(structure, target, self);
|
|
break;
|
|
case 4:
|
|
player_structure.modifyVendorList(structure, target, self);
|
|
break;
|
|
case 5:
|
|
player_structure.modifyHopperList(structure, target, self);
|
|
break;
|
|
default:
|
|
LOG("LOG_CHANNEL", "You must specify a valid permission list (Entry, Ban, Admin, Hopper)");
|
|
sendSystemMessage(self, new string_id(STF, "must_specify_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (perm_switch)
|
|
{
|
|
case 1:
|
|
player_structure.modifyEntryList(structure, target_str, self);
|
|
break;
|
|
case 2:
|
|
player_structure.modifyBanList(structure, target_str, self);
|
|
break;
|
|
case 3:
|
|
player_structure.modifyAdminList(structure, target_str, self);
|
|
break;
|
|
case 4:
|
|
player_structure.modifyVendorList(structure, target_str, self);
|
|
break;
|
|
case 5:
|
|
player_structure.modifyHopperList(structure, target_str, self);
|
|
break;
|
|
default:
|
|
LOG("LOG_CHANNEL", "You must specify a valid permission list (Entry, Ban, Admin, Hopper)");
|
|
sendSystemMessage(self, new string_id(STF, "must_specify_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int structureStatus(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
LOG("house", "commandHandler:structureStatus");
|
|
if (utils.hasScriptVar(self, "player_structure.status.pid"))
|
|
{
|
|
int oldpid = utils.getIntScriptVar(self, "player_structure.status.pid");
|
|
sui.closeSUI(self, oldpid);
|
|
utils.removeScriptVarTree(self, "player_structure.status");
|
|
}
|
|
LOG("LOG_CHANNEL", "player_building::structureStatus");
|
|
obj_id structure = null;
|
|
if (isIdValid(target))
|
|
{
|
|
if (player_structure.isBuilding(target) || player_structure.isInstallation(target))
|
|
{
|
|
structure = target;
|
|
}
|
|
else
|
|
{
|
|
structure = player_structure.getStructure(target);
|
|
}
|
|
}
|
|
if (structure == null)
|
|
{
|
|
structure = player_structure.getStructure(self);
|
|
}
|
|
LOG("house", "structureStatus - structure = " + structure);
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building, be near an installation, or have one targeted to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String buildingTemplateName = getTemplateName(structure);
|
|
int sGot = getGameObjectType(structure);
|
|
if (!player_structure.isAdmin(structure, self))
|
|
{
|
|
boolean allowContinue = false;
|
|
if (sGot == GOT_building_factional || sGot == GOT_installation_turret || sGot == GOT_installation_minefield)
|
|
{
|
|
int pFac = pvpGetAlignedFaction(self);
|
|
int sFac = pvpGetAlignedFaction(structure);
|
|
if (pFac == sFac)
|
|
{
|
|
allowContinue = true;
|
|
}
|
|
}
|
|
if (!allowContinue)
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be a building admin to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_admin"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
Vector dsrc = new Vector();
|
|
dsrc.setSize(0);
|
|
String owner_name = player_structure.getStructureOwner(structure);
|
|
if (owner_name != null)
|
|
{
|
|
owner_name = toUpper(owner_name, 0);
|
|
string_id owner_prompt_text = new string_id(STF, "owner_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(owner_prompt_text) + owner_name);
|
|
}
|
|
if (player_structure.isResidence(structure, self))
|
|
{
|
|
string_id residency_declaration = new string_id(STF, "declared_residency");
|
|
dsrc = utils.addElement(dsrc, getString(residency_declaration));
|
|
}
|
|
int civic_var = 0;
|
|
int m_rate = 0;
|
|
int m_rate_base = 0;
|
|
if (!player_structure.isCivic(structure))
|
|
{
|
|
if (permissionsIsPublic(structure))
|
|
{
|
|
string_id public_structure = new string_id(STF, "structure_public");
|
|
dsrc = utils.addElement(dsrc, getString(public_structure));
|
|
}
|
|
else
|
|
{
|
|
string_id private_structure = new string_id(STF, "structure_private");
|
|
dsrc = utils.addElement(dsrc, getString(private_structure));
|
|
}
|
|
int condition = player_structure.getStructureCondition(structure);
|
|
int max_condition = player_structure.getMaxCondition(structure);
|
|
int perc_condition = condition * 100 / max_condition;
|
|
if (perc_condition == 100)
|
|
{
|
|
string_id condition_prompt_text = new string_id(STF, "condition_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(condition_prompt_text) + perc_condition + "%");
|
|
}
|
|
else
|
|
{
|
|
int maint_rate = player_structure.getBaseMaintenanceRate(structure);
|
|
int total_cost = (int)((max_condition - condition) * maint_rate / 3.0f);
|
|
string_id condition_prompt_text_damaged = new string_id(STF, "condition_prompt");
|
|
string_id credits_to_repair_suffix = new string_id(STF, "credits_to_repair");
|
|
if (!buildingTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
dsrc = utils.addElement(dsrc, getString(condition_prompt_text_damaged) + perc_condition + "%" + " (" + total_cost + getString(credits_to_repair_suffix));
|
|
}
|
|
else
|
|
{
|
|
dsrc = utils.addElement(dsrc, getString(condition_prompt_text_damaged) + perc_condition + "%");
|
|
}
|
|
}
|
|
int m_pool = player_structure.getMaintenancePool(structure);
|
|
m_rate = player_structure.getMaintenanceRate(structure);
|
|
m_rate_base = player_structure.getBaseMaintenanceRate(structure);
|
|
double time_remaining = (double)m_pool * player_structure.getMaintenanceHeartbeat() / m_rate;
|
|
if (time_remaining < 0 || time_remaining > Integer.MAX_VALUE)
|
|
{
|
|
time_remaining = Integer.MAX_VALUE;
|
|
}
|
|
if (m_pool > 0)
|
|
{
|
|
String time_str = utils.assembleTimeRemainToUse((int)time_remaining, false);
|
|
if (player_structure.isGuildHall(structure))
|
|
{
|
|
string_id treasury_prompt_text = new string_id(STF, "treasury_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(treasury_prompt_text) + m_pool + " (" + time_str + ")");
|
|
}
|
|
else
|
|
{
|
|
if (!buildingTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
string_id maintenance_prompt_text = new string_id(STF, "maintenance_pool_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(maintenance_prompt_text) + m_pool + " (" + time_str + ")");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (player_structure.isGuildHall(structure))
|
|
{
|
|
string_id treasury_empty_text = new string_id(STF, "treasury_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(treasury_empty_text) + m_pool);
|
|
}
|
|
else
|
|
{
|
|
if (!buildingTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
string_id maintenance_empty_text = new string_id(STF, "maintenance_pool_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(maintenance_empty_text) + m_pool);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
int hourly_m_rate = m_rate * (3600 / player_structure.getMaintenanceHeartbeat());
|
|
civic_var = getIntObjVar(structure, player_structure.VAR_CIVIC);
|
|
if (civic_var == 1)
|
|
{
|
|
hourly_m_rate = 0;
|
|
}
|
|
if (!buildingTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
if (m_rate == m_rate_base)
|
|
{
|
|
string_id maintenance_rate_text = new string_id(STF, "maintenance_rate_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(maintenance_rate_text) + Integer.toString(hourly_m_rate) + " cr/hr");
|
|
}
|
|
else
|
|
{
|
|
int hourly_m_rate_base = m_rate_base * (3600 / player_structure.getMaintenanceHeartbeat());
|
|
string_id maintenance_rate_mod_text = new string_id(STF, "maintenance_rate_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(maintenance_rate_mod_text) + Integer.toString(hourly_m_rate) + " cr/hr (" + hourly_m_rate_base + ")");
|
|
}
|
|
}
|
|
if (!buildingTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
int property_tax = city.getPropertyTax(structure);
|
|
if (property_tax > 0)
|
|
{
|
|
string_id maintenance_rate_mod_text = new string_id(STF, "property_tax_rate_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(maintenance_rate_mod_text) + property_tax + "%");
|
|
}
|
|
}
|
|
if (player_structure.isHarvester(structure) || player_structure.isFactory(structure))
|
|
{
|
|
float p_pool = getPowerValue(structure);
|
|
float p_rate = getPowerRate(structure);
|
|
int p_time = Math.round(p_pool / p_rate * 3600.0f);
|
|
if (p_pool > 0)
|
|
{
|
|
String p_time_string = utils.assembleTimeRemainToUse(p_time, false);
|
|
string_id power_reserve_empty_text = new string_id(STF, "power_reserve_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(power_reserve_empty_text) + (int)p_pool + " (" + p_time_string + ")");
|
|
}
|
|
else
|
|
{
|
|
string_id power_reserve_text = new string_id(STF, "power_reserve_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(power_reserve_text) + (int)p_pool);
|
|
}
|
|
string_id power_consumption_text = new string_id(STF, "power_consumption_prompt");
|
|
string_id units_per_hour_text = new string_id(STF, "units_per_hour");
|
|
dsrc = utils.addElement(dsrc, getString(power_consumption_text) + Integer.toString((int)p_rate) + getString(units_per_hour_text));
|
|
}
|
|
if (sGot == GOT_building_factional && hasObjVar(structure, hq.VAR_HQ_BASE))
|
|
{
|
|
if (player_structure.isAdmin(structure, self) || pvpGetCurrentGcwRank(self) >= 6)
|
|
{
|
|
int now = getGameTime();
|
|
string_id resource_reserves_text = new string_id(STF, "resource_reserves_prompt");
|
|
string_id units_suffix_text = new string_id(STF, "units_suffix");
|
|
dsrc = utils.addElement(dsrc, getString(resource_reserves_text) + getIntObjVar(structure, hq.VAR_HQ_RESOURCE_CNT) + getString(units_suffix_text));
|
|
if (hasObjVar(structure, player_structure.VAR_LAST_MAINTANENCE))
|
|
{
|
|
int stamp = getIntObjVar(structure, player_structure.VAR_LAST_MAINTANENCE);
|
|
int maint_delta = stamp + player_structure.getMaintenanceHeartbeat() - now;
|
|
if (maint_delta > 0)
|
|
{
|
|
int[] mTime = player_structure.convertSecondsTime(maint_delta);
|
|
String m_time_string = player_structure.assembleTimeRemaining(mTime);
|
|
string_id repair_cycle_text = new string_id(STF, "next_repair_cycle");
|
|
dsrc = utils.addElement(dsrc, getString(repair_cycle_text) + m_time_string);
|
|
}
|
|
}
|
|
if (hasObjVar(structure, hq.VAR_OBJECTIVE_STAMP))
|
|
{
|
|
long current = System.currentTimeMillis();
|
|
long curTime = ((current / 1000) - 1072224000);
|
|
int currentTime = (int)curTime;
|
|
int stamp = getIntObjVar(structure, hq.VAR_OBJECTIVE_STAMP);
|
|
int objective_delta = stamp + (int)(hq.VULNERABILITY_CYCLE) - currentTime;
|
|
if (objective_delta > 0)
|
|
{
|
|
int[] oTime = player_structure.convertSecondsTime(objective_delta);
|
|
String o_time_string = player_structure.assembleTimeRemaining(oTime);
|
|
string_id vulnerability_text = new string_id(STF, "next_vulnerability_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(vulnerability_text) + o_time_string);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (player_structure.isBuilding(structure))
|
|
{
|
|
int numItems = player_structure.getStructureNumItems(structure);
|
|
string_id building_items_text = new string_id(STF, "items_in_building_prompt");
|
|
dsrc = utils.addElement(dsrc, getString(building_items_text) + numItems);
|
|
int itemLimit = getPobBaseItemLimit(structure);
|
|
if (hasObjVar(structure, "structureChange.storageIncrease"))
|
|
{
|
|
int storageIncrease = getIntObjVar(structure, "structureChange.storageIncrease");
|
|
itemLimit += storageIncrease;
|
|
}
|
|
dsrc = utils.addElement(dsrc, "@player_structure:total_house_storage" + " " + itemLimit);
|
|
}
|
|
if (hasObjVar(structure, "structureChange.storageIncrease"))
|
|
{
|
|
int storageIncrease = getIntObjVar(structure, "structureChange.storageIncrease");
|
|
string_id storage_increase = new string_id(STF, "structure_storage_increase");
|
|
dsrc = utils.addElement(dsrc, getString(storage_increase) + storageIncrease);
|
|
}
|
|
String prompt = "";
|
|
String structure_name = player_structure.getStructureName(structure);
|
|
if (structure_name != null && !structure_name.equals(""))
|
|
{
|
|
string_id structure_name_text = new string_id(STF, "structure_name_prompt");
|
|
prompt += getString(structure_name_text) + structure_name;
|
|
}
|
|
int maint_stamp = getIntObjVar(structure, player_structure.VAR_LAST_MAINTANENCE);
|
|
int now = getGameTime();
|
|
if (now < maint_stamp)
|
|
{
|
|
string_id free_maintenance_text = new string_id(STF, "free_maintenance_time");
|
|
prompt += "\n\\#pcontrast1" + getString(free_maintenance_text) + "\\#. ";
|
|
int prepaid_delta = maint_stamp - now;
|
|
int[] prepaidTime = player_structure.convertSecondsTime(prepaid_delta);
|
|
String prepaidTimeString = player_structure.assembleTimeRemaining(prepaidTime);
|
|
if (prepaidTimeString != null && !prepaidTimeString.equals(""))
|
|
{
|
|
prompt += prepaidTimeString;
|
|
}
|
|
else
|
|
{
|
|
string_id seconds_suffix_text = new string_id(STF, "seconds_suffix");
|
|
prompt += Integer.toString(prepaid_delta) + getString(seconds_suffix_text);
|
|
}
|
|
}
|
|
String maint_mods_string = "";
|
|
if (civic_var == 1)
|
|
{
|
|
string_id civic_structure_alert_text = new string_id(STF, "civic_structure_alert");
|
|
maint_mods_string += "\n- " + getString(civic_structure_alert_text);
|
|
}
|
|
else
|
|
{
|
|
if (hasObjVar(structure, player_structure.VAR_MAINTENANCE_MOD_MERCHANT))
|
|
{
|
|
float merchant_mod = getFloatObjVar(structure, player_structure.VAR_MAINTENANCE_MOD_MERCHANT);
|
|
string_id merch_mod_text = new string_id(STF, "merch_mod_prompt");
|
|
maint_mods_string += "\n- " + getString(merch_mod_text) + Integer.toString((int)(merchant_mod * 100.0f)) + "%";
|
|
}
|
|
int maint_property_tax = player_structure.getMaintenancePropertyTax(structure);
|
|
if (maint_property_tax > 0)
|
|
{
|
|
int hourly_tax = Math.round(maint_property_tax * (3600.0f / player_structure.getMaintenanceHeartbeat()));
|
|
string_id property_tax_rate_text = new string_id(STF, "property_tax_rate_prompt");
|
|
maint_mods_string += "\n- " + getString(property_tax_rate_text) + Integer.toString(hourly_tax) + "cr/hr";
|
|
}
|
|
}
|
|
if (maint_mods_string != null && !maint_mods_string.equals(""))
|
|
{
|
|
string_id maintenance_mods_text = new string_id(STF, "maintenance_mods_prompt");
|
|
prompt += "\n\n" + getString(maintenance_mods_text) + maint_mods_string;
|
|
}
|
|
int pid = sui.listbox(self, self, prompt, sui.REFRESH_CANCEL, "@player_structure:structure_status_t", dsrc, "handleStatusUi");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "player_structure.status.pid", pid);
|
|
utils.setScriptVar(self, "player_structure.status.target", structure);
|
|
if (isIdValid(target))
|
|
{
|
|
LOG("house", "StructureStatus:: FROM SCD = true");
|
|
utils.setScriptVar(self, "player_structure.status.fromScd", 1);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int payMaintenance(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = null;
|
|
if (isIdValid(target))
|
|
{
|
|
if (player_structure.isBuilding(target) || player_structure.isInstallation(target))
|
|
{
|
|
structure = target;
|
|
}
|
|
else
|
|
{
|
|
structure = player_structure.getStructure(target);
|
|
}
|
|
}
|
|
if (structure == null)
|
|
{
|
|
structure = player_structure.getStructure(self);
|
|
}
|
|
if (!isIdValid(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("house", "payMaintenance - structure = " + structure);
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
sendSystemMessage(self, SID_TRIAL_STRUCTURE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String buildingTemplate = getTemplateName(structure);
|
|
if (buildingTemplate == null)
|
|
{
|
|
LOG("LOG_CHANNEL", "player_structure::payMaintenance -- Unable to find template for building.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isFactionPerkBase(buildingTemplate))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(self, "payMaintenance.pid"))
|
|
{
|
|
int oldpid = utils.getIntScriptVar(self, "payMaintenance.pid");
|
|
sui.closeSUI(self, oldpid);
|
|
utils.removeScriptVarTree(self, "payMaintenance");
|
|
}
|
|
if (!player_structure.isAdmin(structure, self))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "must_be_admin"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isHarvester(structure) || player_structure.isGenerator(structure))
|
|
{
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "must_be_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
java.util.StringTokenizer st = new java.util.StringTokenizer(params);
|
|
if (st.countTokens() == 0)
|
|
{
|
|
int total = getTotalMoney(self);
|
|
if (total > 0)
|
|
{
|
|
int maint_pool = getBankBalance(structure);
|
|
string_id select_amount = new string_id(STF, "select_maint_amount");
|
|
String prompt = getString(select_amount) + "\n\n ";
|
|
prompt += getString(new string_id(STF, "current_maint_pool")) + maint_pool + "cr.";
|
|
int pid = sui.transfer(self, self, prompt, "@player_structure:select_amount", "@player_structure:total_funds", total, "@player_structure:to_pay", 0, "msgPayMaintenance");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "payMaintenance.pid", pid);
|
|
utils.setScriptVar(self, "payMaintenance.target", structure);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_money"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String amt_str = st.nextToken();
|
|
int amt = utils.stringToInt(amt_str);
|
|
if (amt < 1 || amt > 100000)
|
|
{
|
|
LOG("LOG_CHANNEL", "The amount must be between 1 and 100000");
|
|
sendSystemMessage(self, new string_id(STF, "amount_params"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
player_structure.payMaintenance(self, structure, amt);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int setPrivacy(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::setPrivacy");
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_in_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isBuilding(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You can only alter privacy on a building.");
|
|
sendSystemMessage(self, new string_id(STF, "privacy_building_only"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, hq.VAR_HQ_BASE))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_privacy_faction_hq"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isAdmin(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be a building admin to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_admin"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, "force_public"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "force_public"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (permissionsIsPublic(structure))
|
|
{
|
|
String[] cells = getCellNames(structure);
|
|
if (cells != null)
|
|
{
|
|
for (String cell : cells) {
|
|
obj_id cellid = getCellId(structure, cell);
|
|
obj_id contents[] = getContents(cellid);
|
|
if (contents != null) {
|
|
for (obj_id content : contents) {
|
|
if (hasCondition(content, CONDITION_VENDOR)) {
|
|
sendSystemMessage(self, new string_id(STF, "vendor_no_private"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
LOG("LOG_CHANNEL", "This structure is now private.");
|
|
sendSystemMessage(self, new string_id(STF, "structure_now_private"));
|
|
obj_id[] objects = player_structure.getObjectsInBuilding(structure);
|
|
String[] entry_list = player_structure.getCompleteEntryList(structure);
|
|
if (objects != null)
|
|
{
|
|
for (obj_id object : objects) {
|
|
if (hasObjVar(object, "noEject")) {
|
|
continue;
|
|
}
|
|
if (isPlayer(object) || (isMob(object) && isIdValid(getMaster(object))) || (isMob(object) && (getLevel(object)) >= 10)) {
|
|
int idx = utils.getElementPositionInArray(entry_list, getFirstName(object));
|
|
if (idx == -1) {
|
|
expelFromBuilding(object);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
permissionsMakePrivate(structure);
|
|
}
|
|
else
|
|
{
|
|
LOG("LOG_CHANNEL", "This structure is now public.");
|
|
sendSystemMessage(self, new string_id(STF, "structure_now_public"));
|
|
permissionsMakePublic(structure);
|
|
if (turnstile.hasTurnstile(structure))
|
|
{
|
|
turnstile.removeTurnstile(structure);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int declareResidence(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
sendSystemMessage(self, SID_NO_DECLARE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_in_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isBuilding(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "Your declared residence must be a building.");
|
|
sendSystemMessage(self, new string_id(STF, "must_be_in_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be the owner of the building to declare residence.");
|
|
sendSystemMessage(self, new string_id(STF, "declare_must_be_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, hq.VAR_HQ_BASE))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_hq_residence"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int current_time = getGameTime();
|
|
if (hasObjVar(self, player_structure.VAR_RESIDENCE_CAN_DECLARE))
|
|
{
|
|
int declared_time = getIntObjVar(self, player_structure.VAR_RESIDENCE_CAN_DECLARE);
|
|
int duration = current_time - declared_time;
|
|
if (duration < player_structure.MIN_RESIDENCE_DURATION)
|
|
{
|
|
int time_remaining = player_structure.MIN_RESIDENCE_DURATION - duration;
|
|
String time_str = utils.assembleTimeRemainToUse(time_remaining, false);
|
|
prose_package pp = new prose_package();
|
|
prose.setStringId(pp, new string_id(STF, "change_residence_time"));
|
|
prose.setTT(pp, time_str);
|
|
LOG("LOG_CHANNEL", "You cannot change residence for " + time_str);
|
|
sendSystemMessageProse(self, pp);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (player_structure.isResidence(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "This building is already your residence.");
|
|
sendSystemMessage(self, new string_id(STF, "already_residence"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int currentCity = getCitizenOfCityId(self);
|
|
obj_id currentCityMayor = cityGetLeader(currentCity);
|
|
if (self == currentCityMayor)
|
|
{
|
|
sendSystemMessage(self, city.SID_MAYOR_RESIDENCE_CHANGE);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id oldresidence = player_structure.getResidence(self);
|
|
LOG("LOG_CHANNEL", "You change your residence to this building");
|
|
sendSystemMessage(self, new string_id(STF, "change_residence"));
|
|
setHouseId(self, structure);
|
|
setObjVar(self, player_structure.VAR_RESIDENCE_CAN_DECLARE, current_time);
|
|
setObjVar(structure, player_structure.VAR_RESIDENCE_BUILDING, self);
|
|
messageTo(oldresidence, "removeResidentVar", null, 0.0f, true);
|
|
city.setCityResidence(self, structure);
|
|
skill.grantAllPoliticianSkills(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int transferStructure(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be in a building, be near an installation, or have one targeted to do that.");
|
|
sendSystemMessage(self, new string_id(STF, "no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", self + "-> You are not the owner of this structure.");
|
|
sendSystemMessage(self, new string_id(STF, "not_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isCivic(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String structureTemplateName = getTemplateName(structure);
|
|
if (structureTemplateName.contains("object/building/faction_perk/hq/"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "faction_base"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_mustafar_lg.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "mustafar_house"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/city/barn_no_planet_restriction.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "barn_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/city/diner_no_planet_restriction.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "diner_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_jedi_meditation_room.iff") || structureTemplateName.equals("object/building/player/player_house_sith_meditation_room.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "meditation_room_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_tcg_relaxation_pool.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "relaxation_pool_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_hangar.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "hangar_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_sandcrawler.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "sandcrawler_house_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_atat.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "atat_house_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_tcg_emperors_spire.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "tcg_emperors_spire_house_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (structureTemplateName.equals("object/building/player/player_house_tcg_rebel_spire.iff"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "tcg_rebel_spire_house_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, "playerStructure_noTransfer"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "tcg_player_house_no_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, "structureChange.storageIncrease"))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "storage_increase_transfer"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id notradeItem = null;
|
|
if (player_structure.isBuilding(structure))
|
|
{
|
|
obj_id[] buildingPlayers = player_structure.getPlayersInBuilding(structure);
|
|
boolean found = false;
|
|
if (buildingPlayers != null)
|
|
{
|
|
for (obj_id buildingPlayer : buildingPlayers) {
|
|
if (buildingPlayer == self) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
sendSystemMessage(self, SID_NOT_IN_BUILDING);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!areAllContentsLoaded(structure))
|
|
{
|
|
sendSystemMessage(self, SID_CONTENTS_NOT_LOADED);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
notradeItem = utils.findNoTradeItemNotVendor(player_structure.getObjectsInBuilding(structure), false);
|
|
}
|
|
else
|
|
{
|
|
obj_id[] structureArray = new obj_id[1];
|
|
structureArray[0] = structure;
|
|
notradeItem = utils.findNoTradeItem(structureArray, false);
|
|
}
|
|
if (isIdValid(notradeItem))
|
|
{
|
|
prose_package pp = new prose_package();
|
|
pp.stringId = SID_BUILDING_HAS_NOTRADE;
|
|
pp.target.id = notradeItem;
|
|
sendSystemMessageProse(self, pp);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isIdValid(target))
|
|
{
|
|
target = getLookAtTarget(self);
|
|
if (!isIdValid(target))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must specify a player with whom to transfer ownership");
|
|
sendSystemMessage(self, new string_id(STF, "no_transfer_target"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (target == self)
|
|
{
|
|
LOG("LOG_CHANNEL", "You are already the owner.");
|
|
sendSystemMessage(self, new string_id(STF, "already_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isPlayer(target))
|
|
{
|
|
LOG("LOG_CHANNEL", "The target must be a player.");
|
|
sendSystemMessage(self, new string_id(STF, "target_not_player"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(structure, player_structure.SPECIAL_SIGN_OWNER_ONLY) && getBooleanObjVar(structure, player_structure.SPECIAL_SIGN_OWNER_ONLY))
|
|
{
|
|
LOG("LOG_CHANNEL", "You cannot transfer ownership with a special sign attached");
|
|
sendSystemMessage(self, player_structure.SID_SPECIAL_SIGN_NO_TRANSFER);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.isFreeTrial(target))
|
|
{
|
|
sendSystemMessage(self, SID_NO_TRANSFER);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isBanned(structure, target))
|
|
{
|
|
LOG("LOG_CHANNEL", "You cannot transfer ownership to a banned player");
|
|
sendSystemMessage(self, new string_id(STF, "no_banned_player"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int city_id = getCityAtLocation(getLocation(structure), 0);
|
|
if (city.isCityBanned(target, city_id))
|
|
{
|
|
sendSystemMessage(self, SID_CANT_TRANSFER_TO_CITY_BANNED);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.canOwnStructure(structure, target))
|
|
{
|
|
LOG("LOG_CHANNEL", getFirstName(target) + " is not able to own this structure.");
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id(STF, "not_able_to_own"), target));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (cityExists(city_id) && city.isCityZoned(city_id) && isIdValid(target))
|
|
{
|
|
if (!city.hasZoningRights(target, city_id))
|
|
{
|
|
sendSystemMessage(self, SID_NO_RIGHTS);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!structure.isAuthoritative() || !target.isAuthoritative())
|
|
{
|
|
obj_id targetTopmostContainer = getTopMostContainer(target);
|
|
if (!isIdValid(targetTopmostContainer))
|
|
{
|
|
targetTopmostContainer = target;
|
|
}
|
|
requestSameServer(targetTopmostContainer, structure);
|
|
if (!structure.isAuthoritative())
|
|
{
|
|
obj_id selfTopmostContainer = getTopMostContainer(self);
|
|
if (!isIdValid(selfTopmostContainer))
|
|
{
|
|
selfTopmostContainer = self;
|
|
}
|
|
requestSameServer(selfTopmostContainer, structure);
|
|
}
|
|
sendSystemMessage(self, new string_id(STF, "not_authoritative"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
player_structure.removeStructure(structure, self);
|
|
player_structure.addStructure(structure, target);
|
|
LOG("LOG_CHANNEL", "Ownership of the structure has been transfered to " + getFirstName(target));
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id(STF, "ownership_transferred_out"), target));
|
|
LOG("LOG_CHANNEL", target + " ->" + getFirstName(self) + " has transfered ownership of the structure to you");
|
|
sendSystemMessageProse(target, prose.getPackage(new string_id(STF, "ownership_transferred_in"), self));
|
|
CustomerServiceLog("playerStructure", "STRUCTURE(" + structure + ") TEMPLATE: " + structureTemplateName + " was transferred FROM: " + getFirstName(self) + "(" + self + ") TO" + getFirstName(target) + "(" + target + ").");
|
|
CustomerServiceLog("c", "Structure " + structure + " has been transfered from " + getFirstName(self) + " to " + getFirstName(target));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int destroyStructure(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
if (!isFactionBaseEmpty(trial.getTop(self), self))
|
|
{
|
|
sendSystemMessage(self, SID_EVACUATE_FACILITY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("LOG_CHANNEL", "player_building::destroyStructure");
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!isIdValid(structure))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->You must in a building or near an installation to use that command.");
|
|
sendSystemMessage(self, new string_id(STF, "command_no_building"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(self, "player_structure.destroy.pid"))
|
|
{
|
|
int oldpid = utils.getIntScriptVar(self, "player_structure.destroy.pid");
|
|
sui.closeSUI(self, oldpid);
|
|
utils.removeScriptVarTree(self, "player_structure.destroy");
|
|
}
|
|
if (!player_structure.isCivic(structure) && !player_structure.isInAdminRange(structure, self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String template = getTemplateName(structure);
|
|
if (template.contains("cityhall_"))
|
|
{
|
|
if (hasObjVar(structure, "cityVoteInterval"))
|
|
{
|
|
int cityVoteInterval = getIntObjVar(structure, "cityVoteInterval");
|
|
if (cityVoteInterval == 2)
|
|
{
|
|
sendSystemMessage(self, SID_DESTRUCTION_LOCKED);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
if (!player_structure.isOwner(structure, self))
|
|
{
|
|
LOG("LOG_CHANNEL", "You must be the owner to destroy a structure.");
|
|
sendSystemMessage(self, new string_id(STF, "destroy_must_be_owner"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (player_structure.isGenerator(structure))
|
|
{
|
|
if (isHarvesterActive(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "destroy_deactivate_generator_first"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isHarvesterEmpty(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "destroy_empty_generator_hopper"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (player_structure.isHarvester(structure))
|
|
{
|
|
if (isHarvesterActive(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "destroy_deactivate_first"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isHarvesterEmpty(structure))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "destroy_empty_hopper"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else if (player_structure.isFactory(structure))
|
|
{
|
|
if (isHarvesterActive(structure))
|
|
{
|
|
prose_package pp = prose.getPackage(SID_DEACTIVATE_FACTORY_FOR_DELETE, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String currentSchematicName = getManufactureStationSchematic(structure);
|
|
if (currentSchematicName != null)
|
|
{
|
|
prose_package pp = prose.getPackage(SID_REMOVE_SCHEMATIC_FOR_DELETE, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id inputHopper = getManufactureStationInputHopper(structure);
|
|
if (isIdValid(inputHopper))
|
|
{
|
|
if (getNumItemsIn(inputHopper) > 0)
|
|
{
|
|
prose_package pp = prose.getPackage(SID_CLEAR_INPUT_HOPPER_FOR_DELETE, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
obj_id outputHopper = getManufactureStationOutputHopper(structure);
|
|
if (isIdValid(outputHopper))
|
|
{
|
|
if (getNumItemsIn(outputHopper) > 0)
|
|
{
|
|
prose_package pp = prose.getPackage(SID_CLEAR_OUTPUT_HOPPER_FOR_DELETE, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
else if (player_structure.isBuilding(structure))
|
|
{
|
|
if (hasObjVar(structure, player_structure.SPECIAL_SIGN_OWNER_ONLY) && getBooleanObjVar(structure, player_structure.SPECIAL_SIGN_OWNER_ONLY))
|
|
{
|
|
sendSystemMessage(self, player_structure.SID_REMOVE_SPCIAL_SIGN_TO_DESTROY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!areAllContentsLoaded(structure))
|
|
{
|
|
prose_package pp = prose.getPackage(SID_CONTENTS_NOT_LOADED, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
fixHouseItemLimit(structure);
|
|
int numItems = player_structure.getStructureNumItems(structure);
|
|
if (numItems > 0)
|
|
{
|
|
prose_package pp = prose.getPackage(SID_CLEAR_BUILDING_FOR_DELETE, self);
|
|
if (pp != null)
|
|
{
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id[] houseContents = trial.getAllObjectsInDungeon(structure);
|
|
if (houseContents != null && houseContents.length > 0)
|
|
{
|
|
for (obj_id houseContent : houseContents) {
|
|
if (isMob(houseContent)) {
|
|
int callableType = callable.getCallableType(houseContent);
|
|
if (callableType > 0) {
|
|
prose_package pp = prose.getPackage(SID_STORE_PETS_FOR_DELETE, self);
|
|
if (pp != null) {
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (!player_structure.canPackStructureWithVendors(self, structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
int key = utils.getIntScriptVar(self, "player_structure.destroy.key");
|
|
boolean redeedVar = utils.getBooleanScriptVar(self, "player_structure.destroy.willredeed");
|
|
if (params != null && key != 0 && params.equals(Integer.toString(key)))
|
|
{
|
|
if (utils.getObjIdScriptVar(self, player_structure.VAR_CONFIRM_DESTROY) != structure)
|
|
{
|
|
sendSystemMessage(self, SID_PENDING_DESTROY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.removeScriptVar(self, player_structure.VAR_CONFIRM_DESTROY);
|
|
String sname = player_structure.getStructureName(structure);
|
|
CustomerServiceLog("DestroyStructure", "(" + self + ") " + getFirstName(self) + " has confirmed /destroyStructure on " + structure + " (Template: " + template + " Name: " + sname + "). Owner is " + player_structure.getStructureOwner(structure) + ". Will redeed = " + redeedVar);
|
|
CustomerServiceLog("DestroyStructure", getFirstName(self) + "has initiated a destroyStructure on " + structure + " (Template: " + template + " Name: " + sname + "). Owner is " + player_structure.getStructureOwner(structure));
|
|
if (redeedVar)
|
|
{
|
|
if (player_structure.destroyStructure(structure, true))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->Structure destroyed and deed reclaimed.");
|
|
sendSystemMessage(self, new string_id(STF, "deed_reclaimed"));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "deed_reclaimed_failed"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (player_structure.destroyStructure(structure, false))
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->Structure destroyed.");
|
|
sendSystemMessage(self, new string_id(STF, "structure_destroyed"));
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "structure_destroy_failed"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
string_id confirm_destruction_title = new string_id(STF, "confirm_destruction_t");
|
|
String title = getString(confirm_destruction_title);
|
|
string_id confirm_destruction_detail1 = new string_id(STF, "confirm_destruction_d1");
|
|
String prompt = getString(confirm_destruction_detail1);
|
|
string_id confirm_destruction_detail2 = new string_id(STF, "confirm_destruction_d2");
|
|
prompt += getString(confirm_destruction_detail2) + "\n\n";
|
|
string_id confirm_destruction_detail3a = new string_id(STF, "confirm_destruction_d3a");
|
|
string_id confirm_destruction_detail3b = new string_id(STF, "confirm_destruction_d3b");
|
|
prompt += getString(confirm_destruction_detail3a) + " \\" + colors_hex.LIMEGREEN + getString(confirm_destruction_detail3b) + "\\#.";
|
|
string_id confirm_destruction_detail4 = new string_id(STF, "confirm_destruction_d4");
|
|
prompt += getString(confirm_destruction_detail4);
|
|
Vector entries = new Vector();
|
|
entries.setSize(0);
|
|
String structure_name = player_structure.getStructureName(structure);
|
|
if (structure_name != null && !structure_name.equals(""))
|
|
{
|
|
title = structure_name;
|
|
}
|
|
boolean canRedeed = false;
|
|
boolean willRedeed = true;
|
|
if (player_structure.canReclaimDeed(structure))
|
|
{
|
|
canRedeed = true;
|
|
}
|
|
if (canRedeed)
|
|
{
|
|
string_id redeed_alert_text = new string_id(STF, "can_redeed_alert");
|
|
string_id redeed_yes_alert_text = new string_id(STF, "can_redeed_yes_suffix");
|
|
entries = utils.addElement(entries, getString(redeed_alert_text) + "\\" + colors_hex.LIMEGREEN + getString(redeed_yes_alert_text));
|
|
int max_condition = player_structure.getMaxCondition(structure);
|
|
int condition = player_structure.getStructureCondition(structure);
|
|
String conditionColor = colors_hex.LIMEGREEN;
|
|
if (condition < max_condition)
|
|
{
|
|
conditionColor = colors_hex.TOMATO;
|
|
willRedeed = false;
|
|
}
|
|
string_id redeed_condition_text = new string_id(STF, "redeed_condition");
|
|
entries = utils.addElement(entries, " - " + getString(redeed_condition_text) + "\\" + conditionColor + condition + "/" + max_condition);
|
|
int pool = player_structure.getMaintenancePool(structure);
|
|
int reclaim_pool = player_structure.getRedeedCost(structure);
|
|
String maintColor = colors_hex.LIMEGREEN;
|
|
if (pool < reclaim_pool)
|
|
{
|
|
maintColor = colors_hex.TOMATO;
|
|
willRedeed = false;
|
|
}
|
|
string_id redeed_maintenance_text = new string_id(STF, "redeed_maintenance");
|
|
entries = utils.addElement(entries, " - " + getString(redeed_maintenance_text) + "\\" + maintColor + pool + "/" + reclaim_pool);
|
|
}
|
|
else
|
|
{
|
|
string_id redeed_alert_text = new string_id(STF, "can_redeed_alert");
|
|
string_id redeed_no_alert_text = new string_id(STF, "can_redeed_no_suffix");
|
|
entries = utils.addElement(entries, getString(redeed_alert_text) + "\\" + colors_hex.TOMATO + getString(redeed_no_alert_text));
|
|
willRedeed = false;
|
|
}
|
|
if (willRedeed)
|
|
{
|
|
string_id redeed_confirmation_text = new string_id(STF, "redeed_confirmation");
|
|
string_id redeed_yes_alert_text = new string_id(STF, "can_redeed_yes_suffix");
|
|
prompt += "\n" + getString(redeed_confirmation_text) + "\\" + colors_hex.LIMEGREEN + getString(redeed_yes_alert_text);
|
|
}
|
|
else
|
|
{
|
|
string_id redeed_confirmation_text = new string_id(STF, "redeed_confirmation");
|
|
string_id redeed_no_alert_text = new string_id(STF, "can_redeed_no_suffix");
|
|
prompt += "\n" + getString(redeed_confirmation_text) + "\\" + colors_hex.TOMATO + getString(redeed_no_alert_text);
|
|
}
|
|
int pid = sui.listbox(self, self, prompt, sui.YES_NO, title, entries, "handleDestroyUi");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "player_structure.destroy.pid", pid);
|
|
utils.setScriptVar(self, "player_structure.destroy.target", structure);
|
|
utils.setScriptVar(self, "player_structure.destroy.willredeed", willRedeed);
|
|
utils.setScriptVar(self, "player_structure.destroy.key", rand(100000, 999999));
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int createVendor(obj_id self, obj_id target, String params, float defaultTime) throws InterruptedException
|
|
{
|
|
blog("player_building:createVendor");
|
|
if (!validateVendorPlacement(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(self, CREATING_VENDOR, 1);
|
|
requestPlayerVendorCount(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSaveDecorationLayout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
int savedPageId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
forceCloseSUIPage(savedPageId);
|
|
}
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS);
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[][] columnData = new String[3][4];
|
|
columnData[0][0] = "1";
|
|
if (hasObjVar(playerObject, "savedDecoration1.saveTime"))
|
|
{
|
|
columnData[0][1] = getStringObjVar(playerObject, "savedDecoration1.pobName");
|
|
if (columnData[0][1] == null)
|
|
{
|
|
columnData[0][1] = "";
|
|
}
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration1.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
columnData[0][2] = getCalendarTimeStringLocal(saveTime);
|
|
}
|
|
else
|
|
{
|
|
columnData[0][2] = "";
|
|
}
|
|
columnData[0][3] = getStringObjVar(playerObject, "savedDecoration1.description");
|
|
if (columnData[0][3] == null)
|
|
{
|
|
columnData[0][3] = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
columnData[0][1] = "<EMPTY>";
|
|
columnData[0][2] = "<EMPTY>";
|
|
columnData[0][3] = "<EMPTY>";
|
|
}
|
|
columnData[1][0] = "2";
|
|
if (hasObjVar(playerObject, "savedDecoration2.saveTime"))
|
|
{
|
|
columnData[1][1] = getStringObjVar(playerObject, "savedDecoration2.pobName");
|
|
if (columnData[1][1] == null)
|
|
{
|
|
columnData[1][1] = "";
|
|
}
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration2.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
columnData[1][2] = getCalendarTimeStringLocal(saveTime);
|
|
}
|
|
else
|
|
{
|
|
columnData[1][2] = "";
|
|
}
|
|
columnData[1][3] = getStringObjVar(playerObject, "savedDecoration2.description");
|
|
if (columnData[1][3] == null)
|
|
{
|
|
columnData[1][3] = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
columnData[1][1] = "<EMPTY>";
|
|
columnData[1][2] = "<EMPTY>";
|
|
columnData[1][3] = "<EMPTY>";
|
|
}
|
|
columnData[2][0] = "3";
|
|
if (hasObjVar(playerObject, "savedDecoration3.saveTime"))
|
|
{
|
|
columnData[2][1] = getStringObjVar(playerObject, "savedDecoration3.pobName");
|
|
if (columnData[2][1] == null)
|
|
{
|
|
columnData[2][1] = "";
|
|
}
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration3.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
columnData[2][2] = getCalendarTimeStringLocal(saveTime);
|
|
}
|
|
else
|
|
{
|
|
columnData[2][2] = "";
|
|
}
|
|
columnData[2][3] = getStringObjVar(playerObject, "savedDecoration3.description");
|
|
if (columnData[2][3] == null)
|
|
{
|
|
columnData[2][3] = "";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
columnData[2][1] = "<EMPTY>";
|
|
columnData[2][2] = "<EMPTY>";
|
|
columnData[2][3] = "<EMPTY>";
|
|
}
|
|
String[] columnHeader =
|
|
{
|
|
"Save Slot #",
|
|
"Structure/Ship Type",
|
|
"Save Time",
|
|
"Description"
|
|
};
|
|
String[] columnHeaderType =
|
|
{
|
|
"integer",
|
|
"text",
|
|
"text",
|
|
"text"
|
|
};
|
|
int pid = sui.tableRowMajor(self, self, sui.OK_CANCEL, "Save Decoration Layout", "handleSelectSaveDecorationLayout", "Select the save slot where you want to save this decoration layout.", columnHeader, columnHeaderType, columnData);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSelectSaveDecorationLayout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
int saveSlotId = sui.getTableLogicalIndex(params) + 1;
|
|
if ((saveSlotId < 1) || (saveSlotId > 3))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
if (hasObjVar(playerObject, "savedDecoration" + saveSlotId + ".saveTime"))
|
|
{
|
|
int pid = sui.msgbox(self, self, "Are you sure you want to overwrite the decoration layout currently saved in slot " + saveSlotId + "?", sui.YES_NO, "Save Decoration Layout", "handleConfirmOverwriteSaveDecorationLayout");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
}
|
|
else
|
|
{
|
|
int pid = sui.inputbox(self, self, "Enter an optional (40 characters max) description for the decoration layout that will be saved in slot " + saveSlotId + ".", "Save Decoration Layout", "handleSaveDecorationLayoutEnterDescription", 39, false, "");
|
|
setSUIProperty(pid, sui.INPUTBOX_INPUT, "MaxLength", String.valueOf(39));
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
showSUIPage(pid);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleConfirmOverwriteSaveDecorationLayout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
int pid = sui.inputbox(self, self, "Enter an optional (40 characters max) description for the decoration layout that will be saved in slot " + saveSlotId + ".", "Save Decoration Layout", "handleSaveDecorationLayoutEnterDescription", 39, false, "");
|
|
setSUIProperty(pid, sui.INPUTBOX_INPUT, "MaxLength", String.valueOf(39));
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
showSUIPage(pid);
|
|
}
|
|
else
|
|
{
|
|
messageTo(self, "handleSaveDecorationLayout", null, 0.1f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSaveDecorationLayoutEnterDescription(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
obj_id structure = getContainedBy(self);
|
|
if (isValidId(structure))
|
|
{
|
|
structure = getContainedBy(structure);
|
|
}
|
|
if (!isValidId(structure))
|
|
{
|
|
sendSystemMessage(self, "You must be standing inside a structure or POB ship to do this.", null);
|
|
}
|
|
else
|
|
{
|
|
String description = sui.getInputBoxText(params);
|
|
if (description == null)
|
|
{
|
|
description = "";
|
|
}
|
|
saveDecorationLayout(self, structure, saveSlotId, description);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
messageTo(self, "handleSaveDecorationLayout", null, 0.1f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void displayRestoreDecorationRoomMapping(obj_id player, String[] savedRooms, String[] targetRooms, int saveSlotId) throws InterruptedException
|
|
{
|
|
if (!isIdValid(player) || !exists(player))
|
|
{
|
|
return;
|
|
}
|
|
String[] columnHeader =
|
|
{
|
|
"Items that were in this room at the time the layout was saved",
|
|
"Will be moved/restored into this room"
|
|
};
|
|
String[] columnHeaderType =
|
|
{
|
|
"text",
|
|
"text"
|
|
};
|
|
String[][] columnData = new String[2][0];
|
|
String[] tempSavedRooms = new String[savedRooms.length + 1];
|
|
for (int i = 0; i < savedRooms.length; ++i)
|
|
{
|
|
tempSavedRooms[i] = savedRooms[i];
|
|
}
|
|
tempSavedRooms[savedRooms.length] = "Restore Decoration Layout";
|
|
String[] tempTargetRooms = new String[targetRooms.length + 1];
|
|
for (int i = 0; i < targetRooms.length; ++i)
|
|
{
|
|
tempTargetRooms[i] = targetRooms[i];
|
|
}
|
|
tempTargetRooms[targetRooms.length] = "";
|
|
columnData[0] = tempSavedRooms;
|
|
columnData[1] = tempTargetRooms;
|
|
int pid = sui.tableColumnMajor(player, player, sui.OK_CANCEL, "Restore Decoration Layout", "handleSelectRestoreDecorationRoomMapping", "@player_structure:restore_decoration_layout_specify_target_room", columnHeader, columnHeaderType, columnData);
|
|
utils.setScriptVar(player, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(player, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(player, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
}
|
|
public int handleRestoreDecorationLayout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
int savedPageId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
forceCloseSUIPage(savedPageId);
|
|
}
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS);
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int numberOfSavedSlots = 0;
|
|
String[] saveSlot1 = null;
|
|
if (hasObjVar(playerObject, "savedDecoration1.saveTime"))
|
|
{
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration1.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
++numberOfSavedSlots;
|
|
saveSlot1 = new String[4];
|
|
saveSlot1[0] = "1";
|
|
saveSlot1[1] = getStringObjVar(playerObject, "savedDecoration1.pobName");
|
|
if (saveSlot1[1] == null)
|
|
{
|
|
saveSlot1[1] = "";
|
|
}
|
|
saveSlot1[2] = getCalendarTimeStringLocal(saveTime);
|
|
saveSlot1[3] = getStringObjVar(playerObject, "savedDecoration1.description");
|
|
if (saveSlot1[3] == null)
|
|
{
|
|
saveSlot1[3] = "";
|
|
}
|
|
}
|
|
}
|
|
String[] saveSlot2 = null;
|
|
if (hasObjVar(playerObject, "savedDecoration2.saveTime"))
|
|
{
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration2.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
++numberOfSavedSlots;
|
|
saveSlot2 = new String[4];
|
|
saveSlot2[0] = "2";
|
|
saveSlot2[1] = getStringObjVar(playerObject, "savedDecoration2.pobName");
|
|
if (saveSlot2[1] == null)
|
|
{
|
|
saveSlot2[1] = "";
|
|
}
|
|
saveSlot2[2] = getCalendarTimeStringLocal(saveTime);
|
|
saveSlot2[3] = getStringObjVar(playerObject, "savedDecoration2.description");
|
|
if (saveSlot2[3] == null)
|
|
{
|
|
saveSlot2[3] = "";
|
|
}
|
|
}
|
|
}
|
|
String[] saveSlot3 = null;
|
|
if (hasObjVar(playerObject, "savedDecoration3.saveTime"))
|
|
{
|
|
int saveTime = getIntObjVar(playerObject, "savedDecoration3.saveTime");
|
|
if (saveTime > 0)
|
|
{
|
|
++numberOfSavedSlots;
|
|
saveSlot3 = new String[4];
|
|
saveSlot3[0] = "3";
|
|
saveSlot3[1] = getStringObjVar(playerObject, "savedDecoration3.pobName");
|
|
if (saveSlot3[1] == null)
|
|
{
|
|
saveSlot3[1] = "";
|
|
}
|
|
saveSlot3[2] = getCalendarTimeStringLocal(saveTime);
|
|
saveSlot3[3] = getStringObjVar(playerObject, "savedDecoration3.description");
|
|
if (saveSlot3[3] == null)
|
|
{
|
|
saveSlot3[3] = "";
|
|
}
|
|
}
|
|
}
|
|
if (numberOfSavedSlots <= 0)
|
|
{
|
|
sendSystemMessage(self, "You do not have any saved decoration layout.", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[][] columnData = new String[numberOfSavedSlots][0];
|
|
int[] choicesSaveSlot =
|
|
{
|
|
0,
|
|
0,
|
|
0
|
|
};
|
|
int choicesSaveSlotIndex = 0;
|
|
if (saveSlot1 != null)
|
|
{
|
|
columnData[choicesSaveSlotIndex] = saveSlot1;
|
|
choicesSaveSlot[choicesSaveSlotIndex] = 1;
|
|
++choicesSaveSlotIndex;
|
|
}
|
|
if (saveSlot2 != null)
|
|
{
|
|
columnData[choicesSaveSlotIndex] = saveSlot2;
|
|
choicesSaveSlot[choicesSaveSlotIndex] = 2;
|
|
++choicesSaveSlotIndex;
|
|
}
|
|
if (saveSlot3 != null)
|
|
{
|
|
columnData[choicesSaveSlotIndex] = saveSlot3;
|
|
choicesSaveSlot[choicesSaveSlotIndex] = 3;
|
|
++choicesSaveSlotIndex;
|
|
}
|
|
String[] columnHeader =
|
|
{
|
|
"Save Slot #",
|
|
"Structure/Ship Type",
|
|
"Save Time",
|
|
"Description"
|
|
};
|
|
String[] columnHeaderType =
|
|
{
|
|
"integer",
|
|
"text",
|
|
"text",
|
|
"text"
|
|
};
|
|
int pid = sui.tableRowMajor(self, self, sui.OK_CANCEL, "Restore Decoration Layout", "handleSelectRestoreDecorationLayout", "Select the decoration layout save slot you wish to restore.", columnHeader, columnHeaderType, columnData);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE, choicesSaveSlot);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSelectRestoreDecorationLayout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int[] choicesSaveSlot = utils.getIntArrayScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_SAVE_SLOT_CHOICE);
|
|
if ((choicesSaveSlot == null) || (choicesSaveSlot.length != 3))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
int rowsSelected = sui.getTableLogicalIndex(params);
|
|
if ((rowsSelected < 0) || (rowsSelected >= choicesSaveSlot.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = choicesSaveSlot[rowsSelected];
|
|
if ((saveSlotId < 1) || (saveSlotId > 3))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] savedRooms = getStringArrayObjVar(playerObject, "savedDecoration" + saveSlotId + ".rooms");
|
|
if ((savedRooms == null) || (savedRooms.length <= 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id structure = getContainedBy(self);
|
|
if (isValidId(structure))
|
|
{
|
|
structure = getContainedBy(structure);
|
|
}
|
|
if (!isValidId(structure))
|
|
{
|
|
sendSystemMessage(self, "You must be standing inside a structure or POB ship to do this.", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] roomsOfCurrentPob = getCellNames(structure);
|
|
if ((roomsOfCurrentPob == null) || (roomsOfCurrentPob.length <= 0))
|
|
{
|
|
sendSystemMessage(self, "You must be standing inside a structure or POB ship to do this.", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] targetRooms = getStringArrayObjVar(playerObject, "savedDecoration" + saveSlotId + ".targetRooms");
|
|
if ((targetRooms != null) && (targetRooms.length == savedRooms.length))
|
|
{
|
|
for (int i = 0; i < targetRooms.length; ++i)
|
|
{
|
|
boolean found = false;
|
|
for (String s : roomsOfCurrentPob) {
|
|
if (targetRooms[i].equals(s)) {
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
targetRooms[i] = "(will not be moved/restored)";
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
targetRooms = new String[savedRooms.length];
|
|
for (int i = 0; i < savedRooms.length; ++i)
|
|
{
|
|
boolean found = false;
|
|
for (String s : roomsOfCurrentPob) {
|
|
if (savedRooms[i].equals(s)) {
|
|
targetRooms[i] = savedRooms[i];
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
targetRooms[i] = "(will not be moved/restored)";
|
|
}
|
|
}
|
|
}
|
|
displayRestoreDecorationRoomMapping(self, savedRooms, targetRooms, saveSlotId);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSelectRestoreDecorationRoomMapping(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
String[] targetRooms = utils.getStringArrayScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] savedRooms = getStringArrayObjVar(playerObject, "savedDecoration" + saveSlotId + ".rooms");
|
|
if ((savedRooms == null) || (savedRooms.length <= 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((targetRooms == null) || (targetRooms.length != savedRooms.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int rowsSelected = sui.getTableLogicalIndex(params);
|
|
if (rowsSelected == savedRooms.length)
|
|
{
|
|
obj_id structure = getContainedBy(self);
|
|
if (isValidId(structure))
|
|
{
|
|
structure = getContainedBy(structure);
|
|
}
|
|
if (!isValidId(structure))
|
|
{
|
|
int pid = sui.msgbox(self, self, "You must be standing inside a structure or POB ship to do this.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] roomsOfCurrentPob = getCellNames(structure);
|
|
if ((roomsOfCurrentPob == null) || (roomsOfCurrentPob.length <= 0))
|
|
{
|
|
int pid = sui.msgbox(self, self, "You must be standing inside a structure or POB ship to do this.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
boolean hasValidTargetRoom = false;
|
|
for (int i = 0; i < targetRooms.length; ++i)
|
|
{
|
|
if ((targetRooms[i] == null) || (targetRooms[i].length() <= 0) || targetRooms[i].equals("(will not be moved/restored)"))
|
|
{
|
|
continue;
|
|
}
|
|
boolean found = false;
|
|
for (String s : roomsOfCurrentPob) {
|
|
if (targetRooms[i].equals(s)) {
|
|
hasValidTargetRoom = true;
|
|
found = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!found)
|
|
{
|
|
targetRooms[i] = "(will not be moved/restored)";
|
|
}
|
|
}
|
|
if (!hasValidTargetRoom)
|
|
{
|
|
int pid = sui.msgbox(self, self, "You have not specified any room into which to move/restore the decoration layout.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (int k = 0; k < targetRooms.length; ++k)
|
|
{
|
|
if ((targetRooms[k] == null) || targetRooms[k].equals("(will not be moved/restored)"))
|
|
{
|
|
targetRooms[k] = "";
|
|
}
|
|
}
|
|
setObjVar(playerObject, "savedDecoration" + saveSlotId + ".targetRooms", targetRooms);
|
|
restoreDecorationLayout(self, structure, saveSlotId);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((rowsSelected < 0) || (rowsSelected >= savedRooms.length))
|
|
{
|
|
int pid = sui.msgbox(self, self, "Please select an action to perform.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id structure = getContainedBy(self);
|
|
if (isValidId(structure))
|
|
{
|
|
structure = getContainedBy(structure);
|
|
}
|
|
if (!isValidId(structure))
|
|
{
|
|
int pid = sui.msgbox(self, self, "You must be standing inside a structure or POB ship to do this.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] roomsOfCurrentPob = getCellNames(structure);
|
|
if ((roomsOfCurrentPob == null) || (roomsOfCurrentPob.length <= 0))
|
|
{
|
|
int pid = sui.msgbox(self, self, "You must be standing inside a structure or POB ship to do this.", sui.OK_ONLY, "Restore Decoration Layout", "handleRestoreDecorationReturnToRoomMapping");
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] roomsSelection = new String[roomsOfCurrentPob.length + 1];
|
|
roomsSelection[0] = "do not move/restore items in room " + savedRooms[rowsSelected];
|
|
for (int i = 1; i < roomsSelection.length; ++i)
|
|
{
|
|
roomsSelection[i] = roomsOfCurrentPob[i - 1];
|
|
}
|
|
int pid = sui.listbox(self, self, "Select the room into which you wish to move/restore the items that were in room " + savedRooms[rowsSelected] + " at the time the decoration layout was saved.", sui.OK_CANCEL, "Restore Decoration Layout", roomsSelection, "handleSelectRestoreDecorationTargetRoom", true, true);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID, pid);
|
|
utils.setScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID, saveSlotId);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS, targetRooms);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX, rowsSelected);
|
|
utils.setScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS, roomsSelection);
|
|
}
|
|
else
|
|
{
|
|
messageTo(self, "handleRestoreDecorationLayout", null, 0.1f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleRestoreDecorationReturnToRoomMapping(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
String[] targetRooms = utils.getStringArrayScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] savedRooms = getStringArrayObjVar(playerObject, "savedDecoration" + saveSlotId + ".rooms");
|
|
if ((savedRooms == null) || (savedRooms.length <= 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((targetRooms == null) || (targetRooms.length != savedRooms.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
displayRestoreDecorationRoomMapping(self, savedRooms, targetRooms, saveSlotId);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSelectRestoreDecorationTargetRoom(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!utils.hasScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (params.getInt("pageId") != utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int saveSlotId = utils.getIntScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
String[] targetRooms = utils.getStringArrayScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
int targetRoomIndex = utils.getIntScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX);
|
|
String[] roomsOfCurrentPob = utils.getStringArrayScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SUI_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_SAVE_RESTORE_DECORATION_SAVE_SLOT_ID);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOMS);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_TARGET_ROOM_INDEX);
|
|
utils.removeScriptVar(self, SCRIPTVAR_RESTORE_DECORATION_CURRENT_POB_ROOMS);
|
|
obj_id playerObject = getPlayerObject(self);
|
|
if (!isValidId(playerObject))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] savedRooms = getStringArrayObjVar(playerObject, "savedDecoration" + saveSlotId + ".rooms");
|
|
if ((savedRooms == null) || (savedRooms.length <= 0))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((targetRooms == null) || (targetRooms.length != savedRooms.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((targetRoomIndex < 0) || (targetRoomIndex >= targetRooms.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
int rowsSelected = sui.getListboxSelectedRow(params);
|
|
if ((rowsSelected >= 0) && (roomsOfCurrentPob != null) && (roomsOfCurrentPob.length > 0) && (rowsSelected < roomsOfCurrentPob.length))
|
|
{
|
|
if (rowsSelected == 0)
|
|
{
|
|
targetRooms[targetRoomIndex] = "(will not be moved/restored)";
|
|
}
|
|
else
|
|
{
|
|
targetRooms[targetRoomIndex] = roomsOfCurrentPob[rowsSelected];
|
|
}
|
|
}
|
|
}
|
|
displayRestoreDecorationRoomMapping(self, savedRooms, targetRooms, saveSlotId);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleVendorTypeSelect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_building.handleVendorTypeSelect: init");
|
|
int idx = sui.getListboxSelectedRow(params);
|
|
if (idx < 0)
|
|
{
|
|
idx = 0;
|
|
}
|
|
obj_id player = sui.getPlayerId(params);
|
|
if (!isValidId(player) || !exists(player))
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int btn = sui.getIntButtonPressed(params);
|
|
if (btn == sui.BP_CANCEL)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_building.handleVendorTypeSelect: idx: " + idx);
|
|
String[] randomOnly =
|
|
{
|
|
"@player_structure:random"
|
|
};
|
|
utils.setScriptVar(player, "vendor.checkGender", 0);
|
|
int hiringMod = getSkillStatMod(player, "hiring");
|
|
blog("handleVendorTypeSelect - hiringMod: " + hiringMod);
|
|
switch (idx)
|
|
{
|
|
case 0:
|
|
blog("player_building.handleVendorTypeSelect: selected TERMINAL VENDOR TYPE: ");
|
|
String[] rawTerminalTypes = dataTableGetStringColumn(TBL_TERMINAL_TYPES, 0);
|
|
int test = 10;
|
|
Vector vendorTypes = new Vector();
|
|
vendorTypes.setSize(0);
|
|
for (String rawTerminalType : rawTerminalTypes) {
|
|
if (hiringMod >= test) {
|
|
vendorTypes = utils.addElement(vendorTypes, "@player_structure:terminal_" + rawTerminalType);
|
|
}
|
|
test += 20;
|
|
}
|
|
sui.listbox(player, player, "@player_structure:terminal_type_d", sui.OK_CANCEL, "@player_structure:terminal_type_t", vendorTypes, "handleTerminalDesignSelect", true);
|
|
break;
|
|
case 1:
|
|
blog("player_building.handleVendorTypeSelect: selected TERMINAL DROID TYPE: ");
|
|
String[] rawDroidTypes = dataTableGetStringColumn(TBL_DROID_TYPES, 0);
|
|
int dtest = 20;
|
|
Vector droidTypes = null;
|
|
for (String rawDroidType : rawDroidTypes) {
|
|
if (hiringMod >= dtest) {
|
|
droidTypes = utils.addElement(droidTypes, "@player_structure:droid_" + rawDroidType);
|
|
}
|
|
dtest += 20;
|
|
}
|
|
sui.listbox(player, player, "@player_structure:droid_type_d", sui.OK_CANCEL, "@player_structure:droid_type_t", droidTypes, "handleDroidModelSelect", true);
|
|
break;
|
|
case 2:
|
|
blog("player_building.handleVendorTypeSelect: selected TERMINAL NPC TYPE: ");
|
|
if (hiringMod < 50)
|
|
{
|
|
blog("player_building.handleVendorTypeSelect: player hiringMod < 50");
|
|
sui.listbox(player, player, "@player_structure:race_type_d", sui.OK_CANCEL, "@player_structure:race_type_t", randomOnly, "handleVendorRaceSelect", true);
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
blog("player_building.handleVendorTypeSelect: player hiringMod > 50");
|
|
String[] allSpecialVendors = getSpecialVendors(self, hiringMod);
|
|
blog("player_building.handleVendorTypeSelect: allSpecialVendors.length: " + allSpecialVendors.length);
|
|
Vector localizedRaceTypes = new Vector();
|
|
localizedRaceTypes.setSize(0);
|
|
Vector modifiedRawRaceTypes = new Vector();
|
|
modifiedRawRaceTypes.setSize(0);
|
|
if (hiringMod >= 60)
|
|
{
|
|
blog("player_building.handleVendorTypeSelect: player hiringMod >= 60");
|
|
String[] rawRaceTypesHiLvl = dataTableGetStringColumn(TBL_ALLNPC_TYPES, 0);
|
|
if (rawRaceTypesHiLvl == null)
|
|
{
|
|
break;
|
|
}
|
|
for (String s : rawRaceTypesHiLvl) {
|
|
utils.addElement(localizedRaceTypes, "@player_structure:race_" + s);
|
|
utils.addElement(modifiedRawRaceTypes, s);
|
|
}
|
|
utils.setScriptVar(self, "vendor.checkGender", 1);
|
|
}
|
|
else
|
|
{
|
|
String[] rawRaceTypesLowLvl = dataTableGetStringColumn(TBL_PLAYER_TYPES, 0);
|
|
if (rawRaceTypesLowLvl == null)
|
|
{
|
|
break;
|
|
}
|
|
for (String s : rawRaceTypesLowLvl) {
|
|
utils.addElement(localizedRaceTypes, "@player_structure:race_" + s);
|
|
utils.addElement(modifiedRawRaceTypes, s);
|
|
}
|
|
}
|
|
if (allSpecialVendors != null)
|
|
{
|
|
for (String allSpecialVendor : allSpecialVendors) {
|
|
utils.addElement(localizedRaceTypes, "@player_structure:race_" + allSpecialVendor);
|
|
utils.addElement(modifiedRawRaceTypes, allSpecialVendor);
|
|
}
|
|
utils.setScriptVar(self, "vendor.checkGender", 1);
|
|
}
|
|
if (localizedRaceTypes == null || modifiedRawRaceTypes == null)
|
|
{
|
|
break;
|
|
}
|
|
utils.setScriptVar(player, "vendor.races", modifiedRawRaceTypes);
|
|
sui.listbox(self, self, "@player_structure:race_type_d", sui.OK_CANCEL, "@player_structure:race_type_t", localizedRaceTypes, "handleVendorRaceSelect", true);
|
|
}
|
|
break;
|
|
default:
|
|
String[] defaultTerminalTypes = dataTableGetStringColumn(TBL_TERMINAL_TYPES, 0);
|
|
int hireVar = 10;
|
|
Vector defaultVendorTypes = new Vector();
|
|
defaultVendorTypes.setSize(0);
|
|
for (String defaultTerminalType : defaultTerminalTypes) {
|
|
if (hiringMod >= hireVar) {
|
|
vendorTypes = utils.addElement(defaultVendorTypes, "@player_structure:terminal_" + defaultTerminalType);
|
|
}
|
|
hireVar += 20;
|
|
}
|
|
sui.listbox(player, player, "@player_structure:terminal_type_d", sui.OK_CANCEL, "@player_structure:terminal_type_t", defaultVendorTypes, "handleTerminalDesignSelect", true);
|
|
break;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleTerminalDesignSelect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
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)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] rawTerminalTypes = dataTableGetStringColumn(TBL_TERMINAL_TYPES, 0);
|
|
String terminalsuffix = "terminal_" + rawTerminalTypes[idx] + ".iff";
|
|
utils.setScriptVar(player, "vendor.terminalSuffix", terminalsuffix);
|
|
sui.inputbox(player, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleDroidModelSelect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
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)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] rawDroidTypes = dataTableGetStringColumn(TBL_DROID_TYPES, 0);
|
|
String droidsuffix = "droid_" + rawDroidTypes[idx] + ".iff";
|
|
utils.setScriptVar(player, "vendor.terminalSuffix", droidsuffix);
|
|
sui.inputbox(player, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleVendorRaceSelect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: init");
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
removeVendorVars(self);
|
|
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)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(player, "vendor.raceIndex", idx);
|
|
utils.setScriptVar(player, "vendor.terminalSuffix", "NPC");
|
|
int checkGender = utils.getIntScriptVar(player, "vendor.checkGender");
|
|
blog("player_building.handleVendorRaceSelect: checkGender: " + checkGender);
|
|
if (checkGender == 1)
|
|
{
|
|
String[] raceTypes = utils.getStringArrayScriptVar(player, "vendor.races");
|
|
String raceChosen = raceTypes[idx];
|
|
blog("player_building.handleVendorRaceSelect: raceChosen: " + raceChosen);
|
|
if (raceChosen.startsWith("special_vendor_"))
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: Special Vendor = TRUE");
|
|
int rowNum = dataTableSearchColumnForString(raceChosen, 0, TBL_SPECIAL_PLAYER_VENDOR_TYPES);
|
|
if (rowNum < 0)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: rowNum is BAD");
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_building.handleVendorRaceSelect: rowNum: " + rowNum);
|
|
dictionary dict = dataTableGetRow(TBL_SPECIAL_PLAYER_VENDOR_TYPES, rowNum);
|
|
if (dict == null)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: Dictionary is NULL");
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_building.handleVendorRaceSelect: dict: " + dict);
|
|
int vendorSpeaksBasic = dict.getInt("vendor_basic");
|
|
if (vendorSpeaksBasic > 0)
|
|
{
|
|
utils.setScriptVar(player, "vendor.special_vendor_basic", 1);
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(player, "vendor.special_vendor_basic", 0);
|
|
}
|
|
blog("player_building.handleVendorRaceSelect: vendorSpeaksBasic: " + vendorSpeaksBasic);
|
|
int vendor_clothing = dict.getInt("vendor_give");
|
|
if (vendor_clothing > 0)
|
|
{
|
|
utils.setScriptVar(player, "vendor.special_vendor_clothing", 1);
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(player, "vendor.special_vendor_clothing", 0);
|
|
}
|
|
blog("player_building.handleVendorRaceSelect: vendor_clothing: " + vendor_clothing);
|
|
int decr_skillmod = dict.getInt("decrement_mod");
|
|
blog("player_building.handleVendorRaceSelect: decr_skillmod equals: " + decr_skillmod);
|
|
if (decr_skillmod > 0)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: decrementing skillmod: " + decr_skillmod);
|
|
String skillModName = dict.getString("skill_mod");
|
|
blog("player_building.handleVendorRaceSelect: skillModName: " + skillModName);
|
|
if (skillModName != null && !skillModName.equals(""))
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: setting skill mod to decrement");
|
|
utils.setScriptVar(player, "vendor.special_decrement_skillmod", true);
|
|
utils.setScriptVar(player, "vendor.special_vendor_skillmod", skillModName);
|
|
}
|
|
}
|
|
int specialVendorMale = dict.getInt("vendor_has_male");
|
|
int specialVendorFemale = dict.getInt("vendor_has_female");
|
|
if (specialVendorMale == 0 && specialVendorFemale == 0)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: both Male and Female == 0");
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (specialVendorMale == 1 && specialVendorFemale == 0)
|
|
{
|
|
utils.setScriptVar(player, "vendor.genderIndex", 0);
|
|
utils.setScriptVar(player, "vendor.gender.male_only_no_female", true);
|
|
utils.setScriptVar(player, "vendor.gender.female_only_no_male", false);
|
|
}
|
|
else if (specialVendorMale == 0 && specialVendorFemale == 1)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect:Female ONLY");
|
|
utils.setScriptVar(player, "vendor.genderIndex", 1);
|
|
utils.setScriptVar(player, "vendor.gender.female_only_no_male", true);
|
|
utils.setScriptVar(player, "vendor.gender.male_only_no_female", false);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: NOT A Special Vendor");
|
|
int row = dataTableSearchColumnForString(raceChosen, "VENDOR_TYPES", TBL_ALLNPC_TYPES);
|
|
dictionary dict = dataTableGetRow(TBL_ALLNPC_TYPES, row);
|
|
int hasFemale = dict.getInt("HAS_FEMALE");
|
|
blog("player_building.handleVendorRaceSelect: Has Female(0=no, 1=yes): " + hasFemale);
|
|
if (hasFemale == 0)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: No female, no gender UI needed");
|
|
utils.setScriptVar(player, "vendor.genderIndex", 0);
|
|
utils.setScriptVar(player, "vendor.gender.male_only_no_female", true);
|
|
}
|
|
else
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: Female exists, we'll need to decide which gender");
|
|
utils.setScriptVar(player, "vendor.genderIndex", 1);
|
|
}
|
|
}
|
|
}
|
|
if (utils.getBooleanScriptVar(player, "vendor.gender.male_only_no_female") || utils.getBooleanScriptVar(player, "vendor.gender.female_only_no_male"))
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: Either there is No female or No Male in this vendor");
|
|
if (utils.getIntScriptVar(player, "vendor.genderIndex") == 0 || utils.getIntScriptVar(player, "vendor.genderIndex") == 1)
|
|
{
|
|
blog("player_building.handleVendorRaceSelect: Male only for this vendor");
|
|
sui.inputbox(player, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
utils.setScriptVar(player, "vendor.gender.female_only_no_male", false);
|
|
utils.setScriptVar(player, "vendor.gender.male_only_no_female", false);
|
|
blog("player_building.handleVendorRaceSelect: Setting female and male only to false");
|
|
String[] possibleNPCGender =
|
|
{
|
|
"@player_structure:male",
|
|
"@player_structure:female"
|
|
};
|
|
sui.listbox(player, player, "@player_structure:gender_d", sui.OK_CANCEL, "@player_structure:gender_t", possibleNPCGender, "handleVendorGenderSelect", true);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleVendorGenderSelect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_building.handleVendorGenderSelect: init");
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
removeVendorVars(self);
|
|
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)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.setScriptVar(player, "vendor.genderIndex", idx);
|
|
blog("player_building.handleVendorGenderSelect: idx: " + idx);
|
|
sui.inputbox(player, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleSetVendorName(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_building.handleSetVendorName: init");
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id player = sui.getPlayerId(params);
|
|
String vendorName = sui.getInputBoxText(params);
|
|
int btn = sui.getIntButtonPressed(params);
|
|
if (btn == sui.BP_CANCEL)
|
|
{
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((vendorName.equals("")) || isNameReserved(vendorName))
|
|
{
|
|
sendSystemMessage(player, SID_OBSCENE);
|
|
sui.inputbox(player, player, "@player_structure:name_d", sui.OK_CANCEL, "@player_structure:name_t", sui.INPUT_NORMAL, null, "handleSetVendorName", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (vendorName.length() > 40)
|
|
{
|
|
vendorName = vendorName.substring(0, 39);
|
|
}
|
|
blog("player_building.handleSetVendorName: vendorName: " + vendorName);
|
|
utils.setScriptVar(player, "vendor.vendorName", vendorName);
|
|
messageTo(player, "buildVendor", null, 0, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int buildVendor(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_building.buildVendor: init");
|
|
obj_id player = self;
|
|
String terminalSuffix = utils.getStringScriptVar(player, "vendor.terminalSuffix");
|
|
if (terminalSuffix == null || terminalSuffix.equals(""))
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String vendorName = utils.getStringScriptVar(player, "vendor.vendorName");
|
|
if (vendorName == null || vendorName.equals(""))
|
|
{
|
|
blog("player_building.buildVendor: vendorName was null");
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.isFreeTrial(player))
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_building.buildVendor: vendor data initial validation pass");
|
|
obj_id structure = player_structure.getStructure(player);
|
|
obj_id inventory = getObjectInSlot(player, "inventory");
|
|
if (!isIdValid(structure))
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (inventory == null || inventory == obj_id.NULL_ID)
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id vendor = null;
|
|
if (terminalSuffix.equals("NPC"))
|
|
{
|
|
String[] genderList =
|
|
{
|
|
"male",
|
|
"female"
|
|
};
|
|
String creatureName = "vendor";
|
|
String templateName;
|
|
int raceIndex = utils.getIntScriptVar(player, "vendor.raceIndex");
|
|
if (raceIndex < 0)
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int genderIndex = utils.getIntScriptVar(player, "vendor.genderIndex");
|
|
if (genderIndex < 0 || genderIndex > 1)
|
|
{
|
|
genderIndex = 0;
|
|
}
|
|
if (raceIndex == 0)
|
|
{
|
|
String[] playerTypes = dataTableGetStringColumn(TBL_PLAYER_TYPES, 0);
|
|
if (playerTypes == null)
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
templateName = playerTypes[rand(1, playerTypes.length - 1)] + "_" + genderList[genderIndex] + ".iff";
|
|
}
|
|
else
|
|
{
|
|
String[] raceTypes = utils.getStringArrayScriptVar(player, "vendor.races");
|
|
if (raceTypes == null)
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String specificRace = raceTypes[raceIndex];
|
|
if (specificRace == null || specificRace.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
boolean maleOnly = utils.getBooleanScriptVar(player, "vendor.gender.male_only_no_female");
|
|
boolean femaleOnly = utils.getBooleanScriptVar(player, "vendor.gender.female_only_no_male");
|
|
if (maleOnly)
|
|
{
|
|
genderIndex = 0;
|
|
}
|
|
else if (femaleOnly)
|
|
{
|
|
genderIndex = 1;
|
|
}
|
|
templateName = specificRace + "_" + genderList[genderIndex] + ".iff";
|
|
}
|
|
if (templateName == null || templateName.equals(""))
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
vendor = createObject(create.TEMPLATE_PREFIX + "vendor/" + templateName, inventory, "");
|
|
if (!isIdValid(vendor) || !exists(vendor))
|
|
{
|
|
removeVendorVars(player);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id inv = getObjectInSlot(self, "inventory");
|
|
if ((inv == null) || (inv == obj_id.NULL_ID))
|
|
{
|
|
sendSystemMessage(player, SID_SYS_CREATE_FAILED);
|
|
destroyObject(vendor);
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if ((vendor != null))
|
|
{
|
|
setInvulnerable(vendor, true);
|
|
ai_lib.setDefaultCalmBehavior(vendor, ai_lib.BEHAVIOR_SENTINEL);
|
|
setObjVar(vendor, "vendor.NPC", 1);
|
|
detachAllScripts(vendor);
|
|
attachScript(vendor, "terminal.vendor");
|
|
attachScript(vendor, "terminal.npc_vendor");
|
|
boolean specialVendor = templateName.startsWith("special_vendor_");
|
|
if (specialVendor)
|
|
{
|
|
sendSystemMessage(player, SID_TCG_VENDOR_CTS_WARNING);
|
|
setObjVar(vendor, vendor_lib.SPECIAL_VENDOR_IDENTIFIER, true);
|
|
if (utils.hasScriptVar(player, "vendor.special_vendor_basic"))
|
|
{
|
|
setObjVar(vendor, "vendor.special_vendor_basic", utils.getIntScriptVar(player, "vendor.special_vendor_basic"));
|
|
}
|
|
if (utils.hasScriptVar(player, "vendor.special_vendor_clothing"))
|
|
{
|
|
setObjVar(vendor, "vendor.special_vendor_clothing", utils.getIntScriptVar(player, "vendor.special_vendor_clothing"));
|
|
}
|
|
if (utils.hasScriptVar(player, "vendor.special_decrement_skillmod") && utils.hasScriptVar(player, "vendor.special_vendor_skillmod"))
|
|
{
|
|
String skillMod = utils.getStringScriptVar(player, "vendor.special_vendor_skillmod");
|
|
if (skillMod == null || skillMod.equals(""))
|
|
{
|
|
sendSystemMessage(player, SID_SYS_CREATE_FAILED);
|
|
destroyObject(vendor);
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
setObjVar(vendor, "vendor.special_decrement_skillmod", true);
|
|
setObjVar(vendor, "vendor.special_vendor_skillmod", skillMod);
|
|
CustomerServiceLog("vendor", "Vendor requires a skill mod: " + skillMod + " that is being decremented on the owner. Owner: " + player + " Vendor: " + vendor + " Location created is player inventory");
|
|
if (getSkillStatMod(self, skillMod) <= 0)
|
|
{
|
|
CustomerServiceLog("vendor", " POSSIBLE EXPLOIT!!! Vendor: " + vendor + " had skill mod: " + skillMod + " that was supposed to be decremented on Owner: " + player + " but the owner did not have the skill mod. Possible exploit or other problematic issue. Notify design.");
|
|
sendSystemMessage(player, SID_SYS_CREATE_FAILED);
|
|
destroyObject(vendor);
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
applySkillStatisticModifier(player, skillMod, -1);
|
|
CustomerServiceLog("vendor", " Vendor: " + self + " had skill mod: " + skillMod + " that was reimbursed to the Owner: " + player + ". Skill mod decremented by 1. Location created is player inventory");
|
|
}
|
|
}
|
|
else if (templateName.contains("ithorian"))
|
|
{
|
|
dressup.dressNpc(vendor, "random_ithorian", true);
|
|
setObjVar(vendor, "dressed", 1);
|
|
}
|
|
else
|
|
{
|
|
dressup.dressNpc(vendor, "rich_no_jacket");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(player, SID_SYS_CREATE_FAILED);
|
|
destroyObject(vendor);
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
String vendorTemplate = "object/tangible/vendor/vendor_" + terminalSuffix;
|
|
if (vendorTemplate == null || vendorTemplate.equals(""))
|
|
{
|
|
CustomerServiceLog("playerStructure", "Vendor Placement: Player: " + getName(self) + " " + self + " selected vendor type: " + terminalSuffix + " but the selection type failed.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
vendor = createObject(vendorTemplate, inventory, "");
|
|
}
|
|
if (!isIdValid(vendor))
|
|
{
|
|
sendSystemMessage(player, SID_SYS_CREATE_FAILED);
|
|
removeVendorVars(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
persistObject(vendor);
|
|
setCondition(vendor, CONDITION_VENDOR);
|
|
setName(vendor, "Vendor: " + vendorName);
|
|
int usedSlots = getIntObjVar(player, "used_vendor_slots") + 1;
|
|
setObjVar(player, "used_vendor_slots", usedSlots);
|
|
setObjVar(vendor, "vendor_owner", player);
|
|
setOwner(vendor, player);
|
|
setObjVar(player, "vendor_not_initialized", vendor);
|
|
removeVendorVars(self);
|
|
int condition = 1000;
|
|
int items_stored = 0;
|
|
setObjVar(vendor, vendor_lib.VAR_MAINTENANCE_RATE, vendor_lib.BASE_MAINT_RATE);
|
|
setObjVar(vendor, vendor_lib.VAR_DECAY_RATE, vendor_lib.BASE_DECAY_RATE);
|
|
if (condition > 0)
|
|
{
|
|
setObjVar(vendor, vendor_lib.VAR_MAX_CONDITION, 1000);
|
|
setObjVar(vendor, vendor_lib.VAR_CONDITION, 1000);
|
|
}
|
|
int time_stamp = getGameTime();
|
|
setObjVar(vendor, vendor_lib.VAR_LAST_MAINTANENCE, time_stamp);
|
|
dictionary outparams = new dictionary();
|
|
outparams.put("timestamp", time_stamp);
|
|
messageTo(vendor, "OnMaintenanceLoop", outparams, vendor_lib.MAINTENANCE_HEARTBEAT, false);
|
|
sendSystemMessage(player, SID_SYS_CREATE_SUCCESS);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgAssignDroid(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgAssignDroid --" + self);
|
|
obj_id[] droid_list = player_structure.getMaintenanceDroids(self);
|
|
if (droid_list.length <= 0)
|
|
{
|
|
LOG("LOG_CHANNEL", "Error retrieving your list of maintenance capable droids.");
|
|
sendSystemMessage(self, new string_id(STF, "error_droid_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_REVERT)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if (bp == sui.BP_OK)
|
|
{
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
if (row_selected != -1)
|
|
{
|
|
int max_maint = (((getIntObjVar(droid_list[row_selected], "module_data.struct_maint") - 1) / 5) + 1) * 3;
|
|
obj_id[] maint_list = getObjIdArrayObjVar(droid_list[row_selected], "module_data.maint_list.ids");
|
|
if (maint_list == null || maint_list.length == 0)
|
|
{
|
|
maint_list = new obj_id[max_maint];
|
|
}
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!isIdValid(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (int i = 0; i < maint_list.length; i++)
|
|
{
|
|
if (maint_list[i] == structure)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "structure_on_list"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isIdValid(maint_list[i]))
|
|
{
|
|
maint_list[i] = structure;
|
|
setObjVar(droid_list[row_selected], "module_data.maint_list.ids", maint_list);
|
|
setObjVar(droid_list[row_selected], "module_data.maint_list.loc_" + i, getLocation(structure));
|
|
if (callable.hasCDCallable(droid_list[row_selected]))
|
|
{
|
|
obj_id droid = callable.getCDCallable(droid_list[row_selected]);
|
|
setObjVar(droid, "module_data.maint_list.ids", maint_list);
|
|
setObjVar(droid, "module_data.maint_list.loc_" + i, getLocation(structure));
|
|
}
|
|
String structName = "";
|
|
prose_package ppDroidAssigned = prose.getPackage(SID_DROID_ASSIGNED_TO_MAINTAIN);
|
|
prose.setTT(ppDroidAssigned, droid_list[row_selected]);
|
|
if (!player_structure.isInstallation(structure) && hasObjVar(structure, player_structure.VAR_SIGN_NAME))
|
|
{
|
|
prose.setTO(ppDroidAssigned, getStringObjVar(structure, player_structure.VAR_SIGN_NAME));
|
|
}
|
|
else
|
|
{
|
|
prose.setTO(ppDroidAssigned, structure);
|
|
}
|
|
sendSystemMessageProse(self, ppDroidAssigned);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
sendSystemMessage(self, new string_id(STF, "droid_full"));
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int turnstileExpire(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id building = params.getObjId("building");
|
|
if (isIdValid(building))
|
|
{
|
|
obj_id cont = getTopMostContainer(self);
|
|
if (cont == building)
|
|
{
|
|
params.put("sender", building);
|
|
messageTo(self, "handleEjection", params, 1.0f, false);
|
|
sendSystemMessage(self, SID_TURNSTILE_EXPIRE);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgEnterPermissions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgEnterPermissions--" + params);
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (row_selected != -1)
|
|
{
|
|
String[] enter_list;
|
|
if (isGod(self))
|
|
{
|
|
enter_list = player_structure.getCompleteEntryList(structure);
|
|
}
|
|
else
|
|
{
|
|
enter_list = player_structure.getEntryList(structure);
|
|
}
|
|
String player_name = enter_list[row_selected];
|
|
player_structure.modifyEntryList(structure, player_name, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgBanPermissions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgBanPermissions--" + params);
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (row_selected != -1)
|
|
{
|
|
String[] ban_list = player_structure.getBanList(structure);
|
|
String player_name = ban_list[row_selected];
|
|
player_structure.modifyBanList(structure, player_name, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgAdminPermissions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgAdminPermissions--" + params);
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (row_selected != -1)
|
|
{
|
|
String[] admin_list = player_structure.getAdminListNames(structure);
|
|
String player = admin_list[row_selected];
|
|
player_structure.modifyAdminList(structure, player, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgVendorPermissions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgVendorPermissions--" + params);
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (row_selected != -1)
|
|
{
|
|
String[] vendor_list = player_structure.getVendorList(structure);
|
|
String player_name = vendor_list[row_selected];
|
|
player_structure.modifyVendorList(structure, player_name, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgHopperPermissions(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgHopperPermissions--" + params);
|
|
int row_selected = sui.getListboxSelectedRow(params);
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if ((structure == null) || (structure == obj_id.NULL_ID))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (row_selected != -1)
|
|
{
|
|
String[] hopper_list = player_structure.getHopperListNames(structure);
|
|
String player = hopper_list[row_selected];
|
|
player_structure.modifyHopperList(structure, player, self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgPayMaintenance(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgPayMaintenance --" + self);
|
|
obj_id target = utils.getObjIdScriptVar(self, "payMaintenance.target");
|
|
boolean fromScd = pclib.isContainedByPlayer(self, target);
|
|
utils.removeScriptVarTree(self, "payMaintenance");
|
|
if (!isIdValid(target))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!fromScd && player_structure.getStructure(self) != target)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "pay_out_of_range"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int amt = sui.getTransferInputTo(params);
|
|
if (amt < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (fromScd)
|
|
{
|
|
queueCommand(self, (-404530384), target, Integer.toString(amt), COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
else
|
|
{
|
|
queueCommand(self, (-404530384), null, Integer.toString(amt), COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgAddPower(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgAddPower --" + self);
|
|
obj_id target = utils.getObjIdScriptVar(self, "addPower.target");
|
|
utils.removeScriptVarTree(self, "addPower");
|
|
if (isIdValid(target) && player_structure.getStructure(self) != target)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "power_out_of_range"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int amt = sui.getTransferInputTo(params);
|
|
if (amt < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
queueCommand(self, (-1893504550), null, Integer.toString(amt), COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgDepositPowerIncubator(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
obj_id target = utils.getObjIdScriptVar(self, "depositPowerIncubator.target");
|
|
utils.removeScriptVarTree(self, "depositPowerIncubator");
|
|
if (isIdValid(target) && !incubator.validateActiveUser(target, self))
|
|
{
|
|
sendSystemMessage(self, incubator.SID_NOT_YOUR_INCUBATOR);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
utils.removeScriptVarTree(self, "powerIncubator");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int amt = sui.getTransferInputTo(params);
|
|
if (amt < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
queueCommand(self, (1833062743), target, Integer.toString(amt), COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgWithdrawMaintenance(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgWithdrawMaintenance --" + self);
|
|
String amount_str = sui.getInputBoxText(params);
|
|
if (utils.stringToInt(amount_str) > 0)
|
|
{
|
|
queueCommand(self, (-707821905), null, amount_str, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgNameStructure(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::msgNameStructure --" + self);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String name = sui.getInputBoxText(params);
|
|
if (name == null || name.length() < 1)
|
|
{
|
|
LOG("LOG_CHANNEL", self + " ->That is not a valid name.");
|
|
sendSystemMessage(self, new string_id(STF, "not_valid_name"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
queueCommand(self, (-1016613791), null, name, COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnAddStructure(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::OnAddStructure");
|
|
obj_id structure = params.getObjId("structure");
|
|
String template = params.getString("template");
|
|
String structure_name = params.getString("structure_name");
|
|
location structure_loc = params.getLocation("structure_loc");
|
|
LOG("LOG_CHANNEL", "structure_name ->" + structure_name);
|
|
player_structure.addStructure(structure, template, structure_name, structure_loc, self, getFirstName(self), false, true);
|
|
if (structure_loc != null)
|
|
{
|
|
player_structure.addStructureWaypoint(self, structure_loc, structure_name, structure);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnRemoveStructure(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::OnRemoveStructure");
|
|
obj_id structure = params.getObjId("structure");
|
|
String template = params.getString("template");
|
|
obj_id waypoint = params.getObjId("waypoint");
|
|
player_structure.removeStructure(structure, template, self, getFirstName(self), false, true);
|
|
if (waypoint != null)
|
|
{
|
|
destroyWaypointInDatapad(waypoint, self);
|
|
}
|
|
obj_id[] callables = callable.getDatapadCallablesByType(self, callable.CALLABLE_TYPE_COMBAT_PET);
|
|
if (callables == null || callables.length <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (obj_id c : callables) {
|
|
if (!isIdValid(c) || !exists(c)) {
|
|
continue;
|
|
}
|
|
if (!hasObjVar(c, "module_data.maint_list.ids")) {
|
|
continue;
|
|
}
|
|
obj_id[] struct_list = getObjIdArrayObjVar(c, "module_data.maint_list.ids");
|
|
if (struct_list == null || struct_list.length <= 0) {
|
|
continue;
|
|
}
|
|
int structureIndex = utils.getElementPositionInArray(struct_list, structure);
|
|
if (structureIndex < 0) {
|
|
continue;
|
|
}
|
|
obj_id droid = callable.getCDCallable(c);
|
|
player_structure.removeStructureFromMaintenance(droid, c, structureIndex);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleAdjustLotCount(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
int numLots = params.getInt("lotAdjust");
|
|
adjustLotCount(getPlayerObject(self), numLots);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnClearConfirmDestroy(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
LOG("LOG_CHANNEL", "player_building::OnClearConfirmDestroy");
|
|
if (utils.hasScriptVar(self, player_structure.VAR_CONFIRM_DESTROY))
|
|
{
|
|
utils.removeScriptVar(self, player_structure.VAR_CONFIRM_DESTROY);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnConstructionComplete(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
string_id structure_name = params.getStringId("structure_name");
|
|
int lots_remaining = player_structure.MAX_LOTS - getAccountNumLots(getPlayerObject(self));
|
|
prose_package pp_msg = new prose_package();
|
|
pp_msg.stringId = ((lots_remaining >= 0) ? SID_CONSTRUCTION_COMPLETE : SID_CONSTRUCTION_COMPLETE_LOT_LIMIT_EXCEEDED);
|
|
pp_msg.actor.set(self);
|
|
pp_msg.other.set(structure_name);
|
|
pp_msg.digitInteger = ((lots_remaining >= 0) ? lots_remaining : -lots_remaining);
|
|
String send_msg = "@" + SID_CONSTRUCTION_COMPLETE_SENDER.toString();
|
|
String subject_str = "@" + SID_CONSTRUCTION_COMPLETE_SUBJECT.toString();
|
|
String body_msg = chatMakePersistentMessageOutOfBandBody(null, pp_msg);
|
|
chatSendPersistentMessage(send_msg, getFirstName(self), subject_str, null, body_msg);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgPAWithdrawSuccess(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params != null)
|
|
{
|
|
int amt = params.getInt("amount");
|
|
if (amt > 0)
|
|
{
|
|
sendSystemMessageProse(self, prose.getPackage(new string_id(STF, "withdraw_credits"), amt));
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgPAWithdrawFail(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "withdrawal_failed"));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleStatusUi(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
obj_id target = utils.getObjIdScriptVar(self, "player_structure.status.target");
|
|
boolean fromScd = utils.hasScriptVar(self, "player_structure.status.fromScd");
|
|
utils.removeScriptVarTree(self, "player_structure.status");
|
|
obj_id newTarget = fromScd ? target : player_structure.getStructure(self);
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_OK)
|
|
{
|
|
if (!isIdValid(target))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "no_valid_structurestatus"));
|
|
}
|
|
else
|
|
{
|
|
if (newTarget == target)
|
|
{
|
|
queueCommand(self, (335013253), fromScd ? newTarget : null, "", COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "changed_structurestatus"));
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleDestroyUi(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "player_structure.destroy.pid");
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
utils.removeScriptVarTree(self, "player_structure.destroy");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id target = utils.getObjIdScriptVar(self, "player_structure.destroy.target");
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!confirmDestroyTarget(structure, target))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
string_id confirm_destruction_title = new string_id(STF, "confirm_destruction_t");
|
|
String title = getString(confirm_destruction_title);
|
|
string_id redeed_structure_prefix = new string_id(STF, "your_structure_prefix");
|
|
String prompt = getString(redeed_structure_prefix) + "\\";
|
|
boolean willRedeed = utils.getBooleanScriptVar(self, "player_structure.destroy.willredeed");
|
|
if (willRedeed)
|
|
{
|
|
string_id will_redeed_confirm_text = new string_id(STF, "will_redeed_confirm");
|
|
prompt += colors_hex.LIMEGREEN + getString(will_redeed_confirm_text);
|
|
}
|
|
else
|
|
{
|
|
string_id will_not_redeed_confirm_text = new string_id(STF, "will_not_redeed_confirm");
|
|
prompt += colors_hex.TOMATO + getString(will_not_redeed_confirm_text);
|
|
}
|
|
prompt += "\\#.";
|
|
string_id will_redeed_confirm_suffix_text = new string_id(STF, "will_redeed_suffix");
|
|
prompt += getString(will_redeed_confirm_suffix_text);
|
|
int key = utils.getIntScriptVar(self, "player_structure.destroy.key");
|
|
if (key == 0)
|
|
{
|
|
key = rand(100000, 999999);
|
|
utils.setScriptVar(self, "player_structure.destroy.key", key);
|
|
}
|
|
prompt += "\n\nCode: " + key;
|
|
int pid = sui.inputbox(self, self, prompt, title, "handleDestroyConfirm", 6, false, "");
|
|
if (pid > -1)
|
|
{
|
|
utils.setScriptVar(self, "player_structure.destroy.pid", pid);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleDestroyConfirm(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "player_structure.destroy.pid");
|
|
int bp = sui.getIntButtonPressed(params);
|
|
String text = sui.getInputBoxText(params);
|
|
if (bp == sui.BP_CANCEL || text == null || text.equals(""))
|
|
{
|
|
utils.removeScriptVarTree(self, "player_structure.destroy");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id target = utils.getObjIdScriptVar(self, "player_structure.destroy.target");
|
|
obj_id structure = player_structure.getStructure(self);
|
|
if (!confirmDestroyTarget(structure, target))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int key = utils.getIntScriptVar(self, "player_structure.destroy.key");
|
|
String skey = Integer.toString(key);
|
|
if (text.equals(skey))
|
|
{
|
|
if (tcg.isBarnStructure(structure) && tcg.getTotalBarnStoredBeasts(structure) > 0)
|
|
{
|
|
String title = utils.packStringId(new string_id("tcg", "barn_confirm_destroy_with_beasts_title"));
|
|
String testMsg = utils.packStringId(new string_id("tcg", "barn_confirm_destroy_with_beasts_prompt"));
|
|
String ok_button = utils.packStringId(new string_id("quest/ground/util/quest_giver_object", "button_accept"));
|
|
String cancel_button = utils.packStringId(new string_id("quest/ground/util/quest_giver_object", "button_decline"));
|
|
int pid = sui.createSUIPage(sui.SUI_MSGBOX, self, self, "handleDestroyBarnAndBeastsConfirm");
|
|
setSUIProperty(pid, sui.MSGBOX_TITLE, sui.PROP_TEXT, title);
|
|
setSUIProperty(pid, sui.MSGBOX_PROMPT, sui.PROP_TEXT, testMsg);
|
|
sui.msgboxButtonSetup(pid, sui.OK_ONLY);
|
|
utils.setScriptVar(self, "player_structure.destroy.barn_text", text);
|
|
sui.showSUIPage(pid);
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, player_structure.VAR_CONFIRM_DESTROY, target);
|
|
sendSystemMessage(self, new string_id(STF, "processing_destruction"));
|
|
queueCommand(self, (419174182), null, text, COMMAND_PRIORITY_DEFAULT);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sui.msgbox(self, "@player_structure:incorrect_destroy_code");
|
|
utils.removeScriptVarTree(self, "player_structure.destroy");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleDestroyBarnAndBeastsConfirm(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handlePlayerStructurePackupLockout(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!params.containsKey("house"))
|
|
{
|
|
blog("player_buidling.handlePlayerStructurePackupLockout() PARAMS MISSING, ABORTING.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id structure = params.getObjId("house");
|
|
if (!isValidId(structure))
|
|
{
|
|
blog("player_buidling.handlePlayerStructurePackupLockout() Invalid Structure OID, ABORTING.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_buidling.packedAbandonedStructure() Message received by player to start lockout timer.");
|
|
utils.setScriptVar(self, player_structure.SCRIPTVAR_HOUSE_PACKUP_LOCKOUT_TIME, getGameTime());
|
|
messageTo(self, "handlePlayerStructurePackupLockoutRemoval", null, player_structure.HOUSE_PACKUP_LOCKOUT_TIMER, false);
|
|
utils.setScriptVar(structure, player_structure.SCRIPTVAR_HOUSE_PACKUP_LOCKOUT_TIME, getGameTime());
|
|
messageTo(structure, "handleStructurePackupLockoutRemoval", params, player_structure.HOUSE_PACKUP_LOCKOUT_TIMER, false);
|
|
if (params != null && !params.equals(""))
|
|
{
|
|
CustomerServiceLog("housepackup", "Player: " + getPlayerName(self) + " (" + self + ") is" + " attempting to pack up a structure and has received lockout" + " timer for packup event that will expire in " + player_structure.HOUSE_PACKUP_LOCKOUT_TIMER + ".");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handlePlayerStructurePackupLockoutRemoval(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_buidling.handlePlayerStructurePackupLockoutRemoval() Message received by player to remove lockout timer.");
|
|
utils.removeScriptVarTree(self, player_structure.SCRIPTVAR_HOUSE_PACKUP_TREE_PREFIX);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleFailedStructurePackup(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_buidling.handleFailedStructurePackup() Message received by player to handle failed packup.");
|
|
messageTo(self, "handlePlayerStructurePackupLockoutRemoval", null, 0, false);
|
|
if (player_structure.canPackMoreToday(self))
|
|
{
|
|
sendSystemMessage(self, SID_HOUSE_PACKUP_FAILED);
|
|
}
|
|
CustomerServiceLog("housepackup", "Player: " + getPlayerName(self) + " (" + self + ") has" + " had lockout timer removed early due to structure packup problems.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int callAirStrikePackAbandonedStructure(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_buidling.callAirStrikePackAbandonedStructure() Message received by player to send animation, tally success.");
|
|
if ((params == null) || (params.isEmpty()))
|
|
{
|
|
blog("player_buidling.callAirStrikePackAbandonedStructure() ALL PARAMS MISSING, ABORTING.");
|
|
messageTo(self, "handlePlayerStructurePackupLockoutRemoval", null, 0, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!params.containsKey("structure") || !params.containsKey("structure_owner"))
|
|
{
|
|
blog("player_buidling.callAirStrikePackAbandonedStructure() PARAMS MISSING, ABORTING.");
|
|
messageTo(self, "handlePlayerStructurePackupLockoutRemoval", null, 0, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
blog("player_buidling.callAirStrikePackAbandonedStructure() about to send animation request.");
|
|
obj_id structure = params.getObjId("structure");
|
|
if (!isValidId(structure))
|
|
{
|
|
blog("player_building.moveStructureToSCD() MISSING PARAMS. ABORTING AIRSTRIKE");
|
|
messageTo(self, "handlePlayerStructurePackupLockoutRemoval", null, 0, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location where = getLocation(structure);
|
|
if (player_structure.canPackMoreToday(self))
|
|
{
|
|
prose_package p = prose.getPackage(new string_id("spam", "house_packup_airstrike"));
|
|
commPlayers(self, "object/mobile/dressed_hiddendagger_pilot_m_01.iff", "sound/sys_comm_other.snd", 5.0f, self, p);
|
|
playClientEffectLoc(self, "clienteffect/house_packup_airstrike.cef", where, 0);
|
|
}
|
|
params.put("player", self);
|
|
messageTo(structure, "moveStructureToSCD", params, 3, false);
|
|
blog("player_buidling.callAirStrikePackAbandonedStructure() The animation will eventually play.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgConfirmHousePackup(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, "packup.structure"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id structure = utils.getObjIdScriptVar(self, "packup.structure");
|
|
utils.removeScriptVar(self, "packup.structure");
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
LOG("house", "Declined packup.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.canPackBuilding(self, structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.canPackStructureWithVendors(self, structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location structLoc = getLocation(structure);
|
|
location playerLoc = getLocation(self);
|
|
if (structLoc == null || playerLoc == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (getDistance(structLoc, playerLoc) > 10.0f)
|
|
{
|
|
sendSystemMessage(self, SID_PACKUP_TOO_FAR_AWAY);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
params.put("structure", structure);
|
|
messageTo(self, "msgFinalizePackup", params, 0, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgFinalizePackup(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
blog("player_building.msgFinalizePackup() init!");
|
|
obj_id structure = params.getObjId("structure");
|
|
blog("player_building.msgFinalizePackup() STRUCTURE CONTENTS LOADED? " + areAllContentsLoaded(structure));
|
|
blog("player_building.msgFinalizePackup() STRUCTURE LOADED? " + structure.isLoaded());
|
|
if (!isIdValid(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!structure.isLoaded() || !structure.isAuthoritative())
|
|
{
|
|
blog("player_building.msgFinalizePackup() STRUCTURE LOADED? " + structure.isLoaded());
|
|
blog("player_building.msgFinalizePackup() STRUCTURE CONTENTS LOADED? " + areAllContentsLoaded(structure));
|
|
CustomerServiceLog("housepackup", "Structure (" + structure + ") could not be packed by player (" + getPlayerName(self) + ") msgFinalizePackup -" + " isLoaded = " + structure.isLoaded() + " isAuthoritative = " + structure.isAuthoritative());
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInstallation(structure) && !areAllContentsLoaded(structure) && !hasObjVar(structure, "structure.player.pack"))
|
|
{
|
|
setObjVar(structure, "structure.player.pack", self);
|
|
loadBuildingContents(self, structure);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!hasObjVar(structure, "structure.player.pack"))
|
|
{
|
|
blog("player_building.msgFinalizePackup() STRUCTURE IS GOOD FOR PACKUP");
|
|
player_structure.finalizePackUp(self, structure);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int packUpCityAbandonedStructure(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if ((params == null) || (params.isEmpty()))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
LOG("sissynoid", "Entered: packUpCityAbandonedStructure");
|
|
obj_id structure = params.getObjId("house");
|
|
if (!isIdValid(structure))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!isIdValid(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isCityPackupAuthoritative(self, structure))
|
|
{
|
|
LOG("sissynoid", "packUpCityAbandonedStructure: Structure is not Loaded or Authoritative: ");
|
|
CustomerServiceLog("city_house_packup", "'packUpCityAbandonedStructure' - Structure (" + structure + ") could not be packed by player (" + getPlayerName(self) + ") player -" + " isLoaded(Player) = " + self.isLoaded() + " isAuthoritative(Player) = " + self.isAuthoritative() + " isLoaded(Structure) = " + structure.isLoaded() + " isAuthoritative(Structure) = " + structure.isAuthoritative());
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!player_structure.isInstallation(structure) && !areAllContentsLoaded(structure) && !hasObjVar(structure, "structure.player.pack"))
|
|
{
|
|
LOG("sissynoid", "packUpCityAbandonedStructure: Not Installation, Not Loaded, No Objvar");
|
|
setObjVar(structure, "structure.player.pack", self);
|
|
loadBuildingContents(self, structure);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!hasObjVar(structure, "structure.player.pack"))
|
|
{
|
|
LOG("sissynoid", "Go! All Contents are Loaded!");
|
|
player_structure.finalizeCityPackUp(self, structure);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int msgConfirmVendorPackup(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, "packup.vendor"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(self, "packup.vendor.suiconfirm"))
|
|
{
|
|
utils.removeScriptVar(self, "packup.vendor.suiconfirm");
|
|
}
|
|
obj_id vendor = utils.getObjIdScriptVar(self, "packup.vendor");
|
|
utils.removeScriptVar(self, "packup.vendor");
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
LOG("vendor", "Declined packup.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id vendorOwner = getObjIdObjVar(vendor, "vendor_owner");
|
|
if (!isIdValid(vendorOwner))
|
|
{
|
|
vendorOwner = getOwner(vendor);
|
|
}
|
|
vendor_lib.finalizePackUp(vendorOwner, vendor, self, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int getVendorInfoForPlayerRsp(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
String summary = params.getString("summary");
|
|
if (summary == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] name = params.getStringArray("name");
|
|
if (name == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] location = params.getStringArray("location");
|
|
if ((location == null) || (location.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] tax = params.getStringArray("tax");
|
|
if ((tax == null) || (tax.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] taxCity = params.getStringArray("taxCity");
|
|
if ((taxCity == null) || (taxCity.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] emptyDate = params.getStringArray("emptyDate");
|
|
if ((emptyDate == null) || (emptyDate.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] lastAccessDate = params.getStringArray("lastAccessDate");
|
|
if ((lastAccessDate == null) || (lastAccessDate.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] inactiveDate = params.getStringArray("inactiveDate");
|
|
if ((inactiveDate == null) || (inactiveDate.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] status = params.getStringArray("status");
|
|
if ((status == null) || (status.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] searchable = params.getStringArray("searchable");
|
|
if ((searchable == null) || (searchable.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] entranceCharge = params.getStringArray("entranceCharge");
|
|
if ((entranceCharge == null) || (entranceCharge.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] itemCount = params.getStringArray("itemCount");
|
|
if ((itemCount == null) || (itemCount.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] offerCount = params.getStringArray("offerCount");
|
|
if ((offerCount == null) || (offerCount.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] stockRoomCount = params.getStringArray("stockRoomCount");
|
|
if ((stockRoomCount == null) || (stockRoomCount.length != name.length))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] columnHeader =
|
|
{
|
|
"Name",
|
|
"Location",
|
|
"Status",
|
|
"Active Items",
|
|
"Stockroom Items",
|
|
"Offered Items",
|
|
"% Tax",
|
|
"Tax City",
|
|
"Searchable",
|
|
"Entrance Fee",
|
|
"Last Access Date",
|
|
"Empty Date",
|
|
"Inactive Date"
|
|
};
|
|
String[] columnHeaderType =
|
|
{
|
|
"text",
|
|
"text",
|
|
"text",
|
|
"integer",
|
|
"integer",
|
|
"integer",
|
|
"integer",
|
|
"text",
|
|
"text",
|
|
"integer",
|
|
"text",
|
|
"text",
|
|
"text"
|
|
};
|
|
String[][] columnData = new String[13][0];
|
|
columnData[0] = name;
|
|
columnData[1] = location;
|
|
columnData[2] = status;
|
|
columnData[3] = itemCount;
|
|
columnData[4] = stockRoomCount;
|
|
columnData[5] = offerCount;
|
|
columnData[6] = tax;
|
|
columnData[7] = taxCity;
|
|
columnData[8] = searchable;
|
|
columnData[9] = entranceCharge;
|
|
columnData[10] = lastAccessDate;
|
|
columnData[11] = emptyDate;
|
|
columnData[12] = inactiveDate;
|
|
sui.tableColumnMajor(self, self, sui.OK_ONLY, "Vendor Information", null, summary, columnHeader, columnHeaderType, columnData, true);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public boolean isMoveCommandValid(obj_id player, obj_id target) throws InterruptedException
|
|
{
|
|
location loc = getLocation(player);
|
|
obj_id structure = getTopMostContainer(loc.cell);
|
|
if (!isIdValid(structure) || !isIdValid(target))
|
|
{
|
|
return false;
|
|
}
|
|
if (hasObjVar(target, "paintingId"))
|
|
{
|
|
obj_id painting = getObjIdObjVar(target, "paintingId");
|
|
destroyObject(painting);
|
|
removeObjVar(target, "paintingId");
|
|
sendSystemMessage(player, MOVED_CTRL_OBJ);
|
|
}
|
|
if (static_item.isStaticItem(target))
|
|
{
|
|
String paintingName = static_item.getStaticItemName(target);
|
|
if (paintingName.startsWith("item_publish_gift_magic_painting_"))
|
|
{
|
|
sendSystemMessage(player, MOVED_PAINTING);
|
|
return false;
|
|
}
|
|
}
|
|
if (hasObjVar(target, "noMoveItem"))
|
|
{
|
|
sendSystemMessage(player, NO_MOVE_ITEM);
|
|
return false;
|
|
}
|
|
if (getGameObjectType(structure) == GOT_building_factional && hasObjVar(structure, "hq"))
|
|
{
|
|
sendSystemMessage(player, new string_id(STF, "no_move_hq"));
|
|
return false;
|
|
}
|
|
if (!player_structure.isAdmin(structure, player))
|
|
{
|
|
LOG("LOG_CHANNEL", player + " ->You must be an admin to manipulate objects.");
|
|
sendSystemMessage(player, new string_id(STF, "admin_move_only"));
|
|
return false;
|
|
}
|
|
if (!canManipulateSkipNoTradeCheck(player, target, true, false, 0, true))
|
|
{
|
|
sendSystemMessage(player, new string_id(STF, "cant_manipulate"));
|
|
return false;
|
|
}
|
|
if (isPlayer(target) || (isMob(target) && !hasCondition(target, CONDITION_VENDOR)))
|
|
{
|
|
LOG("LOG_CHANNEL", player + " ->You can't manipulate that.");
|
|
sendSystemMessage(player, new string_id(STF, "cant_manipulate"));
|
|
return false;
|
|
}
|
|
obj_id structure_obj = getTopMostContainer(target);
|
|
if (structure != structure_obj || target == structure_obj)
|
|
{
|
|
LOG("LOG_CHANNEL", player + " -> That object is not within the building.");
|
|
sendSystemMessage(player, new string_id(STF, "item_not_in_building"));
|
|
return false;
|
|
}
|
|
obj_id[] base_objects = player_structure.getStructureBaseObjects(structure);
|
|
if (base_objects != null)
|
|
{
|
|
for (obj_id base_object : base_objects) {
|
|
if (target == base_object) {
|
|
LOG("LOG_CHANNEL", player + " -> You cannot move that object.");
|
|
sendSystemMessage(player, new string_id(STF, "cant_move_item"));
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
public String getCellName(obj_id building, obj_id cell) throws InterruptedException
|
|
{
|
|
String[] cellNames = getCellNames(building);
|
|
for (String cellName : cellNames) {
|
|
obj_id thisCell = getCellId(building, cellName);
|
|
if (thisCell == cell) {
|
|
return cellName;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
public boolean canPlaceCivic(obj_id player, obj_id deed, location position, String template) throws InterruptedException
|
|
{
|
|
if (utils.isFreeTrial(player))
|
|
{
|
|
return false;
|
|
}
|
|
int city_id = getCityAtLocation(position, 0);
|
|
if (!cityExists(city_id))
|
|
{
|
|
return false;
|
|
}
|
|
obj_id mayor = cityGetLeader(city_id);
|
|
if (mayor != player)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
public boolean canPlaceUnique(obj_id player, obj_id deed, location position, String template) throws InterruptedException
|
|
{
|
|
int city_id = getCityAtLocation(position, 0);
|
|
if (!cityExists(city_id))
|
|
{
|
|
return false;
|
|
}
|
|
if (utils.isFreeTrial(player))
|
|
{
|
|
return false;
|
|
}
|
|
if (player_structure.isShuttleportTemplate(template))
|
|
{
|
|
int travelCost = cityGetTravelCost(city_id);
|
|
if (travelCost > 0)
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else if (player_structure.isCloneTemplate(template))
|
|
{
|
|
obj_id clone = cityGetCloneId(city_id);
|
|
if (isIdValid(clone))
|
|
{
|
|
obj_id[] structures = cityGetStructureIds(city_id);
|
|
for (obj_id structure : structures) {
|
|
if ((structure == clone) && (structure != null)) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
public boolean confirmDestroyTarget(obj_id structure, obj_id target) throws InterruptedException
|
|
{
|
|
obj_id self = getSelf();
|
|
if (!isIdValid(target))
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "invalid_target"));
|
|
return false;
|
|
}
|
|
if (!isIdValid(structure) || structure != target)
|
|
{
|
|
sendSystemMessage(self, new string_id(STF, "changed_target"));
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
public boolean isFactionBaseEmpty(obj_id base, obj_id player) throws InterruptedException
|
|
{
|
|
if (!hasScript(base, "faction_perk.hq.loader"))
|
|
{
|
|
return true;
|
|
}
|
|
obj_id[] players = trial.getPlayersInDungeon(base);
|
|
if (players == null || players.length == 0)
|
|
{
|
|
return true;
|
|
}
|
|
if (players.length > 1)
|
|
{
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
public boolean removeVendorVars(obj_id self) throws InterruptedException
|
|
{
|
|
if (!isValidId(self) || !exists(self))
|
|
{
|
|
return false;
|
|
}
|
|
utils.removeScriptVarTree(self, VENDOR_VAR_PREFIX);
|
|
utils.removeScriptVarTree(self, "vendor");
|
|
blog("player_building.removeVendorVars: removed VENDOR_VAR_PREFIX Vars ");
|
|
return true;
|
|
}
|
|
public boolean handleVendorTypeSelect(obj_id self) throws InterruptedException
|
|
{
|
|
blog("player_building:handleVendorTypeSelect() - about to requestPlayerVendorCount");
|
|
if (!isValidId(self) || !exists(self))
|
|
{
|
|
return false;
|
|
}
|
|
else if (!validateVendorPlacement(self))
|
|
{
|
|
return false;
|
|
}
|
|
blog("player_building:handleVendorTypeSelect() - SETTING CREATING_VENDOR to 1");
|
|
utils.setScriptVar(self, CREATING_VENDOR, 1);
|
|
requestPlayerVendorCount(self);
|
|
return true;
|
|
}
|
|
public boolean validateVendorPlacement(obj_id self) throws InterruptedException
|
|
{
|
|
if (!isValidId(self) || !exists(self))
|
|
{
|
|
return false;
|
|
}
|
|
if (player_structure.isCivic(self))
|
|
{
|
|
blog("player_building:validateVendorPlacement() - isCivic = true");
|
|
return false;
|
|
}
|
|
if (utils.isFreeTrial(self))
|
|
{
|
|
blog("player_building:validateVendorPlacement() - Player is free trial");
|
|
sendSystemMessage(self, SID_NO_VENDOR);
|
|
return false;
|
|
}
|
|
if (hasObjVar(self, "vendor_not_initialized"))
|
|
{
|
|
blog("player_building:validateVendorPlacement() - has vendor_not_initialized");
|
|
sendSystemMessage(self, SID_SYS_VENDOR_NOT_INITIALIZED);
|
|
return false;
|
|
}
|
|
blog("player_building:validateVendorPlacement() - Everything is good, player can place.");
|
|
return true;
|
|
}
|
|
public String[] getSpecialVendors(obj_id self, int hireMod) throws InterruptedException
|
|
{
|
|
blog("player_building.getSpecialVendors: init");
|
|
if (!isValidId(self) || !exists(self))
|
|
{
|
|
return null;
|
|
}
|
|
else if (hireMod < 50)
|
|
{
|
|
return null;
|
|
}
|
|
blog("player_building.getSpecialVendors: initial validation passes");
|
|
String[] specialVendorNames = dataTableGetStringColumn(TBL_SPECIAL_PLAYER_VENDOR_TYPES, "special_vendor_name");
|
|
if (specialVendorNames == null)
|
|
{
|
|
return null;
|
|
}
|
|
blog("player_building.getSpecialVendors: specialVendorNames received");
|
|
String[] specialVendorSkillMod = dataTableGetStringColumn(TBL_SPECIAL_PLAYER_VENDOR_TYPES, "skill_mod");
|
|
if (specialVendorSkillMod == null)
|
|
{
|
|
return null;
|
|
}
|
|
blog("player_building.getSpecialVendors: specialVendorSkillMod received");
|
|
int[] requiredHireMod = dataTableGetIntColumn(TBL_SPECIAL_PLAYER_VENDOR_TYPES, "requires_hiring_mod");
|
|
if (requiredHireMod == null)
|
|
{
|
|
return null;
|
|
}
|
|
blog("player_building.getSpecialVendors: requiredHireMod received");
|
|
blog("player_building.getSpecialVendors: received specialVendorNames, specialVendorSkillMod, requiredHireMod");
|
|
Vector allSpecialVendorsOfPlayerHireMod = new Vector();
|
|
allSpecialVendorsOfPlayerHireMod.setSize(0);
|
|
Vector allSpecialVendorsMods = new Vector();
|
|
allSpecialVendorsMods.setSize(0);
|
|
blog("player_building.getSpecialVendors: about to grab special vendor list");
|
|
for (int i = 0; i < specialVendorNames.length; i++)
|
|
{
|
|
if (requiredHireMod[i] <= hireMod)
|
|
{
|
|
blog("player_building.getSpecialVendors: " + specialVendorNames[i] + " had a hire mod of: " + requiredHireMod[i] + " and was added to list");
|
|
utils.addElement(allSpecialVendorsOfPlayerHireMod, specialVendorNames[i]);
|
|
utils.addElement(allSpecialVendorsMods, specialVendorSkillMod[i]);
|
|
blog("player_building.getSpecialVendors: " + specialVendorNames[i] + " has a skill mod: " + specialVendorSkillMod[i]);
|
|
}
|
|
}
|
|
if (allSpecialVendorsOfPlayerHireMod == null || allSpecialVendorsMods == null)
|
|
{
|
|
return null;
|
|
}
|
|
blog("player_building.getSpecialVendors: specialVendorNames.length: " + specialVendorNames.length);
|
|
int vendorNameSize = allSpecialVendorsOfPlayerHireMod.size();
|
|
int vendorModSize = allSpecialVendorsMods.size();
|
|
if (vendorNameSize != vendorModSize)
|
|
{
|
|
return null;
|
|
}
|
|
else if (vendorNameSize == 0 || vendorModSize == 0)
|
|
{
|
|
return null;
|
|
}
|
|
String[] vendorNames = new String[vendorNameSize];
|
|
allSpecialVendorsOfPlayerHireMod.toArray(vendorNames);
|
|
String[] vendorMods = new String[vendorModSize];
|
|
allSpecialVendorsMods.toArray(vendorMods);
|
|
Vector allSpecialVendors = new Vector();
|
|
allSpecialVendors.setSize(0);
|
|
blog("player_building.getSpecialVendors: about to test each of the special vendors to see if I have the necessary skill mods.");
|
|
for (int b = 0; b < specialVendorSkillMod.length; b++)
|
|
{
|
|
if (getSkillStatMod(self, vendorMods[b]) <= 0)
|
|
{
|
|
continue;
|
|
}
|
|
blog("player_building.getSpecialVendors: Found a skill mod I have: " + vendorMods[b]);
|
|
utils.addElement(allSpecialVendors, vendorNames[b]);
|
|
}
|
|
blog("player_building.getSpecialVendors: allSpecialVendors.size(): " + allSpecialVendors.size());
|
|
String[] _allSpecialVendors = new String[0];
|
|
if (allSpecialVendors != null)
|
|
{
|
|
_allSpecialVendors = new String[allSpecialVendors.size()];
|
|
allSpecialVendors.toArray(_allSpecialVendors);
|
|
}
|
|
return _allSpecialVendors;
|
|
}
|
|
public boolean blog(String msg) throws InterruptedException
|
|
{
|
|
if (LOGGING_ON && msg != null && !msg.equals(""))
|
|
{
|
|
LOG(LOGGING_CATEGORY, msg);
|
|
}
|
|
return true;
|
|
}
|
|
}
|