/** * 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; }