From 3a22303bb0bf763fdc60d52f7f2fdf5b7773e984 Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Mon, 16 Nov 2015 10:30:16 -0600 Subject: [PATCH 1/4] house packup: shouldn't it always go into the owner's datapad? we have a separate func for non-owner packup so this may need cleanup --- .../script/library/player_structure.scriptlib | 71 ++++++++++--------- 1 file changed, 38 insertions(+), 33 deletions(-) diff --git a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib index 4e654c5a2..0047a9db1 100644 --- a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib +++ b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib @@ -3050,39 +3050,7 @@ void finalizePackUp(obj_id player, obj_id structure) ); return; } - blog("player_structure.finalizePackUp getting datapad"); - // get data pad - obj_id datapad = utils.getPlayerDatapad(player); - if(!isIdValid(datapad)) - { - blog("player_structure.finalizePackUp datapad not valid."); - CustomerServiceLog("housepackup", "Structure (" + structure + ") could not be packed by player/owner (" - + getPlayerName(player) + ") - datapad was not valid" - ); - return; - } - - blog("player_structure.finalizePackUp creating SCD"); - // Create a new structure control device in the datapad - obj_id scd = createObjectOverloaded("object/intangible/house/generic_house_control_device.iff", datapad); - if(!isIdValid(scd)) - { - CustomerServiceLog("housepackup", "Structure (" + structure + ") could not be packed by player/owner (" - + getPlayerName(player) + ") - scd was not valid" - ); - return; - } - attachScript(scd, "structure.house_control_device"); - - //If the structure is a factory, turn it off - if(player_structure.isFactory(structure) && isHarvesterActive(structure)) - { - CustomerServiceLog("housepackup", "Structure (" + structure + ") was a factory that was active. Turning off factory for player/owner (" - + getPlayerName(player) + ") OID (" + player + ")" - ); - deactivate(structure); - } // eject all players from house obj_id[] players = getPlayersInBuilding(structure); if (players != null) @@ -3094,6 +3062,41 @@ void finalizePackUp(obj_id player, obj_id structure) expelFromBuilding(players[i]); } } + + blog("player_structure.finalizePackUp getting datapad"); + // get data pad + obj_id datapad = utils.getPlayerDatapad(structure_owner); + if(!isIdValid(datapad)) + { + blog("player_structure.finalizePackUp datapad not valid."); + + CustomerServiceLog("housepackup", "Structure (" + structure + ") could not be packed by player/owner (" + + getPlayerName(structure_owner) + ") - datapad was not valid" + ); + return; + } + + blog("player_structure.finalizePackUp creating SCD"); + // Create a new structure control device in the datapad + obj_id scd = createObjectOverloaded("object/intangible/house/generic_house_control_device.iff", datapad); + if(!isIdValid(scd)) + { + CustomerServiceLog("housepackup", "Structure (" + structure + ") could not be packed by player/owner (" + + getPlayerName(structure_owner) + ") - scd was not valid" + ); + return; + } + attachScript(scd, "structure.house_control_device"); + + //If the structure is a factory, turn it off + if(player_structure.isFactory(structure) && isHarvesterActive(structure)) + { + CustomerServiceLog("housepackup", "Structure (" + structure + ") was a factory that was active. Turning off factory for player/owner (" + + getPlayerName(structure_owner) + ") OID (" + structure_owner + ")" + ); + deactivate(structure); + } + // Destroy vendors inside this structure. string[] cells = getCellNames(structure); if( cells != null) @@ -3112,7 +3115,7 @@ void finalizePackUp(obj_id player, obj_id structure) if (!isIdValid(owner)) owner = getOwner( contents[j] ); - vendor_lib.finalizePackUp(owner, contents[j], player, isAbandoned); + vendor_lib.finalizePackUp(owner, contents[j], owner, isAbandoned); } if(isIdValid(contents[j])) @@ -3155,12 +3158,14 @@ void finalizePackUp(obj_id player, obj_id structure) cityRemoveCitizen( cityId, resident ); } } + //we need removed even if we aren't a citizen. city.removeStructureFromCity(structure); // set the template objvar, this is required by the re-placement code string template = getTemplateName(structure); setDeedTemplate(scd, template); + // add the scene restrictions if(hasObjVar(structure, VAR_DEED_SCENE)) { From 7ecf412d30bae264d28364790a22ae8faa09bdd1 Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Mon, 16 Nov 2015 11:23:59 -0600 Subject: [PATCH 2/4] shot in the dark --- .../game/script/library/player_structure.scriptlib | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib index 0047a9db1..d149d6d64 100644 --- a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib +++ b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib @@ -3186,13 +3186,11 @@ void finalizePackUp(obj_id player, obj_id structure) // put the house into the structure control device putIn(structure, scd); - if ( !structure_owner.isLoaded() ) - { - const int maxDepth = isFactory(structure) ? 101 : 1; + + const int maxDepth = isFactory(structure) ? 101 : 1; - moveToOfflinePlayerDatapadAndUnload(scd, structure_owner, maxDepth + 1); // add one for the scd - fixLoadWith(structure, structure_owner, maxDepth); - } + moveToOfflinePlayerDatapadAndUnload(scd, structure_owner, maxDepth + 1); // add one for the scd + fixLoadWith(structure, structure_owner, maxDepth); CustomerServiceLog("housepackup", "Player/Owner " + getPlayerName(player) + " (" + player + ") packed structure (" + structure + ",abandoned=" From 9eac27256b4355f08dd8f5894578ecdfd9c43063 Mon Sep 17 00:00:00 2001 From: DarthArgus Date: Mon, 16 Nov 2015 19:25:54 -0600 Subject: [PATCH 3/4] try the order of operations from the rollup --- .../script/library/player_structure.scriptlib | 178 ++++++++++++------ 1 file changed, 118 insertions(+), 60 deletions(-) diff --git a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib index d149d6d64..76b56394e 100644 --- a/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib +++ b/sku.0/sys.server/compiled/game/script/library/player_structure.scriptlib @@ -3010,7 +3010,15 @@ void finalizePackUp(obj_id player, obj_id structure) blog("player_structure.finalizePackUp isAbandoned: "+isAbandoned); obj_id structure_owner = getOwner(structure); - + location where = getLocation(structure); + string structName = getStructureName(structure); + + // Get the structure name + if (structName == null || structName.length() < 1) + { + structName = "Building"; + } + if(structure_owner != player && isAbandoned) { CustomerServiceLog("housepackup", "Structure (" + structure + ") was abandoned and was not being packed by Owner (" @@ -3050,28 +3058,115 @@ void finalizePackUp(obj_id player, obj_id structure) ); return; } - - // eject all players from house - obj_id[] players = getPlayersInBuilding(structure); - if (players != null) + + if (isBuilding(structure)) { - blog("player_structure.finalizePackUp Players are in the building that is about to be packed."); - - for (int i = 0; i < players.length; i++) + // eject all players from house + obj_id[] players = getPlayersInBuilding(structure); + if (players != null) { - expelFromBuilding(players[i]); + for (int i = 0; i < players.length; i++) + { + expelFromBuilding(players[i]); + } } - } + + // Destroy vendors inside this structure. + string[] cells = getCellNames(structure); + if( cells != null) + { + for(int i = 0; i < cells.length; i++) + { + obj_id cellid = getCellId(structure, cells[i]); + obj_id contents[] = getContents(cellid); + if(contents != null) + { + for(int j=0; j