mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-10-02 18:12:58 -04:00
253 lines
7.2 KiB
Plaintext
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;
|
|
}
|