Ir para conteúdo

JofreCorreia

Membro
  • Registro em

  • Última visita

  1. Lua Script Error: [Event Interface] data/events/scripts/player.lua:Player@onGainExperience data/events/scripts/player.lua:952: attempt to call global 'useStamina' (a nil value) stack traceback: [C]: in function 'useStamina' data/events/scripts/player.lua:952: in function <data/events/scripts/player.lua:865> alguem sabe como resolver esse problema ?? -- Internal Use STONE_SKIN_AMULET = 2197 GOLD_POUNCH = 26377 -- No move items with actionID 8000 NOT_MOVEABLE_ACTION = 8000 -- Players cannot throw items on teleports if set to true local blockTeleportTrashing = true local titles = { {storageID = 14960, title = " Scout"}, {storageID = 14961, title = " Sentinel"}, {storageID = 14962, title = " Steward"}, {storageID = 14963, title = " Warden"}, {storageID = 14964, title = " Squire"}, {storageID = 14965, title = " Warrior"}, {storageID = 14966, title = " Keeper"}, {storageID = 14967, title = " Guardian"}, {storageID = 14968, title = " Sage"}, {storageID = 14969, title = " Tutor"}, {storageID = 14970, title = " Senior Tutor"}, {storageID = 14971, title = " King"}, } local function getTitle(uid) local player = Player(uid) if not player then return false end for i = #titles, 1, -1 do if player:getStorageValue(titles[i].storageID) == 1 then return titles[i].title end end return false end function Player:onBrowseField(position) return true end local function getHours(seconds) return math.floor((seconds/60)/60) end local function getMinutes(seconds) return math.floor(seconds/60) end local function getTime(seconds) local hours, minutes = getHours(seconds), getMinutes(seconds) if (minutes > 59) then minutes = minutes-hours*60 end if (minutes < 10) then minutes = "0" ..minutes end return hours..":"..minutes.. "h" 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." elseif thing.itemid >= ITEM_HEALTH_CASK_START and thing.itemid <= ITEM_HEALTH_CASK_END or thing.itemid >= ITEM_MANA_CASK_START and thing.itemid <= ITEM_MANA_CASK_END or thing.itemid >= ITEM_SPIRIT_CASK_START and thing.itemid <= ITEM_SPIRIT_CASK_END or thing.itemid >= ITEM_KEG_START and thing.itemid <= ITEM_KEG_END then description = description .. thing:getDescription(distance) local charges = thing:getCharges() if charges then description = string.format("%s\nIt has %d refillings left.", description, charges) end else description = description .. thing:getDescription(distance) end local itemType = thing:getType() if (itemType and itemType:getImbuingSlots() > 0) then local imbuingSlots = "Imbuements: (" for i = 1, itemType:getImbuingSlots() do local specialAttr = thing:getSpecialAttribute(i) local time = 0 if (thing:getSpecialAttribute(i+3)) then time = getTime(thing:getSpecialAttribute(i+3)) end if (specialAttr and specialAttr ~= 0) then if (i ~= itemType:getImbuingSlots()) then imbuingSlots = imbuingSlots.. "" ..specialAttr.." " ..time..", " else imbuingSlots = imbuingSlots.. "" ..specialAttr.." " ..time..")." end else if (i ~= itemType:getImbuingSlots()) then imbuingSlots = imbuingSlots.. "Empty Slot, " else imbuingSlots = imbuingSlots.. "Empty Slot)." end end end description = string.gsub(description, "It weighs", imbuingSlots.. "\nIt weighs") end else description = description .. thing:getDescription(distance) end if self:getGroup():getAccess() then if thing:isItem() then description = string.format("%s\nItem ID: %d", description, thing:getId()) local actionId = thing:getActionId() 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 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:isPlayer() and 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() 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:isPlayer() and 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 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 local config = { maxItemsPerSeconds = 1, exhaustTime = 2000, } if not pushDelay then pushDelay = { } end local function antiPush(self, item, count, fromPosition, toPosition, fromCylinder, toCylinder) if toPosition.x == CONTAINER_POSITION then return true end local tile = Tile(toPosition) if not tile then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end local cid = self:getId() if not pushDelay[cid] then pushDelay[cid] = {items = 0, time = 0} end pushDelay[cid].items = pushDelay[cid].items + 1 local currentTime = os.mtime() if pushDelay[cid].time == 0 then pushDelay[cid].time = currentTime elseif pushDelay[cid].time == currentTime then pushDelay[cid].items = pushDelay[cid].items + 1 elseif currentTime > pushDelay[cid].time then pushDelay[cid].time = 0 pushDelay[cid].items = 0 end if pushDelay[cid].items > config.maxItemsPerSeconds then pushDelay[cid].time = currentTime + config.exhaustTime end if pushDelay[cid].time > currentTime then self:sendCancelMessage("You can't move that item so fast.") return false end return true end function Player:onMoveItem(item, count, fromPosition, toPosition, fromCylinder, toCylinder) -- No move if item count > 20 items local tile = Tile(toPosition) if tile and tile:getItemCount() > 20 then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end -- SSA exhaust local exhaust = { } if toPosition.x == CONTAINER_POSITION and toPosition.y == CONST_SLOT_NECKLACE and item:getId() == STONE_SKIN_AMULET 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 -- Store Inbox local containerIdFrom = fromPosition.y - 64 local containerFrom = self:getContainerById(containerIdFrom) if (containerFrom) then if (containerFrom:getId() == ITEM_STORE_INBOX and toPosition.y >= 1 and toPosition.y <= 11 and toPosition.y ~= 3) then self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM) return false end end local containerTo = self:getContainerById(toPosition.y-64) if (containerTo) then if (containerTo:getId() == ITEM_STORE_INBOX) then self:sendCancelMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM) return false end -- Gold Pounch if (containerTo:getId() == GOLD_POUNCH) then if (not (item:getId() == ITEM_CRYSTAL_COIN or item:getId() == ITEM_PLATINUM_COIN or item:getId() == ITEM_GOLD_COIN)) then self:sendCancelMessage("You can move only money to this container.") return false end end end -- No move gold pounch if item:getId() == GOLD_POUNCH then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end -- No move items with actionID 8000 if item:getActionId() == NOT_MOVEABLE_ACTION then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end -- Check two-handed weapons if toPosition.x ~= CONTAINER_POSITION then return true end if item:getTopParent() == self and bit.band(toPosition.y, 0x40) == 0 then local itemType, moveItem = ItemType(item:getId()) if bit.band(itemType:getSlotPosition(), SLOTP_TWO_HAND) ~= 0 and toPosition.y == CONST_SLOT_LEFT then moveItem = self:getSlotItem(CONST_SLOT_RIGHT) elseif itemType:getWeaponType() == WEAPON_SHIELD and toPosition.y == CONST_SLOT_RIGHT then moveItem = self:getSlotItem(CONST_SLOT_LEFT) if moveItem and bit.band(ItemType(moveItem:getId()):getSlotPosition(), SLOTP_TWO_HAND) == 0 then return true end end if moveItem then local parent = item:getParent() if parent:getSize() == parent:getCapacity() then self:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_CONTAINERNOTENOUGHROOM)) return false else return moveItem:moveTo(parent) end end end -- Reward System if toPosition.x == CONTAINER_POSITION then local containerId = toPosition.y - 64 local container = self:getContainerById(containerId) 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(RETURNVALUE_NOTPOSSIBLE) 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(RETURNVALUE_NOTPOSSIBLE) return false end end end -- Do not let the player move the boss corpse. if item:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == 2^31 - 1 then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) return false end -- Players cannot throw items on reward chest local tile = Tile(toPosition) if tile and tile:getItemById(ITEM_REWARD_CHEST) then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end -- Players cannot throw items on teleports if blockTeleportTrashing and toPosition.x ~= CONTAINER_POSITION then local thing = Tile(toPosition):getItemByType(ITEM_TYPE_TELEPORT) if thing then self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) self:getPosition():sendMagicEffect(CONST_ME_POFF) return false end end -- No move parcel very heavy if item:getWeight() > 90000 and item:getId() == ITEM_PARCEL then self:sendCancelMessage('YOU CANNOT MOVE PARCELS TOO HEAVY.') return false end if tile and tile:getItemById(370) then -- Trapdoor self:sendCancelMessage(RETURNVALUE_NOTPOSSIBLE) self:getPosition():sendMagicEffect(CONST_ME_POFF) 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 not antiPush(self, item, count, fromPosition, toPosition, fromCylinder, toCylinder) then return false end return true end function Player:onMoveCreature(creature, fromPosition, toPosition) return true end local function hasPendingReport(name, targetName, reportType) local f = io.open(string.format("data/reports/players/%s-%s-%d.txt", name, targetName, reportType), "r") if f then io.close(f) return true else return false end end function Player:onReportRuleViolation(targetName, reportType, reportReason, comment, translation) local name = self:getName() if hasPendingReport(name, targetName, reportType) then self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Your report is being processed.") return end local file = io.open(string.format("data/reports/players/%s-%s-%d.txt", name, targetName, reportType), "a") if not file then self:sendTextMessage(MESSAGE_EVENT_ADVANCE, "There was an error when processing your report, please contact a gamemaster.") return end io.output(file) io.write("------------------------------\n") io.write("Reported by: " .. name .. "\n") io.write("Target: " .. targetName .. "\n") io.write("Type: " .. reportType .. "\n") io.write("Reason: " .. reportReason .. "\n") io.write("Comment: " .. comment .. "\n") if reportType ~= REPORT_TYPE_BOT then io.write("Translation: " .. translation .. "\n") end io.write("------------------------------\n") io.close(file) self:sendTextMessage(MESSAGE_EVENT_ADVANCE, string.format("Thank you for reporting %s. Your report will be processed by %s team as soon as possible.", targetName, configManager.getString(configKeys.SERVER_NAME))) return end function Player:onReportBug(message, position, category) local name = self:getName() local file = io.open("data/reports/bugs/" .. name .. " report.txt", "a") if not file then self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "There was an error when processing your report, please contact a gamemaster.") return true end io.output(file) io.write("------------------------------\n") io.write("Name: " .. name) if category == BUG_CATEGORY_MAP then io.write(" [Map position: " .. position.x .. ", " .. position.y .. ", " .. position.z .. "]") end local playerPosition = self:getPosition() io.write(" [Player Position: " .. playerPosition.x .. ", " .. playerPosition.y .. ", " .. playerPosition.z .. "]\n") io.write("Comment: " .. message .. "\n") io.close(file) self:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Your report has been sent to " .. configManager.getString(configKeys.SERVER_NAME) .. ".") return true end function Player:onTurn(direction) if self:getGroup():getAccess() and self:getDirection() == direction then local nextPosition = self:getPosition() nextPosition:getNextPosition(direction) self:teleportTo(nextPosition, true) end 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) function useStaminaImbuing(playerId, itemuid) local player = Player(playerId) if not player then return false end local item = Item(itemuid) if not item then return false end for i = 1, item:getType():getImbuingSlots() do if (item:isActiveImbuement(i+3)) then local staminaMinutes = item:getSpecialAttribute(i+3)/60 if (staminaMinutes > 0) then local currentTime = os.time() local timePassed = currentTime - item:getSpecialAttribute(i+6) if timePassed > 0 then if timePassed > 60 then if staminaMinutes > 2 then staminaMinutes = staminaMinutes - 2 else staminaMinutes = 0 end item:setSpecialAttribute(i+6, currentTime + 120) else staminaMinutes = staminaMinutes - 1 item:setSpecialAttribute(i+6, currentTime + 60) end end item:setSpecialAttribute(i+3, staminaMinutes*60) if (staminaMinutes <= 0) then player:removeCondition(CONDITION_HASTE, item:getId() + i) player:removeCondition(CONDITION_ATTRIBUTES, item:getId() + i) item:setSpecialAttribute(i, 0, i+3, 0, i+6, 0) end end end end end 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 local function useStaminaXp(player) local staminaMinutes = player:getExpBoostStamina() / 60 if staminaMinutes == 0 then return end local playerId = player:getId() local currentTime = os.time() local timePassed = currentTime - nextUseXpStamina[playerId] if timePassed <= 0 then return end if timePassed > 60 then if staminaMinutes > 2 then staminaMinutes = staminaMinutes - 2 else staminaMinutes = 0 end nextUseXpStamina[playerId] = currentTime + 120 else staminaMinutes = staminaMinutes - 1 nextUseXpStamina[playerId] = currentTime + 60 end player:setExpBoostStamina(staminaMinutes * 60) end -- useStaminaPrey local function useStaminaPrey(player, name) for i = 1, 3 do if (player:isActiveByName(i-1, name)) then local staminaMinutes = player:getPreyStamina(i-1)/60 if (staminaMinutes > 0) then local playerId = player:getId()+i local currentTime = os.time() local timePassed = currentTime - nextUseStaminaPrey[playerId].Time if timePassed > 0 then if timePassed > 60 then if staminaMinutes > 2 then staminaMinutes = staminaMinutes - 2 else staminaMinutes = 0 end nextUseStaminaPrey[playerId].Time = currentTime + 120 else staminaMinutes = staminaMinutes - 1 nextUseStaminaPrey[playerId].Time = currentTime + 60 end end player:setPreyStamina(i-1, staminaMinutes*60) player:sendPreyTimeLeft(i-1, staminaMinutes*60) end end end end function Player:onUseWeapon(normalDamage, elementType, elementDamage) -- Imbuement local weapon = self:getSlotItem(CONST_SLOT_LEFT) if not weapon or weapon:getType():getWeaponType() == WEAPON_SHIELD then weapon = self:getSlotItem(CONST_SLOT_RIGHT) if not weapon or weapon:getType():getWeaponType() == WEAPON_SHIELD then weapon = nil end end for slot = 1, 10 do local nextEquip = self:getSlotItem(slot) if nextEquip and nextEquip:getType():getImbuingSlots() > 0 then for i = 1, nextEquip:getType():getImbuingSlots() do local slotEnchant = nextEquip:getSpecialAttribute(i) if (slotEnchant and type(slotEnchant) == 'string') then local percentDamage, enchantPercent = 0, nextEquip:getImbuementPercent(slotEnchant) local typeEnchant = nextEquip:getImbuementType(i) or "" if (typeEnchant ~= "" and typeEnchant ~= "skillShield" and not typeEnchant:find("absorb") and typeEnchant ~= "speed") then useStaminaImbuing(self:getId(), nextEquip:getUniqueId()) end if (typeEnchant ~= "hitpointsleech" and typeEnchant ~= "manapointsleech" and typeEnchant ~= "criticaldamage" and typeEnchant ~= "skillShield" and typeEnchant ~= "magiclevelpoints" and not typeEnchant:find("absorb") and typeEnchant ~= "speed") then local weaponType = nextEquip:getType():getWeaponType() if weaponType ~= WEAPON_NONE and weaponType ~= WEAPON_SHIELD and weaponType ~= WEAPON_AMMO then percentDamage = normalDamage*(enchantPercent/100) normalDamage = normalDamage - percentDamage elementDamage = nextEquip:getType():getAttack()*(enchantPercent/100) end end if (typeEnchant == "hitpointsleech") then local healAmountHP = normalDamage*(enchantPercent/100) self:addHealth(math.abs(healAmountHP)) elseif (typeEnchant == "manapointsleech") then local healAmountMP = normalDamage*(enchantPercent/100) self:addMana(math.abs(healAmountMP)) end if (typeEnchant == "firedamage") then elementType = COMBAT_FIREDAMAGE elseif (typeEnchant == "earthdamage") then elementType = COMBAT_EARTHDAMAGE elseif (typeEnchant == "icedamage") then elementType = COMBAT_ICEDAMAGE elseif (typeEnchant == "energydamage") then elementType = COMBAT_ENERGYDAMAGE elseif (typeEnchant == "deathdamage") then elementType = COMBAT_DEATHDAMAGE end end end end end return normalDamage, elementType, elementDamage end function Player:onCombatSpell(normalDamage, elementDamage, elementType, changeDamage) -- Imbuement local weapon = self:getSlotItem(CONST_SLOT_LEFT) if not weapon or weapon:getType():getWeaponType() == WEAPON_SHIELD then weapon = self:getSlotItem(CONST_SLOT_RIGHT) if not weapon or weapon:getType():getWeaponType() == WEAPON_SHIELD then weapon = nil end end if normalDamage < 0 then for slot = 1, 10 do local nextEquip = self:getSlotItem(slot) if nextEquip and nextEquip:getType():getImbuingSlots() > 0 then for i = 1, nextEquip:getType():getImbuingSlots() do local slotEnchant = nextEquip:getSpecialAttribute(i) if (slotEnchant and type(slotEnchant) == 'string') then local percentDamage, enchantPercent = 0, nextEquip:getImbuementPercent(slotEnchant) local typeEnchant = nextEquip:getImbuementType(i) or "" if (typeEnchant ~= "" and typeEnchant ~= "skillShield" and not typeEnchant:find("absorb") and typeEnchant ~= "speed") then useStaminaImbuing(self:getId(), nextEquip:getUniqueId()) end if (typeEnchant == "firedamage" or typeEnchant == "earthdamage" or typeEnchant == "icedamage" or typeEnchant == "energydamage" or typeEnchant == "deathdamage") then local weaponType = nextEquip:getType():getWeaponType() if weaponType ~= WEAPON_NONE and weaponType ~= WEAPON_SHIELD and weaponType ~= WEAPON_AMMO then percentDamage = normalDamage*(enchantPercent/100) normalDamage = normalDamage - percentDamage elementDamage = nextEquip:getType():getAttack()*(enchantPercent/100) end end if (typeEnchant == "firedamage") then elementType = COMBAT_FIREDAMAGE elseif (typeEnchant == "earthdamage") then elementType = COMBAT_EARTHDAMAGE elseif (typeEnchant == "icedamage") then elementType = COMBAT_ICEDAMAGE elseif (typeEnchant == "energydamage") then elementType = COMBAT_ENERGYDAMAGE elseif (typeEnchant == "deathdamage") then elementType = COMBAT_DEATHDAMAGE end end end end end end return normalDamage, elementDamage, elementType, changeDamage end function Player:onMove() local haveImbuingBoots = self:getSlotItem(CONST_SLOT_FEET) and self:getSlotItem(CONST_SLOT_FEET):getType():getImbuingSlots() or 0 if haveImbuingBoots > 0 then local bootsItem = self:getSlotItem(CONST_SLOT_FEET) for slot = 1, haveImbuingBoots do local slotEnchant = bootsItem:getSpecialAttribute(slot) if (slotEnchant and type(slotEnchant) == 'string') then local typeEnchant = bootsItem:getImbuementType(slot) or "" if (typeEnchant == "speed") then useStaminaImbuing(self:getId(), bootsItem:getUniqueId()) end end end end return true end function Player:onEquipImbuement(item) local itemType = item:getType() for i = 1, itemType:getImbuingSlots() do local slotEnchant = item:getSpecialAttribute(i) if (slotEnchant and type(slotEnchant) == 'string') then conditionHaste = Condition(CONDITION_HASTE, item:getId() + i) conditionSkill = Condition(CONDITION_ATTRIBUTES, item:getId() + i) local skillValue = item:getImbuementPercent(slotEnchant) local typeEnchant = item:getImbuementType(i) or "" if (typeEnchant == "skillSword") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_SWORD, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "skillAxe") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_AXE, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "skillClub") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_CLUB, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "skillDist") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_DISTANCE, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "skillShield") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_SHIELD, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "magiclevelpoints") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_STAT_MAGICPOINTS, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "speed") then conditionHaste:setParameter(CONDITION_PARAM_TICKS, -1) conditionHaste:setParameter(CONDITION_PARAM_SPEED, self:getSpeed() * (skillValue/100)) self:addCondition(conditionHaste) elseif (typeEnchant == "criticaldamage") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_CHANCE, 10) conditionSkill:setParameter(CONDITION_PARAM_SKILL_CRITICAL_HIT_DAMAGE, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "hitpointsleech") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_LIFE_LEECH_CHANCE, 100) conditionSkill:setParameter(CONDITION_PARAM_SKILL_LIFE_LEECH_AMOUNT, skillValue) self:addCondition(conditionSkill) elseif (typeEnchant == "manapointsleech") then conditionSkill:setParameter(CONDITION_PARAM_TICKS, -1) conditionSkill:setParameter(CONDITION_PARAM_SKILL_MANA_LEECH_CHANCE, 100) conditionSkill:setParameter(CONDITION_PARAM_SKILL_MANA_LEECH_AMOUNT, skillValue) self:addCondition(conditionSkill) end end end return true end function Player:onDeEquipImbuement(item) for i = 1, item:getType():getImbuingSlots() do self:removeCondition(CONDITION_HASTE, item:getId() + i) self:removeCondition(CONDITION_ATTRIBUTES, item:getId() + i) end return true 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()) for i = 1, 3 do if (self:isActive(i-1)) then local bonusInfo = self:getBonusInfo(i-1) if (bonusInfo.Type == 2 and source:getName() == bonusInfo.Name) then exp = exp + math.floor(exp * (bonusInfo.Value/100)) break end end end if (self:getExpBoostStamina() <= 0 and self:getStoreXpBoost() > 0) then self:setStoreXpBoost(0) -- reset xp boost to 0 end -- More compact, after checking before (reset) it only of xp if you have if (self:getStoreXpBoost() > 0) then exp = exp + (exp * (self:getStoreXpBoost()/100)) -- Exp Boost end local party = self:getParty() if (party) then if (party:isSharedExperienceActive() and party:isSharedExperienceEnabled()) then local tableVocs = {} local count = 0 local totalCount = 0 local leaderId = party:getLeader():getVocation():getId() if (leaderId) then tableVocs[leaderId] = 1 count = count + 1 totalCount = totalCount + 1 end for i, v in pairs(party:getMembers()) do local vocId = v:getVocation():getId() if (tableVocs[vocId] == nil) then tableVocs[vocId] = 1 count = count + 1 end totalCount = totalCount + 1 end if (totalCount <= 10 and count >= 4) then exp = exp * 2 end end end -- Prey Stamina Modifier useStaminaPrey(self, source:getName()) -- Exp Boost Modifier useStaminaXp(self) -- Exp stats local staminaMinutes = self:getStamina() local Boost = self:getExpBoostStamina() if staminaMinutes > 2400 and self:isPremium() and Boost > 0 then self:setBaseXpGain(200) -- 200 = 1.0x, 200 = 2.0x, ... premium account elseif staminaMinutes > 2400 and self:isPremium() and Boost <= 0 then self:setBaseXpGain(150) -- 150 = 1.0x, 150 = 1.5x, ... premium account elseif staminaMinutes <= 2400 and staminaMinutes > 840 and self:isPremium() and Boost > 0 then self:setBaseXpGain(150) -- 150 = 1.5x premium account elseif staminaMinutes > 840 and Boost > 0 then self:setBaseXpGain(150) -- 150 = 1.5x free account elseif staminaMinutes <= 840 and Boost > 0 then self:setBaseXpGain(100) -- 50 = 0.5x all players elseif staminaMinutes <= 840 then self:setBaseXpGain(50) -- 50 = 0.5x all players end -- 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 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 esse é meu player.lua não sei qual problema, quando mato 1 monstro sobe esse erro e a xp ta xp base nao esta mutiplicando pelo que coloquei no stage.xml
  2. desculpe responder depois de tanto tempo, coloquei porém não fez diferença, não deu erro tbm, mas é como nao foi ativado e o Rateskill que esta valendo é o do Config.lua
  3. nao consegui com seu script porém, eu tinha um aqui e o que tava faltando era esse comando de screen que eu não sabia, de qualquer forma me ajudou obrigado!
  4. Preciso de um auto restart para meu server, como nunca fiz isso, queria um passo a passo de como fazer para ativar o auto restart, para o server abrir após o SS.
  5. local config = { requiredLevel = 1, daily = true, centerRazzagornRoomPosition = Position(33423, 32466, 14), playerPositions = { Position(33388, 32457, 14) }, newPositions = { Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14), Position(33417, 32467, 14) }, RazzagornPositions = { Position(33425, 32466, 14) } } function onUse(player, item, fromPosition, target, toPosition, isHotkey) if item.itemid == 9825 then local storePlayers, playerTile = {} for i = 1, #config.playerPositions do playerTile = Tile(config.playerPositions[i]):getTopCreature() if not playerTile or not playerTile:isPlayer() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "You need 5 players.") return true end if playerTile:getLevel() < config.requiredLevel then player:sendTextMessage(MESSAGE_STATUS_SMALL, "All the players need to be level ".. config.requiredLevel .." or higher.") return true end storePlayers[#storePlayers + 1] = playerTile end local specs, spec = Game.getSpectators(config.centerRazzagornRoomPosition, false, false, 22, 22, 22, 22) for i = 1, #specs do spec = specs[i] if spec:isPlayer() then player:sendTextMessage(MESSAGE_STATUS_SMALL, "A team is already inside the quest room.") return true end spec:remove() end for i = 1, #config.RazzagornPositions do Game.createMonster("Razzagorn", config.RazzagornPositions[i]) end local players for i = 1, #storePlayers do players = storePlayers[i] config.playerPositions[i]:sendMagicEffect(CONST_ME_POFF) players:teleportTo(config.newPositions[i]) config.newPositions[i]:sendMagicEffect(CONST_ME_ENERGYAREA) players:setDirection(DIRECTION_EAST) end elseif item.itemid == 9825 then if config.daily then player:sendTextMessage(MESSAGE_STATUS_SMALL, Game.getReturnMessage(RETURNVALUE_NOTPOSSIBLE)) return true end end item:transform(item.itemid == 9826 and 9825 or 9826) return true end Alguem me ajuda colocar um cooldown de 48 horas nesse script
  6. coloquei apareceu esse erro [Warning - Event::checkScript] Event onAdvance not found. scripts/skillstages.lua sabe o q é ? coloquei certinho na pasta creaturescript/script/criei o arquinho skillstages.lua e em creaturescript <event type="advance" name="SkillStages" script="skillstages.lua" />
  7. esse tem ferumbras ascendente mas não é igual a do global
  8. se alguem tiver algum script para SKILLS POR STAGES por favor ajuda! os que tem no tibiaking não funcionaram para mim crei que seja porque são antigos bem n entendo, mas nao fuincionou!
  9. Aguem sabe como e onde eu posso conseguir a quest, ou alguma mapa que ja venha com ela?
  10. bom galera estou com um servidor hospedado, enviei todos os arquivos para a maquina virtual instalei as libs, o phpmyadmin ja esta instalado com database, Porém nao consigo entrar, podem ver o site esta online, criei um ip fixo pra teste “onlyy.servegame.com” voces vao conseguir acessar! Site esta funcionando mas nao consigo logar minha conta no cliente, outra duvida é no config.lua coloquei o ip da fixo de numeros na parte que tem IP =“xxx” ja na outra parte do mysql so abre se eu colocar 127.0.0.1 se eu colocar o ip fixo de nuneros ou onlyy.servegame.com ele nao lê a database é normal ? a maquina esta o SO Ubuntu 14.04 Se alguem souber qual é o problema por favor me deem uma dica! Desculpem nao postar fotos é que estou do celular mas se precisar mais tarde posto! resolvido o problema era as portas do VPS quem liberava de uma forma diferente!
  11. JofreCorreia alterou sua foto pessoal
  12. bom galera, nao sei se estou no local correto, gostaria que pudessem compartilhar sites que dão suporte a dedicado ja com mapas corrigidos pronto para abrir o server igual o OTmanager(conheci agora mas não sei dizer se é bom ou não) caso alguem tenha experiencias com um servidor por favor entre em contato cmg estou querendo criar um ot server e investir. e se conhecem outros sites por favor informem obg!

Informação Importante

Confirmação de Termo