Combat changes and bug fixes

Added the combo and proc systems
Added scripts for most weaponskill and spells as well as some abilities and status effects
Added support for multihit attacks
Added AbilityState for abilities
Added hiteffects that change based on an attack's parameters
Added positionals

Changed how targeting works for battlecommands

Fixed bug that occurred when moving or swapping hotbar commands
Fixed bug that occurred when losing status effects
This commit is contained in:
yogurt 2018-02-15 13:20:46 -06:00
parent 837c7a9223
commit b8d6a943aa
175 changed files with 4361 additions and 1213 deletions

60
data/scripts/ability.lua Normal file
View file

@ -0,0 +1,60 @@
-- todo: add enums for status effects in global.lua
require("global")
require("battleutils")
--[[
statId - see BattleTemp.cs
modifier - Modifier.Intelligence, Modifier.Mind (see Modifier.cs)
multiplier -
]]
function HandleHealingSkill(caster, target, skill, action, statId, modifierId, multiplier, baseAmount)
potency = potency or 1.0;
healAmount = baseAmount;
-- todo: shit based on mnd
local mind = caster.GetMod(Modifier.Mind);
end;
function HandleAttackSkill(caster, target, skill, action, statId, modifierId, multiplier, baseAmount)
-- todo: actually handle this
damage = baseAmount or math.random(1,10) * 10;
return damage;
end;
function HandleStoneskin(caster, target, skill, action, statId, modifierId, damage)
--[[
if target.statusEffects.HasStatusEffect(StatusEffect.Stoneskin) then
-- todo: damage reduction
return true;
end;
]]
return false;
end;
--For abilities that inflict statuses, like aegis boon or taunt
function onStatusAbilityFinish(caster, target, skill, action)
action.battleActionType = BattleActionType.Status;
action.CalcHitType(caster, target, skill);
action.TryStatus(caster, target, skill, false);
return action.amount;
end;
function onAttackAbilityFinish(caster, target, skill, action)
action.battleActionType = BattleActionType.AttackPhysical;
local damage = math.random(50, 150);
action.amount = damage;
action.CalcHitType(caster, target, skill);
return action.amount;
end;
function onHealAbilityFinish(caster, target, skill, action)
action.battleActionType = BattleActionType.Heal;
local amount = math.random(150, 250);
action.amount = amount;
action.CalcHitType(caster, target, skill);
action.TryStatus(caster, target, skill, true);
return action.amount;
end;

View file

@ -34,23 +34,27 @@ function allyGlobal.onDespawn(ally)
end
--tryAggro serves the same purpose for now, keeping this around just in case
function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget)
print("helpPlayers");
if contentGroupCharas and not ally.IsEngaged() then
print("contentGroup exists");
for chara in contentGroupCharas do
print("looping");
if chara then
-- probably a player, or another ally
-- todo: queue support actions, heal, try pull hate off player etc
if chara:IsPlayer() then
if chara.IsPlayer() then
print("chara is a player");
-- do stuff
if not ally.IsEngaged() then
if chara.IsEngaged() then
allyGlobal.EngageTarget(ally, chara.target, nil);
break;
end
end
end
elseif chara.IsMonster() and chara.IsEngaged() then
if not ally.IsEngaged() then
print("Engaging monster that is engaged");
allyGlobal.EngageTarget(ally, chara, nil);
break;
end
@ -60,7 +64,6 @@ function allyGlobal.HelpPlayers(ally, contentGroupCharas, pickRandomTarget)
end
end
--Iterate over characters in contentGroup, if a player is in combat, assist them.
function allyGlobal.tryAggro(ally, contentGroupCharas)
local count = 0;
if contentGroupCharas and not ally.IsEngaged() then
@ -76,14 +79,12 @@ function allyGlobal.tryAggro(ally, contentGroupCharas)
break;
end
end
--[[
elseif contentGroupCharas[i].IsMonster() and contentGroupCharas[i].IsEngaged() then
if not ally.IsEngaged() then
print("Engaging monster that is engaged");
allyGlobal.EngageTarget(ally, contentGroupCharas[i], nil);
break;
end]]
end
end
end
end
@ -109,6 +110,7 @@ function allyGlobal.EngageTarget(ally, target, contentGroupCharas)
end
end
elseif target then
print("Engaging");
ally.Engage(target)
ally.hateContainer.AddBaseHate(target);
end

175
data/scripts/battlenpc.lua Normal file
View file

@ -0,0 +1,175 @@
local initClassItems, initRaceItems;
function onBeginLogin(player)
--New character, set the initial quest
if (player:GetPlayTime(false) == 0) then
initialTown = player:GetInitialTown();
if (initialTown == 1 and player:HasQuest(110001) == false) then
player:AddQuest(110001);
player:SetHomePoint(1280001);
elseif (initialTown == 2 and player:HasQuest(110005) == false) then
player:AddQuest(110005);
player:SetHomePoint(1280061);
elseif (initialTown == 3 and player:HasQuest(110009) == false) then
player:AddQuest(110009);
player:SetHomePoint(1280031);
end
end
--For Opening. Set Director and reset position incase d/c
if (player:HasQuest(110001) == true and player:GetZoneID() == 193) then
director = player:GetZone():CreateDirector("OpeningDirector", false);
player:AddDirector(director);
director:StartDirector(true);
player:SetLoginDirector(director);
player:KickEvent(director, "noticeEvent", true);
player.positionX = 0.016;
player.positionY = 10.35;
player.positionZ = -36.91;
player.rotation = 0.025;
player:GetQuest(110001):ClearQuestData();
player:GetQuest(110001):ClearQuestFlags();
elseif (player:HasQuest(110005) == true and player:GetZoneID() == 166) then
director = player:GetZone():CreateDirector("OpeningDirector", false);
player:AddDirector(director);
director:StartDirector(false);
player:SetLoginDirector(director);
player:KickEvent(director, "noticeEvent", true);
player.positionX = 369.5434;
player.positionY = 4.21;
player.positionZ = -706.1074;
player.rotation = -1.26721;
player:GetQuest(110005):ClearQuestData();
player:GetQuest(110005):ClearQuestFlags();
elseif (player:HasQuest(110009) == true and player:GetZoneID() == 184) then
--director = player:GetZone():CreateDirector("OpeningDirector", false);
--player:AddDirector(director);
--director:StartDirector(false);
--player:SetLoginDirector(director);
--player:KickEvent(director, "noticeEvent", true);
--
player.positionX = 5.364327;
player.positionY = 196.0;
player.positionZ = 133.6561;
player.rotation = -2.849384;
player:GetQuest(110009):ClearQuestData();
player:GetQuest(110009):ClearQuestFlags();
end
end
function onLogin(player)
if (player:GetPlayTime(false) == 0) then
player:SendMessage(0x1D,"",">PlayTime == 0, new player!");
initClassItems(player);
initRaceItems(player);
player:SavePlayTime();
end
end
function initClassItems(player)
local slotTable;
local invSlotTable;
--DoW
if (player.charaWork.parameterSave.state_mainSkill[0] == 2) then --PUG
player:GetInventory(0):AddItem({4020001, 8030701, 8050728, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 3) then --GLA
player:GetInventory(0):AddItem({4030010, 8031120, 8050245, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 4) then --MRD
player:GetInventory(0):AddItem({4040001, 8011001, 8050621, 8070346, 8090307});
player:GetEquipment():SetEquipment({0, 8, 12, 13, 15},{0, 1, 2, 3, 4});
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 7) then --ARC
player:GetInventory(0):AddItem({4070001, 8030601, 8050622, 8080601, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 8) then --LNC
player:GetInventory(0):AddItem({4080201, 8030801, 8051015, 8080501, 8090307});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
--DoM
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 22) then --THM
player:GetInventory(0):AddItem({5020001, 8030245, 8050346, 8080346, 8090208});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 23) then --CNJ
player:GetInventory(0):AddItem({5030101, 8030445, 8050031, 8080246, 8090208});
player:GetEquipment():SetEquipment({0, 10, 12, 14, 15},{0, 1, 2, 3, 4});
--DoH
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 29) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 30) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 31) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 32) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 33) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 34) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 35) then --
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 36) then --
--DoL
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 39) then --MIN
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 40) then --BTN
elseif (player.charaWork.parameterSave.state_mainSkill[0] == 41) then --FSH
end
end
function initRaceItems(player)
if (player.playerWork.tribe == 1) then --Hyur Midlander Male
player:GetInventory(0):AddItem(8040001);
player:GetInventory(0):AddItem(8060001);
elseif (player.playerWork.tribe == 2) then --Hyur Midlander Female
player:GetInventory(0):AddItem(8040002);
player:GetInventory(0):AddItem(8060002);
elseif (player.playerWork.tribe == 3) then --Hyur Highlander Male
player:GetInventory(0):AddItem(8040003);
player:GetInventory(0):AddItem(8060003);
elseif (player.playerWork.tribe == 4) then --Elezen Wildwood Male
player:GetInventory(0):AddItem(8040004);
player:GetInventory(0):AddItem(8060004);
elseif (player.playerWork.tribe == 5) then --Elezen Wildwood Female
player:GetInventory(0):AddItem(8040006);
player:GetInventory(0):AddItem(8060006);
elseif (player.playerWork.tribe == 6) then --Elezen Duskwight Male
player:GetInventory(0):AddItem(8040005);
player:GetInventory(0):AddItem(8060005);
elseif (player.playerWork.tribe == 7) then --Elezen Duskwight Female
player:GetInventory(0):AddItem(8040007);
player:GetInventory(0):AddItem(8060007);
elseif (player.playerWork.tribe == 8) then --Lalafell Plainsfolk Male
player:GetInventory(0):AddItem(8040008);
player:GetInventory(0):AddItem(8060008);
elseif (player.playerWork.tribe == 9) then --Lalafell Plainsfolk Female
player:GetInventory(0):AddItem(8040010);
player:GetInventory(0):AddItem(8060010);
elseif (player.playerWork.tribe == 10) then --Lalafell Dunesfolk Male
player:GetInventory(0):AddItem(8040009);
player:GetInventory(0):AddItem(8060009);
elseif (player.playerWork.tribe == 11) then --Lalafell Dunesfolk Female
player:GetInventory(0):AddItem(8040011);
player:GetInventory(0):AddItem(8060011);
elseif (player.playerWork.tribe == 12) then --Miqo'te Seekers of the Sun
player:GetInventory(0):AddItem(8040012);
player:GetInventory(0):AddItem(8060012);
elseif (player.playerWork.tribe == 13) then --Miqo'te Seekers of the Moon
player:GetInventory(0):AddItem(8040013);
player:GetInventory(0):AddItem(8060013);
elseif (player.playerWork.tribe == 14) then --Roegadyn Sea Wolf
player:GetInventory(0):AddItem(8040014);
player:GetInventory(0):AddItem(8060014);
elseif (player.playerWork.tribe == 15) then --Roegadyn Hellsguard
player:GetInventory(0):AddItem(8040015);
player:GetInventory(0):AddItem(8060015);
end
player:GetEquipment():SetEquipment({9, 11},{5,6});
end

View file

@ -0,0 +1,8 @@
BattleActionType =
{
None = 0,
AttackPhysical = 1,
AttackMagic = 2,
Heal = 3,
Status = 4
}

View file

@ -14,14 +14,6 @@ local attackMagicHandlers = {
}
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
print(command.actorId)
--Are they in active mode?
if (player:GetState() != 2) then
player:SendGameMessage(GetWorldMaster(), 32503, 0x20);
player:endEvent();
return;
end
player.Ability(command.actorId, targetActor);
player:endEvent();

View file

@ -0,0 +1,5 @@
require("global")
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
end

View file

@ -0,0 +1,20 @@
require ("global")
require ("utils")
--[[
AttackWeaponSkill Script
Finds the correct weaponskill subscript to fire when a weaponskill actor is activated.
--]]
local attackMagicHandlers = {
}
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Ability(command.actorId, targetActor);
player:endEvent();
end

View file

@ -0,0 +1,5 @@
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Cast(command.actorId, targetActor);
player:endEvent();
end

View file

@ -0,0 +1,5 @@
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Cast(command.actorId, targetActor);
player:endEvent();
end

View file

@ -0,0 +1,26 @@
require ("global")
require ("utils")
--[[
AttackWeaponSkill Script
Finds the correct weaponskill subscript to fire when a weaponskill actor is activated.
--]]
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
--Are they in active mode?
if (player:GetState() != 2) then
player:SendGameMessage(GetWorldMaster(), 32503, 0x20);
player:endEvent();
return;
end
if not player.aiContainer.IsEngaged() then
player.Engage(targetActor);
end;
player.WeaponSkill(command.actorId, targetActor);
player:endEvent();
end;

View file

@ -0,0 +1,5 @@
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Cast(command.actorId, targetActor);
player:endEvent();
end

View file

@ -61,7 +61,7 @@ function onEventStarted(player, equipAbilityWidget, triggername, slot, commandid
player:SwapAbilities(oldSlot, slot + player.charaWork.commandBorder);
else
local tslot = slot + player.charaWork.commandBorder;
player:EquipAbility(player.GetJob(), commandid, tslot, true);
player:EquipAbility(player.GetCurrentClassOrJob(), commandid, tslot, true);
end
--Unequip
@ -70,7 +70,7 @@ function onEventStarted(player, equipAbilityWidget, triggername, slot, commandid
ability = worldManager.GetBattleCommand(commandid);
--Is the ability a part of the player's current class?
--This check isn't correct because of jobs having different ids
local classId = player:GetJob();
local classId = player:GetClass();
local jobId = player:ConvertClassIdToJobId(classId);
if(ability.job == classId or ability.job == jobId) then

View file

@ -145,6 +145,12 @@ function equipItem(player, equipSlot, item)
--Item Equipped message
player:SendGameMessage(player, worldMaster, 30601, 0x20, equipSlot+1, item.itemId, item.quality, 0, 0, 1);
--Load gearset for new class and begin class change
if (classId ~= nil) then
loadGearset(player, classId);
player:DoClassChange(classId);
end
player:GetEquipment():Equip(equipSlot, item);
if (equipSlot == EQUIPSLOT_MAINHAND and gItem:IsNailWeapon() == false) then graphicSlot = GRAPHICSLOT_MAINHAND;
@ -170,14 +176,7 @@ function equipItem(player, equipSlot, item)
elseif (equipSlot == EQUIPSLOT_EARS) then
player:GraphicChange(GRAPHICSLOT_R_EAR, item);
player:GraphicChange(GRAPHICSLOT_L_EAR, item);
end
--Load gearset for new class and begin class change
if (classId ~= nil) then
loadGearset(player, classId);
player:DoClassChange(classId);
end
end
end
end

View file

@ -0,0 +1,15 @@
require ("global")
require ("utils")
--[[
AttackWeaponSkill Script
Finds the correct weaponskill subscript to fire when a weaponskill actor is activated.
--]]
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Ability(command.actorId, targetActor);
player:endEvent();
end;

View file

@ -0,0 +1,19 @@
require ("global")
require ("utils")
--[[
AttackWeaponSkill Script
Finds the correct weaponskill subscript to fire when a weaponskill actor is activated.
--]]
local attackMagicHandlers = {
}
function onEventStarted(player, command, triggerName, arg1, arg2, arg3, arg4, targetActor, arg5, arg6, arg7, arg8)
player.Cast(command.actorId, targetActor);
player:endEvent();
end;

View file

@ -0,0 +1,14 @@
require("global");
require("ability");
function onAbilityPrepare(caster, target, skill)
return 0;
end;
function onAbilityStart(caster, target, skill)
return 0;
end;
function onAbilityFinish(caster, target, skill, action)
return onStatusAbilityFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
require("global");
require("ability");
function onAbilityPrepare(caster, target, ability)
return 0;
end;
function onAbilityStart(caster, target, ability)
return 0;
end;
function onAbilityFinish(caster, target, skill, action)
return onAttackAbilityFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
require("global");
require("Ability");
function onAbilityPrepare(caster, target, ability)
return 0;
end;
function onAbilityStart(caster, target, ability)
return 0;
end;
function onAbilityFinish(caster, target, ability, action)
return onStatusAbilityFinish(caster, target, ability, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("ability");
function onAbilityPrepare(caster, target, ability)
return 0;
end;
function onAbilityStart(caster, target, ability)
return 0;
end;
function onAbilityFinish(caster, target, skill, action)
return onAttackAbilityFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
require("global");
require("ability");
function onAbilityPrepare(caster, target, ability)
return 0;
end;
function onAbilityStart(caster, target, ability)
return 0;
end;
function onAbilityFinish(caster, target, skill, action)
return onAttackAbilityFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
require("global");
require("ability");
function onAbilityPrepare(caster, target, ability)
return 0;
end;
function onAbilityStart(caster, target, ability)
return 0;
end;
function onAbilityFinish(caster, target, ability, action)
return onHealAbilityFinish(caster, target, ability, action)
end;

View file

@ -0,0 +1,29 @@
require("global");
properties = {
permissions = 0,
parameters = "sss",
description =
[[
Adds target to party
]]
}
function onTrigger(player, argc)
local sender = "[addtoparty] ";
if player then
if player.target then
print("hi")
local id = player.target.actorId
print("hi")
player.currentParty:AddMember(id);
player.target.currentParty = player.currentParty;
print("hi")
else
print(sender.." no target")
end
else
print(sender.." no player");
end;
end;

View file

@ -11,7 +11,7 @@ Equips <commandid> in the first open slot without checking if you can.
}
function onTrigger(player, argc, commandid)
local sender = "[givegil] ";
local sender = "[eaction] ";
print(commandid);
if name then

View file

@ -21,11 +21,14 @@ function onTrigger(player, argc, slot, wId, eId, vId, cId)
cId = tonumber(cId) or 0;
if player and argc > 0 then
player:GraphicChange(slot, wId, eId, vId, cId);
if argc > 2 then
player:GraphicChange(slot, wId, eId, vId, cId);
player:SendMessage(messageID, sender, string.format("Changing appearance on slot %u", slot));
else
player:GraphicChange(slot, wId);
end
player:SendAppearance();
player:SendMessage(messageID, sender, string.format("Changing appearance on slot %u", slot));
else
player:SendMessage(messageID, sender, "No parameters sent! Usage: "..properties.description);
end;
end;

View file

@ -0,0 +1,25 @@
require("global");
properties = {
permissions = 0,
parameters = "s",
description =
[[
Changes appearance for equipment with given parameters.
!graphic <slot> <wID> <eID> <vID> <vID>
]],
}
function onTrigger(player, argc, appearanceId)
local messageID = MESSAGE_TYPE_SYSTEM_ERROR;
local sender = "[setappearance] ";
app = tonumber(appearanceId) or 0;
player:SendMessage(messageID, sender, string.format("appearance %u", app));
if player and player.target then
player.target.ChangeNpcAppearance(app);
player:SendMessage(messageID, sender, string.format("appearance %u", app));
end;
end;

View file

@ -0,0 +1,21 @@
require("global");
properties = {
permissions = 0,
parameters = "sss",
description =
[[
Adds experience <qty> to player or <targetname>.
!giveexp <qty> |
!giveexp <qty> <targetname> |
]],
}
function onTrigger(player, argc, jobId)
local sender = "[setjob] ";
jobId = tonumber(jobId)
if player then
player:SetCurrentJob(jobId);
end;
end;

View file

@ -0,0 +1,18 @@
require("global");
properties = {
permissions = 0,
parameters = "sss",
description =
[[
Adds experience <qty> to player or <targetname>.
!giveexp <qty> |
!giveexp <qty> <targetname> |
]],
}
function onTrigger(player, argc, procid)
local sender = "[giveexp] ";
local pid = tonumber(procid)
player:SetProc(pid, true);
end;

View file

@ -0,0 +1,27 @@
require("global");
properties = {
permissions = 0,
parameters = "sss",
description =
[[
Sets player or <targetname>'s maximum tp to <tp> and heals them to full.
!setmaxtp <tp> |
!setmaxtp <tp> <targetname>
]],
}
function onTrigger(player, argc, tp)
local sender = "[setmaxtp] ";
if player then
tp = tonumber(tp) or 0;
location = INVENTORY_CURRENCY;
player:SetTP(tp);
else
print(sender.."unable to add experience, ensure player name is valid.");
end;
end;

View file

@ -6,7 +6,7 @@ properties = {
description = "Spawns a actor",
}
function onTrigger(player, argc, actorClassId)
function onTrigger(player, argc, actorClassId, width, height)
if (actorClassId == nil) then
player:SendMessage(0x20, "", "No actor class id provided.");
@ -24,7 +24,16 @@ function onTrigger(player, argc, actorClassId)
if (actorClassId ~= nil) then
zone = player:GetZone();
actor = zone:SpawnActor(actorClassId, "test", pos[0], pos[1], pos[2], pos[3]);
local w = tonumber(width) or 0;
local h = tonumber(height) or 0;
printf("%f %f %f", x, y, z);
--local x, y, z = player.GetPos();
for i = 0, w do
for j = 0, h do
actor = zone:SpawnActor(actorClassId, "test", pos[0] + (i - (w / 2) * 3), pos[1], pos[2] + (j - (h / 2) * 3), pos[3]);
actor.SetAppearance(1001149)
end
end
end
if (actor == nil) then

View file

@ -128,7 +128,7 @@ function onTrigger(player, argc, id, level, weight)
end;
]]
function onTrigger(player, argc, skillName, level)
function onTrigger(player, argc, width, height, blockCount)
local messageId = MESSAGE_TYPE_SYSTEM_ERROR;
local sender = "yolo";
@ -147,24 +147,24 @@ function onTrigger(player, argc, skillName, level)
local z = tonumber(pos[2]);
local rot = tonumber(pos[3]);
local zone = pos[4];
local w = tonumber(width) or 0;
local h = tonumber(height) or 0;
printf("%f %f %f", x, y, z);
--local x, y, z = player.GetPos();
for i = 1, 1 do
local actor = player.GetZone().SpawnActor(2104001, 'ass', x, y, z, rot, 0, 0, true );
if player.currentContentGroup then
player.currentContentGroup:AddMember(actor.actorId)
for i = 0, blockCount do
for i = 0, w do
for j = 0, h do
local actor = player.GetZone().SpawnActor(2104001, 'ass', x + (i - (w / 2) * 3), y, z + (j - (h / 2) * 3), rot, 0, 0, true);
actor.ChangeNpcAppearance(1001149)
actor.SetLevel(50);
end
--actor.FollowTarget(player, 3.2);
end
x = x + 500
end
--actor.FollowTarget(player, 3.2);
end;
return;
end
level = tonumber(level) or 1;
if player then
player.SendMessage(messageId, sender, string.format("name %s | cost %d | level %u", skillName, calculateCommandCost(player, skillName, level), level));
end;
end;
function calculateCommandCost(player, skillName, level)

View file

@ -0,0 +1,21 @@
require("global");
properties = {
permissions = 0,
parameters = "sss",
description =
[[
Set movement speed for player. Enter no value to reset to default.
!speed <run> |
!speed <stop> <walk> <run> |
]]
}
function onTrigger(player, argc, stop, walk, run)
local message = tostring(player.zone.GetAllActors().Count);
player.SendMessage(0x20, "", message);
end

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,27 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
--Increased damage and conversion to single target
function onCombo(caster, target, spell)
spell.aoeType = 0;
spell.potency = spell.potency * 1.5;
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
--Dispels an effect on each target.
local effects = target.statusEffects.GetStatusEffectsByFlag(16); --lose on dispel
if effects != nil then
target.statusEffects.RemoveStatusEffect(effects[0]);
end;
return damage;
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onBuffMagicFinish(caster, target, spell, action)
end;

View file

@ -10,15 +10,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
return magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -9,13 +9,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -9,16 +9,11 @@ function onMagicStart(caster, target, spell)
return 0;
end;
--Increased damage with lesser current hp
function onCombo(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(1000, 2500);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onCureMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,15 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
--http://forum.square-enix.com/ffxiv/threads/41900-White-Mage-A-Guide read
function onMagicFinish(caster, target, spell, action)
magic.onCureMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onCureMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onCureMagicFinish(caster, target, spell, action)
end;

View file

@ -9,16 +9,11 @@ function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--Increased Damage and reduced recast time in place of stun
function onCombo(caster, target, spell)
spell.castTimeMs = spell.castTimeMs / 2;
end;
return damage;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -9,16 +9,11 @@ function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(1000, 2500);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--Increased critical damage
function onCombo(caster, target, spell)
spell.castTimeMs = spell.castTimeMs / 2;
end;
return damage;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -10,18 +10,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -10,15 +10,7 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(1000, 2500);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
--increase potency based on proximity to target
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -10,15 +10,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -10,15 +10,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(1000, 2500);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,21 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
spell.statusId = 228011;
spell.statusDuration = 25;
spell.statusChance = 1.0;
magic.onCureMagicFinish(caster, target, spell, action)
if caster != target then
action.AddHealAction(caster.actorId, (action.amount / 2));
end
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onBuffMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onBuffMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onStatusMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onStatusMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onStatusMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,20 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
--Increased damage and conversion to single target
function onCombo(caster, target, spell)
spell.aoeType = 0;
spell.potency = spell.potency * 1.5;
end;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,14 @@
require("global");
require("magic");
function onMagicPrepare(caster, target, spell)
return 0;
end;
function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
magic.onStatusMagicFinish(caster, target, spell, action)
end;

View file

@ -8,14 +8,11 @@ function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--Increased critical damage
function onCombo(caster, target, spell)
spell.critDamageModifier = 1.5;
end;
return damage;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -8,14 +8,13 @@ function onMagicStart(caster, target, spell)
return 0;
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--Increased Damage and reduced recast time in place of stun
function onCombo(caster, target, spell)
spell.statusChance = 0;
spell.basePotency = spell.basePotency * 1.5;
spell.recastTimeMs = spell.recastTimeMs / 2;
end;
return damage;
function onMagicFinish(caster, target, spell, action)
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -9,13 +9,5 @@ function onMagicStart(caster, target, spell)
end;
function onMagicFinish(caster, target, spell, action)
local damage = math.random(10, 100);
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
return damage;
magic.onMagicFinish(caster, target, spell, action)
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict slow
function onCombo(caster, target, skill)
skill.statusChance = 0.50;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,20 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Inflicts additional damage when bleed ends
--Note for later, going to set bleed tier to 2, when bleed get scripted, check if tier is 2 and add additional damage at the end
function onCombo(caster, target, skill)
skill.statusTier = 2;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased damage
function onPositional(caster, target, skill)
skill.basePotency = skill.basePotency * 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,11 @@ function onSkillStart(caster, target, skill)
return 0;
end;
--Increased crit hit rating
function onCombo(caster, target, skill)
skill.critRateModifier = 1.5;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,25 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict blind on flank
function onPositional(caster, target, skill)
skill.statusChance = 0.50;
skill.statusDuration = 10;
end;
function onCombo(caster, target, skill)
skill.basePotency = skill.basePotency * 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -9,18 +10,5 @@ function onSkillStart(caster, target, skill)
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, skill.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,23 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Dispel
--Does dispel have a text id?
function onCombo(caster, target, skill)
local effects = target.statusEffects.GetStatusEffectsByFlag(16); --lose on dispel
if effects != nil then
target.statusEffects.RemoveStatusEffect(effects[0]);
end;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased paralysis duration
function onCombo(caster, target, skill)
skill.statusDuration = skill.statusDuration * 2;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,11 @@ function onSkillStart(caster, target, skill)
return 0;
end;
--Increased accuracy
function onCombo(caster, target, skill)
skill.accuracyModifier = 1.25;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to render target unable to use weaponskills (pacification)
function onPositional(caster, target, skill)
skill.statusChance = 0.50;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -9,18 +10,5 @@ function onSkillStart(caster, target, skill)
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,27 +1,18 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, spell)
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, spell)
function onSkillStart(caster, target, skill)
return 0;
end;
function onSkillFinish(caster, target, spell, action)
local damage = math.random(10, 100);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackSkill(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
function onPositional(caster, target, skill)
skill.basePotency = skill.basePotency * 1.25;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -9,18 +10,5 @@ function onSkillStart(caster, target, skill)
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,10 @@ function onSkillStart(caster, target, skill)
return 0;
end;
function onCombo(caster, target, skill)
skill.enmityModifier = skill.enmityModifier * 2
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

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

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,7 @@ function onSkillStart(caster, target, skill)
return 0;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
function onSkillFinish(caster, target, skill, action)
caster.AddTP(1000);
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict blind
function onCombo(caster, target, skill)
skill.statusChance = 0.90;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,20 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased crit rate
function onCombo(caster, target, skill)
--Get Berserk statuseffect
skill.critRateModifier = 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,24 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to increase defense when executed from behind the target
function onPositional(caster, target, skill)
skill.statusChance = 0.90;
end;
--Increases bleed damage
function onCombo(caster, target, skill)
skill.statusTier = 2;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
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

@ -0,0 +1,14 @@
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

@ -0,0 +1,20 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased accuracy
function onCombo(caster, target, skill)
skill.accuracyModifier = 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,20 +9,11 @@ function onSkillStart(caster, target, skill)
return 0;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--Increased stun duration
function onCombo(caster, target, skill)
skill.statusDuration = 10;
end;
action.effectId = bit32.bxor(0x8000000, skill.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,24 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased accuracy
function onCombo(caster, target, skill)
skill.accuracyModifier = 1;
end;
--Increased damage
function onCombo(caster, target, skill)
skill.potency = skill.potency * 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,16 @@ function onSkillStart(caster, target, skill)
return 0;
end;
--Increased damage
function onPositional(caster, target, skill)
skill.potency = skill.potency * 1.25
end;
--Increased crit hit rating
function onCombo(caster, target, skill)
skill.critRateModifier = 1.25;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased Heavy duration, becomes 60 seconds
function onCombo(caster, target, skill)
skill.statusDuration = 60;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,11 @@ function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict stun
function onCombo(caster, target, skill)
skill.statusChance = 0.50;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

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

View file

@ -0,0 +1,20 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict heavy when executed from behind
function onPositional(caster, target, skill)
skill.statusChance = 0.50;
skill.statusDuration = 5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,14 @@
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

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
function onPositional(caster, target, skill)
skill.statusChance = 0.50;
skill.statusDuration = 5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -1,4 +1,5 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
@ -8,19 +9,10 @@ function onSkillStart(caster, target, skill)
return 0;
end;
function onPositional(caster, target, skill)
skill.basePotency = skill.basePotency * 1.25;
end;
function onSkillFinish(caster, target, skill, action)
local damage = math.random(100, 200);
-- todo: populate a global script with statuses and modifiers
action.worldMasterTextId = 0x765D;
-- todo: populate a global script with statuses and modifiers
-- magic.HandleAttackMagic(caster, target, spell, action)
-- action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
--action.effectId = bit32.bxor(0x8000000, spell.effectAnimation, 15636);
if target.hateContainer then
target.hateContainer.UpdateHate(caster, damage);
end;
return damage;
return weaponskill.onSkillFinish(caster, target, skill, action)
end;

View file

@ -0,0 +1,22 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--fivefold attack/conversion
function onCombo(caster, target, skill)
skill.numHits = 5;
skill.aoeType = 0;
skill.aoeTarget = 2;
--animation change?
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Accuracy increase
function onCombo(caster, target, skill)
skill.accuracyModifier = 1;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to inflict stun
function onCombo(caster, target, skill)
skill.statusChance = 0.90
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased critical hit rate
function onCombo(caster, target, skill)
skill.critRateModifier = 1.5;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Chance to decrease defense when executed from behind the target
function onPositional(caster, target, skill)
skill.statusChance = 0.75;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,19 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
function onCombo(caster, target, skill)
skill.basePotency = skill.basePotency * 1.25;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,20 @@
require("global");
require("weaponskill");
function onSkillPrepare(caster, target, skill)
return 0;
end;
function onSkillStart(caster, target, skill)
return 0;
end;
--Increased Bind duration
function onCombo(caster, target, skill)
skill.statusDuration = 10;
end;
function onSkillFinish(caster, target, skill, action)
return weaponskill.onSkillFinish(caster, target, skill, action);
end;

View file

@ -0,0 +1,15 @@
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;

Some files were not shown because too many files have changed in this diff Show more