AoE rewrite and bug fixes

Rewrote aoe checks for cone and line aoes and added minimum distance values
Added height checks for commands
Fixed combo effects repeating for every target hit by AoE attacks
Fixed teleport sometimes not raising (I think)
Fixed gear checks in some command scripts
This commit is contained in:
yogurt 2018-07-02 00:45:06 -05:00
parent 8c5375f609
commit cf30eef39e
34 changed files with 483 additions and 330 deletions

View file

@ -107,14 +107,14 @@ function onEventStarted(player, actor, triggerName, isTeleport)
if (destination ~= nil) then
randoPos = getRandomPointInBand(destination[2], destination[4], 3, 5);
rotation = getAngleFacing(randoPos.x, randoPos.y, destination[2], destination[4]);
GetWorldManager():DoZoneChange(player, destination[1], nil, 0, 2, randoPos.x, destination[3], randoPos.y, rotation);
--bandaid fix for returning while dead, missing things like weakness and the heal number
if (player:GetHP() == 0) then
player:SetHP(player.GetMaxHP());
player:ChangeState(0);
player:PlayAnimation(0x01000066);
end
GetWorldManager():DoZoneChange(player, destination[1], nil, 0, 2, randoPos.x, destination[3], randoPos.y, rotation);
end
end
end

View file

@ -11,7 +11,7 @@ end;
function onSkillFinish(caster, target, skill, action, actionContainer)
--8032701: Fighter's Gauntlets: Reduces Collusion cooldown by 10 seconds
if caster.GetEquipment().GetItemAtSlot(14).itemId == 8032701 then
if caster.HasItemEquippedInSlot(8032701, 13) then
skill.recastTimeMs = skill.recastTimeMs - 10000;
end

View file

@ -13,7 +13,7 @@ function onSkillFinish(caster, target, skill, action, actionContainer)
--This is for the "Cover" effect the caster receives.
local coverTier = 1
--8032701: Gallant Surcoat: Enhances Cover
if caster.GetEquipment().GetItemAtSlot(10).itemId == 8032701 then
if caster.HasItemEquippedInSlot(8032701, 10) then
coverTier = 2;
end

View file

@ -9,5 +9,9 @@ function onAbilityStart(caster, target, skill)
return 0;
end;
function onSkillFinish(caster, target, skill, action)
function onSkillFinish(caster, target, skill, action, actionContainer)
action.amount = skill.basePotency;
--DoAction handles rates, buffs, dealing damage
action.DoAction(caster, target, skill, actionContainer);
end;

View file

@ -11,7 +11,7 @@ end;
function onSkillFinish(caster, target, skill, action, actionContainer)
--8051401: Gallant Cuisses
if caster.GetEquipment().GetItemAtSlot(14).itemId == 8051401 then
if caster.HasItemEquippedInSlot(8051401, 12) then
ability.statusTier = 2;
end

View file

@ -15,7 +15,7 @@ function onAbilityStart(caster, target, ability)
local magnitude = 100;
--8032704: Drachen Mail
if caster.GetEquipment().GetItemAtSlot(10).itemId == 8032704 then
if caster.HasItemEquippedInSlot(8032704, 10) then
magnitude = 120;
end

View file

@ -9,7 +9,7 @@ end;
function onAbilityStart(caster, target, ability)
--8032703: Fighter's Cuirass: Enhances Vengeance
if caster.GetEquipment().GetItemAtSlot(13).itemId == 8032703 then
if caster.HasItemEquippedInSlot(8032703, 10) then
skill.statusTier = 2;
end

View file

@ -0,0 +1,18 @@
require("global");
properties = {
permissions = 0,
parameters = "ss",
description =
[[
Sets a modifier of player
!setmod <modId> <modVal> |
]],
}
function onTrigger(player, argc, modId, modVal)
local sender = "[setmod] ";
local mod = tonumber(modId)
local val = tonumber(modVal)
player:SetMod(mod, val);
end;

View file

@ -14,14 +14,11 @@ function onTrigger(player, argc, state)
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
local sender = "[setstate] ";
max = tonumber(state) or 0;
for s = 0, max do
if player and player.target then
player.target:ChangeState(s);
wait(0.8);
player:SendMessage(0x20, "", "state: "..s);
end;
end
local s = tonumber(state);
local actor = GetWorldManager():GetActorInWorld(player.currentTarget) or nil;
if player and actor then
actor:ChangeState(s);
wait(0.8);
player:SendMessage(0x20, "", "state: "..s);
end;
end;

View file

@ -14,8 +14,7 @@ function onMagicStart(caster, target, skill)
--8032705: Choral Shirt: Enhances Ballad of Magi
--With Choral Shirt, Ballad gives 26 mp a tick. It could be a flat 6 or multiply by 1.3
--Because minuet seemed like a normal addition I'm assuming this is too
local shirt = caster.GetEquipment().GetItemAtSlot(10);
if shirt and shirt.itemId == 8032705 then
if caster.HasItemEquippedInSlot(8032705, 10) then
mpPerTick = mpPerTick + 6;
end

View file

@ -13,7 +13,7 @@ function onSkillFinish(caster, target, skill, action, actionContainer)
action.amount = skill.basePotency;
--8071401: Gallant Gauntlets: Enhances Holy Succor
if caster.GetEquipment().GetItemAtSlot(13).itemId == 8071401 then
if caster.HasItemEquippedInSlot(8071401, 13) then
action.amount = action.amount * 1.10;
end

View file

@ -14,8 +14,7 @@ function onMagicStart(caster, target, skill)
--8071405: Choral Ringbands: Enhances Minuet of Rigor
--With Choral Tights, Minuet gives 60 ACC/MACC at 50. Unsure what it is at lower levels (ie if it's a flat added 25 MP or a multiplier)
--Assuming it's a flat 25 because that makes more sense than multiplying by 1.714
local gloves = caster.GetEquipment().GetItemAtSlot(13);
if gloves and gloves.itemId == 8071405 then
if caster.HasItemEquippedInSlot(8071405, 13) then
acc = acc + 25;
end

View file

@ -12,8 +12,7 @@ function onMagicStart(caster, target, skill)
local tpPerTick = 50;
--8051405: Choral Tights: Enhances Paeon Of War
local pants = caster.GetEquipment().GetItemAtSlot(12);
if pants and pants.itemId == 8051405 then
if caster.HasItemEquippedInSlot(8051405, 12) then
tpPerTick = 60;
end

View file

@ -17,7 +17,8 @@ function onSkillFinish(caster, target, skill, action, actionContainer)
local slope = 0.625;
local intercept = -110;
if caster.GetEquipment().GetItemAtSlot(14).itemId == 8051406 then
--8051406: Healer's Culottes: Enhances Regen
if caster.HasItemEquippedInSlot(8051406, 14) then
--I don't know if the numbers in that thread are completely correct because the AF Regen table has 3 1555s in a row.
--If we assume that AF boots multiply both static parts of the regenTick equation by 1.25, we get a decently close match to actual numbers
slope = slope * 1.25;
@ -26,7 +27,6 @@ function onSkillFinish(caster, target, skill, action, actionContainer)
local regenTick = (slope * caster.GetMod(modifiersGlobal.MagicEnhancePotency)) + intercept) + 1;
spell.statusMagnitude = regenTick;
--DoAction handles rates, buffs, dealing damage

View file

@ -1,14 +0,0 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -81,7 +81,8 @@ modifiersGlobal =
Regain = 70, --TP regen, should be -90 out of combat, Invigorate sets to 100+ depending on traits
RegenDown = 71, --Damage over time effects. Separate from normal Regen because of how they are displayed in game
Stoneskin = 72, --Nullifies damage
MinimumTpLock = 73
MinimumTpLock = 73, --Don't let TP fall below this, used in openings
KnockbackImmune = 74 --Immune to knockback effects when above 0
}
mobModifiersGlobal =

View file

@ -28,6 +28,16 @@ function getDistanceBetweenActors(actor1, actor2)
return math.sqrt(dx * dx + dy * dy + dz *dz);
end
function getXZDistanceBetweenActors(actor1, actor2)
local pos1 = actor1:GetPos();
local pos2 = actor2:GetPos();
local dx = pos1[0] - pos2[0];
local dz = pos1[2] - pos2[2];
return math.sqrt(dx * dx + dz *dz);
end
function math.Clamp(val, lower, upper)
if lower > upper then lower, upper = upper, lower end -- swap if boundaries supplied the wrong way
return math.max(lower, math.min(upper, val))