mirror of
https://github.com/SWG-Source/dsrc.git
synced 2026-07-13 22:01:04 -04:00
4657 lines
223 KiB
Java
Executable File
4657 lines
223 KiB
Java
Executable File
package script.systems.buff;
|
|
|
|
import script.*;
|
|
import script.combat_engine.buff_data;
|
|
import script.combat_engine.combat_data;
|
|
import script.library.*;
|
|
|
|
import java.util.Vector;
|
|
|
|
public class buff_handler extends script.base_script
|
|
{
|
|
public buff_handler()
|
|
{
|
|
}
|
|
public static final float ATTACK_RATE_DEPRICATED = 0.0f;
|
|
public static final float DECAY_RATE_DEPRICATED = 0.0f;
|
|
public static final String SKILLS_DATATABLE = "datatables/skill/skills.iff";
|
|
public static final String DATATABLE_BUFF_BUILDER = "datatables/buff/buff_builder.iff";
|
|
public static final String INITIAL_GENERAL_PROTECTION = "amor.unmodifiedArmorValue";
|
|
public static final String DATATABLE_COSTUME = "datatables/event/costume.iff";
|
|
public static final String DATATABLE_RADAR_HUE = "datatables/buff_data/radar_hue.iff";
|
|
public static final int IMMUNITY_TO_POISON = 1;
|
|
public static final int IMMUNITY_TO_DISEASE = 2;
|
|
public static final int IMMUNITY_TO_FIRE = 3;
|
|
public static final int IMMUNITY_TO_BLEEDING = 4;
|
|
public static final int IMMUNITY_TO_ALL_DOTS = 5;
|
|
public static final int IMMUNITY_TO_ACID = 6;
|
|
public static final int IMMUNITY_TO_ENERGY = 7;
|
|
public static final int IMMUNITY_TO_STUN = 12;
|
|
|
|
public int OnCreatureDamaged(obj_id self, obj_id attacker, obj_id weapon, int[] damage) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, "channel_healing"))
|
|
{
|
|
buff.removeBuff(self, "channel_healing");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int attribAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int attribute = ATTRIB_ERROR;
|
|
LOG("expertise", "attribAddBuffHandler effectName: " + effectName + " subtype: " + subtype + " value: " + value);
|
|
switch (subtype) {
|
|
case "health":
|
|
attribute = HEALTH;
|
|
break;
|
|
case "constitution":
|
|
attribute = CONSTITUTION;
|
|
break;
|
|
case "action":
|
|
attribute = ACTION;
|
|
break;
|
|
case "stamina":
|
|
attribute = STAMINA;
|
|
break;
|
|
case "mind":
|
|
attribute = MIND;
|
|
break;
|
|
case "willpower":
|
|
attribute = WILLPOWER;
|
|
break;
|
|
}
|
|
if (attribute == ATTRIB_ERROR)
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
attrib_mod am = new attrib_mod(effectName, attribute, (int)value, duration, ATTACK_RATE_DEPRICATED, DECAY_RATE_DEPRICATED, true, false, false);
|
|
addAttribModifier(self, am);
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int attribRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasAttribModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int attribPercentAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int attribute = ATTRIB_ERROR;
|
|
switch (subtype) {
|
|
case "health":
|
|
attribute = HEALTH;
|
|
break;
|
|
case "constitution":
|
|
attribute = CONSTITUTION;
|
|
break;
|
|
case "action":
|
|
attribute = ACTION;
|
|
break;
|
|
case "stamina":
|
|
attribute = STAMINA;
|
|
break;
|
|
case "mind":
|
|
attribute = MIND;
|
|
break;
|
|
case "willpower":
|
|
attribute = WILLPOWER;
|
|
break;
|
|
}
|
|
if (attribute == ATTRIB_ERROR)
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
long stack = buff.getBuffStackCount(self, buffName) > 1 ? buff.getBuffStackCount(self, buffName) : 1;
|
|
value *= (int)stack;
|
|
value = 100.0f + value;
|
|
value /= 100.0f;
|
|
int maxAttrib = getUnmodifiedMaxAttrib(self, attribute);
|
|
float newAttrib = maxAttrib * value;
|
|
int delta = (int)newAttrib - maxAttrib;
|
|
attrib_mod am = new attrib_mod(effectName, attribute, delta, duration, ATTACK_RATE_DEPRICATED, DECAY_RATE_DEPRICATED, true, false, false);
|
|
addAttribModifier(self, am);
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int attribPercentRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasAttribModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int skillAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
long stack = buff.getBuffStackCount(self, buffName) > 1 ? buff.getBuffStackCount(self, buffName) : 1;
|
|
value *= (int)stack;
|
|
addSkillModModifier(self, effectName, subtype, (int)value, duration, false, true);
|
|
if ((subtype.startsWith("constitution")) || (subtype.startsWith("stamina")))
|
|
{
|
|
messageTo(self, "recalcPools", null, 1, false);
|
|
}
|
|
else if (subtype.startsWith("expertise_innate_protection_"))
|
|
{
|
|
messageTo(self, "recalcArmor", null, 1, false);
|
|
}
|
|
if (subtype.startsWith("movement_resist"))
|
|
{
|
|
messageTo(self, "check_movement_immunity", null, 0.1f, false);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int skillRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
if (effectName.lastIndexOf("_") > 0)
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
combat.removeCombatBuffEffect(self, effectName);
|
|
if ((subtype.startsWith("constitution")) || (subtype.startsWith("stamina")))
|
|
{
|
|
messageTo(self, "recalcPools", null, 1, false);
|
|
}
|
|
else if (subtype.startsWith("expertise_innate_protection_"))
|
|
{
|
|
messageTo(self, "recalcArmor", null, 1, false);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int armorBreakAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
long stack = buff.getBuffStackCount(self, buffName) > 1 ? buff.getBuffStackCount(self, buffName) : 1;
|
|
value *= (int)stack;
|
|
int armorScriptVarValue = 0;
|
|
if (stack == 1)
|
|
{
|
|
armorScriptVarValue = utils.getIntScriptVar(self, armor.SCRIPTVAR_CACHED_GENERAL_PROTECTION);
|
|
utils.setScriptVar(self, INITIAL_GENERAL_PROTECTION, armorScriptVarValue);
|
|
}
|
|
else
|
|
{
|
|
armorScriptVarValue = utils.getIntScriptVar(self, INITIAL_GENERAL_PROTECTION);
|
|
}
|
|
if (subtype.equals("player") && isPlayer(self))
|
|
{
|
|
float baseMod = getSkillStatisticModifier(self, "expertise_innate_protection");
|
|
baseMod += armorScriptVarValue;
|
|
baseMod += getEnhancedSkillStatisticModifierUncapped(self, "expertise_innate_protection_all");
|
|
float modIncrease = baseMod * (value / 100.0f);
|
|
addSkillModModifier(self, effectName, "expertise_innate_protection_all", (int)modIncrease, duration, false, false);
|
|
if (utils.isProfession(caster, utils.BOUNTY_HUNTER))
|
|
{
|
|
buff.applyBuff(self, caster, "bh_crit_hit_vuln");
|
|
}
|
|
}
|
|
else if (subtype.equals("mob") && !isPlayer(self))
|
|
{
|
|
addSkillModModifier(self, effectName, "expertise_innate_protection_all", (int)value, duration, false, true);
|
|
if (utils.isProfession(caster, utils.BOUNTY_HUNTER))
|
|
{
|
|
buff.applyBuff(self, caster, "bh_crit_hit_vuln");
|
|
}
|
|
}
|
|
messageTo(self, "recalcArmor", null, 1, false);
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int armorBreakRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
if (effectName.lastIndexOf("_") > 0)
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
combat.removeCombatBuffEffect(self, effectName);
|
|
messageTo(self, "recalcArmor", null, 1, false);
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
combat.cacheCombatData(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int skillPercentAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float baseMod = getSkillStatisticModifier(self, subtype.substring(0, (subtype.lastIndexOf("_"))));
|
|
baseMod += getEnhancedSkillStatisticModifierUncapped(self, subtype);
|
|
float modIncrease = baseMod * (value / 100.0f);
|
|
addSkillModModifier(self, effectName, subtype, (int)modIncrease, duration, false, false);
|
|
if ((subtype.startsWith("constitution")) || (subtype.startsWith("stamina")))
|
|
{
|
|
messageTo(self, "recalcPools", null, 0.25f, false);
|
|
}
|
|
else if (subtype.startsWith("expertise_innate_protection_"))
|
|
{
|
|
messageTo(self, "recalcArmor", null, 0.25f, false);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int skillPercentRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
combat.removeCombatBuffEffect(self, effectName);
|
|
if ((subtype.startsWith("constitution")) || (subtype.startsWith("stamina")))
|
|
{
|
|
messageTo(self, "recalcPools", null, 0.25f, false);
|
|
}
|
|
else if (subtype.startsWith("expertise_innate_protection_"))
|
|
{
|
|
messageTo(self, "recalcArmor", null, 0.25f, false);
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int check_movement_immunity(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
movement.updateMovementImmunity(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int recalcPools(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (beast_lib.isBeast(self))
|
|
{
|
|
beast_lib.initializeBeastStats(beast_lib.getBeastBCD(self), self);
|
|
}
|
|
else
|
|
{
|
|
if (isPlayer(self))
|
|
{
|
|
skill.recalcPlayerPools(self, false);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int recalcArmor(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (beast_lib.isBeast(self))
|
|
{
|
|
beast_lib.initializeBeastStats(beast_lib.getBeastBCD(self), self);
|
|
}
|
|
else
|
|
{
|
|
armor.recalculateArmorForPlayer(self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int movementAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (value == 0)
|
|
{
|
|
value = -1;
|
|
}
|
|
if (movement.hasMovementModifier(self, effectName))
|
|
{
|
|
movement.removeMovementModifier(self, effectName, false);
|
|
}
|
|
movement.applyMovementModifier(self, effectName, value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int movementRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
if (movement.hasMovementModifier(self, effectName))
|
|
{
|
|
movement.removeMovementModifier(self, effectName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int exclusiveProxyAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int[] buffs = buff.getAllBuffs(self);
|
|
if (subtype != null && !subtype.equals(""))
|
|
{
|
|
String[] buffsToApply = split(subtype, ',');
|
|
for (String s : buffsToApply) {
|
|
buff.applyBuff(self, caster, s);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (int b : buffs) {
|
|
String thisBuffName = buff.getBuffNameFromCrc(b);
|
|
if (thisBuffName.startsWith("exclusive_proxy_")) {
|
|
String actualBuff = thisBuffName.substring(16, thisBuffName.length());
|
|
buff.applyBuff(self, self, actualBuff);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int exclusiveProxyRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int excludeSelfAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int[] buffs = buff.getAllBuffs(self);
|
|
for (int b : buffs) {
|
|
String thisBuffName = buff.getBuffNameFromCrc(b);
|
|
String actualBuff = "";
|
|
if (thisBuffName.startsWith("exclude_self_")) {
|
|
actualBuff = thisBuffName.substring(13, thisBuffName.length());
|
|
} else {
|
|
continue;
|
|
}
|
|
obj_id gid = getGroupObject(self);
|
|
if (isIdValid(gid)) {
|
|
obj_id[] groupMembers = getGroupMemberIds(gid);
|
|
for (obj_id groupMember : groupMembers) {
|
|
float dist = getDistance(groupMember, self);
|
|
if (dist > buff.GROUP_BUFF_DISTANCE) {
|
|
continue;
|
|
}
|
|
if (!pvpCanHelp(self, groupMember)) {
|
|
prose_package pp = new prose_package();
|
|
pp.stringId = new string_id("spam", "group_buff_fail_pvp");
|
|
pp.target.set(groupMember);
|
|
sendSystemMessageProse(self, pp);
|
|
continue;
|
|
}
|
|
if (groupMember != self) {
|
|
buff.applyBuff(groupMember, self, actualBuff);
|
|
}
|
|
}
|
|
}
|
|
buff.removeBuff(self, thisBuffName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int excludeSelfRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int delayAttackAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, buff.DEBUFF_STATE_PARALYZED + "." + effectName, duration);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int delayAttackRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, buff.DEBUFF_STATE_PARALYZED + "." + effectName);
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int suppressionAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int suppressionRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeSlowDownEffect(self);
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int scriptVarAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
utils.setScriptVar(self, "buff." + effectName + ".value", value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int scriptVarRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
utils.removeScriptVarTree(self, "buff." + effectName);
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpBonusAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpBonusRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "buff.xpBonus");
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpBonusGeneralAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int playerLevel = getLevel(self);
|
|
if (playerLevel < 90)
|
|
{
|
|
CustomerServiceLog("buff", "xpBonusGeneralAddBuff Buff used by player: " + self + " Name: " + getName(self) + " Player Level: " + playerLevel + " Effect: " + effectName + " subtype:" + subtype + " duration: " + duration + " value: " + value + " buffName: " + buffName + " caster: " + caster);
|
|
String[] xpArray =
|
|
{
|
|
"crafting",
|
|
"combat_general",
|
|
"entertainer",
|
|
"space_combat_general",
|
|
"chronicles"
|
|
};
|
|
utils.setScriptVar(self, "buff.xpBonusGeneral.types", xpArray);
|
|
utils.setScriptVar(self, "buff.xpBonusGeneral.value", value / 100);
|
|
}
|
|
else if (subtype.equals("tcg_xp_buff"))
|
|
{
|
|
CustomerServiceLog("buff", "xpBonusGeneralAddBuff Buff (TCG SPECIFIC BUFF OBJECT) used by player: " + self + " Name: " + getName(self) + " Player Level: " + playerLevel + ". Since player is 90th Lvl, this player receives a random collection object.");
|
|
obj_id collectionItem = collection.grantRandomCollectionItem(self, "datatables/loot/loot_items/collectible/magseal_loot.iff", "collections");
|
|
if (!isValidId(collectionItem) || !exists(collectionItem))
|
|
{
|
|
CustomerServiceLog("buff", "xpBonusGeneralAddBuff Buff (TCG SPECIFIC BUFF OBJECT) used by player: " + self + " Name: " + getName(self) + " Player Level: " + playerLevel + ". The collection system reports that a collectible object WAS NOT recieved by the player due to an internal error. Please notify SWG design.");
|
|
}
|
|
CustomerServiceLog("buff", "xpBonusGeneralAddBuff Buff (TCG SPECIFIC BUFF OBJECT) used by player: " + self + " Name: " + getName(self) + " Player Level: " + playerLevel + ". The collection system reports that the collectible object: " + getName(collectionItem) + " " + collectionItem + " was recieved by the player.");
|
|
buff.removeBuff(self, buffName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpBonusGeneralRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "buff.xpBonusGeneral");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpGrantedGeneralAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int playerLevel = getLevel(self);
|
|
if (playerLevel < 90)
|
|
{
|
|
int xpGranted = xp.grantUnmodifiedXPPercentageOfLevel(self, value);
|
|
prose_package pp = new prose_package();
|
|
prose.setStringId(pp, new string_id("collection", "reward_xp_amount"));
|
|
prose.setDI(pp, xpGranted);
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
else if (subtype.equals("tcg_xp_buff"))
|
|
{
|
|
obj_id collectionItem = collection.grantRandomCollectionItem(self, "datatables/loot/loot_items/collectible/magseal_loot.iff", "collections");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int xpGrantedGeneralRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int craftBonusAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float mod = 0.02f;
|
|
if (subtype.equals("artisan"))
|
|
{
|
|
mod = 0.01f;
|
|
}
|
|
int intValue = (int)value;
|
|
utils.setScriptVar(self, "buff.craftBonus.types", intValue);
|
|
utils.setScriptVar(self, "buff.craftBonus.value", mod);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int craftBonusRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "buff.craftBonus");
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int forcePowerAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
addSkillModModifier(self, effectName, subtype, (int)value, duration, false, false);
|
|
messageTo(self, "handleRecalculateForce", null, 0.1f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int forcePowerRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
combat.removeCombatBuffEffect(self, effectName);
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
jedi.recalculateForcePower(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int saberInterceptAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, combat.DAMAGE_REDIRECT, caster);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int saberInterceptRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, combat.DAMAGE_REDIRECT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void procBuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (!utils.hasScriptVar(self, "procBuffEffects"))
|
|
{
|
|
String[] procBuffEffects = new String[1];
|
|
procBuffEffects[0] = effectName;
|
|
utils.setScriptVar(self, "procBuffEffects", procBuffEffects);
|
|
}
|
|
else
|
|
{
|
|
Vector procBuffEffects = utils.getResizeableStringArrayScriptVar(self, "procBuffEffects");
|
|
if (utils.getElementPositionInArray(procBuffEffects, effectName) == -1)
|
|
{
|
|
procBuffEffects.addElement(effectName);
|
|
utils.setScriptVar(self, "procBuffEffects", procBuffEffects);
|
|
}
|
|
}
|
|
proc.buildCurrentProcList(self);
|
|
return;
|
|
}
|
|
public void procBuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (utils.hasScriptVar(self, "procBuffEffects"))
|
|
{
|
|
Vector procBuffEffects = utils.getResizeableStringArrayScriptVar(self, "procBuffEffects");
|
|
procBuffEffects.removeElement(effectName);
|
|
if (procBuffEffects.size() < 1)
|
|
{
|
|
utils.removeScriptVar(self, "procBuffEffects");
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "procBuffEffects", procBuffEffects);
|
|
}
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
proc.buildCurrentProcList(self);
|
|
return;
|
|
}
|
|
public void reactiveBuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (!utils.hasScriptVar(self, "reacBuffEffects"))
|
|
{
|
|
String[] reacBuffEffects = new String[1];
|
|
reacBuffEffects[0] = effectName;
|
|
utils.setScriptVar(self, "reacBuffEffects", reacBuffEffects);
|
|
}
|
|
else
|
|
{
|
|
Vector reacBuffEffects = utils.getResizeableStringArrayScriptVar(self, "reacBuffEffects");
|
|
if (utils.getElementPositionInArray(reacBuffEffects, effectName) == -1)
|
|
{
|
|
reacBuffEffects.addElement(effectName);
|
|
utils.setScriptVar(self, "reacBuffEffects", reacBuffEffects);
|
|
}
|
|
}
|
|
proc.buildCurrentReacList(self);
|
|
return;
|
|
}
|
|
public void reactiveBuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (utils.hasScriptVar(self, "reacBuffEffects"))
|
|
{
|
|
Vector reacBuffEffects = utils.getResizeableStringArrayScriptVar(self, "reacBuffEffects");
|
|
reacBuffEffects.removeElement(effectName);
|
|
if (reacBuffEffects.size() < 1)
|
|
{
|
|
utils.removeScriptVar(self, "reacBuffEffects");
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "reacBuffEffects", reacBuffEffects);
|
|
}
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
proc.buildCurrentReacList(self);
|
|
return;
|
|
}
|
|
public int stanceAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.playStanceVisual(self, effectName);
|
|
if (subtype.equals("expertise_stance"))
|
|
{
|
|
int parryMod = (int)getSkillStatisticModifier(self, "expertise_stance_parry");
|
|
if (parryMod > 0)
|
|
{
|
|
skillAddBuffHandler(self, "stanceParry", "expertise_parry", duration, parryMod, "", null);
|
|
}
|
|
int evasionMod = (int)getSkillStatisticModifier(self, "expertise_stance_evasion");
|
|
if (evasionMod > 0)
|
|
{
|
|
skillAddBuffHandler(self, "stanceEvasion", "expertise_evasion_chance", duration, evasionMod, "", null);
|
|
}
|
|
int stanceConstitutionBonus = (int)getSkillStatisticModifier(self, "expertise_stance_constitution");
|
|
if (stanceConstitutionBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "stanceConstitution", "constitution_modified", duration, stanceConstitutionBonus, "", null);
|
|
}
|
|
int stanceSaberShackle = (int)getSkillStatisticModifier(self, "expertise_stance_saber_throw_snare_chance");
|
|
if (stanceSaberShackle == 25)
|
|
{
|
|
buff.applyBuff(self, self, "fs_saber_shackle_1");
|
|
}
|
|
else if (stanceSaberShackle == 50)
|
|
{
|
|
buff.applyBuff(self, self, "fs_saber_shackle_2");
|
|
}
|
|
else if (stanceSaberShackle == 75)
|
|
{
|
|
buff.applyBuff(self, self, "fs_saber_shackle_3");
|
|
}
|
|
else if (stanceSaberShackle == 100)
|
|
{
|
|
buff.applyBuff(self, self, "fs_saber_shackle_4");
|
|
}
|
|
int stanceSoothingAura = (int)getSkillStatisticModifier(self, "expertise_stance_healing_line_fs_heal");
|
|
if (stanceSoothingAura == 25)
|
|
{
|
|
buff.applyBuff(self, self, "fs_soothing_aura_1");
|
|
}
|
|
else if (stanceSoothingAura == 50)
|
|
{
|
|
buff.applyBuff(self, self, "fs_soothing_aura_2");
|
|
}
|
|
else if (stanceSoothingAura == 75)
|
|
{
|
|
buff.applyBuff(self, self, "fs_soothing_aura_3");
|
|
}
|
|
else if (stanceSoothingAura == 100)
|
|
{
|
|
buff.applyBuff(self, self, "fs_soothing_aura_4");
|
|
}
|
|
int stanceAnticipateAggression = (int)getSkillStatisticModifier(self, "expertise_stance_anticipate_aggression");
|
|
if (stanceAnticipateAggression == 4)
|
|
{
|
|
buff.applyBuff(self, self, "fs_anticipate_aggression_1");
|
|
}
|
|
else if (stanceAnticipateAggression == 8)
|
|
{
|
|
buff.applyBuff(self, self, "fs_anticipate_aggression_2");
|
|
}
|
|
int stanceAddToAction = (int)getSkillStatisticModifier(self, "expertise_stance_damage_add_to_action");
|
|
if (stanceAddToAction == 2)
|
|
{
|
|
buff.applyBuff(self, self, "fs_reactive_response_1");
|
|
}
|
|
else if (stanceAddToAction == 4)
|
|
{
|
|
buff.applyBuff(self, self, "fs_reactive_response_2");
|
|
}
|
|
int stanceForceClarity = (int)getSkillStatisticModifier(self, "expertise_stance_fs_force_clarity");
|
|
if (stanceForceClarity > 0)
|
|
{
|
|
addSkillModModifier(self, "expertise_fs_force_clarity_1_proc", "expertise_fs_force_clarity_1_proc", (int)stanceForceClarity, -1, false, true);
|
|
}
|
|
int stanceFlurryProc = (int)getSkillStatisticModifier(self, "expertise_stance_flurry_proc");
|
|
if (stanceFlurryProc > 0)
|
|
{
|
|
addSkillModModifier(self, "expertise_fs_flurry_charge_proc", "expertise_fs_flurry_charge_proc", (int)stanceFlurryProc, -1, false, true);
|
|
}
|
|
if (stanceForceClarity > 0 || stanceFlurryProc > 0)
|
|
{
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
}
|
|
int stancePerceptiveSentinel = (int)getSkillStatisticModifier(self, "expertise_stance_perceptive_sentinel");
|
|
if (stancePerceptiveSentinel == 1)
|
|
{
|
|
buff.applyBuff(self, self, "fs_perceptive_sentinel_1");
|
|
}
|
|
else if (stancePerceptiveSentinel == 2)
|
|
{
|
|
buff.applyBuff(self, self, "fs_perceptive_sentinel_2");
|
|
}
|
|
else if (stancePerceptiveSentinel == 3)
|
|
{
|
|
buff.applyBuff(self, self, "fs_perceptive_sentinel_3");
|
|
}
|
|
else if (stancePerceptiveSentinel == 4)
|
|
{
|
|
buff.applyBuff(self, self, "fs_perceptive_sentinel_4");
|
|
}
|
|
}
|
|
if (subtype.equals("expertise_focus"))
|
|
{
|
|
int critMod = (int)getSkillStatisticModifier(self, "expertise_focus_critical_buff_line");
|
|
utils.setScriptVar(self, "expertise_stance_critical", critMod);
|
|
float stanceStaminaBonus = getSkillStatisticModifier(self, "expertise_focus_stamina");
|
|
float stanceSrengthBonus = getSkillStatisticModifier(self, "expertise_focus_strength");
|
|
if (stanceStaminaBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "focusStamina", "stamina_modified", duration, stanceStaminaBonus, "", null);
|
|
}
|
|
if (stanceSrengthBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "focusStrength", "strength_modified", duration, stanceSrengthBonus, "", null);
|
|
}
|
|
int focusDamageIncrease = (int)getSkillStatisticModifier(self, "expertise_focus_damage_increase");
|
|
if (focusDamageIncrease == 2)
|
|
{
|
|
buff.applyBuff(self, self, "fs_ruthless_precision_1");
|
|
}
|
|
else if (focusDamageIncrease == 4)
|
|
{
|
|
buff.applyBuff(self, self, "fs_ruthless_precision_2");
|
|
}
|
|
else if (focusDamageIncrease == 6)
|
|
{
|
|
buff.applyBuff(self, self, "fs_ruthless_precision_3");
|
|
}
|
|
else if (focusDamageIncrease == 8)
|
|
{
|
|
buff.applyBuff(self, self, "fs_ruthless_precision_4");
|
|
}
|
|
int focusActionGain = (int)getSkillStatisticModifier(self, "expertise_focus_damage_add_to_action");
|
|
if (focusActionGain == 2)
|
|
{
|
|
buff.applyBuff(self, self, "fs_tempt_hatred_1");
|
|
}
|
|
else if (focusActionGain == 4)
|
|
{
|
|
buff.applyBuff(self, self, "fs_tempt_hatred_2");
|
|
}
|
|
int wracking_energy = getEnhancedSkillStatisticModifierUncapped(self, "expertise_fs_dm_armor_bypass");
|
|
if (wracking_energy > 0)
|
|
{
|
|
buff.applyBuff(self, self, "fs_wracking_energy_" + wracking_energy / 25);
|
|
}
|
|
int imp_drain = getEnhancedSkillStatisticModifierUncapped(self, "expertise_fs_imp_drain");
|
|
if (imp_drain == 33)
|
|
{
|
|
buff.applyBuff(self, self, "fs_imp_force_drain_1");
|
|
}
|
|
else if (imp_drain == 66)
|
|
{
|
|
buff.applyBuff(self, self, "fs_imp_force_drain_2");
|
|
}
|
|
else if (imp_drain == 100)
|
|
{
|
|
buff.applyBuff(self, self, "fs_imp_force_drain_3");
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int stanceRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
utils.removeScriptVarTree(self, "expertise_stance_critical");
|
|
removeAttribOrSkillModModifier(self, "stanceParry");
|
|
removeAttribOrSkillModModifier(self, "stanceEvasion");
|
|
removeAttribOrSkillModModifier(self, "stanceConstitution");
|
|
removeAttribOrSkillModModifier(self, "focusStamina");
|
|
removeAttribOrSkillModModifier(self, "focusStrength");
|
|
messageTo(self, "recalcPools", null, 1, false);
|
|
buff.removeBuff(self, "jedi_reflect_flurry");
|
|
buff.removeBuff(self, "fs_saber_shackle_1");
|
|
buff.removeBuff(self, "fs_saber_shackle_2");
|
|
buff.removeBuff(self, "fs_saber_shackle_3");
|
|
buff.removeBuff(self, "fs_saber_shackle_4");
|
|
buff.removeBuff(self, "fs_soothing_aura_1");
|
|
buff.removeBuff(self, "fs_soothing_aura_2");
|
|
buff.removeBuff(self, "fs_soothing_aura_3");
|
|
buff.removeBuff(self, "fs_soothing_aura_4");
|
|
buff.removeBuff(self, "fs_anticipate_aggression_1");
|
|
buff.removeBuff(self, "fs_anticipate_aggression_2");
|
|
buff.removeBuff(self, "fs_reactive_response_1");
|
|
buff.removeBuff(self, "fs_reactive_response_2");
|
|
buff.removeBuff(self, "fs_perceptive_sentinel_1");
|
|
buff.removeBuff(self, "fs_perceptive_sentinel_2");
|
|
buff.removeBuff(self, "fs_perceptive_sentinel_3");
|
|
buff.removeBuff(self, "fs_perceptive_sentinel_4");
|
|
buff.removeBuff(self, "fs_saber_reflect");
|
|
buff.removeBuff(self, "fs_ruthless_precision_1");
|
|
buff.removeBuff(self, "fs_ruthless_precision_2");
|
|
buff.removeBuff(self, "fs_ruthless_precision_3");
|
|
buff.removeBuff(self, "fs_ruthless_precision_4");
|
|
buff.removeBuff(self, "fs_tempt_hatred_1");
|
|
buff.removeBuff(self, "fs_tempt_hatred_2");
|
|
buff.removeBuff(self, "fs_wracking_energy_1");
|
|
buff.removeBuff(self, "fs_wracking_energy_2");
|
|
buff.removeBuff(self, "fs_wracking_energy_3");
|
|
buff.removeBuff(self, "fs_wracking_energy_4");
|
|
buff.removeBuff(self, "fs_imp_force_drain_1");
|
|
buff.removeBuff(self, "fs_imp_force_drain_2");
|
|
buff.removeBuff(self, "fs_imp_force_drain_3");
|
|
buff.removeBuff(self, "fs_imp_force_drain_4");
|
|
removeAttribOrSkillModModifier(self, "expertise_fs_force_clarity_1_proc");
|
|
removeAttribOrSkillModModifier(self, "expertise_fs_flurry_charge_proc");
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
combat.removeCombatBuffEffect(self, effectName);
|
|
utils.removeScriptVarTree(self, "stance." + subtype);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dancePartyAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String[] danceList =
|
|
{
|
|
"poplock",
|
|
"poplock2",
|
|
"popular",
|
|
"popular2",
|
|
"bunduki",
|
|
"bunduki2",
|
|
"breakdance",
|
|
"breakdance2",
|
|
"peiyi",
|
|
"freestyle",
|
|
"freestyle2",
|
|
"jazzy",
|
|
"jazzy2"
|
|
};
|
|
String randomDance = danceList[rand(0, danceList.length - 1)];
|
|
performance.effect(self, performance.PERFORMANCE_EFFECT_DANCE_FLOOR, 1);
|
|
obj_id[] everyone = getPlayerCreaturesInRange(getLocation(self), 20.0f);
|
|
for (obj_id obj_id : everyone) {
|
|
if (!combat.isInCombat(obj_id)) {
|
|
utils.setScriptVar(obj_id, "event.dance_party", 1);
|
|
performance.startDance(obj_id, randomDance);
|
|
performance.changeDance(obj_id, randomDance);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dancePartyRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int missByLuckAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int luckPercentage = getSkillStatisticModifier(caster, "expertise_miss_by_luck");
|
|
float missIncrease = luckPercentage + 4.0f;
|
|
int luckMod = getEnhancedSkillStatisticModifierUncapped(caster, "luck");
|
|
float luck = (float)getEnhancedSkillStatisticModifierUncapped(caster, "luck_modified") + luckMod;
|
|
float missAmount = luck * (missIncrease / 100.0f);
|
|
skillAddBuffHandler(self, "missByLuck", "combat_all_attack_miss", duration, missAmount, "", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int missByLuckRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "missByLuck");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int hitByLuckAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int luckPercentage = getSkillStatisticModifier(caster, "expertise_hit_by_luck");
|
|
float hitIncrease = luckPercentage + 4.0f;
|
|
int luckMod = getEnhancedSkillStatisticModifierUncapped(caster, "luck");
|
|
float luck = (float)getEnhancedSkillStatisticModifierUncapped(caster, "luck_modified") + luckMod;
|
|
float hitAmount = luck * (hitIncrease / 100.0f);
|
|
skillAddBuffHandler(self, "hitByLuck", "hit_table_defender_add_hit", duration, hitAmount, "", null);
|
|
luckPercentage = getSkillStatisticModifier(caster, "expertise_increase_hit_by_luck");
|
|
hitAmount = luck * (luckPercentage / 100.0f);
|
|
skillAddBuffHandler(self, "increaseHitByLuck", "hit_table_defender_add_hit", duration, hitAmount, "", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int hitByLuckRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "hitByLuck");
|
|
removeAttribOrSkillModModifier(self, "increaseHitByLuck");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int pistolWhipAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int pistolWhipStun = getSkillStatisticModifier(caster, "expertise_stun_line_sm_pistol_whip");
|
|
if (pistolWhipStun > 0 && rand(0, 99) < pistolWhipStun)
|
|
{
|
|
movementAddBuffHandler(self, effectName, subtype, duration, value, buffName, caster);
|
|
}
|
|
else
|
|
{
|
|
buff.removeBuff(self, "sm_pistol_whip");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int pistolWhipRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
movementRemoveBuffHandler(self, effectName, subtype, duration, value, buffName, caster);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int slyLieAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int dodgeBonus = (int)getSkillStatisticModifier(self, "expertise_half_truth");
|
|
if (dodgeBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "slyLieDodge", "combat_dodge", duration, dodgeBonus, "", null);
|
|
}
|
|
int strikethroughBonus = (int)getSkillStatisticModifier(self, "expertise_innocent_cargo");
|
|
if (strikethroughBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "innocentCargoStrikethrough", "combat_strikethrough_chance", duration, strikethroughBonus, "", null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int slyLieRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
removeAttribOrSkillModModifier(self, "slyLieDodge");
|
|
removeAttribOrSkillModModifier(self, "innocentCargoStrikethrough");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fastTalkAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int agilityBonus = (int)getSkillStatisticModifier(self, "expertise_fake_id");
|
|
if (agilityBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "fastTalkAgility", "agility_modified", duration, agilityBonus, "", null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fastTalkRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
removeAttribOrSkillModModifier(self, "fastTalkAgility");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int pvpAuraBuffSelfAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
attachScript(self, "player.gcw.pvp_aura_buff_controller");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int pvpAuraBuffSelfRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
detachScript(self, "player.gcw.pvp_aura_buff_controller");
|
|
removeObjVar(self, "pvp_aura_buff.faction");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int nextHitCritAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "nextCritHit", 1);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int nextHitCritRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "nextCritHit");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critDoubleDamageAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "critDoubleDamage", 1);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critDoubleDamageRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "critDoubleDamage");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critRootAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "critRoot", 1);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critRootRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "critRoot");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critOnceAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
Vector effectNames = new Vector();
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (utils.hasScriptVar(self, "critRemoveBuffNames"))
|
|
{
|
|
effectNames = utils.getResizeableStringArrayScriptVar(self, "critRemoveBuffNames");
|
|
}
|
|
utils.addElement(effectNames, effectName);
|
|
utils.setScriptVar(self, "critRemoveBuffNames", effectNames);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int critOnceRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
Vector effectNames = new Vector();
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
if (utils.hasScriptVar(self, "critRemoveBuffNames"))
|
|
{
|
|
effectNames = utils.getResizeableStringArrayScriptVar(self, "critRemoveBuffNames");
|
|
}
|
|
int i = 0;
|
|
while (i < effectNames.size())
|
|
{
|
|
if (((String)effectNames.get(i)).equals(effectName))
|
|
{
|
|
utils.removeElementAt(effectNames, i);
|
|
}
|
|
else
|
|
{
|
|
i++;
|
|
}
|
|
}
|
|
if (effectNames.size() == 0)
|
|
{
|
|
utils.removeScriptVar(self, "critRemoveBuffNames");
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "critRemoveBuffNames", effectNames);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int junkDealerAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id player = utils.getObjIdScriptVar(self, "junkDealerBuffer");
|
|
utils.removeScriptVar(self, "junkDealerBuffer");
|
|
if (!isIdValid(player))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
int precisionBonus = (int)getSkillStatisticModifier(player, "expertise_buff_under_the_counter");
|
|
if (precisionBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "junkDealerPrecision", "precision_modified", duration, precisionBonus, "", null);
|
|
}
|
|
int damageDecrease = (int)getSkillStatisticModifier(player, "expertise_buff_best_deal_ever");
|
|
if (damageDecrease > 0)
|
|
{
|
|
skillAddBuffHandler(self, "junkDealerDamageDecrease", "damage_decrease_percentage", duration, damageDecrease, "", null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int junkDealerRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "junkDealerPrecision");
|
|
removeAttribOrSkillModModifier(self, "junkDealerDamageDecrease");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoSnareBonusAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!isIdValid(self))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
String[] modifiers = movement.getAllModifiers(self);
|
|
boolean snared = false;
|
|
if (modifiers != null)
|
|
{
|
|
for (String modifier : modifiers) {
|
|
if (movement.getType(modifier) == movement.MT_SNARE) {
|
|
snared = true;
|
|
}
|
|
}
|
|
}
|
|
if (!snared)
|
|
{
|
|
buff.removeBuff(self, "co_youll_regret_that");
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
int innateArmorBonus = (int)getSkillStatisticModifier(self, "expertise_youll_regret_that");
|
|
if (innateArmorBonus > 0)
|
|
{
|
|
skillAddBuffHandler(self, "commandoInnateArmorBonus", "expertise_innate_protection_all", duration, innateArmorBonus, "", null);
|
|
messageTo(self, "recalcArmor", null, 1.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoSnareBonusRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "commandoInnateArmorBonus");
|
|
messageTo(self, "recalcArmor", null, 0.25f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoFlashBangAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
obj_id owner = utils.getObjIdScriptVar(self, "buffOwner." + getStringCrc(effectName.toLowerCase()));
|
|
if (!isIdValid(owner))
|
|
{
|
|
buff.removeBuff(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int precisionPenalty = (int)getSkillStatisticModifier(owner, "expertise_co_flash_bang");
|
|
if (precisionPenalty > 0)
|
|
{
|
|
skillAddBuffHandler(self, "commandoFlashBang", "precision_modified", duration, (precisionPenalty * -1), "", null);
|
|
}
|
|
else
|
|
{
|
|
buff.removeBuff(self, effectName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoFlashBangRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "commandoFlashBang");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoMuscleSpasmAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
obj_id owner = utils.getObjIdScriptVar(self, "buffOwner." + getStringCrc(effectName.toLowerCase()));
|
|
if (!isIdValid(owner))
|
|
{
|
|
buff.removeBuff(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int glancePenalty = (int)getSkillStatisticModifier(owner, "expertise_co_muscle_spasm");
|
|
if (glancePenalty > 0)
|
|
{
|
|
skillAddBuffHandler(self, "commandoMuscleSpasm", "glancing_blow_vulnerable", duration, glancePenalty, "", null);
|
|
}
|
|
else
|
|
{
|
|
buff.removeBuff(self, effectName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoMuscleSpasmRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "commandoMuscleSpasm");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoRiddleArmorAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String tempEffectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
obj_id owner = utils.getObjIdScriptVar(self, "buffOwner." + getStringCrc(tempEffectName.toLowerCase()));
|
|
if (!isIdValid(owner))
|
|
{
|
|
buff.removeBuff(self, tempEffectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
value -= getSkillStatisticModifier(owner, "expertise_riddle_armor");
|
|
skillAddBuffHandler(self, effectName, "expertise_innate_protection_all", duration, value, "", null);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandoRiddleArmorRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
messageTo(self, "recalcArmor", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int radarInvisAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
setVisibleOnMapAndRadar(self, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int radarInvisRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
setVisibleOnMapAndRadar(self, true);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onTargetAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("expertise_on_target"))
|
|
{
|
|
int posSecuredImproved = (int)getSkillStatisticModifier(self, "expertise_action_line_co_imp_pos_sec");
|
|
if (posSecuredImproved == 10)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_action_1");
|
|
}
|
|
else if (posSecuredImproved == 20)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_action_2");
|
|
}
|
|
else if (posSecuredImproved == 30)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_action_3");
|
|
}
|
|
int posSecuredBurstFire = (int)getSkillStatisticModifier(self, "expertise_co_pos_secured_line_burst_fire_proc");
|
|
if (posSecuredBurstFire == 10)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_proc_1");
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
}
|
|
else if (posSecuredBurstFire == 20)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_proc_2");
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
}
|
|
int posSecuredOnTarget = (int)getSkillStatisticModifier(self, "expertise_co_pos_secured_line_critical");
|
|
if (posSecuredOnTarget == 2)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_critical_1");
|
|
}
|
|
else if (posSecuredOnTarget == 4)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_critical_2");
|
|
}
|
|
else if (posSecuredOnTarget == 6)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_critical_3");
|
|
}
|
|
else if (posSecuredOnTarget == 8)
|
|
{
|
|
buff.applyBuff(self, self, "co_pos_sec_critical_4");
|
|
}
|
|
int posSecuredBoO = (int)getSkillStatisticModifier(self, "expertise_co_pos_secured_line_armor");
|
|
if (posSecuredBoO == 1000)
|
|
{
|
|
buff.applyBuff(self, self, "co_base_of_operations");
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onTargetRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasSkillModModifier(self, effectName))
|
|
{
|
|
removeAttribOrSkillModModifier(self, effectName);
|
|
}
|
|
buff.removeBuff(self, "co_pos_sec_action_1");
|
|
buff.removeBuff(self, "co_pos_sec_action_2");
|
|
buff.removeBuff(self, "co_pos_sec_action_3");
|
|
buff.removeBuff(self, "co_pos_sec_proc_1");
|
|
buff.removeBuff(self, "co_pos_sec_proc_2");
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
buff.removeBuff(self, "co_pos_sec_critical_1");
|
|
buff.removeBuff(self, "co_pos_sec_critical_2");
|
|
buff.removeBuff(self, "co_pos_sec_critical_3");
|
|
buff.removeBuff(self, "co_pos_sec_critical_4");
|
|
if (buff.hasBuff(self, "co_base_of_operations"))
|
|
{
|
|
obj_id baseOwner = buff.getBuffOwner(self, "co_base_of_operations");
|
|
if ((baseOwner == self) || !isIdValid(baseOwner))
|
|
{
|
|
buff.removeBuff(self, "co_base_of_operations");
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int immunityAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String prefixBuilder = "";
|
|
int wholeValue = (int)value;
|
|
switch (subtype) {
|
|
case "dot_immunity":
|
|
if (wholeValue == IMMUNITY_TO_POISON) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_POISON);
|
|
if (dot.removeDotsOfType(self, dot.DOT_POISON)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "poisoned", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.poison";
|
|
} else if (wholeValue == IMMUNITY_TO_DISEASE) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_DISEASE);
|
|
if (dot.removeDotsOfType(self, dot.DOT_DISEASE)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "diseased", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.disease";
|
|
} else if (wholeValue == IMMUNITY_TO_FIRE) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_FIRE);
|
|
if (dot.removeDotsOfType(self, dot.DOT_FIRE)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "on fire", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.fire";
|
|
} else if (wholeValue == IMMUNITY_TO_BLEEDING) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_BLEEDING);
|
|
if (dot.removeDotsOfType(self, dot.DOT_BLEEDING)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "bleeding", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.bleeding";
|
|
} else if (wholeValue == IMMUNITY_TO_ACID) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_ACID);
|
|
if (dot.removeDotsOfType(self, dot.DOT_ACID)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "acid splattered", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.acid";
|
|
} else if (wholeValue == IMMUNITY_TO_ENERGY) {
|
|
buff.performBuffDotImmunity(self, buff.DOT_ENERGY);
|
|
if (dot.removeDotsOfType(self, dot.DOT_ENERGY)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "electrified", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.energy";
|
|
} else if (wholeValue == IMMUNITY_TO_ALL_DOTS) {
|
|
buff.performBuffDotImmunity(self, "all");
|
|
if (dot.removeDotsOfType(self, dot.DOT_POISON)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "poisoned", cureDotMsg);
|
|
}
|
|
if (dot.removeDotsOfType(self, dot.DOT_DISEASE)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "diseased", cureDotMsg);
|
|
}
|
|
if (dot.removeDotsOfType(self, dot.DOT_FIRE)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "on fire", cureDotMsg);
|
|
}
|
|
if (dot.removeDotsOfType(self, dot.DOT_BLEEDING)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "bleeding", cureDotMsg);
|
|
}
|
|
if (dot.removeDotsOfType(self, dot.DOT_ACID)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "acid splattered", cureDotMsg);
|
|
}
|
|
if (dot.removeDotsOfType(self, dot.DOT_ENERGY)) {
|
|
string_id cureDotMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "electrified", cureDotMsg);
|
|
}
|
|
prefixBuilder = "dot.all";
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
case "movement_immunity":
|
|
if (wholeValue == movement.MT_SNARE) {
|
|
if (removeAllModifiersOfType(self, movement.MT_SNARE)) {
|
|
string_id cureMovementMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "snared", cureMovementMsg);
|
|
}
|
|
prefixBuilder = "movement.snare";
|
|
} else if (wholeValue == movement.MT_ROOT) {
|
|
if (removeAllModifiersOfType(self, movement.MT_ROOT)) {
|
|
string_id cureMovementMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "rooted", cureMovementMsg);
|
|
}
|
|
prefixBuilder = "movement.root";
|
|
} else if (wholeValue == movement.MT_ALL) {
|
|
removeAllModifiersOfType(self, movement.MT_SNARE);
|
|
removeAllModifiersOfType(self, movement.MT_ROOT);
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
case "state_immunity":
|
|
if (wholeValue == buff.STATE_STUNNED) {
|
|
if (buff.removeAllBuffsOfStateType(self, buff.STATE_STUNNED)) {
|
|
string_id cureStateMsg = new string_id("spam", "cure_dot");
|
|
messageDetrimentalRemoved(self, "stunned", cureStateMsg);
|
|
}
|
|
prefixBuilder = "state.stun";
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
case "debuff_purge": {
|
|
int numToPurge = wholeValue;
|
|
int[] allBuffs = buff.getAllBuffs(self);
|
|
for (int allBuff : allBuffs) {
|
|
String curBuff = buff.getBuffNameFromCrc(allBuff);
|
|
if (numToPurge < 1) {
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (buff.isDebuff(curBuff) && !buff.isDotIconOnlyBuff(curBuff) && buff.canBeDispelled(curBuff) && !buff.isBuffDot(curBuff)) {
|
|
long stack = buff.getBuffStackCount(self, curBuff);
|
|
if (stack > 1 && numToPurge > 1) {
|
|
if (stack > numToPurge) {
|
|
buff.decrementBuffStack(self, curBuff, numToPurge);
|
|
return SCRIPT_CONTINUE;
|
|
} else {
|
|
buff.removeBuff(self, curBuff);
|
|
numToPurge -= stack;
|
|
}
|
|
} else {
|
|
buff.removeBuff(self, curBuff);
|
|
numToPurge--;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
case "buff_purge": {
|
|
int numToPurge = wholeValue;
|
|
int[] allBuffs = buff.getAllBuffs(self);
|
|
for (int allBuff : allBuffs) {
|
|
String curBuff = buff.getBuffNameFromCrc(allBuff);
|
|
if (numToPurge < 1) {
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!buff.isDebuff(curBuff) && !buff.isDotIconOnlyBuff(curBuff) && buff.canBeDispelled(curBuff)) {
|
|
buff.removeBuff(self, curBuff);
|
|
numToPurge--;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (!prefixBuilder.equals(""))
|
|
{
|
|
utils.setScriptVar(self, "immunity." + prefixBuilder, wholeValue);
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotReductionAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("dot_reduction_acid") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_ACID, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ACID);
|
|
}
|
|
if (subtype.equals("dot_reduction_heat") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_FIRE, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_FIRE);
|
|
}
|
|
if (subtype.equals("dot_reduction_cold") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_COLD, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_COLD);
|
|
}
|
|
if (subtype.equals("dot_reduction_electrical") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_ELECTRICITY, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ELECTRICITY);
|
|
}
|
|
if (subtype.equals("dot_reduction_kinetic") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_KINETIC, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_KINETIC);
|
|
}
|
|
if (subtype.equals("dot_reduction_energy") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_elemental"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_ENERGY, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ENERGY);
|
|
}
|
|
if (subtype.equals("dot_reduction_poison") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_natural"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_POISON, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_POISON);
|
|
}
|
|
if (subtype.equals("dot_reduction_disease") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_natural"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_DISEASE, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_DISEASE);
|
|
}
|
|
if (subtype.equals("dot_reduction_bleeding") || subtype.equals("dot_reduction_all") || subtype.equals("dot_reduction_natural"))
|
|
{
|
|
buff.reduceBuffDotStackCount(self, buff.DOT_BLEEDING, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_BLEEDING);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotReductionRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotDivisorAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("dot_divisor_acid") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_ACID, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ACID);
|
|
}
|
|
if (subtype.equals("dot_divisor_heat") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_FIRE, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_FIRE);
|
|
}
|
|
if (subtype.equals("dot_divisor_cold") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_COLD, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_COLD);
|
|
}
|
|
if (subtype.equals("dot_rdivisor_electrical") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_ELECTRICITY, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ELECTRICITY);
|
|
}
|
|
if (subtype.equals("dot_divisor_kinetic") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_KINETIC, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_KINETIC);
|
|
}
|
|
if (subtype.equals("dot_divisor_energy") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_elemental"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_ENERGY, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_ENERGY);
|
|
}
|
|
if (subtype.equals("dot_divisor_poison") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_natural"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_POISON, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_POISON);
|
|
}
|
|
if (subtype.equals("dot_divisor_disease") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_natural"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_DISEASE, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_DISEASE);
|
|
}
|
|
if (subtype.equals("dot_divisor_bleeding") || subtype.equals("dot_divisor_all") || subtype.equals("dot_divisor_natural"))
|
|
{
|
|
buff.divideBuffDotStackCount(self, buff.DOT_BLEEDING, (int)value);
|
|
dot.removeDotsOfType(self, dot.DOT_BLEEDING);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotDivisorRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int immunityRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String prefixBuilder = "";
|
|
int wholeValue = (int)value;
|
|
switch (subtype) {
|
|
case "dot_immunity":
|
|
if (wholeValue == IMMUNITY_TO_POISON) {
|
|
prefixBuilder = "dot.poison";
|
|
} else if (wholeValue == IMMUNITY_TO_FIRE) {
|
|
prefixBuilder = "dot.fire";
|
|
} else if (wholeValue == IMMUNITY_TO_DISEASE) {
|
|
prefixBuilder = "dot.disease";
|
|
} else if (wholeValue == IMMUNITY_TO_BLEEDING) {
|
|
prefixBuilder = "dot.bleeding";
|
|
} else if (wholeValue == IMMUNITY_TO_ALL_DOTS) {
|
|
prefixBuilder = "dot.all";
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
case "movement_immunity":
|
|
if (wholeValue == movement.MT_SNARE) {
|
|
prefixBuilder = "movement.snare";
|
|
} else if (wholeValue == movement.MT_ROOT) {
|
|
prefixBuilder = "movement.root";
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
case "state_immunity":
|
|
if (wholeValue == buff.STATE_STUNNED) {
|
|
prefixBuilder = "state.stun";
|
|
} else {
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
break;
|
|
default:
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
if (!prefixBuilder.equals(""))
|
|
{
|
|
utils.removeScriptVarTree(self, "immunity." + prefixBuilder);
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int expertiseImmunityAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!buff.isInStance(self))
|
|
{
|
|
buff.removeBuff(self, "fs_sh_0");
|
|
buff.removeBuff(self, "fs_sh_1");
|
|
buff.removeBuff(self, "fs_sh_2");
|
|
buff.removeBuff(self, "fs_sh_3");
|
|
buff.removeBuff(self, "fs_dot_immunity_recourse");
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
int wholeValue = (int)value;
|
|
int immunityType = (int)getSkillStatisticModifier(self, subtype + wholeValue);
|
|
if (immunityType != 0)
|
|
{
|
|
return immunityAddBuffHandler(self, effectName, subtype, duration, value, "", null);
|
|
}
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
public int expertiseImmunityRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return immunityRemoveBuffHandler(self, effectName, subtype, duration, value, "", null);
|
|
}
|
|
public int expertiseChannelActionHealAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "buff_handler.lastForsakeFearPulse", getGameTime());
|
|
utils.setScriptVar(self, "buff_handler.totalForsakeFearPulses", 0);
|
|
utils.removeScriptVar(self, "buff_handler.channelForsakeFearCancelled");
|
|
utils.removeScriptVar(self, "buff_handler.channelForsakeFearSuccessful");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int expertiseChannelActionHealRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int cancelled = utils.getIntScriptVar(self, "buff_handler.channelForsakeFearCancelled");
|
|
int successful = utils.getIntScriptVar(self, "buff_handler.channelForsakeFearSuccessful");
|
|
if (cancelled == 0 && successful == 1)
|
|
{
|
|
channelForsakeFear(self, effectName, true);
|
|
}
|
|
utils.removeScriptVar(self, "buff_handler.channelForsakeFearCancelled");
|
|
utils.removeScriptVar(self, "buff_handler.totalForsakeFearPulses");
|
|
utils.removeScriptVar(self, "buff_handler.lastForsakeFearPulse");
|
|
utils.removeScriptVar(self, "buff_handler.channelForsakeFearSuccessful");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onIncapHealAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "buff_handler." + subtype, value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onIncapHealRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "buff_handler." + subtype);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int healEffectAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("healing_action"))
|
|
{
|
|
healing.healDamage(self, ACTION, (int)value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if (subtype.equals("healing_health"))
|
|
{
|
|
healing.healDamage(caster, self, HEALTH, (int)value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int healEffectRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int buildabuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, "performance.buildabuff.buffComponentKeys") || !utils.hasScriptVar(self, "performance.buildabuff.buffComponentValues"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String[] buffComponentKeys = utils.getStringArrayScriptVar(self, "performance.buildabuff.buffComponentKeys");
|
|
int[] buffComponentValues = utils.getIntArrayScriptVar(self, "performance.buildabuff.buffComponentValues");
|
|
obj_id bufferId = utils.getObjIdScriptVar(self, "performance.buildabuff.bufferId");
|
|
|
|
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Entered BuildABuffAdd Handler, dumping info...");
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "BufferId: " + bufferId + " IsValid: " + isIdValid(bufferId) + " Exists: " + exists(bufferId) + " isInternalDecay: " + utils.hasScriptVar(self, "buffDecay"));
|
|
for (int i = 0; i < buffComponentKeys.length; ++i)
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "BuffComponentKey[" + i + "] = " + buffComponentKeys[i]);
|
|
}
|
|
for (int i = 0; i < buffComponentValues.length; ++i)
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "BuffComponentValues[" + i + "] = " + buffComponentValues[i]);
|
|
}
|
|
}
|
|
|
|
boolean internalDecay = false;
|
|
if (utils.hasScriptVar(self, "buffDecay"))
|
|
{
|
|
internalDecay = true;
|
|
utils.removeScriptVar(self, "buffDecay");
|
|
}
|
|
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Internal Decay = " + internalDecay);
|
|
|
|
int improv = 0;
|
|
if (isIdValid(bufferId) && exists(bufferId))
|
|
{
|
|
improv = (int)getSkillStatisticModifier(bufferId, "expertise_en_improv");
|
|
}
|
|
if (internalDecay == true)
|
|
{
|
|
if (utils.hasScriptVar(self, "decayImprov"))
|
|
{
|
|
improv = utils.getIntScriptVar(self, "decayImprov");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "decayImprov", improv);
|
|
}
|
|
int improvDance = 0;
|
|
if (improv == 1 && isIdValid(bufferId) && exists(bufferId))
|
|
{
|
|
if (!camping.isInEntertainmentCamp(bufferId))
|
|
{
|
|
location loc = getLocation(bufferId);
|
|
if (isIdValid(loc.cell))
|
|
{
|
|
obj_id building = getTopMostContainer(loc.cell);
|
|
if (!hasObjVar(building, "healing.canhealshock") && !hasObjVar(loc.cell, "healing.canhealshock"))
|
|
{
|
|
region[] regs = getRegionsWithGeographicalAtPoint(getLocation(bufferId), regions.GEO_THEATER);
|
|
if (regs == null || regs.length == 0)
|
|
{
|
|
improvDance = 1;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (internalDecay == true)
|
|
{
|
|
if (utils.hasScriptVar(self, "decayImprovDance"))
|
|
{
|
|
improvDance = utils.getIntScriptVar(self, "decayImprovDance");
|
|
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Using stored ImprovDance: " + improvDance);
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
utils.setScriptVar(self, "decayImprovDance", improvDance);
|
|
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Storing improvDance: " + improvDance);
|
|
|
|
}
|
|
int actualPointsToSpend = 8;
|
|
if (isIdValid(bufferId) && exists(bufferId))
|
|
{
|
|
actualPointsToSpend += getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_inspire_base_point_increase");
|
|
}
|
|
int attemptingToSpendPoints = 0;
|
|
for (int i = 0; i < buffComponentKeys.length; i++)
|
|
{
|
|
if (internalDecay == true)
|
|
{
|
|
break;
|
|
}
|
|
dictionary buffData = dataTableGetRow(DATATABLE_BUFF_BUILDER, buffComponentKeys[i]);
|
|
int cost = buffData.getInt("COST") * buffComponentValues[i];
|
|
attemptingToSpendPoints += cost;
|
|
if (attemptingToSpendPoints > actualPointsToSpend && internalDecay == false)
|
|
{
|
|
sendSystemMessage(bufferId, "ERROR: Invalid data. Discrepancy logs generated.", null);
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Player (" + getName(bufferId) + " : " + bufferId + ") has tried to spend more points on inspiration buffs then they have (" + attemptingToSpendPoints + ")! The buff failed.");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (buffComponentKeys.length == buffComponentValues.length && buffComponentKeys.length > 0 && buffComponentValues.length > 0)
|
|
{
|
|
for (int i = 0; i < buffComponentKeys.length; i++)
|
|
{
|
|
dictionary buffData = dataTableGetRow(DATATABLE_BUFF_BUILDER, buffComponentKeys[i]);
|
|
String effect = buffData.getString("AFFECTS");
|
|
String category = buffData.getString("CATEGORY");
|
|
int effectAmount = buffData.getInt("AFFECT_AMOUNT");
|
|
int maxTimes = buffData.getInt("MAX_TIMES_APPLIED");
|
|
if (buffComponentValues[i] > maxTimes)
|
|
{
|
|
if (internalDecay == false)
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Player (" + getName(bufferId) + " : " + bufferId + ") has passed an out of bounds build-a-buff value (" + buffComponentValues[i] + ") which has a cap of (" + maxTimes + "). HAX!");
|
|
sendSystemMessage(bufferId, "ERROR: Capping invalid buff values. Discrepancy logs generated.", null);
|
|
}
|
|
buffComponentValues[i] = maxTimes;
|
|
}
|
|
float buffValue = effectAmount * buffComponentValues[i];
|
|
if (improvDance == 1)
|
|
{
|
|
buffValue = (buffValue * 0.2f);
|
|
}
|
|
switch (category) {
|
|
case "attributes":
|
|
case "resistances":
|
|
case "combat":
|
|
switch (category) {
|
|
case "attributes":
|
|
float attribModifier = 0.0f;
|
|
if (isIdValid(bufferId) && exists(bufferId)) {
|
|
attribModifier = (float) (getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_inspire_attrib_increase") / 100.0f);
|
|
}
|
|
if (internalDecay == true) {
|
|
if (utils.hasScriptVar(self, "decayAttribMod")) {
|
|
attribModifier = utils.getFloatScriptVar(self, "decayAttribMod");
|
|
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Using stored attribMod: " + attribModifier);
|
|
|
|
}
|
|
} else {
|
|
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Storing attribMod: " + attribModifier);
|
|
|
|
utils.setScriptVar(self, "decayAttribMod", attribModifier);
|
|
}
|
|
buffValue *= 1.0f + attribModifier;
|
|
break;
|
|
case "resistances":
|
|
float resistModifier = 0.0f;
|
|
if (isIdValid(bufferId) && exists(bufferId)) {
|
|
resistModifier = (float) (getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_inspire_resist_increase") / 100.0f);
|
|
}
|
|
if (internalDecay == true) {
|
|
if (utils.hasScriptVar(self, "decayResistMod")) {
|
|
resistModifier = utils.getFloatScriptVar(self, "decayResistMod");
|
|
}
|
|
} else {
|
|
utils.setScriptVar(self, "decayResistMod", resistModifier);
|
|
}
|
|
buffValue *= 1.0f + resistModifier;
|
|
break;
|
|
case "combat":
|
|
float combatModifier = 0.0f;
|
|
if (isIdValid(bufferId) && exists(bufferId)) {
|
|
combatModifier = getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_combat_buff_increase");
|
|
}
|
|
if (internalDecay == true) {
|
|
if (utils.hasScriptVar(self, "decayCombatMod")) {
|
|
combatModifier = utils.getFloatScriptVar(self, "decayCombatMod");
|
|
}
|
|
} else {
|
|
utils.setScriptVar(self, "decayCombatMod", combatModifier);
|
|
}
|
|
buffValue += combatModifier;
|
|
break;
|
|
}
|
|
|
|
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Adding Stat Modifier: " + "buildabuff_" + effect + " Value = " + buffValue + " Duration = " + duration);
|
|
}
|
|
|
|
addSkillModModifier(self, "buildabuff_" + effect, effect, (int) buffValue, duration, false, true);
|
|
if ((effect.startsWith("constitution")) || (effect.startsWith("stamina"))) {
|
|
messageTo(self, "recalcPools", null, 0.25f, false);
|
|
} else if (effect.startsWith("expertise_innate_protection_") || effect.equals("elemental_resistance")) //ensure recalc for new elemental_resistance Modifier
|
|
{
|
|
messageTo(self, "recalcArmor", null, 0.25f, false);
|
|
}
|
|
break;
|
|
case "trade":
|
|
float tradeModifier = 0.0f;
|
|
if (isIdValid(bufferId) && exists(bufferId)) {
|
|
tradeModifier = (float) (getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_inspire_trader_increase") / 100.0f);
|
|
}
|
|
if (internalDecay == true) {
|
|
if (utils.hasScriptVar(self, "decayTradeMod")) {
|
|
tradeModifier = utils.getFloatScriptVar(self, "decayTradeMod");
|
|
}
|
|
} else {
|
|
utils.setScriptVar(self, "decayTradeMod", tradeModifier);
|
|
}
|
|
buffValue *= 1.0f + tradeModifier;
|
|
String[] xpArray =
|
|
{
|
|
"crafting",
|
|
"combat_general",
|
|
"entertainer",
|
|
"space_combat_general"
|
|
};
|
|
utils.setScriptVar(self, "buff.xpBonus.types", xpArray);
|
|
utils.setScriptVar(self, "buff.xpBonus.value", buffValue / 100);
|
|
|
|
|
|
{
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Adding Stat Modifier: " + "buildabuff_" + effect + " Value = " + buffValue + " Duration = " + duration);
|
|
}
|
|
|
|
addSkillModModifier(self, "buildabuff_" + effect, effect, (int) buffValue, duration, false, true);
|
|
break;
|
|
case "misc":
|
|
switch (effect) {
|
|
case "movement_speed":
|
|
if (value == 0) {
|
|
value = 1;
|
|
}
|
|
if (movement.hasMovementModifier(self, "buildabuff_movement_speed")) {
|
|
movement.removeMovementModifier(self, "buildabuff_movement_speed", false);
|
|
}
|
|
movement.applyMovementModifier(self, "buildabuff_movement_speed", buffValue);
|
|
break;
|
|
case "reactive_second_chance":
|
|
int playerLevel = getLevel(self);
|
|
float reactiveModifier = 0.0f;
|
|
if (isIdValid(bufferId) && exists(bufferId)) {
|
|
reactiveModifier = getEnhancedSkillStatisticModifierUncapped(bufferId, "expertise_en_inspire_proc_chance_increase");
|
|
}
|
|
if (internalDecay == true) {
|
|
if (utils.hasScriptVar(self, "decayReactiveMod")) {
|
|
reactiveModifier = utils.getFloatScriptVar(self, "decayReactiveMod");
|
|
}
|
|
} else {
|
|
utils.setScriptVar(self, "decayReactiveMod", reactiveModifier);
|
|
}
|
|
buffValue += reactiveModifier;
|
|
if (playerLevel > 69) {
|
|
addSkillModModifier(self, "expertise_buildabuff_heal_3_reac", "expertise_buildabuff_heal_3_reac", (int) buffValue, duration, false, true);
|
|
} else if (playerLevel > 39 && playerLevel < 70) {
|
|
addSkillModModifier(self, "expertise_buildabuff_heal_2_reac", "expertise_buildabuff_heal_2_reac", (int) buffValue, duration, false, true);
|
|
} else {
|
|
addSkillModModifier(self, "expertise_buildabuff_heal_1_reac", "expertise_buildabuff_heal_1_reac", (int) buffValue, duration, false, true);
|
|
}
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
break;
|
|
case "flush_with_success":
|
|
String[] xpa =
|
|
{
|
|
"crafting",
|
|
"combat_general",
|
|
"entertainer",
|
|
"space_combat_general",
|
|
"chronicles"
|
|
};
|
|
utils.setScriptVar(self, "buff.xpBonus.types", xpa);
|
|
utils.setScriptVar(self, "buff.xpBonus.value", buffValue / 100.0f);
|
|
break;
|
|
default: {
|
|
CustomerServiceLog("SuspectedCheaterChannel: ", "Adding Stat Modifier: " + "buildabuff_" + effect + " Value = " + buffValue + " Duration = " + duration);
|
|
}
|
|
|
|
addSkillModModifier(self, "buildabuff_" + effect, effect, (int) buffValue, duration, false, true);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (!buff.hasBuff(self, "col_ent_invis_buff_tracker"))
|
|
{
|
|
collection.entertainerBuffCollection(self, bufferId, duration);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
sendSystemMessageTestingOnly(self, "Malformed buildabuff data passed to buildabuffAddBuffHandler.");
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
if (hasScript(self, "systems.buff_builder.buff_builder_cancel"))
|
|
{
|
|
detachScript(self, "systems.buff_builder.buff_builder_cancel");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int buildabuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String[] baseModList = dataTableGetStringColumn(DATATABLE_BUFF_BUILDER, "AFFECTS");
|
|
for (String s : baseModList) {
|
|
if (hasSkillModModifier(self, "buildabuff_" + s)) {
|
|
removeAttribOrSkillModModifier(self, "buildabuff_" + s);
|
|
}
|
|
}
|
|
if (hasSkillModModifier(self, "expertise_buildabuff_heal_1_reac"))
|
|
{
|
|
removeAttribOrSkillModModifier(self, "expertise_buildabuff_heal_1_reac");
|
|
}
|
|
if (hasSkillModModifier(self, "expertise_buildabuff_heal_2_reac"))
|
|
{
|
|
removeAttribOrSkillModModifier(self, "expertise_buildabuff_heal_2_reac");
|
|
}
|
|
if (hasSkillModModifier(self, "expertise_buildabuff_heal_3_reac"))
|
|
{
|
|
removeAttribOrSkillModModifier(self, "expertise_buildabuff_heal_3_reac");
|
|
}
|
|
messageTo(self, "recalcPools", null, 1, false);
|
|
messageTo(self, "recalcArmor", null, 0.25f, false);
|
|
messageTo(self, "cacheExpertiseProcReacList", null, 2, false);
|
|
utils.removeScriptVar(self, "performance.buildabuff.modNames");
|
|
utils.removeScriptVar(self, "performance.buildabuff.modValues");
|
|
utils.removeScriptVarTree(self, "buff.xpBonus");
|
|
if (movement.hasMovementModifier(self, "buildabuff_movement_speed"))
|
|
{
|
|
movement.removeMovementModifier(self, "buildabuff_movement_speed");
|
|
}
|
|
if (hasScript(self, "systems.buff_builder.buff_builder_cancel"))
|
|
{
|
|
detachScript(self, "systems.buff_builder.buff_builder_cancel");
|
|
}
|
|
trial.bumpSession(self, "displayDefensiveMods");
|
|
messageTo(self, "setDisplayOnlyDefensiveMods", trial.getSessionDict(self, "displayDefensiveMods"), 5, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int meDoomAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
showFlyText(self, new string_id("set_bonus", "doom_fly"), 2, colors.BLACK);
|
|
obj_id doomOwner = utils.getObjIdScriptVar(self, "me_doom.doom_owner");
|
|
int doomStage = utils.getIntScriptVar(self, "me_doom.doom_stage");
|
|
if (!isIdValid(doomOwner))
|
|
{
|
|
utils.removeScriptVar(self, "me_doom.doom_owner");
|
|
utils.removeScriptVar(self, "me_doom.doom_stage");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (doomStage > 3 || doomStage < 1)
|
|
{
|
|
utils.removeScriptVar(self, "me_doom.doom_owner");
|
|
utils.removeScriptVar(self, "me_doom.doom_stage");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (doomStage == 2)
|
|
{
|
|
dot.applyDotEffect(self, doomOwner, "bleeding", "me_doom_bleed", HEALTH, 100, 800, 5, true, null);
|
|
}
|
|
if (doomStage == 3)
|
|
{
|
|
dot.applyDotEffect(self, doomOwner, "fire", "me_doom_bleed", HEALTH, 100, 800, 5, true, null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int meDoomRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id doomOwner = utils.getObjIdScriptVar(self, "me_doom.doom_owner");
|
|
int doomStage = utils.getIntScriptVar(self, "me_doom.doom_stage");
|
|
if (!isIdValid(doomOwner))
|
|
{
|
|
utils.removeScriptVar(self, "me_doom.doom_owner");
|
|
utils.removeScriptVar(self, "me_doom.doom_stage");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (doomStage > 3 || doomStage < 1)
|
|
{
|
|
utils.removeScriptVar(self, "me_doom.doom_owner");
|
|
utils.removeScriptVar(self, "me_doom.doom_stage");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (doomStage == 1)
|
|
{
|
|
utils.setScriptVar(self, "me_doom.doom_stage", 2);
|
|
buff.applyBuff(self, self, "me_doom", 10.0f);
|
|
}
|
|
if (doomStage == 2)
|
|
{
|
|
utils.setScriptVar(self, "me_doom.doom_stage", 3);
|
|
buff.applyBuff(self, self, "me_doom", 10.0f);
|
|
}
|
|
if (doomStage == 3)
|
|
{
|
|
utils.removeScriptVar(self, "me_doom.doom_owner");
|
|
utils.removeScriptVar(self, "me_doom.doom_stage");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cacheExpertiseProcReacList(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
expertise.cacheExpertiseProcReacList(self);
|
|
proc.buildCurrentReacList(self);
|
|
proc.buildCurrentProcList(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void healAttribPercent(obj_id who, int stat, int percent) throws InterruptedException
|
|
{
|
|
int currentStatValue = getAttrib(who, stat);
|
|
int maxStatValue = getMaxAttrib(who, stat);
|
|
if (currentStatValue < maxStatValue)
|
|
{
|
|
int newStatValue = currentStatValue + (int)(maxStatValue * (float)(percent / 100));
|
|
if (newStatValue > maxStatValue)
|
|
{
|
|
setAttrib(who, stat, maxStatValue);
|
|
}
|
|
else
|
|
{
|
|
setAttrib(who, stat, newStatValue);
|
|
}
|
|
}
|
|
}
|
|
public int channelForsakeFear(obj_id player, String buffName, boolean finishChannel) throws InterruptedException
|
|
{
|
|
int lastForsakeFearPulse = utils.getIntScriptVar(player, "buff_handler.lastForsakeFearPulse");
|
|
int currentForsakeFearPulses = utils.getIntScriptVar(player, "buff_handler.totalForsakeFearPulses");
|
|
int gameTime = getGameTime();
|
|
int newTotal = gameTime - lastForsakeFearPulse + currentForsakeFearPulses;
|
|
if (finishChannel || (newTotal > 10))
|
|
{
|
|
newTotal = 10;
|
|
}
|
|
if (newTotal > currentForsakeFearPulses)
|
|
{
|
|
if (group.isGrouped(player))
|
|
{
|
|
Vector party = group.getPCMembersInRange(player, 32.0f);
|
|
Vector channelToMembers = new Vector();
|
|
if (party != null)
|
|
{
|
|
for (int i = 0; i < party.size(); i++)
|
|
{
|
|
obj_id who = (obj_id)party.elementAt(i);
|
|
if ((obj_id)buff.getBuffOwner(who, buffName) == player)
|
|
{
|
|
healAttribPercent(who, ACTION, 6 * (newTotal - currentForsakeFearPulses));
|
|
playClientEffectObj(who, "appearance/pt_jedi_forsake_fear.prt", who, "");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
healAttribPercent(player, ACTION, 6 * (newTotal - currentForsakeFearPulses));
|
|
playClientEffectObj(player, "appearance/pt_jedi_forsake_fear.prt", player, "");
|
|
}
|
|
if (!finishChannel)
|
|
{
|
|
dictionary parms = new dictionary();
|
|
parms.put("player", player);
|
|
parms.put("buffName", buffName);
|
|
utils.setScriptVar(player, "buff_handler.lastForsakeFearPulse", gameTime);
|
|
utils.setScriptVar(player, "buff_handler.totalForsakeFearPulses", newTotal);
|
|
messageTo(player, "checkChannelForsakeFear", parms, 1, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int checkChannelForsakeFear(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
obj_id player = params.getObjId("player");
|
|
String buffName = params.getString("buffName");
|
|
if (utils.hasScriptVar(player, "buff_handler.channelForsakeFearCancelled") || utils.hasScriptVar(player, "buff_handler.channelForsakeFearSuccessful") || !hasObjVar(player, sui.COUNTDOWNTIMER_SUI_VAR))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
channelForsakeFear(player, buffName, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int channelForsakeFearCountdownHandler(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
int pid = params.getInt("id");
|
|
obj_id player = params.getObjId("player");
|
|
if (!isIdValid(player))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int bp = sui.getIntButtonPressed(params);
|
|
if (bp == sui.BP_CANCEL)
|
|
{
|
|
utils.setScriptVar(player, "buff_handler.channelForsakeFearCancelled", 1);
|
|
detachScript(player, sui.COUNTDOWNTIMER_PLAYER_SCRIPT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if (bp == sui.BP_REVERT)
|
|
{
|
|
int event = params.getInt("event");
|
|
if (event == sui.CD_EVENT_LOCOMOTION)
|
|
{
|
|
utils.setScriptVar(player, "buff_handler.channelForsakeFearCancelled", 1);
|
|
}
|
|
else if (event == sui.CD_EVENT_INCAPACITATE)
|
|
{
|
|
utils.setScriptVar(player, "buff_handler.channelForsakeFearCancelled", 1);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!hasObjVar(player, sui.COUNTDOWNTIMER_SUI_VAR))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int test_pid = getIntObjVar(player, sui.COUNTDOWNTIMER_SUI_VAR);
|
|
if (pid != test_pid)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
forceCloseSUIPage(pid);
|
|
detachScript(player, sui.COUNTDOWNTIMER_PLAYER_SCRIPT);
|
|
utils.setScriptVar(player, "buff_handler.channelForsakeFearSuccessful", 1);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionDrainAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (value > getAction(self))
|
|
{
|
|
value = getAction(self);
|
|
}
|
|
drainAttributes(self, (int)value, 0);
|
|
if (!buff.hasBuff(self, "action_drain_immunity"))
|
|
{
|
|
buff.applyBuff(self, self, "action_drain_immunity");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionDrainRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionBurnAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "buff.action_burn.value", value);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionBurnRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "buff.action_burn.value");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionRegenAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int actionMax = getMaxAction(self);
|
|
dictionary data = new dictionary();
|
|
data.put("actionMax", actionMax);
|
|
data.put("buffName", "sp_action_regen");
|
|
data.put("ticks", duration);
|
|
data.put("currentTick", 0);
|
|
messageTo(self, "actionRegenBuff", data, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionRegenRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int actionRegenBuff(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String buffName = params.getString("buffName");
|
|
if (!buff.hasBuff(self, buffName))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int maxAction = params.getInt("actionMax");
|
|
float ticks = params.getFloat("ticks");
|
|
float healAmount = maxAction / ticks;
|
|
healing.healDamage(self, ACTION, (int)healAmount);
|
|
int currentTick = params.getInt("currentTick");
|
|
if (currentTick < ticks)
|
|
{
|
|
params.put("currentTick", ++currentTick);
|
|
messageTo(self, "actionRegenBuff", params, 1.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bodyguardDefenderAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("shield_master_pet"))
|
|
{
|
|
obj_id master = getMaster(self);
|
|
if (!isIdValid(master))
|
|
{
|
|
buff.removeBuff(self, "bm_shield_master_pet");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
buff.applyBuff(master, self, "bm_shield_master_player");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (subtype.equals("protect_master"))
|
|
{
|
|
obj_id master = getMaster(self);
|
|
if (isIdValid(master) && exists(master))
|
|
{
|
|
utils.setScriptVar(master, combat.DAMAGE_REDIRECT, self);
|
|
buff.applyBuff(master, self, "bodyguard");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bodyguardDefenderRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("shield_master_pet"))
|
|
{
|
|
obj_id master = getMaster(self);
|
|
if (isIdValid(master) && exists(master))
|
|
{
|
|
buff.removeBuff(master, "bm_shield_master_player");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (subtype.equals("protect_master"))
|
|
{
|
|
obj_id master = getMaster(self);
|
|
if (!isIdValid(master))
|
|
{
|
|
master = trial.getParent(self);
|
|
}
|
|
if (isIdValid(master) && exists(master))
|
|
{
|
|
buff.removeBuff(master, "bodyguard");
|
|
utils.removeScriptVar(master, combat.DAMAGE_REDIRECT);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cooldownModifyAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subtype.equals("cooldown_execute_all"))
|
|
{
|
|
String[] commandList = getCommandListingForPlayer(self);
|
|
if (commandList == null || commandList.length == 0)
|
|
{
|
|
debugSpeakMsg(self, "Command list was null or empty");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
for (String s : commandList) {
|
|
combat_data cd = combat_engine.getCombatData(s);
|
|
if (cd == null) {
|
|
continue;
|
|
}
|
|
String cooldownGroup = cd.cooldownGroup;
|
|
int groupCrc = getStringCrc(cooldownGroup);
|
|
float coolDownLeft = getCooldownTimeLeft(self, groupCrc);
|
|
if (coolDownLeft < value) {
|
|
sendCooldownGroupTimingOnly(self, groupCrc, value);
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int cooldownModifyRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int vulnerabilityAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String type = "heat";
|
|
boolean exclusive = false;
|
|
if (subType.contains("exclusive"))
|
|
{
|
|
exclusive = true;
|
|
}
|
|
if (subType.endsWith("acid"))
|
|
{
|
|
type = "acid";
|
|
}
|
|
if (subType.endsWith("cold"))
|
|
{
|
|
type = "cold";
|
|
}
|
|
if (subType.endsWith("electricity"))
|
|
{
|
|
type = "electrical";
|
|
}
|
|
utils.setScriptVar(self, "elemental_vulnerability.type_" + type, type);
|
|
utils.setScriptVar(self, "elemental_vulnerability.type_" + type + ".value", value);
|
|
utils.setScriptVar(self, "elemental_vulnerability.type_" + type + ".exclusive", exclusive);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void clog(String message) throws InterruptedException
|
|
{
|
|
debugSpeakMsg(getSelf(), message);
|
|
}
|
|
public int vulnerabilityRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String type = "heat";
|
|
if (subType.endsWith("acid"))
|
|
{
|
|
type = "acid";
|
|
}
|
|
if (subType.endsWith("cold"))
|
|
{
|
|
type = "cold";
|
|
}
|
|
if (subType.endsWith("electricity"))
|
|
{
|
|
type = "electrical";
|
|
}
|
|
utils.removeScriptVar(self, "elemental_vulnerability.type_" + type);
|
|
utils.removeScriptVar(self, "elemental_vulnerability.type_" + type + ".value");
|
|
utils.removeScriptVar(self, "elemental_vulnerability.type_" + type + ".exclusive");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int removeIncapWeakenAddBuffHandler(obj_id self, String effectName, String subType, float duartion, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.removeBuff(self, "incapWeaken");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int removeIncapWeakenRemoveBuffHandler(obj_id self, String effectName, String subType, float duartion, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int axkvaContagionAddBuffHandler(obj_id self, String effectName, String subType, float duartion, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, "axkva_contagion_recourse"))
|
|
{
|
|
return SCRIPT_OVERRIDE;
|
|
}
|
|
playClientEffectObj(self, "appearance/pt_contagion_debuff.prt", self, "", null, "contagion");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int axkvaContagionRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.applyBuff(self, self, "axkva_contagion_recourse");
|
|
stopClientEffectObjByLabel(self, self, "contagion");
|
|
obj_id axkva = getFirstObjectWithScript(getLocation(self), 250.0f, "theme_park.heroic.axkva_min.axkva");
|
|
if (!isIdValid(axkva) || ai_lib.isDead(axkva))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary dict = new dictionary();
|
|
dict.put("player", self);
|
|
messageTo(axkva, "contagion_bomb", dict, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bodyguardMasterAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bodyguardMasterRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onNextAttackAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "next_hit_damage_bonus", value);
|
|
obj_id master = utils.getObjIdScriptVar(self, "temp.master");
|
|
if (isIdValid(master) && exists(master))
|
|
{
|
|
buff.applyBuff(master, self, "bm_preperation");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onNextAttackRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "bm_preperation");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int damageDealtModAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, "damageDealtMod.value", value);
|
|
utils.setScriptVar(self, "damageDealtMod.scale", getScale(self));
|
|
float enragedScale = (float)(getScale(self) * 1.3);
|
|
setScale(self, enragedScale);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int damageDealtModRemoveBuffHandler(obj_id self, String effectName, String subType, float druation, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float scale = utils.getFloatScriptVar(self, "damageDealtMod.scale");
|
|
if (scale > 0)
|
|
{
|
|
setScale(self, scale);
|
|
}
|
|
utils.removeScriptVarTree(self, "damageDealtMod");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int weaponSpeedModAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id weapon = getCurrentWeapon(self);
|
|
float currentAttackSpeed = getWeaponAttackSpeed(weapon);
|
|
utils.setScriptVar(self, "recordedAttackSpeed", "" + weapon + "-" + currentAttackSpeed);
|
|
float newAttackSpeed = currentAttackSpeed - (currentAttackSpeed * value);
|
|
if (isIdValid(weapon))
|
|
{
|
|
setWeaponAttackSpeed(weapon, newAttackSpeed);
|
|
weapons.setWeaponData(weapon);
|
|
utils.setScriptVar(weapon, "isCreatureWeapon", 1);
|
|
}
|
|
else
|
|
{
|
|
utils.removeScriptVar(self, "recordedAttackSpeed");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int weaponSpeedModRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!utils.hasScriptVar(self, "recordedAttackSpeed"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String weaponRecord = utils.getStringScriptVar(self, "recordedAttackSpeed");
|
|
String[] parse = split(weaponRecord, '-');
|
|
if (parse.length < 2)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id weapon = utils.stringToObjId(parse[0]);
|
|
float weaponSpeed = utils.stringToFloat(parse[1]);
|
|
if (isIdValid(weapon))
|
|
{
|
|
setWeaponAttackSpeed(weapon, weaponSpeed);
|
|
weapons.setWeaponData(weapon);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandGrantAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subType == null || subType.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!hasCommand(self, subType))
|
|
{
|
|
grantCommand(self, subType);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int commandGrantRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (subType == null || subType.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasCommand(self, subType))
|
|
{
|
|
revokeCommand(self, subType);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnGroupMembersChanged(obj_id self, obj_id gid, obj_id[] groupMembers, obj_id[] addedMembers, obj_id[] removedMembers) throws InterruptedException
|
|
{
|
|
int[] buffList = buff.getOwnedGroupBuffs(self);
|
|
if (buffList == null)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (buffList.length < 1)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary data = new dictionary();
|
|
data.put("owner", self);
|
|
data.put("buffList", buffList);
|
|
data.put("durList", buff.getGroupBuffDuration(self, buffList));
|
|
data.put("strList", buff.getGroupBuffStrength(self, buffList));
|
|
if (addedMembers != null && addedMembers.length > 0)
|
|
{
|
|
data.put("isAdding", true);
|
|
for (obj_id addedMember : addedMembers) {
|
|
if (addedMember == self) {
|
|
for (obj_id groupMember : groupMembers) {
|
|
if (groupMember == self) {
|
|
continue;
|
|
}
|
|
messageTo(groupMember, "setGroupBuffs", data, 0.0f, false);
|
|
if (hasTriggerVolume(self, "group_buff_breach"))
|
|
addTriggerVolumeEventSource("group_buff_breach", groupMember);
|
|
}
|
|
continue;
|
|
}
|
|
messageTo(addedMember, "setGroupBuffs", data, 0.0f, false);
|
|
if (hasTriggerVolume(self, "group_buff_breach"))
|
|
addTriggerVolumeEventSource("group_buff_breach", addedMember);
|
|
}
|
|
}
|
|
if (removedMembers != null && removedMembers.length > 0)
|
|
{
|
|
data.put("isAdding", false);
|
|
for (obj_id removedMember : removedMembers) {
|
|
if (removedMember == self) {
|
|
for (obj_id groupMember : groupMembers) {
|
|
if (groupMember == self) {
|
|
continue;
|
|
}
|
|
messageTo(groupMember, "setGroupBuffs", data, 0.0f, false);
|
|
removeTriggerVolumeEventSource("group_buff_breach", groupMember);
|
|
}
|
|
continue;
|
|
}
|
|
messageTo(removedMember, "setGroupBuffs", data, 0.0f, false);
|
|
removeTriggerVolumeEventSource("group_buff_breach", removedMember);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnGroupDisbanded(obj_id self, obj_id group) throws InterruptedException
|
|
{
|
|
int[] buffList = buff.getGroupBuffEffects(self);
|
|
if (buffList != null && buffList.length > 0)
|
|
{
|
|
buff.removeGroupBuffEffect(self, buffList);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnRemovedFromGroup(obj_id self, obj_id group) throws InterruptedException
|
|
{
|
|
int[] buffList = buff.getGroupBuffEffects(self);
|
|
if (buffList != null && buffList.length > 0)
|
|
{
|
|
buff.removeGroupBuffEffect(self, buffList);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int setGroupBuffs(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
obj_id owner = params.getObjId("owner");
|
|
int[] buffList = params.getIntArray("buffList");
|
|
float[] durList = params.getFloatArray("durList");
|
|
float[] strList = params.getFloatArray("strList");
|
|
boolean isAdding = params.getBoolean("isAdding");
|
|
if (isAdding)
|
|
{
|
|
if (owner != self)
|
|
{
|
|
float dist = getDistance(self, owner);
|
|
if (dist > buff.GROUP_BUFF_DISTANCE)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!pvpCanHelp(owner, self))
|
|
{
|
|
prose_package pp = new prose_package();
|
|
pp.stringId = new string_id("spam", "group_buff_fail_pvp");
|
|
pp.target.set(self);
|
|
sendSystemMessageProse(owner, pp);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (buffList != null && buffList.length > 0)
|
|
{
|
|
buff.addGroupBuffEffect(self, owner, buffList, strList, durList);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (owner != self)
|
|
{
|
|
if (buffList != null && buffList.length > 0)
|
|
{
|
|
buff.removeGroupBuffEffect(self, buffList);
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int groupAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
int[] buffList = new int[1];
|
|
buffList[0] = getStringCrc(effectName.toLowerCase());
|
|
if (isMob(self) && !isPlayer(self) && isIdValid(caster) && self == caster)
|
|
{
|
|
obj_id[] buffAi = getCreaturesInRange(getLocation(self), 45.0f);
|
|
if (buffAi != null && buffAi.length > 0)
|
|
{
|
|
for (obj_id obj_id : buffAi) {
|
|
if (!isMob(obj_id) && !isPlayer(obj_id) || isDead(obj_id)) {
|
|
continue;
|
|
}
|
|
if (factions.shareSocialGroup(self, obj_id) || factions.isInFriendlyFaction(self, obj_id)) {
|
|
buff.applyBuff(obj_id, self, effectName, duration, value);
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String var = "groupBuff." + buffList[0];
|
|
if (!utils.hasScriptVar(self, var))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id owner = utils.getObjIdScriptVar(self, var);
|
|
if (beast_lib.isBeastMaster(self))
|
|
{
|
|
obj_id beast = beast_lib.getBeastOnPlayer(self);
|
|
if (isIdValid(beast) && !isIdNull(beast) && !isDead(beast))
|
|
{
|
|
buff.applyBuff(beast, owner, effectName, duration, value);
|
|
}
|
|
}
|
|
if (owner != self)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String group2 = buff.getStringGroupTwo(effectName);
|
|
if (group2 != null && !group2.equals("") && group2.contains("aura"))
|
|
{
|
|
group2 = group2.substring(0, (group2.lastIndexOf("_")));
|
|
int[] group2Buffs = buff.getGroup2BuffsOnTarget(self, group2);
|
|
int auraCount = 0;
|
|
for (int group2Buff : group2Buffs) {
|
|
float tempDuration = buff.getBuffTimeRemaining(self, group2Buff);
|
|
if (tempDuration == -1) {
|
|
++auraCount;
|
|
}
|
|
}
|
|
int aurasAbleToMaintain = getEnhancedSkillStatisticModifierUncapped(self, "expertise_aura_maintain");
|
|
if ((aurasAbleToMaintain - auraCount) >= 1)
|
|
{
|
|
buff.applyBuff(self, owner, effectName, -1);
|
|
}
|
|
}
|
|
boolean newTriggerVolume = !hasTriggerVolume(self, "group_buff_breach");
|
|
if (newTriggerVolume)
|
|
{
|
|
createTriggerVolume("group_buff_breach", buff.GROUP_BUFF_DISTANCE, false);
|
|
}
|
|
obj_id gid = getGroupObject(self);
|
|
if (!isIdValid(gid))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary data = new dictionary();
|
|
data.put("owner", self);
|
|
data.put("buffList", buffList);
|
|
data.put("durList", buff.getGroupBuffDuration(self, buffList));
|
|
data.put("strList", buff.getGroupBuffStrength(self, buffList));
|
|
data.put("isAdding", true);
|
|
obj_id[] groupMembers = getGroupMemberIds(gid);
|
|
for (obj_id groupMember : groupMembers) {
|
|
if (groupMember == self) {
|
|
continue;
|
|
}
|
|
if (newTriggerVolume) {
|
|
addTriggerVolumeEventSource("group_buff_breach", groupMember);
|
|
}
|
|
messageTo(groupMember, "setGroupBuffs", data, 0.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int groupRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int[] ownedBuffs = buff.getOwnedGroupBuffs(self);
|
|
boolean lastGroupBuff = (ownedBuffs == null || ownedBuffs.length == 0);
|
|
obj_id gid = getGroupObject(self);
|
|
if (!isIdValid(gid))
|
|
{
|
|
removeTriggerVolume("group_buff_breach");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
int[] buffList = new int[1];
|
|
buffList[0] = getStringCrc(effectName.toLowerCase());
|
|
String var = "groupBuff." + buffList[0];
|
|
if (!utils.hasScriptVar(self, var))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id owner = utils.getObjIdScriptVar(self, var);
|
|
utils.removeScriptVar(self, var);
|
|
if (owner != self)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary data = new dictionary();
|
|
data.put("owner", self);
|
|
data.put("buffList", buffList);
|
|
data.put("isAdding", false);
|
|
obj_id[] groupMembers = getGroupMemberIds(gid);
|
|
for (obj_id groupMember : groupMembers) {
|
|
if (groupMember == self) {
|
|
continue;
|
|
}
|
|
if (lastGroupBuff) {
|
|
removeTriggerVolumeEventSource("group_buff_breach", groupMember);
|
|
}
|
|
messageTo(groupMember, "setGroupBuffs", data, 0.0f, false);
|
|
}
|
|
if (lastGroupBuff)
|
|
{
|
|
removeTriggerVolume("group_buff_breach");
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnTriggerVolumeEntered(obj_id self, String volumeName, obj_id breacher) throws InterruptedException
|
|
{
|
|
if (!volumeName.equals("group_buff_breach"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!group.inSameGroup(self, breacher))
|
|
{
|
|
removeTriggerVolumeEventSource("group_buff_breach", breacher);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (!pvpCanHelp(self, breacher))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int[] buffList = buff.getOwnedGroupBuffs(self);
|
|
float[] durList = buff.getGroupBuffDuration(self, buffList);
|
|
float[] strList = buff.getGroupBuffStrength(self, buffList);
|
|
buff.addGroupBuffEffect(breacher, self, buffList, strList, durList);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnTriggerVolumeExited(obj_id self, String volumeName, obj_id breacher) throws InterruptedException
|
|
{
|
|
if (!volumeName.equals("group_buff_breach"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int[] buffList = buff.getOwnedGroupBuffs(self);
|
|
buff.removeGroupBuffEffect(breacher, buffList);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnLogout(obj_id self) throws InterruptedException
|
|
{
|
|
if (hasTriggerVolume(self, "group_buff_breach"))
|
|
{
|
|
obj_id groupId = getGroupObject(self);
|
|
if (!isIdValid(groupId))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id[] groupMembers = getGroupMemberIds(groupId);
|
|
if (groupMembers == null || groupMembers.length <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int[] buffList = buff.getOwnedGroupBuffs(self);
|
|
for (obj_id groupMember : groupMembers) {
|
|
buff.removeGroupBuffEffect(groupMember, buffList);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void invisBuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stealth.invisBuffRemoved(self, effectName);
|
|
}
|
|
public void invisBuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int costumeBuff = buff.getBuffOnTargetFromGroup(self, "shapechange");
|
|
if (costumeBuff != 0)
|
|
{
|
|
buff.removeBuff(self, buffName);
|
|
sendSystemMessage(self, new string_id("spam", "costume_not_while_disguised"));
|
|
return;
|
|
}
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
stealth.invisBuffAdded(self, effectName);
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
}
|
|
public void noBreakInvisRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String invis = stealth.getInvisBuff(self);
|
|
if (invis == null || invis.equals(""))
|
|
{
|
|
stealth.invisBuffRemoved(self, "");
|
|
}
|
|
}
|
|
public int messageDetrimentalRemoved(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
obj_id me = params.getObjId("self");
|
|
String detriment = params.getString("detriment");
|
|
string_id msgId = params.getStringId("msgId");
|
|
messageDetrimentalRemoved(me, detriment, msgId);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void messageDetrimentalRemoved(obj_id self, String detriment, string_id msgId) throws InterruptedException
|
|
{
|
|
prose_package ppRemoved = new prose_package();
|
|
prose.setTT(ppRemoved, detriment);
|
|
prose.setStringId(ppRemoved, msgId);
|
|
sendSystemMessageProse(self, ppRemoved);
|
|
}
|
|
public int OnChangedPosture(obj_id self, int before, int after) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, "bh_take_cover"))
|
|
{
|
|
buff.removeBuff(self, "bh_take_cover");
|
|
sendSystemMessage(self, new string_id("spam", "lost_cover"));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public boolean removeAllModifiersOfType(obj_id target, int type) throws InterruptedException
|
|
{
|
|
String[] mods = movement.getAllModifiers(target);
|
|
if (mods == null || mods.length == 0)
|
|
{
|
|
return false;
|
|
}
|
|
boolean removed = false;
|
|
for (String mod : mods) {
|
|
if (movement.getType(mod) == type) {
|
|
if (utils.hasScriptVar(target, movement.MOVEMENT_OBJVAR + "." + mod + ".time") && buff.canBeDispelled(mod)) {
|
|
utils.removeScriptVarTree(target, movement.MOVEMENT_OBJVAR + "." + mod);
|
|
combat.removeCombatMovementModifierEffect(target, mod);
|
|
removed = true;
|
|
}
|
|
}
|
|
}
|
|
if (removed)
|
|
{
|
|
movement.refresh(target);
|
|
return removed;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public void channelHealAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int myAttribute = getAttributeType(subtype);
|
|
boolean worked = healing.useChannelHealItem(self, self, myAttribute);
|
|
int pid = sui.smartCountdownTimerSUI(self, self, "channel_heal", null, 0, 12, "", 0, 0);
|
|
utils.setScriptVar(self, "channelHeal.suiPid", pid);
|
|
}
|
|
public void channelHealRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int pid = utils.getIntScriptVar(self, "channelHeal.suiPid");
|
|
forceCloseSUIPage(pid);
|
|
utils.removeScriptVarTree(self, "channelHeal");
|
|
}
|
|
public int getAttributeType(String subtype) throws InterruptedException
|
|
{
|
|
int attribute = 0;
|
|
switch (subtype) {
|
|
case "health":
|
|
attribute = HEALTH;
|
|
break;
|
|
case "constitution":
|
|
attribute = CONSTITUTION;
|
|
break;
|
|
case "action":
|
|
attribute = ACTION;
|
|
break;
|
|
case "stamina":
|
|
attribute = STAMINA;
|
|
break;
|
|
case "mind":
|
|
attribute = MIND;
|
|
break;
|
|
case "willpower":
|
|
attribute = WILLPOWER;
|
|
break;
|
|
}
|
|
return attribute;
|
|
}
|
|
public void bmBeastFamilyAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!isPlayer(self))
|
|
{
|
|
obj_id master = getMaster(self);
|
|
if (!isPlayer(master))
|
|
{
|
|
return;
|
|
}
|
|
if (!buff.hasBuff(master, buffName))
|
|
{
|
|
buff.applyBuff(master, self, buffName);
|
|
}
|
|
return;
|
|
}
|
|
obj_id player = self;
|
|
obj_id beast = beast_lib.getBeastOnPlayer(player);
|
|
if (!isIdValid(beast) || !exists(beast))
|
|
{
|
|
buff.removeBuff(player, buffName);
|
|
return;
|
|
}
|
|
obj_id bcd = beast_lib.getBeastBCD(beast);
|
|
String beastName = beast_lib.getBeastType(bcd);
|
|
dictionary beastDict = utils.dataTableGetRow(beast_lib.BEASTS_TABLE, beastName);
|
|
String specialAttackFamily = beastDict.getString("special_attack_family");
|
|
if (!specialAttackFamily.equals(subtype) && !subtype.equals("all"))
|
|
{
|
|
buff.removeBuff(player, buffName);
|
|
return;
|
|
}
|
|
buff.applyBuff(beast, self, buffName);
|
|
buff.applyBuff(player, self, buffName);
|
|
return;
|
|
}
|
|
public void bmBeastFamilyRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!isPlayer(self))
|
|
{
|
|
buff.removeBuff(self, buffName);
|
|
obj_id master = getMaster(self);
|
|
if (!isPlayer(master))
|
|
{
|
|
return;
|
|
}
|
|
if (buff.hasBuff(master, buffName))
|
|
{
|
|
buff.removeBuff(master, buffName);
|
|
}
|
|
return;
|
|
}
|
|
obj_id player = self;
|
|
obj_id beast = beast_lib.getBeastOnPlayer(player);
|
|
if (!isIdValid(beast) || !exists(beast))
|
|
{
|
|
buff.removeBuff(player, buffName);
|
|
return;
|
|
}
|
|
buff.removeBuff(player, buffName);
|
|
buff.removeBuff(beast, buffName);
|
|
return;
|
|
}
|
|
public String getInitialBuffName(String effectName) throws InterruptedException
|
|
{
|
|
String[] spiltEffectName = split(effectName, '_');
|
|
int loopTimes = spiltEffectName.length - 1;
|
|
String initialBuffName = spiltEffectName[0];
|
|
for (int i = 1; i < loopTimes; ++i)
|
|
{
|
|
initialBuffName += "_" + spiltEffectName[i];
|
|
}
|
|
return initialBuffName;
|
|
}
|
|
public void bmBeastXpBuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return;
|
|
}
|
|
public void bmBeastXpBuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "beastBuff");
|
|
return;
|
|
}
|
|
public int combatStunAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id crystal = create.object("object/building/heroic/axkva_empty_crystal.iff", getLocation(self));
|
|
setObjVar(crystal, "player", self);
|
|
obj_id axkva = utils.getObjIdScriptVar(self, "axkva_min");
|
|
trial.setParent(axkva, crystal, false);
|
|
setLocation(self, getLocation(crystal));
|
|
attachScript(crystal, "theme_park.heroic.axkva_min.crystal_prison");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int combatStunRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, "axkva_crystal");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int krixResonanceAddBuffHandler(obj_id self, String effectName, String subType, float duartion, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
playClientEffectObj(self, "appearance/pt_contagion_debuff.prt", self, "", null, "resonance");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int krixResonanceRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
stopClientEffectObjByLabel(self, "resonance");
|
|
obj_id krix = getFirstObjectWithScript(getLocation(self), 250.0f, "theme_park.heroic.star_destroyer.krix");
|
|
if (!isIdValid(krix) || ai_lib.isDead(krix))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary dict = new dictionary();
|
|
dict.put("player", self);
|
|
messageTo(krix, "contagion_bomb", dict, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int delayedAddBuff(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
String buffName = params.getString("buffName");
|
|
if (buffName == null || buffName.equals(""))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
buff.applyBuff(self, self, buffName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int lureshContagionAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int lureshContagionRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id[] monkey = trial.getObjectsInDungeonWithObjVar(trial.getTop(self), "skreeg_id");
|
|
if (monkey == null || monkey.length == 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id luresh = monkey[0];
|
|
if (!isIdValid(luresh) || !exists(luresh) || isDead(luresh))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id[] players = trial.getValidTargetsInCell(trial.getTop(self), "r3");
|
|
if (players == null || players.length == 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id topAction = null;
|
|
int currentAction = 0;
|
|
for (obj_id player : players) {
|
|
int thisPlayer = getAction(player);
|
|
if (thisPlayer > currentAction) {
|
|
topAction = player;
|
|
}
|
|
}
|
|
if (!isIdValid(topAction))
|
|
{
|
|
topAction = self;
|
|
}
|
|
queueCommand(luresh, (-1048892018), topAction, "", COMMAND_PRIORITY_DEFAULT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int razorBurstHandlerAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int buffCrc = buff.getBuffOnTargetFromGroup(self, "rb_vulnerability");
|
|
if (buffCrc == 0)
|
|
{
|
|
buff.applyBuff(self, self, "razor_burst_vulnerability_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String myBuffName = buff.getBuffNameFromCrc(buffCrc);
|
|
String[] parse = split(myBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
level = level > 9 ? 10 : level + 1;
|
|
buff.applyBuff(self, self, "razor_burst_vulnerability_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int razorBurstHandlerRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int caretakerHandlerAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int buffCrc = buff.getBuffOnTargetFromGroup(self, "ct_debuff");
|
|
if (buffCrc == 0)
|
|
{
|
|
buff.applyBuff(self, self, "caretaker_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String myBuffName = buff.getBuffNameFromCrc(buffCrc);
|
|
String[] parse = split(myBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
level = level > 9 ? 10 : level + 1;
|
|
buff.applyBuff(self, self, "caretaker_debuff_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int caretakerHandlerRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int closedFistBurnHandlerAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
playClientEffectObj(self, "appearance/pt_state_onfire.prt", self, "", null, "closed_fist_burn");
|
|
messageTo(self, "handle_closed_fist_burn", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handle_closed_fist_burn(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!buff.hasBuff(self, "closed_fist_burn"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id closed_fist = getFirstObjectWithScript(getLocation(self), 250.0f, "theme_park.heroic.exar_kun.closed_fist");
|
|
if (!isIdValid(closed_fist) || !exists(closed_fist) || isDead(closed_fist))
|
|
{
|
|
buff.removeBuff(self, "closed_fist_burn");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location tarLoc = getLocation(self);
|
|
String targetData = "" + tarLoc.x + " " + tarLoc.y + " " + tarLoc.z + " " + tarLoc.cell + " " + tarLoc.x + " " + tarLoc.y + " " + tarLoc.z;
|
|
queueCommand(closed_fist, (1856722390), self, targetData, COMMAND_PRIORITY_DEFAULT);
|
|
messageTo(self, "handle_closed_fist_burn", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int closedFistBurnHandlerRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
stopClientEffectObjByLabel(self, "closed_fist_burn");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int closedFistBurnDebuffAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int buffCrc = buff.getBuffOnTargetFromGroup(self, "cf_burn_debuff");
|
|
if (buffCrc == 0)
|
|
{
|
|
buff.applyBuff(self, self, "closed_fist_burn_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String myBuffName = buff.getBuffNameFromCrc(buffCrc);
|
|
String[] parse = split(myBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
level = level > 2 ? 3 : level + 1;
|
|
buff.applyBuff(self, self, "closed_fist_burn_debuff_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int closedFistBurnDebuffRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunChaosHandlerAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int orderDebuffCrc = buff.getBuffOnTargetFromGroup(self, "kun_order_debuff");
|
|
int chaosDebuffCrc = buff.getBuffOnTargetFromGroup(self, "kun_chaos_debuff");
|
|
if (orderDebuffCrc == 0)
|
|
{
|
|
if (chaosDebuffCrc == 0)
|
|
{
|
|
buff.applyBuff(self, self, "kun_chaos_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String chaosBuffName = buff.getBuffNameFromCrc(chaosDebuffCrc);
|
|
String[] parse = split(chaosBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
level = level > 9 ? 10 : level + 1;
|
|
buff.applyBuff(self, self, "kun_chaos_debuff_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
String orderBuffName = buff.getBuffNameFromCrc(orderDebuffCrc);
|
|
String[] parse = split(orderBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
if (level == 1)
|
|
{
|
|
buff.removeBuff(self, "kun_order_debuff_1");
|
|
buff.applyBuff(self, self, "kun_chaos_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
level = level - 1;
|
|
buff.applyBuff(self, self, "kun_order_debuff_" + level);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunChaosHandlerRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunOrderHandlerAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int orderDebuffCrc = buff.getBuffOnTargetFromGroup(self, "kun_order_debuff");
|
|
int chaosDebuffCrc = buff.getBuffOnTargetFromGroup(self, "kun_chaos_debuff");
|
|
if (chaosDebuffCrc == 0)
|
|
{
|
|
if (orderDebuffCrc == 0)
|
|
{
|
|
buff.applyBuff(self, self, "kun_order_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String orderBuffName = buff.getBuffNameFromCrc(orderDebuffCrc);
|
|
String[] parse = split(orderBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
level = level > 9 ? 10 : level + 1;
|
|
buff.applyBuff(self, self, "kun_order_debuff_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else
|
|
{
|
|
String chaosBuffName = buff.getBuffNameFromCrc(chaosDebuffCrc);
|
|
String[] parse = split(chaosBuffName, '_');
|
|
int level = utils.stringToInt(parse[parse.length - 1]);
|
|
if (level == 1)
|
|
{
|
|
buff.removeBuff(self, "kun_chaos_debuff_1");
|
|
buff.applyBuff(self, self, "kun_order_debuff_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
level = level - 1;
|
|
buff.applyBuff(self, self, "kun_chaos_debuff_" + level);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunOrderHandlerRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int setSpecialTypeAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String special_type_name = subType.substring(15, subType.length());
|
|
setObjVar(self, "specialNicheType", special_type_name);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int setSpecialTypeRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasObjVar(self, "specialNicheType"))
|
|
{
|
|
removeObjVar(self, "specialNicheType");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunOpenSparkAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
playClientEffectObj(self, "appearance/pt_electric_flare_green.prt", self, "head", null, "kun_spark");
|
|
trial.bumpSession(self, "spark_handler");
|
|
messageTo(self, "openSparkHandler", trial.getSessionDict(self, "spark_handler"), 0.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int openSparkHandler(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!trial.verifySession(self, params, "spark_handler"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id openHand = getFirstObjectWithScript(getLocation(self), 100.0f, "theme_park.heroic.exar_kun.open_hand");
|
|
if (!isIdValid(openHand) || !exists(openHand) || isDead(openHand))
|
|
{
|
|
buff.removeBuff(self, "kun_open_spark");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
location selfLoc = getLocation(self);
|
|
location tesla = (location)selfLoc.clone();
|
|
tesla.x = -11.7f;
|
|
tesla.y = 11.0f;
|
|
tesla.z = -64.6f;
|
|
float travelDistance = getDistance(selfLoc, tesla);
|
|
float speed = travelDistance / 2.0f;
|
|
createClientProjectile(self, "object/weapon/ranged/pistol/shared_pistol_green_bolt.iff", tesla, selfLoc, speed, 2.0f, false, 255, 0, 0, 255);
|
|
String targetData = "" + selfLoc.x + " " + selfLoc.y + " " + selfLoc.z + " " + selfLoc.cell + " " + selfLoc.x + " " + selfLoc.y + " " + selfLoc.z;
|
|
queueCommand(openHand, (744605409), self, targetData, COMMAND_PRIORITY_DEFAULT);
|
|
messageTo(self, "openSparkHandler", trial.getSessionDict(self, "spark_handler"), 4.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int kunOpenSparkRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
stopClientEffectObjByLabel(self, "kun_spark");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int callPickupCraftAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int callPickupCraftRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id pickupCraft = utils.getObjIdScriptVar(self, "instantTravelShip.pickupCraft");
|
|
if (isIdValid(pickupCraft))
|
|
{
|
|
messageTo(pickupCraft, "cleanupShip", null, 0, false);
|
|
}
|
|
utils.removeScriptVarTree(self, "instantTravelShip");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fs_choke_handlerAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int buffCrc = getStringCrc(subtype.toLowerCase());
|
|
obj_id owner = utils.getObjIdScriptVar(self, "buffOwner." + buffCrc);
|
|
int imp_choke = getEnhancedSkillStatisticModifierUncapped(owner, "expertise_fs_imp_choke");
|
|
imp_choke = imp_choke > 2 ? 2 : imp_choke;
|
|
if (imp_choke > 0)
|
|
{
|
|
buff.applyBuff(self, self, "fs_imp_choke_" + imp_choke);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fs_choke_handlerRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int jediStatueLightDebuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String buffToApply = "jedi_statue_light_debuff_light";
|
|
if (buff.isInFocus(self))
|
|
{
|
|
buffToApply = "jedi_statue_light_debuff_dark";
|
|
}
|
|
buff.applyBuff(self, self, buffToApply);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int jediStatueLightDebuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int jediStatueDarkDebuffAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String buffToApply = "jedi_statue_dark_debuff_light";
|
|
if (buff.isInFocus(self))
|
|
{
|
|
buffToApply = "jedi_statue_dark_debuff_dark";
|
|
}
|
|
buff.applyBuff(self, self, buffToApply);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int jediStatueDarkDebuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fs_flurry_procAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_1|fs_flurry_1");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_2|fs_flurry_2");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_3|fs_flurry_3");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_4|fs_flurry_4");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_5|fs_flurry_5");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_6|fs_flurry_6");
|
|
buff.applyBuff(self, self, "attack_override_fs_dm_7|fs_flurry_7");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int fs_flurry_procRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String[] buffList =
|
|
{
|
|
"attack_override_fs_dm_1|fs_flurry_1",
|
|
"attack_override_fs_dm_2|fs_flurry_2",
|
|
"attack_override_fs_dm_3|fs_flurry_3",
|
|
"attack_override_fs_dm_4|fs_flurry_4",
|
|
"attack_override_fs_dm_5|fs_flurry_5",
|
|
"attack_override_fs_dm_6|fs_flurry_6",
|
|
"attack_override_fs_dm_7|fs_flurry_7"
|
|
};
|
|
buff.removeBuffs(self, buffList);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int forceThrowAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int buffCrc = getStringCrc(subtype.toLowerCase());
|
|
obj_id owner = utils.getObjIdScriptVar(self, "buffOwner." + buffCrc);
|
|
if (!buff.isInStance(owner))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int stanceSaberShackle = (int)getSkillStatisticModifier(owner, "expertise_buff_chance_line_fs_force_throw");
|
|
stanceSaberShackle = stanceSaberShackle > 100 ? 100 : stanceSaberShackle;
|
|
if (stanceSaberShackle <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int rootChance = (stanceSaberShackle / 25) * 4;
|
|
if (rand(0, 99) < rootChance)
|
|
{
|
|
buff.applyBuff(self, owner, "fs_force_throw_root");
|
|
buff.applyBuff(self, owner, getStringCrc("fs_force_throw_" + (stanceSaberShackle / 25)), duration);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (rand(0, 99) < stanceSaberShackle)
|
|
{
|
|
buff.applyBuff(self, owner, getStringCrc("fs_force_throw_" + (stanceSaberShackle / 25)), duration);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int forceThrowRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int aggroChannelAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!exists(caster) || !isIdValid(caster))
|
|
{
|
|
buff.removeBuff(self, buffName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
prose_package pp = new prose_package();
|
|
String casterName = "";
|
|
if (isPlayer(caster))
|
|
{
|
|
casterName = getFirstName(caster);
|
|
}
|
|
else
|
|
{
|
|
casterName = "@" + getName(caster);
|
|
}
|
|
prose.setTT(pp, casterName);
|
|
if (subtype.equals("target"))
|
|
{
|
|
buff.applyBuff(caster, self, "aggroChannelself");
|
|
prose.setStringId(pp, new string_id("squad_leader", "aggro_channel_applied_target"));
|
|
sendSystemMessageProse(self, pp);
|
|
}
|
|
if (subtype.equals("self"))
|
|
{
|
|
prose.setStringId(pp, new string_id("squad_leader", "aggro_channel_applied_self"));
|
|
sendSystemMessageProse(self, pp);
|
|
utils.setScriptVar(self, buff.AGGRO_TRANSFER_TO, caster);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int aggroChannelRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!exists(caster) || !isIdValid(caster))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (subtype.equals("target"))
|
|
{
|
|
buff.removeBuff(caster, "aggroChannelself");
|
|
}
|
|
if (subtype.equals("self"))
|
|
{
|
|
obj_id buffed = utils.getObjIdScriptVar(self, buff.AGGRO_TRANSFER_TO);
|
|
buff.removeBuff(buffed, "aggroChannelTarget");
|
|
utils.removeScriptVar(self, buff.AGGRO_TRANSFER_TO);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
long stack = buff.getBuffStackCount(self, buffName) > 1 ? buff.getBuffStackCount(self, buffName) : 1;
|
|
dot.applyBuffDotEffect(self, caster, subtype, buffName + "_" + subtype, stack, HEALTH, 100, (int)value, (int)duration, true, buffName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int dotRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
dot.removeBuffDotEffect(self, subtype, true);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int expertiseDamageDecreaseAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int damageDecrease = (int)getSkillStatisticModifier(self, "expertise_damage_decrease_percentage");
|
|
if (damageDecrease > 0)
|
|
{
|
|
skillAddBuffHandler(self, effectName, "damage_decrease_percentage", duration, damageDecrease, "", null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int expertiseDamageDecreaseRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (effectName.lastIndexOf("_") > 0)
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
int damageDecrease = (int)getSkillStatisticModifier(self, "expertise_damage_decrease_percentage");
|
|
if (damageDecrease > 0)
|
|
{
|
|
skillRemoveBuffHandler(self, effectName, "damage_decrease_percentage", duration, damageDecrease, "", null);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onAttackRemoveAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
Vector removeBuffs = new Vector();
|
|
removeBuffs.setSize(0);
|
|
if (utils.hasScriptVar(self, buff.ON_ATTACK_REMOVE))
|
|
{
|
|
removeBuffs = utils.getResizeableStringArrayScriptVar(self, buff.ON_ATTACK_REMOVE);
|
|
}
|
|
if (removeBuffs != null && removeBuffs.size() > 0)
|
|
{
|
|
removeBuffs.add(buffName);
|
|
}
|
|
else if (removeBuffs.indexOf(buffName) < 0)
|
|
{
|
|
removeBuffs.add(buffName);
|
|
}
|
|
utils.setScriptVar(self, buff.ON_ATTACK_REMOVE, removeBuffs);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int onAttackRemoveRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
Vector removeBuffs = new Vector();
|
|
removeBuffs.setSize(0);
|
|
if (utils.hasScriptVar(self, buff.ON_ATTACK_REMOVE))
|
|
{
|
|
removeBuffs = utils.getResizeableStringArrayScriptVar(self, buff.ON_ATTACK_REMOVE);
|
|
}
|
|
else
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
utils.removeScriptVar(self, buff.ON_ATTACK_REMOVE);
|
|
if (removeBuffs.indexOf(buffName) > -1)
|
|
{
|
|
removeBuffs.remove(buffName);
|
|
}
|
|
if (removeBuffs != null || removeBuffs.size() > 0)
|
|
{
|
|
utils.setScriptVar(self, buff.ON_ATTACK_REMOVE, removeBuffs);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int supression_handlerAddBuffHandler(obj_id self, String effectName, String subytype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float improvedSpeed = getEnhancedSkillStatisticModifierUncapped(caster, "expertise_supression_speed");
|
|
int level = Math.round(improvedSpeed / 10.0f);
|
|
buff.applyBuff(self, caster, "co_supressing_fire_" + level);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int supression_handlerRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int movementSupressingEffectAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float snareResist = 0.0f;
|
|
if (isMob(self) && !isPlayer(self))
|
|
{
|
|
snareResist = getEnhancedSkillStatisticModifierUncapped(self, "movement_resist_snare");
|
|
}
|
|
snareResist = 1.0f - (snareResist / 100.0f);
|
|
snareResist = snareResist < 0.0f ? 0.0f : snareResist;
|
|
snareResist = snareResist > 1.0f ? 1.0f : snareResist;
|
|
value *= snareResist;
|
|
value = value > 89.0f ? 89.0f : value;
|
|
addSlowDownEffect(caster, self, 96.0f, 0.01f, value, duration);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int movementSupressingEffectRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int damageImmuneAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.performBuffDotImmunity(self, "all");
|
|
addSkillModModifier(self, "damageImmuneDotResistAll", "dot_resist_all", 100, duration, false, true);
|
|
addSkillModModifier(self, "damageImmuneDamageImmune", "damage_immune", 1, duration, false, true);
|
|
if (sui.hasEventFlag(self, sui.CD_EVENT_DAMAGE_IMMUNE))
|
|
{
|
|
sui.cancelCountdownTimer(self, sui.CD_EVENT_DAMAGE_IMMUNE);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int damageImmuneRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
removeAttribOrSkillModModifier(self, "damageImmuneDotResistAll");
|
|
removeAttribOrSkillModModifier(self, "damageImmuneDamageImmune");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhFlawlessAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.applyBuff(self, "bh_flawless_proc_chance_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhFlawlessRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.removeBuff(self, "bh_flawless_proc_chance_1");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int mtpMeatlumpAngryAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
ai_lib.setMood(self, chat.MOOD_ANGRY);
|
|
chat.setChatMood(self, chat.MOOD_ANGRY);
|
|
attachScript(self, "theme_park.meatlump.hideout.angry_meatlump");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int mtpMeatlumpAngryRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int mtpMeatlumpHappyAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
ai_lib.setMood(self, chat.MOOD_HAPPY);
|
|
chat.setChatMood(self, chat.MOOD_HAPPY);
|
|
removeObjVar(self, "angryMeatlump");
|
|
detachScript(self, "theme_park.meatlump.hideout.angry_meatlump");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int mtpMeatlumpHappyRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int eventParticleAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
String particleName = buff.getParticle(buffName);
|
|
dictionary params = new dictionary();
|
|
params.put("effectName", effectName);
|
|
params.put("particleName", particleName);
|
|
params.put("buffName", buffName);
|
|
messageTo(self, "eventParticleReload", params, 15.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int eventParticleReload(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
String particleName = params.getString("particleName");
|
|
String buffName = params.getString("buffName");
|
|
String effectName = params.getString("effectName");
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
if (buff.hasBuff(self, buffName))
|
|
{
|
|
playClientEffectObj(self, particleName, self, "");
|
|
messageTo(self, "eventParticleReload", params, 15.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int eventParticleRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (effectName.lastIndexOf("_") > 0)
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
}
|
|
stopClientEffectObjByLabel(self, effectName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int costumeAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int row = dataTableSearchColumnForInt((int)value, "INDEX", DATATABLE_COSTUME);
|
|
if (row < 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String costume = dataTableGetString(DATATABLE_COSTUME, row, "APPEARANCE");
|
|
if (getGender(self) == Gender.FEMALE)
|
|
{
|
|
String female_costume = dataTableGetString(DATATABLE_COSTUME, row, "FEMALE_APPEARANCE");
|
|
if (female_costume != null && female_costume.length() > 0 && !female_costume.equals("none"))
|
|
{
|
|
costume = female_costume;
|
|
}
|
|
}
|
|
if (costume == null || costume.length() <= 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
obj_id unequipedWeapon = utils.unequipWeaponHand(self);
|
|
if (isIdValid(unequipedWeapon))
|
|
{
|
|
setObjVar(self, "costume.unequipedWeapon", unequipedWeapon);
|
|
}
|
|
setObjectAppearance(self, costume);
|
|
attachScript(self, "event.halloween.trick_or_treater");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int costumeRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
revertObjectAppearance(self);
|
|
detachScript(self, "event.halloween.trick_or_treater");
|
|
if (hasObjVar(self, "costume.unequipedWeapon"))
|
|
{
|
|
obj_id unequipedWeapon = getObjIdObjVar(self, "costume.unequipedWeapon");
|
|
if (isIdValid(unequipedWeapon))
|
|
{
|
|
if (exists(unequipedWeapon) && utils.isNestedWithin(unequipedWeapon, self))
|
|
{
|
|
obj_id alreadyEquipped = getObjectInSlot(self, "hold_r");
|
|
if (!isIdValid(alreadyEquipped))
|
|
{
|
|
equip(unequipedWeapon, self);
|
|
}
|
|
}
|
|
}
|
|
removeObjVar(self, "costume.unequipedWeapon");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int costumeBurningEffectAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
playClientEffectObj(self, "appearance/pt_state_onfire.prt", self, "", null, "costume_burning_effect");
|
|
messageTo(self, "handleCostumeBurningBuffEffect", null, 15, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int costumeBurningEffectRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
stopClientEffectObjByLabel(self, "costume_burning_effect");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void checkToRefreshCostumeBurningEffect(obj_id self) throws InterruptedException
|
|
{
|
|
int[] costumeBurningBuffs = buff.getAllBuffsByEffect(self, "costume_burning_effect");
|
|
if (costumeBurningBuffs != null && costumeBurningBuffs.length > 0)
|
|
{
|
|
stopClientEffectObjByLabel(self, "costume_burning_effect");
|
|
playClientEffectObj(self, "appearance/pt_state_onfire.prt", self, "", null, "costume_burning_effect");
|
|
messageTo(self, "handleCostumeBurningBuffEffect", null, 15, false);
|
|
}
|
|
return;
|
|
}
|
|
public int handleCostumeBurningBuffEffect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
checkToRefreshCostumeBurningEffect(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int lovedayHeartsEffectAddBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
playClientEffectObj(self, "appearance/pt_efol_hearts_02.prt", self, "head", null, "loveday_hearts_effect");
|
|
messageTo(self, "handleLovedayHeartsEffect", null, 15, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int lovedayHeartsEffectRemoveBuffHandler(obj_id self, String effectName, String subType, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
stopClientEffectObjByLabel(self, "loveday_hearts_effect");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void checkToRefreshLovedayHeartsEffect(obj_id self) throws InterruptedException
|
|
{
|
|
int[] lovedayHeartsBuffs = buff.getAllBuffsByEffect(self, "loveday_hearts_effect");
|
|
if (lovedayHeartsBuffs != null && lovedayHeartsBuffs.length > 0)
|
|
{
|
|
stopClientEffectObjByLabel(self, "loveday_hearts_effect");
|
|
playClientEffectObj(self, "appearance/pt_efol_hearts_02.prt", self, "head", null, "loveday_hearts_effect");
|
|
messageTo(self, "handleCostumeBurningBuffEffect", null, 15, false);
|
|
}
|
|
return;
|
|
}
|
|
public int handleLovedayHeartsEffect(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
checkToRefreshLovedayHeartsEffect(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int OnNewbieTutorialResponse(obj_id self, String action) throws InterruptedException
|
|
{
|
|
if (action.equals("clientReady"))
|
|
{
|
|
checkToRefreshCostumeBurningEffect(self);
|
|
checkToRefreshLovedayHeartsEffect(self);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int halloweenCooldownAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float yaw = getYaw(self);
|
|
utils.setScriptVar(self, "yaw", yaw);
|
|
suspendMovement(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int halloweenCooldownRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
float yaw = utils.getFloatScriptVar(self, "yaw");
|
|
setYaw(self, yaw);
|
|
utils.removeScriptVar(self, "yaw");
|
|
resumeMovement(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int halloweenCoinLimitAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int now = getCalendarTime();
|
|
int secondsUntil = secondsUntilNextDailyTime(10, 0, 0);
|
|
int then = now + secondsUntil;
|
|
if (hasObjVar(self, event_perk.COUNTER_TIMESTAMP))
|
|
{
|
|
then = getIntObjVar(self, event_perk.COUNTER_TIMESTAMP);
|
|
if (now > then)
|
|
{
|
|
removeObjVar(self, event_perk.COUNTER_TIMESTAMP);
|
|
buff.removeBuff(self, "event_halloween_coin_limit");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|
|
if (!hasObjVar(self, event_perk.COUNTER_TIMESTAMP))
|
|
{
|
|
setObjVar(self, event_perk.COUNTER_TIMESTAMP, then);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int halloweenCoinLimitRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (hasObjVar(self, event_perk.COUNTER_TIMESTAMP))
|
|
{
|
|
int now = getCalendarTime();
|
|
int then = getIntObjVar(self, event_perk.COUNTER_TIMESTAMP);
|
|
if (now >= then)
|
|
{
|
|
removeObjVar(self, event_perk.COUNTER_TIMESTAMP);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int lifedayCompetitiveBuffRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (events.isEventActive(events.LIFEDAY))
|
|
{
|
|
obj_id tatooine = getPlanetByName("tatooine");
|
|
setObjVar(self, "lifeday.locked_out", 1);
|
|
string_id times_up = new string_id("event/life_day", "time_is_up");
|
|
sendSystemMessage(self, times_up);
|
|
if (!isIdValid(tatooine) || !exists(tatooine))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
dictionary params = new dictionary();
|
|
params.put("player", self);
|
|
messageTo(tatooine, "lifeDayScoreBoardUpdate", params, 0.0f, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int scoreBoardCheck(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (hasObjVar(self, "lifeday.token_counter"))
|
|
{
|
|
int playerScore = getIntObjVar(self, "lifeday.token_counter");
|
|
String playerName = getName(self);
|
|
String scoreBoardEmpty = params.getString("scoreBoardEmpty");
|
|
String playerFaction = "null";
|
|
if (hasObjVar(self, "lifeday.neutral_imperial"))
|
|
{
|
|
playerFaction = "Imperial Mercenary";
|
|
}
|
|
if (hasObjVar(self, "lifeday.neutral_rebel"))
|
|
{
|
|
playerFaction = "Rebel Mercenary";
|
|
}
|
|
if (factions.isImperial(self))
|
|
{
|
|
playerFaction = "Imperial Soldier";
|
|
}
|
|
if (factions.isRebel(self))
|
|
{
|
|
playerFaction = "Rebel Soldier";
|
|
}
|
|
if (scoreBoardEmpty.equals("true"))
|
|
{
|
|
updateScore(self, playerName, playerScore, playerFaction, "One", "true");
|
|
}
|
|
else
|
|
{
|
|
int thirdPlaceScore = params.getInt("thirdPlaceScore");
|
|
int secondPlaceScore = params.getInt("secondPlaceScore");
|
|
int firstPlaceScore = params.getInt("firstPlaceScore");
|
|
if (playerScore < thirdPlaceScore)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
else if (playerScore >= firstPlaceScore)
|
|
{
|
|
updateScore(self, playerName, playerScore, playerFaction, "One", "false");
|
|
}
|
|
else if (playerScore >= secondPlaceScore)
|
|
{
|
|
updateScore(self, playerName, playerScore, playerFaction, "Two", "false");
|
|
}
|
|
else
|
|
{
|
|
updateScore(self, playerName, playerScore, playerFaction, "Three", "false");
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void updateScore(obj_id self, String playerName, int playerScore, String playerFaction, String position, String scoreBoardEmpty) throws InterruptedException
|
|
{
|
|
obj_id tatooine = getPlanetByName("tatooine");
|
|
int oneScore = 0;
|
|
String oneName = "";
|
|
String oneFaction = "";
|
|
obj_id oneId = null;
|
|
int twoScore = 0;
|
|
String twoName = "";
|
|
String twoFaction = "";
|
|
obj_id twoId = null;
|
|
if (hasObjVar(tatooine, "lifeday.positionOne.playerScore"))
|
|
{
|
|
oneScore = getIntObjVar(tatooine, "lifeday.positionOne.playerScore");
|
|
oneName = getStringObjVar(tatooine, "lifeday.positionOne.playerName");
|
|
oneFaction = getStringObjVar(tatooine, "lifeday.positionOne.playerFaction");
|
|
oneId = getObjIdObjVar(tatooine, "lifeday.positionOne.playerObjId");
|
|
if (hasObjVar(tatooine, "lifeday.positionTwo.playerScore"))
|
|
{
|
|
twoScore = getIntObjVar(tatooine, "lifeday.positionTwo.playerScore");
|
|
twoName = getStringObjVar(tatooine, "lifeday.positionTwo.playerName");
|
|
twoFaction = getStringObjVar(tatooine, "lifeday.positionTwo.playerFaction");
|
|
twoId = getObjIdObjVar(tatooine, "lifeday.positionTwo.playerObjId");
|
|
}
|
|
}
|
|
if (playerFaction.equals("null"))
|
|
{
|
|
return;
|
|
}
|
|
if (scoreBoardEmpty.equals("true"))
|
|
{
|
|
setObjVar(tatooine, "lifeday.emptyScoreBoard", "false");
|
|
}
|
|
if (position.equals("One"))
|
|
{
|
|
if (isIdValid(twoId))
|
|
{
|
|
setObjVar(tatooine, "lifeday.positionThree.playerScore", twoScore);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerName", twoName);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerObjId", twoId);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerFaction", twoFaction);
|
|
}
|
|
if (isIdValid(oneId))
|
|
{
|
|
setObjVar(tatooine, "lifeday.positionTwo.playerScore", oneScore);
|
|
setObjVar(tatooine, "lifeday.positionTwo.playerName", oneName);
|
|
setObjVar(tatooine, "lifeday.positionTwo.playerObjId", oneId);
|
|
setObjVar(tatooine, "lifeday.positionTwo.playerFaction", oneFaction);
|
|
}
|
|
}
|
|
if (position.equals("Two"))
|
|
{
|
|
if (isIdValid(twoId))
|
|
{
|
|
setObjVar(tatooine, "lifeday.positionThree.playerScore", twoScore);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerName", twoName);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerObjId", twoId);
|
|
setObjVar(tatooine, "lifeday.positionThree.playerFaction", twoFaction);
|
|
}
|
|
}
|
|
setObjVar(tatooine, "lifeday.emptyScoreBoard", "false");
|
|
setObjVar(tatooine, "lifeday.position" + position + ".playerScore", playerScore);
|
|
setObjVar(tatooine, "lifeday.position" + position + ".playerName", playerName);
|
|
setObjVar(tatooine, "lifeday.position" + position + ".playerObjId", self);
|
|
setObjVar(tatooine, "lifeday.position" + position + ".playerFaction", playerFaction);
|
|
return;
|
|
}
|
|
public void checkLifeDayData(obj_id planet) throws InterruptedException
|
|
{
|
|
if (!hasObjVar(planet, "lifeday.time_stamp"))
|
|
{
|
|
newLifeDayTimeStamp(planet);
|
|
}
|
|
if (!hasObjVar(planet, "lifeday.emptyScoreBoard"))
|
|
{
|
|
setObjVar(planet, "lifeday.emptyScoreBoard", "true");
|
|
}
|
|
if (hasObjVar(planet, "lifeday.positionOne.playerScore"))
|
|
{
|
|
if (!newLifeDayDay(planet))
|
|
{
|
|
setObjVar(planet, "lifeday.emptyScoreBoard", "false");
|
|
}
|
|
}
|
|
if (newLifeDayDay(planet))
|
|
{
|
|
removeObjVar(planet, "lifeday");
|
|
setObjVar(planet, "lifeday.emptyScoreBoard", "true");
|
|
newLifeDayTimeStamp(planet);
|
|
}
|
|
}
|
|
public boolean newLifeDayDay(obj_id planet) throws InterruptedException
|
|
{
|
|
if (hasObjVar(planet, "lifeday.time_stamp"))
|
|
{
|
|
int now = getCalendarTime();
|
|
int then = getIntObjVar(planet, "lifeday.time_stamp");
|
|
if (now > then)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
public void newLifeDayTimeStamp(obj_id planet) throws InterruptedException
|
|
{
|
|
int now = getCalendarTime();
|
|
int secondsUntil = secondsUntilNextDailyTime(10, 0, 0);
|
|
int then = now + secondsUntil;
|
|
setObjVar(planet, "lifeday.time_stamp", then);
|
|
}
|
|
public int procResistAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int procResistRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int wampaBossIceThrowPrepAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
sendWampaBossWarning(self, "wampa_boss_ice_throw_prep");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int wampaBossIceThrowPrepRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
queueCommand(caster, (-1448600302), self, "", COMMAND_PRIORITY_IMMEDIATE);
|
|
obj_id[] otherPlayers = trial.getValidTargetsInRadiusIgnoreLOS(self, 8.0f);
|
|
if (otherPlayers != null && otherPlayers.length > 0)
|
|
{
|
|
for (obj_id nextPlayer : otherPlayers) {
|
|
if (isIdValid(nextPlayer) && nextPlayer != self) {
|
|
buff.applyBuff(nextPlayer, caster, "wampa_boss_ice_throw");
|
|
sendSystemMessage(nextPlayer, new string_id("dungeon_strings", "wampa_boss_ice_throw"));
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int wampaBossTauntaunThrowPrepAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
sendWampaBossWarning(self, "wampa_boss_tauntaun_throw_prep");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int wampaBossTauntaunThrowPrepRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
queueCommand(caster, (156825053), self, "", COMMAND_PRIORITY_IMMEDIATE);
|
|
obj_id[] otherPlayers = trial.getValidTargetsInRadiusIgnoreLOS(self, 8.0f);
|
|
if (otherPlayers != null && otherPlayers.length > 0)
|
|
{
|
|
for (obj_id nextPlayer : otherPlayers) {
|
|
if (isIdValid(nextPlayer) && nextPlayer != self) {
|
|
buff.applyBuff(nextPlayer, caster, "wampa_boss_tauntaun_throw");
|
|
sendSystemMessage(nextPlayer, new string_id("dungeon_strings", "wampa_boss_tauntaun_throw"));
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public void sendWampaBossWarning(obj_id target, String messageId) throws InterruptedException
|
|
{
|
|
String targetName = getName(target);
|
|
obj_id[] playersInArea = getPlayerCreaturesInRange(target, 250.0f);
|
|
if (playersInArea != null && playersInArea.length > 0)
|
|
{
|
|
for (obj_id player : playersInArea) {
|
|
if (isIdValid(player) && exists(player)) {
|
|
string_id message = new string_id("dungeon_strings", messageId);
|
|
prose_package pp = prose.getPackage(message, target, target);
|
|
prose.setTO(pp, targetName);
|
|
sendSystemMessageProse(player, pp);
|
|
}
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
public int iceblockEffectAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
dictionary webster = new dictionary();
|
|
webster.put("caster", caster);
|
|
webster.put("buffName", buffName);
|
|
messageTo(self, "handleDoIceblock", webster, 0.25f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleDoIceblock(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (params == null || params.isEmpty())
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
String buffName = params.getString("buffName");
|
|
if (isIncapacitated(self) || isDead(self))
|
|
{
|
|
buff.removeBuff(self, buffName);
|
|
}
|
|
else
|
|
{
|
|
if (!utils.hasScriptVar(self, "iceblock") && buff.hasBuff(self, buffName))
|
|
{
|
|
obj_id caster = params.getObjId("caster");
|
|
obj_id iceblock = create.object("object/tangible/dungeon/hoth/ice_block.iff", getLocation(self));
|
|
if (isIdValid(iceblock))
|
|
{
|
|
if (isIdValid(caster))
|
|
{
|
|
trial.setParent(caster, iceblock, false);
|
|
}
|
|
setLocation(self, getLocation(iceblock));
|
|
utils.setScriptVar(self, "iceblock", iceblock);
|
|
utils.setScriptVar(iceblock, "iceblocked", self);
|
|
utils.setScriptVar(iceblock, "buffName", buffName);
|
|
}
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int iceblockEffectRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id iceblock = utils.getObjIdScriptVar(self, "iceblock");
|
|
trial.cleanupObject(iceblock);
|
|
utils.removeScriptVar(self, "iceblock");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int barricadeDefenderAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.setScriptVar(self, combat.DAMAGE_REDIRECT, caster);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int barricadeDefenderRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVar(self, combat.DAMAGE_REDIRECT);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int snowspeederInstructionsAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
string_id message = new string_id("theme_park/heroic", "hoth_snowspeeder_instructions");
|
|
String templateOverride = "object/mobile/dressed_echo_base_luke_skywalker.iff";
|
|
obj_id instructor = self;
|
|
if (isIdValid(caster))
|
|
{
|
|
instructor = caster;
|
|
}
|
|
utils.messagePlayer(instructor, self, message, templateOverride);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int snowspeederInstructionsRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.applyBuff(self, "snowspeeder_instructions_block");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int radarHueAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
int row = dataTableSearchColumnForInt((int)value, "index", DATATABLE_RADAR_HUE);
|
|
if (row < 0)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
int red = dataTableGetInt(DATATABLE_RADAR_HUE, row, "red");
|
|
int green = dataTableGetInt(DATATABLE_RADAR_HUE, row, "green");
|
|
int blue = dataTableGetInt(DATATABLE_RADAR_HUE, row, "blue");
|
|
if (red < 0)
|
|
{
|
|
red = 0;
|
|
}
|
|
if (red > 255)
|
|
{
|
|
red = 255;
|
|
}
|
|
if (green < 0)
|
|
{
|
|
green = 0;
|
|
}
|
|
if (green > 255)
|
|
{
|
|
green = 255;
|
|
}
|
|
if (blue < 0)
|
|
{
|
|
blue = 0;
|
|
}
|
|
if (blue > 255)
|
|
{
|
|
blue = 255;
|
|
}
|
|
setOverrideMapColor(self, red, green, blue);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int radarHueRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
clearOverrideMapColor(self);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhShieldsChargedAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhShieldsChargedRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhShieldsAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
attachScript(self, "player.skill.bh_shields");
|
|
String shield_buff = "bh_shields";
|
|
buff.applyBuff(self, shield_buff);
|
|
_decrementBuffStack(self, getStringCrc(shield_buff.toLowerCase()), -98);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int bhShieldsRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int sp_covert_masteryAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int sp_covert_masteryRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int randomCollectionItemAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id collectionItem = collection.grantRandomCollectionItem(self, "datatables/loot/loot_items/collectible/magseal_loot.iff", "collections");
|
|
buff.removeBuff(self, buffName);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int randomCollectionItemRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwBonusGeneralAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
CustomerServiceLog("buff", "gcwBonusGeneral Buff used by player: " + self + " Name: " + getName(self) + " Effect: " + effectName + " subtype:" + subtype + " duration: " + duration + " value: " + value + " buffName: " + buffName + " caster: " + caster);
|
|
utils.setScriptVar(self, "buff.gcwBonusGeneral.value", value / 100);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwBonusGeneralRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
utils.removeScriptVarTree(self, "buff.gcwBonusGeneral");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int battlefieldCommuncationsGlowAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
buff.removeBuff(self, "battlefield_radar_invisibility");
|
|
if (stealth.hasInvisibleBuff(self))
|
|
{
|
|
buff.removeBuff(self, stealth.getInvisBuff(self));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int battlefieldCommuncationsGlowRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (effectName.lastIndexOf("_") > 0)
|
|
{
|
|
effectName = effectName.substring(0, (effectName.lastIndexOf("_")));
|
|
}
|
|
stopClientEffectObjByLabel(self, self, effectName);
|
|
buff.applyBuff(self, "battlefield_radar_invisibility");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayImperialRecruitmentAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayImperialRecruitmentRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, holiday.BUFF_IMPERIAL_RECRUITMENT_COUNTER))
|
|
{
|
|
buff.removeBuff(self, holiday.BUFF_IMPERIAL_RECRUITMENT_COUNTER);
|
|
}
|
|
modifyCollectionSlotValue(self, holiday.IMPERIAL_RECRUITING_COUNTER_SLOT, 1);
|
|
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_COMPLETED);
|
|
setObjVar(self, holiday.EMPIRE_DAY_RECRUITMENT_LOCKED_OUT, true);
|
|
holiday.setEventLockOutTimeStamp(self, holiday.EMPIRE_DAY_RECRUITMENT_TIMESTAMP);
|
|
if (hasObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialRecruitmentRemoveBuffHandler: Player: (" + self + ") is IMPERIAL and updating leader board because this is the second buff.");
|
|
if (!updateEmpireDayLeaderBoard(self, holiday.IMPERIAL_PLAYER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialRecruitmentRemoveBuffHandler: updateEmpireDayLeaderBoard reports that updating score for Player: (" + self + ") FAILED.");
|
|
}
|
|
removeObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER);
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialRecruitmentRemoveBuffHandler: Player: (" + self + ") is finishing their first buff. The leader board will not be updated.");
|
|
setObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER, true);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayRebelResistanceAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayRebelResistanceRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, holiday.BUFF_REBEL_RESISTANCE_COUNTER))
|
|
{
|
|
buff.removeBuff(self, holiday.BUFF_REBEL_RESISTANCE_COUNTER);
|
|
}
|
|
modifyCollectionSlotValue(self, holiday.REBEL_RESISTANCE_COUNTER_SLOT, 1);
|
|
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_COMPLETED);
|
|
setObjVar(self, holiday.EMPIRE_DAY_RESISTANCE_LOCKED_OUT, true);
|
|
holiday.setEventLockOutTimeStamp(self, holiday.EMPIRE_DAY_RESISTANCE_TIMESTAMP);
|
|
if (hasObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelResistanceRemoveBuffHandler: Player: (" + self + ") is REBEL and updating leader board because this is the second buff.");
|
|
if (!updateEmpireDayLeaderBoard(self, holiday.REBEL_PLAYER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelResistanceRemoveBuffHandler: updateEmpireDayLeaderBoard reports that updating score for Player: (" + self + ") FAILED.");
|
|
}
|
|
removeObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER);
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelResistanceRemoveBuffHandler: Player: (" + self + ") is finishing their first buff. The leader board will not be updated.");
|
|
setObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER, true);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayImperialPropagandaAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayImperialPropagandaRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, holiday.BUFF_IMPERIAL_ANTIPROPAGANDA_COUNTER))
|
|
{
|
|
buff.removeBuff(self, holiday.BUFF_IMPERIAL_ANTIPROPAGANDA_COUNTER);
|
|
}
|
|
modifyCollectionSlotValue(self, holiday.IMPERIAL_ANTIPROP_COUNTER_SLOT, 1);
|
|
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_COMPLETED);
|
|
setObjVar(self, holiday.EMPIRE_DAY_PROPAGANDA_LOCKED_OUT, true);
|
|
holiday.setEventLockOutTimeStamp(self, holiday.EMPIRE_DAY_PROPAGANDA_TIMESTAMP);
|
|
if (hasObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialPropagandaRemoveBuffHandler: Player: (" + self + ") is IMPERIAL and updating leader board because this is the second buff.");
|
|
if (!updateEmpireDayLeaderBoard(self, holiday.IMPERIAL_PLAYER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialPropagandaRemoveBuffHandler: updateEmpireDayLeaderBoard reports that updating score for Player: (" + self + ") FAILED.");
|
|
}
|
|
removeObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER);
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayImperialPropagandaRemoveBuffHandler: Player: (" + self + ") is finishing their first buff. The leader board will not be updated.");
|
|
setObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER, true);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayRebelVandalAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int empireDayRebelVandalRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (buff.hasBuff(self, holiday.BUFF_REBEL_PLAYER_VANDAL_COUNTER))
|
|
{
|
|
buff.removeBuff(self, holiday.BUFF_REBEL_PLAYER_VANDAL_COUNTER);
|
|
}
|
|
modifyCollectionSlotValue(self, holiday.REBEL_VANDAL_COUNTER_SLOT, 1);
|
|
play2dNonLoopingSound(self, groundquests.MUSIC_QUEST_COMPLETED);
|
|
setObjVar(self, holiday.EMPIRE_DAY_VANDAL_LOCKED_OUT, true);
|
|
holiday.setEventLockOutTimeStamp(self, holiday.EMPIRE_DAY_VANDAL_TIMESTAMP);
|
|
if (hasObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelVandalRemoveBuffHandler: Player: (" + self + ") is REBEL updating leader board because this is the second buff.");
|
|
if (!updateEmpireDayLeaderBoard(self, holiday.REBEL_PLAYER))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelVandalRemoveBuffHandler: updateEmpireDayLeaderBoard reports that updating score for Player: (" + self + ") FAILED.");
|
|
}
|
|
removeObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER);
|
|
}
|
|
else
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.empireDayRebelVandalRemoveBuffHandler: Player: (" + self + ") is finishing their first buff. The leader board will not be updated.");
|
|
setObjVar(self, holiday.EMPIRE_DAY_BUFF_TRACKER, true);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public boolean updateEmpireDayLeaderBoard(obj_id player, int faction) throws InterruptedException
|
|
{
|
|
if (!isValidId(player) || !exists(player))
|
|
{
|
|
return false;
|
|
}
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Updating leaderboard with Player: " + player + " of faction: " + faction + "score");
|
|
if (!hasObjVar(player, holiday.PLAYER_EMPIRE_DAY_SCORE))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Updating leaderboard with Player: " + player + " HAS NO SCORE. FAILING UPDATE");
|
|
return false;
|
|
}
|
|
int playerScore = getIntObjVar(player, holiday.PLAYER_EMPIRE_DAY_SCORE);
|
|
if (playerScore <= 0)
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Updating leaderboard with Player: " + player + " HAS A CORRUPT SCORE. FAILING UPDATE");
|
|
return false;
|
|
}
|
|
String playerName = getPlayerFullName(player);
|
|
if (playerName == null || playerName.length() <= 0)
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Updating leaderboard with Player: " + player + " HAS AN INVALID NAME. FAILING UPDATE");
|
|
return false;
|
|
}
|
|
obj_id tatooine = getPlanetByName("tatooine");
|
|
if (!isIdValid(tatooine) || !exists(tatooine))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Could not find Tatooine OID.");
|
|
return false;
|
|
}
|
|
int factionPassed = holiday.IMPERIAL_PLAYER;
|
|
if (faction == holiday.REBEL_PLAYER)
|
|
{
|
|
factionPassed = holiday.REBEL_PLAYER;
|
|
}
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: FACTION PASSED: " + factionPassed);
|
|
if (!holiday.setEmpireDayLeaderScores(tatooine, player, holiday.PLANET_VAR_EVENT_PREFIX + holiday.PLANET_VAR_EMPIRE_DAY + holiday.PLANET_VAR_SCORE, playerScore, playerName, factionPassed))
|
|
{
|
|
CustomerServiceLog("holidayEvent", "buff_handler.updateEmpireDayLeaderBoard: Player: (" + player + ") " + playerName + " was unable to attain leader board data. Their score was: " + playerScore);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
public int deathTroopersAfflictedTossAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
messageTo(self, "createAfflicted", null, 1.0f, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int createAfflicted(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
location loc = getLocation(self);
|
|
obj_id afflicted = create.object("outbreak_afflicted_lvl_90", loc);
|
|
debugSpeakMsg(self, "Eww. Gooy! " + afflicted);
|
|
if (isIdValid(afflicted))
|
|
{
|
|
setHate(self, afflicted, 0);
|
|
setHate(afflicted, self, 0);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int outbreakStackingInfectionAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (utils.hasScriptVar(self, "outbreak.innoculated") || !isInBlackwingInfectionedArea(self))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (value < 1)
|
|
{
|
|
value = 1.0f;
|
|
}
|
|
if (buff.getBuffStackCount(self, buffName) <= 1)
|
|
{
|
|
dictionary webster = trial.getSessionDict(self, "outbreak_stacking_infection");
|
|
webster.put("value", value);
|
|
messageTo(self, "handleOutbreakStackingInfection", webster, value, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int outbreakStackingInfectionRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
trial.bumpSession(self, "outbreak_stacking_infection");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int handleOutbreakStackingInfection(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
if (!trial.verifySession(self, params, "outbreak_stacking_infection"))
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (utils.hasScriptVar(self, "outbreak.innoculated") || buff.hasBuff(self, "death_troopers_inoculation") || buff.hasBuff(self, "death_troopers_infection_3") || !isInBlackwingInfectionedArea(self))
|
|
{
|
|
utils.setScriptVar(self, "outbreak.innoculated", true);
|
|
buff.removeBuff(self, "death_troopers_infection_2");
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
float value = params.getFloat("value");
|
|
if (value < 1)
|
|
{
|
|
value = 1.0f;
|
|
}
|
|
int buffCrc = getStringCrc("death_troopers_infection_2");
|
|
buff_data bdata = combat_engine.getBuffData(buffCrc);
|
|
int buffMaxStacks = bdata.maxStacks;
|
|
long buffStack = buff.getBuffStackCount(self, buffCrc);
|
|
if (buffStack >= buffMaxStacks)
|
|
{
|
|
}
|
|
else
|
|
{
|
|
buff.applyBuff(self, self, "death_troopers_infection_2");
|
|
}
|
|
dictionary webster = trial.getSessionDict(self, "outbreak_stacking_infection");
|
|
webster.put("value", value);
|
|
messageTo(self, "handleOutbreakStackingInfection", webster, value, false);
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public boolean isInBlackwingInfectionedArea(obj_id self) throws InterruptedException
|
|
{
|
|
if (locations.isInRegion(self, "@dathomir_region_names:black_mesa"))
|
|
{
|
|
return true;
|
|
}
|
|
obj_id building = getTopMostContainer(self);
|
|
if (isIdValid(building) && (getTemplateName(building)).equals("object/building/dathomir/imperial_blackwing_facility.iff"))
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
public int killPlayerAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (!isDead(self))
|
|
{
|
|
setPosture(self, POSTURE_INCAPACITATED);
|
|
pclib.killPlayer(self, self, false);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int beastScaleChangeAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (beast_lib.isBeast(self))
|
|
{
|
|
setScale(self, (beast_lib.getBeastScaleByLevel(self) * value));
|
|
setYaw(self, rand(0.0f, 360.0f));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int beastScaleChangeRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
setScale(self, beast_lib.getBeastScaleByLevel(self));
|
|
setYaw(self, rand(0.0f, 360.0f));
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int beastAutoFeederAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id beastBCD = beast_lib.getBeastBCD(self);
|
|
if (isIdValid(beastBCD))
|
|
{
|
|
obj_id player = beast_lib.getBCDPlayer(beastBCD);
|
|
boolean isHungry = false;
|
|
int[] petFood = beast_lib.getBCDBeastFood(beastBCD);
|
|
if (petFood != null && petFood.length > 0)
|
|
{
|
|
int currentHungerStatus = petFood[beast_lib.PET_WHICH_FOOD];
|
|
if (currentHungerStatus == beast_lib.PET_NO_FOOD)
|
|
{
|
|
isHungry = true;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
isHungry = true;
|
|
}
|
|
if (isHungry)
|
|
{
|
|
beast_lib.feedBeastUsingAutoFeeder(self, player, buffName);
|
|
}
|
|
else
|
|
{
|
|
obj_id autofeeder = utils.getObjIdScriptVar(self, beast_lib.getBeastBuffItemVar(buffName));
|
|
if (isIdValid(autofeeder))
|
|
{
|
|
obj_id beastFood = beast_lib.checkAutoFeederForBeastFood(autofeeder);
|
|
if (!isIdValid(beastFood))
|
|
{
|
|
sendSystemMessage(player, new string_id("tcg", "beast_auto_feeder_food_warning"));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
buff.removeBuff(self, buffName);
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int beastAutoFeederBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
if (utils.hasScriptVar(self, beast_lib.getBeastBuffItemVar(buffName)))
|
|
{
|
|
utils.removeScriptVar(self, beast_lib.getBeastBuffItemVar(buffName));
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwSpyDestroyPatrolExplosivesAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwSpyDestroyPatrolExplosivesRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwGeneralResistanceStackAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwGeneralResistanceStackRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwFatigueDecay(obj_id self, dictionary params) throws InterruptedException
|
|
{
|
|
int gcwFatigueTime = params.getInt("gcwFatigueTime");
|
|
int gcwFatigueScriptTime = utils.getIntScriptVar(self, "gcw.fatigueTime");
|
|
LOG("buff_handler", "gcwFatigueDecay gcwFatigueTime: " + gcwFatigueTime + " gcwFatigueScriptTime: " + gcwFatigueScriptTime);
|
|
if (gcwFatigueTime != gcwFatigueScriptTime)
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
if (buff.hasBuff(self, "gcw_fatigue"))
|
|
{
|
|
long buffStack = buff.getBuffStackCount(self, "gcw_fatigue");
|
|
buff.removeBuff(self, "gcw_fatigue");
|
|
if (buffStack > 1)
|
|
{
|
|
buff.applyBuffWithStackCount(self, "gcw_fatigue", (int)buffStack - 1);
|
|
}
|
|
if (buff.hasBuff(self, "gcw_fatigue"))
|
|
{
|
|
int gameTime = getGameTime();
|
|
params.put("gcwFatigueTime", gameTime);
|
|
utils.setScriptVar(self, "gcw.fatigueTime", gameTime);
|
|
messageTo(self, "gcwFatigueDecay", params, 120.0f, false);
|
|
}
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwMiniTurretAddBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
obj_id turret = null;
|
|
location loc = getLocation(self);
|
|
if (factions.getFactionFlag(self) == factions.FACTION_FLAG_IMPERIAL)
|
|
{
|
|
turret = advanced_turret.createTurret(self, loc, getYaw(self), advanced_turret.TYPE_BLOCK, advanced_turret.SIZE_MINI, advanced_turret.DAMAGE_ELEMENTAL_HEAT, 250, 500, 5000, 65.0f, 4.0f, "Imperial");
|
|
}
|
|
if (factions.getFactionFlag(self) == factions.FACTION_FLAG_REBEL)
|
|
{
|
|
turret = advanced_turret.createTurret(self, loc, getYaw(self), advanced_turret.TYPE_DISH, advanced_turret.SIZE_MINI, advanced_turret.DAMAGE_ELEMENTAL_HEAT, 250, 500, 5000, 65.0f, 2.0f, "Rebel");
|
|
}
|
|
if (isIdValid(turret) && exists(turret))
|
|
{
|
|
attachScript(turret, "systems.gcw.gcw_mini_turret");
|
|
}
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
public int gcwMiniTurretRemoveBuffHandler(obj_id self, String effectName, String subtype, float duration, float value, String buffName, obj_id caster) throws InterruptedException
|
|
{
|
|
return SCRIPT_CONTINUE;
|
|
}
|
|
}
|