--spellscroll descriptions here
local spells = {
["Strike"] = {
actionID = 1100,
vocation = "knight",
minL = 2,
word = "!strike",
effect = "deals x damage",
formula = "does X damage!!",
mCost = 15,
cd = 2 -- seconds
},
["Heat"] = {
actionID = 1101,
vocation = "druid",
minL = 2,
word = "!heat",
effect = "Deals Fire damage",
formula = "L * 10 + mL * 40) + 100",
mCost = 10,
cd = 2 -- seconds
},
["Barrier"] = {
actionID = 1102,
vocation = "Sorcerer",
minL = 2,
word = "!barrier",
effect = "Absorbs Damage and reduces 50% damage reduction from all sources",
formula = "manacost = damage abosrbed",
mCost = 100,
cd = 20 -- seconds
}
}
function Player:onBrowseField(position)
return true
end
function Player:onLook(thing, position, distance)
local description = "You see " .. thing:getDescription(distance)
if thing:getId() == 7696 then
for k, v in pairs(spells) do
if thing:getActionId() == spells[k].actionID then
description = "Level "..spells[k].minL.." Spell for "..spells[k].vocation.." \n "..spells[k].word.." \n "..spells[k].effect.." \n Formula: "..spells[k].formula.." \n mana cost: "..spells[k].mCost.." \n exhaust time: "..spells[k].cd.." sec"
end
end
elseif self:getGroup():getAccess() then
if thing:isItem() then
description = string.format("%s\nItemID: [%d]", description, thing:getId())
local actionId = thing:getActionId()
if actionId ~= 0 then
description = string.format("%s, ActionID: [%d]", description, actionId)
end
local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
if uniqueId > 0 and uniqueId < 65536 then
description = string.format("%s, UniqueId: [%d]", description, uniqueId)
end
description = description .. "."
local itemType = thing:getType()
local transformEquipId = itemType:getTransformEquipId()
local transformDeEquipId = itemType:getTransformDeEquipId()
if transformEquipId ~= 0 then
description = string.format("%s\nTransformTo: [%d] (onEquip).", description, transformEquipId)
elseif transformDeEquipId ~= 0 then
description = string.format("%s\nTransformTo: [%d] (onDeEquip).", description, transformDeEquipId)
end
local decayId = itemType:getDecayId()
if decayId ~= -1 then
description = string.format("%s\nDecayTo: [%d]", description, decayId)
end
elseif thing:isCreature() then
local str = "%s\nHealth: [%d / %d]"
if thing:getMaxMana() > 0 then
str = string.format("%s, Mana: [%d / %d]", str, thing:getMana(), thing:getMaxMana())
end
description = string.format(str, description, thing:getHealth(), thing:getMaxHealth()) .. "."
end
local position = thing:getPosition()
description = string.format(
"%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
description, position.x, position.y, position.z
)
if thing:isCreature() then
if thing:isPlayer() then
description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(thing:getIp()))
end
end
end
self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end
function Player:onLookInBattleList(creature, distance)
local description = "You see " .. creature:getDescription(distance)
if self:getGroup():getAccess() then
local str = "%s\nHealth: [%d / %d]"
if creature:getMaxMana() > 0 then
str = string.format("%s, Mana: [%d / %d]", str, creature:getMana(), creature:getMaxMana())
end
description = string.format(str, description, creature:getHealth(), creature:getMaxHealth()) .. "."
local position = creature:getPosition()
description = string.format(
"%s\nPosition: [X: %d] [Y: %d] [Z: %d].",
description, position.x, position.y, position.z
)
if creature:isPlayer() then
description = string.format("%s\nIP: [%s].", description, Game.convertIpToString(creature:getIp()))
end
end
self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end
function Player:onLookInTrade(partner, item, distance)
self:sendTextMessage(MESSAGE_INFO_DESCR, "You see " .. item:getDescription(distance))
end
function Player:onLookInShop(itemType, count)
return true
end
function Player:onMoveItem(item, count, fromPosition, toPosition)
return true
end
function Player:onMoveCreature(creature, fromPosition, toPosition)
return true
end
function Player:onTurn(direction)
return true
end
function Player:onTradeRequest(target, item)
return true
end
function Player:onTradeAccept(target, item, targetItem)
return true
end
local soulCondition = Condition(CONDITION_SOUL, CONDITIONID_DEFAULT)
soulCondition:setTicks(4 * 60 * 1000)
soulCondition:setParameter(CONDITION_PARAM_SOULGAIN, 1)
local function useStamina(player)
local staminaMinutes = player:getStamina()
if staminaMinutes == 0 then
return
end
local playerId = player:getId()
local currentTime = os.time()
local timePassed = currentTime - nextUseStaminaTime[playerId]
if timePassed <= 0 then
return
end
if timePassed > 60 then
if staminaMinutes > 2 then
staminaMinutes = staminaMinutes - 2
else
staminaMinutes = 0
end
nextUseStaminaTime[playerId] = currentTime + 120
else
staminaMinutes = staminaMinutes - 1
nextUseStaminaTime[playerId] = currentTime + 60
end
player:setStamina(staminaMinutes)
end
function Player:onGainExperience(source, exp, rawExp)
if not source or source:isPlayer() then
return exp
end
-- Soul regeneration
local vocation = self:getVocation()
if self:getSoul() < vocation:getMaxSoul() and exp >= self:getLevel() then
soulCondition:setParameter(CONDITION_PARAM_SOULTICKS, vocation:getSoulGainTicks() * 1000)
self:addCondition(soulCondition)
end
-- Apply experience stage multiplier
exp = exp * Game.getExperienceStage(self:getLevel())
-- Stamina modifier
if configManager.getBoolean(configKeys.STAMINA_SYSTEM) then
useStamina(self)
local staminaMinutes = self:getStamina()
if staminaMinutes > 2400 and self:isPremium() then
exp = exp * 1.5
elseif staminaMinutes <= 840 then
exp = exp * 0.5
end
end
return exp
end
function Player:onLoseExperience(exp)
return exp
end
function Player:onGainSkillTries(skill, tries)
if skill == SKILL_MAGLEVEL then
return tries * configManager.getNumber(configKeys.RATE_MAGIC)
end
return tries * configManager.getNumber(configKeys.RATE_SKILL)
end