mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-31 00:15:54 -04:00
268 lines
7.1 KiB
Plaintext
268 lines
7.1 KiB
Plaintext
/**
|
|
* Copyright (c)2000-2002 Sony Online Entertainment Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* Title: base.script
|
|
* DesCRiption:
|
|
* @author $AutHor:$
|
|
* @version $Revision:$
|
|
*/
|
|
|
|
/***** INCLUDES ********************************************************/
|
|
|
|
include library.buff;
|
|
include library.utils;
|
|
include library.player_structure;
|
|
include library.colors_hex;
|
|
|
|
/***** INCLUDES ********************************************************/
|
|
|
|
/***** CONSTANTS *******************************************************/
|
|
|
|
const string OBJVAR_SKILL_BUFF_NAME = "skill_buff.name";
|
|
const string OBJVAR_SKILL_BUFF_SKILL1 = "skill_buff.skill1";
|
|
const string OBJVAR_SKILL_BUFF_AMOUNT1 = "skill_buff.amount1";
|
|
const string OBJVAR_SKILL_BUFF_LENGTH1 = "skill_buff.length1";
|
|
const string OBJVAR_SKILL_BUFF_SKILL2 = "skill_buff.skill2";
|
|
const string OBJVAR_SKILL_BUFF_AMOUNT2 = "skill_buff.amount2";
|
|
const string OBJVAR_SKILL_BUFF_LENGTH2 = "skill_buff.length2";
|
|
|
|
|
|
/***** TRIGGERS ********************************************************/
|
|
trigger OnAttach()
|
|
{
|
|
setCount(self, 5);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnInitialize()
|
|
{
|
|
if(!hasObjVar(self, "skill_buff.name"))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
string name = getStringObjVar(self, "skill_buff.name");
|
|
string newName = "";
|
|
|
|
if(name.equals("skill_buff_carbine_accuracy"))
|
|
newName = "fs_carbine_acc";
|
|
else if(name.equals("skill_buff_carbine_speed"))
|
|
newName = "fs_carbine_spd";
|
|
else if(name.equals("skill_buff_heavy_weapon_accuracy"))
|
|
newName = "fs_heavy_acc";
|
|
else if(name.equals("skill_buff_heavy_weapon_speed"))
|
|
newName = "fs_heavy_spd";
|
|
else if(name.equals("skill_buff_mask_scent"))
|
|
newName = "fs_mask_scent";
|
|
else if(name.equals("skill_buff_melee_accuracy"))
|
|
newName = "fs_melee_acc";
|
|
else if(name.equals("skill_buff_melee_defense"))
|
|
newName = "fs_melee_def";
|
|
else if(name.equals("skill_buff_onehandmelee_accuracy"))
|
|
newName = "fs_1h_acc";
|
|
else if(name.equals("skill_buff_onehandmelee_speed"))
|
|
newName = "fs_1h_spd";
|
|
else if(name.equals("skill_buff_pistol_accuracy"))
|
|
newName = "fs_pistol_acc";
|
|
else if(name.equals("skill_buff_pistol_speed"))
|
|
newName = "fs_pistol_spd";
|
|
else if(name.equals("skill_buff_polearm_accuracy"))
|
|
newName = "fs_polearm_acc";
|
|
else if(name.equals("skill_buff_polearm_speed"))
|
|
newName = "fs_polearm_spd";
|
|
else if(name.equals("skill_buff_ranged_accuracy"))
|
|
newName = "fs_ranged_acc";
|
|
else if(name.equals("skill_buff_ranged_defense"))
|
|
newName = "fs_ranged_def";
|
|
else if(name.equals("skill_buff_rifle_accuracy"))
|
|
newName = "fs_rifle_acc";
|
|
else if(name.equals("skill_buff_rifle_speed"))
|
|
newName = "fs_rifle_spd";
|
|
else if(name.equals("skill_buff_thrown_accuracy"))
|
|
newName = "fs_thrown_acc";
|
|
else if(name.equals("skill_buff_thrown_speed"))
|
|
newName = "fs_thrown_spd";
|
|
else if(name.equals("skill_buff_twohandmelee_accuracy"))
|
|
newName = "fs_2h_acc";
|
|
else if(name.equals("skill_buff_twohandmelee_speed"))
|
|
newName = "fs_2h_spd";
|
|
else if(name.equals("skill_buff_unarmed_accuracy"))
|
|
newName = "fs_unarmed_acc";
|
|
else if(name.equals("skill_buff_unarmed_speed"))
|
|
newName = "fs_unarmed_spd";
|
|
|
|
if(!newName.equals(""))
|
|
{
|
|
removeObjVar(self, "skill_buff");
|
|
setObjVar(self, "buff_name", newName);
|
|
}
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuRequest(obj_id player, menu_info mi)
|
|
{
|
|
mi.addRootMenuOrServerNotify(menu_info_types.ITEM_USE, null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnObjectMenuSelect(obj_id player, int item)
|
|
{
|
|
if(item == menu_info_types.ITEM_USE)
|
|
{
|
|
obj_id inv = utils.getInventoryContainer(player);
|
|
if(isIdValid(inv) && utils.isNestedWithin(self, inv) )
|
|
{
|
|
consumeSkillBuffItem(self, player);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
trigger OnGetAttributes(obj_id player, string[] names, string[] attribs)
|
|
{
|
|
int idx = utils.getValidAttributeIndex(names);
|
|
if (idx == -1)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
if(!hasObjVar(self, "buff_name"))
|
|
return SCRIPT_CONTINUE;
|
|
|
|
string buff_name = getStringObjVar(self, "buff_name");
|
|
int buff_crc = getStringCrc(buff_name);
|
|
|
|
string skill = buff.getEffectParam(buff_name, 1);
|
|
int value = (int)buff.getEffectValue(buff_name, 1);
|
|
int duration = (int)buff.getDuration(buff_name);
|
|
|
|
string_id skill_name = new string_id ("stat_n", skill);
|
|
|
|
names[idx] = "skill_modifier_name";
|
|
attribs[idx] = utils.packStringId(skill_name);
|
|
idx++;
|
|
if (idx >= names.length)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
names[idx] = "skill_modifier_amount";
|
|
attribs[idx] = "" + value;
|
|
idx++;
|
|
if (idx >= names.length)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
names[idx] = "skill_modifier_length";
|
|
attribs[idx] = formatTime(duration);
|
|
idx++;
|
|
if (idx >= names.length)
|
|
return SCRIPT_CONTINUE;
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
void consumeSkillBuffItem(obj_id self, obj_id player)
|
|
{
|
|
if(!isIdValid(player))
|
|
return;
|
|
|
|
string buff_name = getStringObjVar(self, "buff_name");
|
|
int buff_crc = getStringCrc(buff_name);
|
|
|
|
if(buff.hasBuff(player, buff_crc))
|
|
{
|
|
string_id sid = new string_id ("skill_buff_n", "already_have");
|
|
sendCombatSpamMessage(player, sid, COMBAT_RESULT_GENERIC);
|
|
|
|
return;
|
|
}
|
|
|
|
if(buff.applyBuff(player, buff_name))
|
|
{
|
|
incrementCount(self, -1);
|
|
|
|
string_id message = new string_id ("skill_buff_d", "consume");
|
|
sendCombatSpamMessage(player, message, COMBAT_RESULT_GENERIC);
|
|
|
|
int cnt = getCount(self);
|
|
if(cnt < 1)
|
|
destroyObject(self);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// This message handler is deprecated
|
|
messageHandler handleUseSkillBuff()
|
|
{
|
|
LOG("skill_buff", "handleUseSkillBuff");
|
|
obj_id player = params.getObjId("player");
|
|
LOG("skill_buff", "handleUseSkillBuff player = " + player);
|
|
if ( !isIdValid(player) )
|
|
return SCRIPT_CONTINUE;
|
|
LOG("skill_buff", "handleUseSkillBuff passed check");
|
|
|
|
string name = getStringObjVar(self,OBJVAR_SKILL_BUFF_NAME);
|
|
if(hasSkillModModifier(player, name))
|
|
{
|
|
string_id sid = new string_id ("skill_buff_n", "already_have");
|
|
sendSystemMessage(player, sid);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
|
|
if(hasObjVar(self,OBJVAR_SKILL_BUFF_SKILL1))
|
|
{
|
|
string skill1 = getStringObjVar(self,OBJVAR_SKILL_BUFF_SKILL1);
|
|
int amount1 = getIntObjVar(self,OBJVAR_SKILL_BUFF_AMOUNT1);
|
|
int length1 = getIntObjVar(self,OBJVAR_SKILL_BUFF_LENGTH1);
|
|
addSkillModModifier(player, name, skill1, amount1, length1, false, true);
|
|
}
|
|
if(hasObjVar(self,OBJVAR_SKILL_BUFF_SKILL2))
|
|
{
|
|
string skill2 = getStringObjVar(self,OBJVAR_SKILL_BUFF_SKILL2);
|
|
int amount2 = getIntObjVar(self,OBJVAR_SKILL_BUFF_AMOUNT2);
|
|
int length2 = getIntObjVar(self,OBJVAR_SKILL_BUFF_LENGTH2);
|
|
addSkillModModifier(player, name, skill2, amount2, length2, false, true);
|
|
}
|
|
LOG("skill_buf", "handleUseSkillBuff decrementing count on " + self);
|
|
|
|
incrementCount(self, -1);
|
|
|
|
string_id message = new string_id ("skill_buff_d", "consume");
|
|
sendSystemMessage(player, message);
|
|
|
|
|
|
int cnt = getCount(self);
|
|
if ( cnt < 1 )
|
|
destroyObject(self);
|
|
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
|
|
string formatTime(int seconds)
|
|
{
|
|
string result = "";
|
|
|
|
int hours = (seconds / 3600);
|
|
seconds -= (hours * 3600);
|
|
|
|
int minutes = (seconds / 60);
|
|
seconds -= (minutes * 60);
|
|
|
|
if(hours > 0)
|
|
result += "" + hours + ":";
|
|
|
|
if(minutes > 0 || hours > 0)
|
|
{
|
|
if(hours > 0 && minutes < 10)
|
|
result += "0";
|
|
|
|
result += "" + minutes + ":";
|
|
}
|
|
|
|
if(minutes > 0 && seconds < 10)
|
|
result += "0";
|
|
|
|
result += "" + seconds;
|
|
|
|
return result;
|
|
} |