Simonalina
Member
So...
When i atk an animal and it dies this window pops up in console
TFS 1.2 x64
Events\scripts\player.lua
When i atk an animal and it dies this window pops up in console
TFS 1.2 x64
Lua:
Lua Script Error: [Event Interface]
data/events/scripts/player.lua:Player@onGainExperience
data/events/scripts/player.lua:166: attempt to perform arithmetic on a nil value
stack traceback:
[C]: in function '__sub'
data/events/scripts/player.lua:166: in function 'useStamina'
data/events/scripts/player.lua:209: in function <data/events/scripts/player.lua:192>
Events\scripts\player.lua
Lua:
-- Players cannot throw items on teleports if set to true
local blockTeleportTrashing = true
function Player:onBrowseField(position)
return true
end
function Player:onLook(thing, position, distance)
local description = 'You see '
if thing:isItem() then
if thing.actionid == 5640 then
description = description .. 'a honeyflower patch.'
elseif thing.actionid == 5641 then
description = description .. 'a banana palm.'
else
description = description .. thing:getDescription(distance)
end
else
description = description .. thing:getDescription(distance)
end
-- KD look
if thing:isCreature() and thing:isPlayer() then
description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
description, math.max(0, thing:getStorageValue(167912)), math.max(0, thing:getStorageValue(167913)))
end
-- MARRY
if LOOK_MARRIAGE_DESCR and thing:isCreature() then
if thing:isPlayer() then
description = description .. self:getMarriageDescription(thing)
end
end
if self:getGroup():getAccess() then
if thing:isItem() then
description = string.format('%s\nItem ID: %d', description, thing.itemid)
local actionId = thing.actionid
if actionId ~= 0 then
description = string.format('%s, Action ID: %d', description, actionId)
end
local uniqueId = thing:getAttribute(ITEM_ATTRIBUTE_UNIQUEID)
if uniqueId > 0 and uniqueId < 65536 then
description = string.format('%s, Unique ID: %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\nTransforms to: %d (onEquip)', description, transformEquipId)
elseif transformDeEquipId ~= 0 then
description = string.format('%s\nTransforms to: %d (onDeEquip)', description, transformDeEquipId)
end
local decayId = itemType:getDecayId()
if decayId ~= -1 then
description = string.format('%s\nDecays to: %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: %d, %d, %d',
description, position.x, position.y, position.z
)
if thing:isCreature() and thing:isPlayer() then
description = string.format('%s\nIP: %s.', description, Game.convertIpToString(thing:getIp()))
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: %d, %d, %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
-- KD look
if creature:isPlayer() and creature:isCreature() then
description = string.format("%s\n [PVP Kills: %d] \n [PVP Deaths: %d] \n",
description, math.max(0, creature:getStorageValue(167912)), math.max(0, creature:getStorageValue(167913)))
end
-- MARRY
if LOOK_MARRIAGE_DESCR and creature:isCreature() then
if creature:isPlayer() then
description = description .. self:getMarriageDescription(creature)
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:onMoveCreature(creature, fromPosition, toPosition)
return true
end
function Player:onTurn(direction)
return true
end
function Player:onTradeRequest(target, item)
if isInArray({1738, 1740, 1747, 1748, 1749, 8766}, item.itemid) and item.actionid > 0 or item.actionid == 5640 then
self:sendCancelMessage('Sorry, not possible.')
return false
end
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
-- exp card
local BONUS_EXP_STORAGE = 61398
local BONUS_EXP_MULT = 1.3
-- exp card
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
-- exp card
if self:getStorageValue(BONUS_EXP_STORAGE) - os.time() > 0 then
exp = exp * BONUS_EXP_MULT
end
-- exp card
return exp
end
function Player:onLoseExperience(exp)
return exp
end
function Player:onGainSkillTries(skill, tries)
if APPLY_SKILL_MULTIPLIER == false then
return tries
end
if skill == SKILL_MAGLEVEL then
return tries * configManager.getNumber(configKeys.RATE_MAGIC)
end
return tries * configManager.getNumber(configKeys.RATE_SKILL)
end
local exhaust = { } -- SSA exhaust
function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder)
if toPosition.x == CONTAINER_POSITION and toCylinder and toCylinder:getId() == 26052 then
self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return false
end
--- LIONS ROCK START
if self:getStorageValue(lionrock.storages.playerCanDoTasks) - os.time() < 0 then
local p, i = lionrock.positions, lionrock.items
local checkPr = false
if item:getId() == lionrock.items.ruby and toPosition.x == p.ruby.x
and toPosition.y == p.ruby.y and toPosition.z == p.ruby.z then
-- Ruby
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the ruby on the small socket. A red flame begins to burn.")
checkPr = true
if lionrock.taskactive.ruby ~= true then
lionrock.taskactive.ruby = true
end
local tile = Tile(p.ruby)
if tile:getItemCountById(i.redflame) < 1 then
Game.createItem(i.redflame, 1, p.ruby)
end
end
if item:getId() == lionrock.items.sapphire and toPosition.x == p.sapphire.x
and toPosition.y == p.sapphire.y and toPosition.z == p.sapphire.z then
-- Sapphire
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the sapphire on the small socket. A blue flame begins to burn.")
checkPr = true
if lionrock.taskactive.sapphire ~= true then
lionrock.taskactive.sapphire = true
end
local tile = Tile(p.sapphire)
if tile:getItemCountById(i.blueflame) < 1 then
Game.createItem(i.blueflame, 1, p.sapphire)
end
end
if item:getId() == lionrock.items.amethyst and toPosition.x == p.amethyst.x
and toPosition.y == p.amethyst.y and toPosition.z == p.amethyst.z then
-- Amethyst
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the topaz on the small socket. A yellow flame begins to burn.")
checkPr = true
if lionrock.taskactive.amethyst ~= true then
lionrock.taskactive.amethyst = true
end
local tile = Tile(p.amethyst)
if tile:getItemCountById(i.yellowflame) < 1 then
Game.createItem(i.yellowflame, 1, p.amethyst)
end
end
if item:getId() == lionrock.items.topaz and toPosition.x == p.topaz.x
and toPosition.y == p.topaz.y and toPosition.z == p.topaz.z then
-- Topaz
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You place the amethyst on the small socket. A violet flame begins to burn.")
checkPr = true
if lionrock.taskactive.topaz ~= true then
lionrock.taskactive.topaz = true
end
local tile = Tile(p.topaz)
if tile:getItemCountById(i.violetflame) < 1 then
Game.createItem(i.violetflame, 1, p.topaz)
end
end
if checkPr == true then
-- Adding the Fountain which gives present
if lionrock.taskactive.ruby == true and lionrock.taskactive.sapphire == true
and lionrock.taskactive.amethyst == true and lionrock.taskactive.topaz == true then
local fountain = Game.createItem(i.rewardfountain, 1, { x=33073, y=32300, z=9})
fountain:setActionId(41357)
local stone = Tile({ x=33073, y=32300, z=9}):getItemById(3608)
if stone ~= nil then
stone:remove()
end
self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Something happens at the centre of the room ...");
end
-- Removing Item
item:remove(1)
end
end
---- LIONS ROCK END
if toPosition.x == CONTAINER_POSITION and toPosition.y == CONST_SLOT_NECKLACE and item:getId() == 2197 then
local pid = self:getId()
if exhaust[pid] then
self:sendCancelMessage(RETURNVALUE_YOUAREEXHAUSTED)
return false
else
exhaust[pid] = true
addEvent(function() exhaust[pid] = false end, 2000, pid)
return true
end
end
if toPosition.x == CONTAINER_POSITION then
local cid = toPosition.y - 64 -- container id
local container = self:getContainerById(cid)
if not container then
return true
end
-- Do not let the player insert items into either the Reward Container or the Reward Chest
local itemId = container:getId()
if itemId == ITEM_REWARD_CONTAINER or itemId == ITEM_REWARD_CHEST then
self:sendCancelMessage('Sorry, not possible.')
return false
end
-- store shop
--local itemId = container:getId()
if itemId == 26052 then
self:sendCancelMessage('Sorry, not possible.')
return false
end
-- The player also shouldn't be able to insert items into the boss corpse
local tile = Tile(container:getPosition())
for _, item in ipairs(tile:getItems() or { }) do
if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 and item:getName() == container:getName() then
self:sendCancelMessage('Sorry, not possible.')
return false
end
end
end
-- se o de cima não funfar, testar esse debaixo
local tile = Tile(toPosition)
if tile and tile:getItemCount() > 26 then
self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE)
return false
end
-- MOVER PRO TP
if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then
local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT)
if thing then
self:sendCancelMessage('Sorry, not possible.')
self:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end
end
-- MOVER PARCEL
if item:getWeight() > 90000 and item:getId() == 2595 then
self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.')
return false
end
--local tile = Tile(toPosition)
if tile and tile:getItemById(21584) then
self:sendCancelMessage('Sorry, not possible.')
self:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end
if item:getId() == 7466 then
self:sendCancelMessage('Sorry, not possible.')
self:getPosition():sendMagicEffect(CONST_ME_POFF)
return false
end