Files
dsrc/sku.0/sys.server/compiled/game/script/systems/veteran_reward/harvester.script
T

253 lines
7.2 KiB
Plaintext

/*
Title: systems/veteran_reward/emote_group.script
Description: Lets a player modify a harvester to use 0 power. The player selects the harvester they
want to change, and then use this item to change its power rate to 0.
*/
include library.player_structure;
include library.utils;
include library.veteran_deprecated;
include library.prose;
/***** CONSTANTS *******************************************************/
const string OBJVAR_GROUP_REWARDED = "rewarded";
const string_id SID_CONVERT = new string_id("ui_radial", "convert_harvester");
const string_id SID_MAKE_ELITE = new string_id("ui_radial", "make_elite");
const string_id SID_HARVESTER_CONVERTED = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "harvester_converted");
const string_id SID_DEED_CONVERTED = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "deed_converted");
const string_id SID_HARVESTER_CONVERTED_SUBJECT = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "harvester_converted_subject");
const string_id SID_HARVESTER_ALREADY_SELFPOWERED = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "harvester_already_selfpowered");
const string_id SID_CANT_SELF_POWER_ELITE = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "harvester_cant_self_power_elite");
const string_id SID_CANT_SELF_POWER = new string_id(veteran_deprecated.VETERAN_STRING_TABLE, "harvester_cant_self_power_normal");
/***** TRIGGERS ********************************************************/
trigger OnInitialize()
{
if ( hasObjVar(self, OBJVAR_GROUP_REWARDED) )
messageTo(self, "handleVeteranHarvestDestroy", null, 5, false);
return SCRIPT_CONTINUE;
}
/*
If the player is looking at a harvester they own, add a menu item that will allow them
to modify the harvester.
*/
trigger OnObjectMenuRequest(obj_id player, menu_info item)
{
// make sure we haven't already been used
if ( hasObjVar(self, OBJVAR_GROUP_REWARDED) )
return SCRIPT_CONTINUE;
// require this item to be used inside player's inventory
if( utils.getContainingPlayer(self) != player )
return SCRIPT_CONTINUE;
boolean isEliteDeed =false;
string strItemTemplate = getTemplateName(self);
if(strItemTemplate==player_structure.SELFPOWERED_DEED_ELITE)
isEliteDeed =true;
//if we aren't an elite deed lets see if we can transform into an elite deed
if(!isEliteDeed)
{
resizeable obj_id [] deedList = getDeedsInInventory(player);
//do we have 3 normal deeds in inventory?
if( deedList != null && deedList.size() >= 3)
{
item.addRootMenu (menu_info_types.SERVER_MENU8, SID_MAKE_ELITE);
}
}
// see if the player's target is a harvester, and that he is the owner
obj_id target = getIntendedTarget(player);
if ( !isIdValid(target) )
return SCRIPT_CONTINUE;
if (!player_structure.isHarvester(target))
return SCRIPT_CONTINUE;
if (getOwner(target) != player)
return SCRIPT_CONTINUE;
// harvester is already set as self powered
if( hasObjVar(target, "selfpowered") )
{
sendSystemMessage(player, SID_HARVESTER_ALREADY_SELFPOWERED);
return SCRIPT_CONTINUE;
}
if(player_structure.isEliteHarvester(target) && !isEliteDeed)
return SCRIPT_CONTINUE;
if(!player_structure.isEliteHarvester(target) && isEliteDeed)
return SCRIPT_CONTINUE;
//base use option
item.addRootMenu(menu_info_types.ITEM_USE, SID_CONVERT);
return SCRIPT_CONTINUE;
}
trigger OnObjectMenuSelect(obj_id player, int item)
{
boolean isEliteDeed =false;
string strItemTemplate = getTemplateName(self);
if(strItemTemplate== player_structure.SELFPOWERED_DEED_ELITE)
isEliteDeed =true;
if ( item == menu_info_types.ITEM_USE )
{
// make sure we haven't already been used
if ( hasObjVar(self, OBJVAR_GROUP_REWARDED) )
return SCRIPT_CONTINUE;
// require this item to be used inside player's inventory
if( utils.getContainingPlayer(self) != player )
return SCRIPT_CONTINUE;
// double-check our target
obj_id target = getIntendedTarget(player);
if ( !isIdValid(target) )
return SCRIPT_CONTINUE;
if (!player_structure.isHarvester(target))
return SCRIPT_CONTINUE;
if (getOwner(target) != player)
return SCRIPT_CONTINUE;
// harvester is already set as self powered
if( hasObjVar(target, "selfpowered") )
{
sendSystemMessage(player, SID_HARVESTER_ALREADY_SELFPOWERED);
return SCRIPT_CONTINUE;
}
//Harvester is new elite version and we have non elite deed
if( player_structure.isEliteHarvester(target) && !isEliteDeed)
{
sendSystemMessage(player, SID_CANT_SELF_POWER_ELITE);
return SCRIPT_CONTINUE;
}
//Elite deed and non elite harvester
if(!player_structure.isEliteHarvester(target) && isEliteDeed)
{
sendSystemMessage(player, SID_CANT_SELF_POWER);
return SCRIPT_CONTINUE;
}
CustomerServiceLog("veteran", "Player %TU converting harvester " + target + " to use 0 power", player);
//setObjVar(target, player_structure.VAR_POWER_RATE, 0);
setPowerRate(target, 0);
// set this so redeeding functionality can create a new deed
setObjVar(target, "selfpowered", 1);
setObjVar(self, OBJVAR_GROUP_REWARDED, true);
attachScript(target, "systems.veteran_reward.harvester_examine");
prose_package pp = new prose_package();
pp = prose.setStringId(pp, SID_HARVESTER_CONVERTED);
pp = prose.setTT(pp, getEncodedName(target));
sendSystemMessageProse(player, pp);
utils.sendMail( SID_HARVESTER_CONVERTED_SUBJECT, pp, player, "@" + veteran_deprecated.SID_VETERAN_NEW_REWARD_FROM );
messageTo(self, "handleVeteranHarvestDestroy", null, 2, false);
}
else if (item == menu_info_types.SERVER_MENU8)
{
if(!isEliteDeed)
{
resizeable obj_id [] deedList = getDeedsInInventory(player);
if( deedList != null && deedList.size() >= 3)
{
if(convertNonEliteToEliteDeeds(deedList, player))
sendSystemMessage(player, SID_DEED_CONVERTED);
}
}
}
return SCRIPT_CONTINUE;
}
messageHandler handleVeteranHarvestDestroy()
{
if ( hasObjVar(self, OBJVAR_GROUP_REWARDED) )
destroyObject(self);
return SCRIPT_CONTINUE;
}
//Checks to see how many regular self power deeds are in a players inventory
Vector getDeedsInInventory(obj_id player)
{
if(!isIdValid(player))
return null;
obj_id[] objContents = utils.getFilteredPlayerContents(player);
if ( (objContents == null) || (objContents.length == 0) )
{
return null;
}
resizeable obj_id [] deedList = new obj_id[0];
for ( int n = 0; n < objContents.length; n++ )
{
string strItemTemplate = getTemplateName(objContents[n]);
if(strItemTemplate==player_structure.SELFPOWERED_DEED)
{
deedList.add(objContents[n]);
}
}
return deedList;
}
//destroys 3 normal deeds to make 1 elite deed
boolean convertNonEliteToEliteDeeds(Vector deedList, obj_id player)
{
if(!isIdValid(player))
return false;
obj_id playerInventory = utils.getInventoryContainer(player);
if(!isIdValid(playerInventory))
return false;
obj_id [] tempDeedList = new obj_id [deedList.size()];
deedList.toArray(tempDeedList);
if(tempDeedList != null)
{
int numDestroyed = 0;
for ( int n = 0; n < 3; n++ )
{
destroyObject(tempDeedList[n]);
numDestroyed++;
}
if(numDestroyed == 3)
{
//create
createObjectOverloaded( player_structure.SELFPOWERED_DEED_ELITE, playerInventory);
return true;
}
}
return false;
}