Skip to content

Commit

Permalink
Fixes and updates to spells (otland#2285)
Browse files Browse the repository at this point in the history
  • Loading branch information
raymondtfr authored and ranisalt committed Sep 14, 2017
1 parent b101d4f commit 6847a57
Show file tree
Hide file tree
Showing 101 changed files with 622 additions and 626 deletions.
6 changes: 6 additions & 0 deletions data/items/items.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25743,6 +25743,12 @@
<item fromid="19332" toid="19342" article="a" name="brown stone wall" />
<item fromid="19354" toid="19375" article="an" name="ornate wall" />
<item fromid="19376" toid="19388" article="a" name="stone wall" />
<item id="19392" article="a" name="lightest magic missile rune">
<attribute key="type" value="rune" />
<attribute key="runeSpellName" value="adori dis min vis" />
<attribute key="weight" value="210" />
<attribute key="charges" value="10" />
</item>
<item fromid="19395" toid="19420" article="a" name="stone wall" />
<item id="19431" name="freshly cut venorean spice">
<attribute key="description" value="It has just been cut." />
Expand Down
70 changes: 36 additions & 34 deletions data/spells/lib/spells.lua
Original file line number Diff line number Diff line change
Expand Up @@ -249,17 +249,8 @@ CORPSES = {
-- This array contains all destroyable field items
FIELDS = {1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1500,1501,1502,1503,1504}

-- The numbered-keys represents the damage values, and their table
-- contains the minimum and maximum number of rounds of those damage values.
RANGE = {
[1] = {19, 20}, [2] = {10, 10}, [3] = {6, 7}, [4] = {4, 5}, [5] = {3, 4},
[6] = {3, 4}, [7] = {2, 3}, [8] = {2, 3}, [9] = {2, 3}, [10] = {1, 2},
[11] = {1, 2}, [12] = {1, 2}, [13] = {1, 2}, [14] = {1, 2}, [15] = {1, 2},
[16] = {1, 2}, [17] = {1, 2}, [18] = {1, 2}, [19] = {1, 2}
}

function Creature:addDamageCondition(target, conditionType, listType, damage, time, rounds)
if target:isImmune(conditionType) then
if damage <= 0 or target:isImmune(conditionType) then
return false
end

Expand All @@ -281,20 +272,20 @@ function Creature:addDamageCondition(target, conditionType, listType, damage, ti
end
end
elseif listType == 1 then
rounds = rounds or RANGE
if rounds[damage] then
condition:addDamage(math.random(1, rounds[damage][2]), time or 4000, -damage)
damage = damage - 1
end

while damage > 0 do
condition:addDamage(rounds[damage] and math.random(rounds[damage][1], rounds[damage][2]) or 1, time or 4000, -damage)
damage = damage - (damage > 21 and math.floor(damage / 20) + math.random(0, 1) or 1)
local n, value = 0, damage
while value > 0 do
value = math.floor(damage * math.pow(2.718281828459, -0.05 * n) + 0.5)
if value ~= 0 then
condition:addDamage(1, time or 4000, -value)
n = n + 1
end
end
elseif listType == 2 then
for _ = 1, rounds do
condition:addDamage(1, math.random(time[1], time[2]) * 1000, -damage)
end
elseif listType == 3 then
condition:addDamage(rounds, time * 1000, -damage)
end

target:addCondition(condition)
Expand All @@ -309,42 +300,53 @@ function Player:addPartyCondition(combat, variant, condition, baseMana)
return false
end

local positions = {}
function onTargetTile(creature, position)
positions[#positions + 1] = position
end

combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile")

if not combat:execute(self, variant) then
return false
end

local members = party:getMembers()
members[#members + 1] = party:getLeader()

local position = self:getPosition()
local affectedMembers = {}
for _, member in ipairs(members) do
if member:getPosition():getDistance(position) <= 36 then
affectedMembers[#affectedMembers + 1] = member
local memberPosition = member:getPosition()
for _, position in ipairs(positions) do
if memberPosition == position then
affectedMembers[#affectedMembers + 1] = member
end
end
end

if #affectedMembers <= 1 then
if #affectedMembers == 1 then
self:sendCancelMessage(RETURNVALUE_NOPARTYMEMBERSINRANGE)
position:sendMagicEffect(CONST_ME_POFF)
self:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end

local mana = math.ceil(math.pow(0.9, #affectedMembers - 1) * baseMana * #affectedMembers)
local mana = math.ceil(#affectedMembers * math.pow(0.9, #affectedMembers - 1) * baseMana)
if self:getMana() < mana then
self:sendCancelMessage(RETURNVALUE_NOTENOUGHMANA)
position:sendMagicEffect(CONST_ME_POFF)
return false
end

if not combat:execute(self, variant) then
self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
position:sendMagicEffect(CONST_ME_POFF)
self:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end

self:addMana(baseMana - mana, false)
self:addManaSpent(mana - baseMana)
self:addMana(-mana)
self:addManaSpent(mana)

for _, member in ipairs(affectedMembers) do
member:addCondition(condition)
end

for _, position in ipairs(positions) do
position:sendMagicEffect(CONST_ME_MAGIC_BLUE)
end
return true
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

function onGetFormulaValues(player, level, maglevel)
function onGetFormulaValues(player, level, magicLevel)
return -10, -20
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ICE)
combat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.2) + 7
local max = (level / 5) + (maglevel * 2.85) + 16
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.2) + 7
local max = (level / 5) + (magicLevel * 2.85) + 16
return -min, -max
end

Expand Down
8 changes: 4 additions & 4 deletions data/spells/scripts/attack/buzz.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function onGetFormulaValues(player, level, maglevel)
function onGetFormulaValues(player, level, magicLevel)
level = math.min(level, 20)
maglevel = math.min(maglevel, 20)
local min = (level / 5) + (maglevel * 0.4) + 2
local max = (level / 5) + (maglevel * 0.8) + 5
magicLevel = math.min(magicLevel, 20)
local min = (level / 5) + (magicLevel * 0.4) + 2
local max = (level / 5) + (magicLevel * 0.8) + 5
return -min, -max
end

Expand Down
8 changes: 4 additions & 4 deletions data/spells/scripts/attack/chill_out.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICEAREA)
combat:setArea(createCombatArea(AREA_WAVE4))

function onGetFormulaValues(player, level, maglevel)
function onGetFormulaValues(player, level, magicLevel)
level = math.min(level, 20)
maglevel = math.min(maglevel, 20)
local min = (level / 5) + (maglevel * 0.3) + 2
local max = (level / 5) + (maglevel * 0.45) + 3
magicLevel = math.min(magicLevel, 20)
local min = (level / 5) + (magicLevel * 0.3) + 2
local max = (level / 5) + (magicLevel * 0.45) + 3
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/death_strike.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_DEATH)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.4) + 8
local max = (level / 5) + (maglevel * 2.2) + 14
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.4) + 8
local max = (level / 5) + (magicLevel * 2.2) + 14
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/divine_caldera.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA)
combat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 5) + 25
local max = (level / 5) + (maglevel * 6.2) + 45
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 5) + 25
local max = (level / 5) + (magicLevel * 6.2) + 45
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/divine_missile.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HOLYDAMAGE)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLHOLY)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.9) + 8
local max = (level / 5) + (maglevel * 3) + 18
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.9) + 8
local max = (level / 5) + (magicLevel * 3) + 18
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/energy_beam.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
combat:setArea(createCombatArea(AREA_BEAM5, AREADIAGONAL_BEAM5))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.8) + 11
local max = (level / 5) + (maglevel * 3) + 19
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.8) + 11
local max = (level / 5) + (magicLevel * 3) + 19
return -min, -max
end

Expand Down
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/energy_strike.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.4) + 8
local max = (level / 5) + (maglevel * 2.2) + 14
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.4) + 8
local max = (level / 5) + (magicLevel * 2.2) + 14
return -min, -max
end

Expand Down
File renamed without changes.
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/energy_wave.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
combat:setArea(createCombatArea(AREA_SQUAREWAVE5, AREADIAGONAL_SQUAREWAVE5))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 4.5) + 20
local max = (level / 5) + (maglevel * 7.6) + 48
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 4.5) + 20
local max = (level / 5) + (magicLevel * 7.6) + 48
return -min, -max
end

Expand Down
4 changes: 2 additions & 2 deletions data/spells/scripts/attack/envenom.lua
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EARTH)
function onTargetCreature(creature, target)
local min = (creature:getLevel() / 80) + (creature:getMagicLevel() * 0.55) + 6
local max = (creature:getLevel() / 80) + (creature:getMagicLevel() * 0.75) + 7
local damage = math.random(math.floor(min), math.floor(max))
creature:addDamageCondition(target, CONDITION_POISON, 1, target:isPlayer() and math.floor(damage / 2 + 0.5) or damage)
local damage = math.random(math.floor(min) * 1000, math.floor(max) * 1000) / 1000
creature:addDamageCondition(target, CONDITION_POISON, 1, target:isPlayer() and damage / 2 or damage)
return true
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/eternal_winter.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ICETORNADO)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 5.5) + 25
local max = (level / 5) + (maglevel * 11) + 50
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 5.5) + 25
local max = (level / 5) + (magicLevel * 11) + 50
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/ethereal_spear.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ETHEREALSPEAR)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)

function onGetFormulaValues(player, skill, attack, factor)
local distSkill = player:getEffectiveSkillLevel(SKILL_DISTANCE)
local min = (player:getLevel() / 5) + distSkill * 0.7
local max = (player:getLevel() / 5) + distSkill + 5
local distanceSkill = player:getEffectiveSkillLevel(SKILL_DISTANCE)
local min = (player:getLevel() / 5) + distanceSkill * 0.7
local max = (player:getLevel() / 5) + distanceSkill + 5
return -min, -max
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_EXPLOSION)
combat:setParameter(COMBAT_PARAM_BLOCKARMOR, true)
combat:setArea(createCombatArea(AREA_CROSS1X1))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.6) + 9
local max = (level / 5) + (maglevel * 3.2) + 19
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.6) + 9
local max = (level / 5) + (magicLevel * 3.2) + 19
return -min, -max
end

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/fire_wave.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
combat:setArea(createCombatArea(AREA_WAVE4, AREADIAGONAL_WAVE4))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.2) + 7
local max = (level / 5) + (maglevel * 2) + 12
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.2) + 7
local max = (level / 5) + (magicLevel * 2) + 12
return -min, -max
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.8) + 12
local max = (level / 5) + (maglevel * 3) + 17
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.8) + 12
local max = (level / 5) + (magicLevel * 3) + 17
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/flame_strike.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.4) + 8
local max = (level / 5) + (maglevel * 2.2) + 14
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.4) + 8
local max = (level / 5) + (magicLevel * 2.2) + 14
return -min, -max
end

Expand Down
6 changes: 3 additions & 3 deletions data/spells/scripts/attack/great_energy_beam.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYAREA)
combat:setArea(createCombatArea(AREA_BEAM8))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 3.6) + 22
local max = (level / 5) + (maglevel * 6) + 37
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 3.6) + 22
local max = (level / 5) + (magicLevel * 6) + 37
return -min, -max
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
combat:setArea(createCombatArea(AREA_CIRCLE3X3))

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 1.2) + 7
local max = (level / 5) + (maglevel * 2.85) + 16
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 1.2) + 7
local max = (level / 5) + (magicLevel * 2.85) + 16
return -min, -max
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

function onGetFormulaValues(player, level, maglevel)
local min = (level / 5) + (maglevel * 0.8) + 5
local max = (level / 5) + (maglevel * 1.6) + 10
function onGetFormulaValues(player, level, magicLevel)
local min = (level / 5) + (magicLevel * 0.8) + 5
local max = (level / 5) + (magicLevel * 1.6) + 10
return -min, -max
end

Expand Down
Loading

0 comments on commit 6847a57

Please sign in to comment.