Ir para conteúdo
  • Cadastre-se

Programação [FREE SUPORTE] TFS 1.x - vankk


Posts Recomendados

Olá senhores, nos últimos tempos eu dei uma abandonada por aqui, e gostaria de voltar a contribuir um pouco com o fórum e decidi reabrir esse tópico para dar um suporte gratuito para scripts em TFS 1.x.

 

Existem algumas regras na qual você deve cumprir se não, caso você poste eu só irei ignorar:

  • Isso não é um tópico para pedir scripts como Quests de global, ou sistemas, etc. Esse tópico é com o intuito de ajudar com problemas em códigos.
  • Somente suporte para TFS 1.x
  • Seja gente boa, que serei gente boa.
  • Explique corretamente o que está acontecendo: poste fotos do erro, coloque o código no Pastebin.com ou até mesmo usando a tag de CODE.
  • Somente suporte para TFS 1.x

 

Peço que tenha em mente que não tenho horários para resolver, tentarei responder o quanto antes, porém, não seguirei fielmente um horário como os serviços que eu faço.

 

Caso você esteja lendo esse tópico e não seja TFS 1.x a sua engine, não poste aqui o seu problema; crie um tópico, e me marque ?

Gentileza gera gentileza.

 

Atenciosamente,

vankk.

Editado por vankk (veja o histórico de edições)

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

data/player/events.lua

local config = {
	[2160] = {title = 'Filha de sei la quem'},
	[2161] = {title = 'Filho da filha de nao sei quem'}
}

if thing:isCreature() and thing:isPlayer() then
    local storage = config[thing:getStorageValue()]
    if storage > 0 then
        local i, j = description:find("You see (.-)%.")
        description = ("%s [%s]%s"):format(description:sub(1, j-1), storage.title, description:sub(j))
    end
end

 

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Ai é com você para fazer algo que dê a storage, e modificar no config do script que eu mandei.

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Vankk, não sei se é certo aqui, não entendi direito mas vamos lá.

 

Meu server é uma WAR e utilizo o distro do Real Server! 

A versão é 8.60 e queria mudar para tfs. Tem como só pegar um distro e botar para rodar? Vou enfrentar problemas fazendo isso?

 

Obrigado !

Link para o post
Compartilhar em outros sites
5 horas atrás, ariiuss disse:

Vankk, não sei se é certo aqui, não entendi direito mas vamos lá.

 

Meu server é uma WAR e utilizo o distro do Real Server! 

A versão é 8.60 e queria mudar para tfs. Tem como só pegar um distro e botar para rodar? Vou enfrentar problemas fazendo isso?

 

Obrigado !

 

Provavelmente sim.

 

2 horas atrás, Semideus disse:

 

data/player/events.lua não existe, encontrei events/scripts/player.lua 

assim que coloquei lá e liguei o server o meu look bugou, não mostra mais nada e o erro é esse

 

ogLlh0p8R7ulJR0DkFGukw.png

 

 

Função onLook que uso no meu servidor, caso ajude.


function Player:onLook(thing, position, distance)
    local description = "Voce ve " .. thing:getDescription(distance)
    if 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
        if thing:isCreature() then
            if thing:isPlayer() then
                if(getDeathsPlayer(thing)==0)then
                    kdr = getKillsPlayer(thing)
                        else
                if(getDeathsPlayer(thing)~=0) then
                    kdr = getKillsPlayer(thing)/getDeathsPlayer(thing)
                end
                end
            description = string.format("%s\nEsse jogador matou %s e morreu %s vezes. Total KDA: %s", description, getKillsPlayer(thing), getDeathsPlayer(thing), kdr)
            end
        end
    self:sendTextMessage(MESSAGE_INFO_DESCR, description)
end

 

 

 

-- data/lib/core/player.lua
local tmpConfig = {
	[2160] = {title = 'Filha de sei la quem', value = 1},
	[2161] = {title = 'Filho da filha de nao sei quem', value = 2}
}

function Player.getTitle(self)
	for v, k in pairs(tmpConfig) do
		if self:getStorageValue(v) >= k.value then
			return k.title
		end
	end

	return nil
end

-- data/events/scripts/player.lua em baixo de function Player:onLook(thing, position, distance)
if thing:isCreature() and thing:isPlayer() then
	local getTitle = self:getTitle()
	if getTitle ~= nil then
        local i, j = description:find("You see (.-)%.")
        description = ("%s [%s]%s"):format(description:sub(1, j-1), getTile, description:sub(j))
	end
end

 

Editado por vankk (veja o histórico de edições)

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Ops, coloca em baixo da linha local description = "Voce ve " .. thing:getDescription(distance)

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Troca o 'You see' por 'Voce ve'

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Bom dia vankk,

 

Não sei se conseguiria me ajudar mas se conseguir fico muito grato,

 

gostaria de saber se tem como alterar a forma de ganho/distribuição de atributos do personagem, exemplo:

 

ao invés do player receber uma quantidade X  em melee, ml, vida, mana, def, velocidade, etc... por hit ou level ele ganhar uma quantidade X de pontos pra distribuir entre esses itens e através de cada ponto que ele atribui esses status são aumentados.

 

 

Não sei se conseguiu entender direito mas caso não entenda eu tento explicar de uma outra maneira.

 

 

Grato

Link para o post
Compartilhar em outros sites

@vankk me ajuda a converter esse script antigo pra TFs 1.2

 

Spoiler

skillConfig = {skill = getConfigValue('rateSkill'), magiclevel = getConfigValue('rateMagic')}

skillStages = {}

skillStages[SKILL_FIST] = {{0,8},{60,5},{80,3},{100,2}}

skillStages[SKILL_CLUB] = {{0,8},{60,5},{80,2},{100,1}}

skillStages[SKILL_SWORD] = {{0,8},{60,5},{80,2},{100,1}}

skillStages[SKILL_AXE] = {{0,8},{60,5},{80,2},{100,1}}

skillStages[SKILL_DISTANCE] = {{0,8},{60,5},{80,2},{100,1}}

skillStages[SKILL_SHIELD] = {{0,9},{60,8},{80,7},{100,6},{110,3}}

--skillStages[SKILL_FISHING] = {{0,5},{60,4},{80,3},{100,2},{110,1}} -- uncomment it to make it work, you can remove other skill config if you dont need it

skillStages[SKILL__MAGLEVEL] = {{0,10},{6,5},{15,7},{80,5},{90,2},{99,1}}

showInfoOnAdvance = true -- send player message about skill rate change

showInfoOnLogin = true -- send player message about skill rates when he login

 

function getPlayerSkillRatesText(cid)

 local skillInfo = getPlayerRates(cid)

 return "YOUR RATES: [ Magic Level: " .. skillInfo[SKILL__MAGLEVEL] * skillConfig.magiclevel .. "x || Fist: " .. skillInfo[SKILL_FIST] * skillConfig.skill .. "x | Club: " .. skillInfo[SKILL_CLUB] * skillConfig.skill .. "x |  Sword: " .. skillInfo[SKILL_SWORD] * skillConfig.skill .. "x | Axe: " .. skillInfo[SKILL_AXE] * skillConfig.skill .. "x |  Distance: " .. skillInfo[SKILL_DISTANCE] * skillConfig.skill .. " | Shielding: " .. skillInfo[SKILL_SHIELD] * skillConfig.skill .. "x | Fishing: " .. skillInfo[SKILL_FISHING] * skillConfig.skill .. "x ]"

end

 

pf meu amigo, darei Rep+

Link para o post
Compartilhar em outros sites
Em 30/06/2017 ás 12:38, Tingasgo disse:

Estava interessado em aprender script se poder me falar como aprendeu eu ficaria grato ^^ 

 

lua.org é um bom começo para você ter noção sobre Lua.

 

Editado por vankk (veja o histórico de edições)

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Bom dia Vankk tudo certo?

Vankk você por um acaso saberia como deixar os slots do items, quando o char estiver de bless com uma aura dourada (imagem com bless) e quando tiver sem bless ficar normal (imagem sem bless)???

 

Desde já agradeço

 

Muito obrigado

 

Jp Oxtenta

Bless.jpg

Link para o post
Compartilhar em outros sites
  • 6 months later...

Tópico atualizado, voltamos!

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Olá, @vankk, gostaria da sua ajuda em dois assuntos primeiro seria o boss final da Warzone 3, "Abyssador", aparentemente o script está certinho e outros dois bosses funcionam normal, porém quando entra mais de um player no tp, após amatar o mini boss "Versperoth", nascem dois, "Abyssador" ao invés de 1, segue o script: 

Spoiler

 


if not warzoneConfig then
    warzoneConfig = {
            [45700] = {
                center = Position(33110, 31965, 10),
                maxRangeX = 12, minRangeX = 26, minRangeY = 15, maxRangeY = 17,
                bossResp = Position(33102, 31956, 10),
                boss = "Deathstrike",
                teleportTo = Position(33096, 31955, 10),
                locked = false,
                storage = Storage.BigfootBurden.BossWarzone1,
                interval = 20 * 60 * 60,
                exit = Position(33001, 31900, 9)
            },

            [45701] = {
                center = Position(33117, 31956, 11),
                maxRangeX = 14, minRangeX = 14, minRangeY = 14, maxRangeY = 14,
                bossResp = Position(33116, 31956, 11),
                boss = "Gnomevil",
                teleportTo = Position(33106, 31955, 11),
                locked = false,
                storage = Storage.BigfootBurden.BossWarzone2,
                interval = 20 * 60 * 60,
                exit = Position(33001, 31900, 9),
                wall = 18459
            },

            [45702] = {
                center = Position(33090, 31910, 12),
                maxRangeX = 12, minRangeX = 12, minRangeY = 12, maxRangeY = 12,
                bossResp = Position(33088, 31910, 12),
                boss = "Abyssador",
                teleportTo = Position(33083, 31904, 12),
                locked = false,
                storage = Storage.BigfootBurden.BossWarzone3,
                interval = 20 * 60 * 60,
                exit = Position(33001, 31900, 9)
            }
    }

    warzoneConfig.spawnBoss = function (name, pos)
        local boss = Game.createMonster(name, pos)
        if boss then
            local c = warzoneConfig.findByName(name)
            c.locked = true
            boss:registerEvent('WarzoneBossDeath')
        end
    end

    warzoneConfig.findByName = function(name, last)
        local i, v = next(warzoneConfig, last)
        if type(v) == 'table' and v.boss == name then
            return v
        elseif not i then
            return nil
        end
        return warzoneConfig.findByName(name, i)
    end

    warzoneConfig.resetRoom = function(roomInfo, msg, releaseRoom)
        if releaseRoom then
            roomInfo.locked = false
        end

        local spectators = Game.getSpectators(roomInfo.center, false, false, roomInfo.minRangeX, roomInfo.maxRangeX, roomInfo.minRangeY, roomInfo.maxRangeY)
        for i = 1, #spectators do
            if spectators[i]:isPlayer() then
                spectators[i]:teleportTo(roomInfo.exit)
                spectators[i]:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, msg)
            else
                spectators[i]:remove()
            end
        end
    end
end

local function filter(list, f, i)
    if i < #list then
        if f(list[i]) then
            return list[i], filter(list, f, i + 1)
        else
            return filter(list, f, i + 1)
        end
    elseif list[i] and f(list[i]) then
        return list[i]
    end
end

local function spawnBoss(inf)
    local boss = Game.createMonster(inf.boss, inf.bossResp)
    boss:registerEvent('WarzoneBossDeath')
end

function onStepIn(creature, item, pos, fromPosition)
    if not creature:isPlayer() then
        creature:teleportTo(fromPosition)
        return false
    end

    local info = warzoneConfig[item:getActionId()]
    if not info then
        return false
    end

    if  creature:getStorageValue(info.storage) > os.time() then
        creature:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You have already cleared this warzone in the last 20 hours.")
        creature:teleportTo(fromPosition)
        return false
    end

    if info.locked then
        creature:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Please, wait until the room is cleared. This happens 30 minutes after the last team entered.")
        creature:teleportTo(fromPosition)
        return true
    end

    creature:teleportTo(info.teleportTo)
    creature:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have half an hour to heroically defeat the " .. info.boss .. ". Otherwise you'll be teleported out by the gnomish emergency device." )
    return true
end

 

 

 

O segundo problema seria acredito que nas storages, pois 2 players do meu server não conseguem abrir os corpos de alguns bosses que possuem o sistema de pegar no bau reward.

Editado por Duduks (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Duduks Esse script que você passou não possui nenhuma interação com o spawn de Bosses. Existem duas funções warzoneConfig.spawnBoss e spawnBoss, e ela não está sendo chamada em nenhum desses casos. Você possui outro script de spawn do Boss?

 

No segundo problema como assim não conseguem abrir alguns corpos de Bosses? O que da de erro para eles?

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

Boa tarde,

 

Entrei em contato com o @vankk, solucionou o problema com o script abaixo: creaturescripts/killVersperoth.lua

Spoiler

local teleportPosition = Position(33075, 31878, 12)

local function transformTeleport(open)
    local id = (open and 18462 or 1387)
    local teleportItem = Tile(teleportPosition):getItemById(id)
    if not teleportItem then
        return
    end

    teleportPosition:sendMagicEffect(CONST_ME_POFF)
    if open then
        teleportItem:transform(18463) 
    else
        teleportItem:transform(18462) 
    end
end

function onKill(creature, target)
    local config = warzoneConfig.findByName("Abyssador")
    local targetMonster = target:getMonster()
    if not targetMonster then
        return true
    end

    if targetMonster:getName():lower() ~= 'versperoth' then
        return true
    end

    Game.setStorageValue(GlobalStorage.Versperoth.Battle, 2)
    addEvent(Game.setStorageValue, 30 * 60 * 1000, GlobalStorage.Versperoth.Battle, 0)

    blood = Tile(teleportPosition):getItemById(2016)
    if blood then
        blood:remove()
    end
   
    local tp = Game.createItem(1387, 1, teleportPosition)
    if tp then
        tp:setActionId(45702)
    end

    addEvent(transformTeleport, 1 * 60 * 1000, false)
    addEvent(transformTeleport, 30 * 60 * 1000, true)

    local tmpCreature = Creature("Abyssador")
    if not tmpCreature then
        addEvent(warzoneConfig.spawnBoss, 1 * 80 * 1000, config.boss, config.bossResp)
    end
    
    addEvent(warzoneConfig.resetRoom, 30 * 60 * 1000, config, "You were teleported out by the gnomish emergency device.", true)
    return true
end

 

Editado por Duduks (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Bom dia, @vankk estou com dois problemas no meu console: 

Spoiler

2019-12-10 15:46:05 -  Lua Script Error: [Main Interface] 
2019-12-10 15:46:05 -  in a timer event called from: 
2019-12-10 15:46:05 -  (Unknown scriptfile)
2019-12-10 15:46:05 -  data/npc/lib/npcsystem/npchandler.lua:320: attempt to get length of local 'ret' (a nil value)
2019-12-10 15:46:05 -  stack traceback:
2019-12-10 15:46:05 -  	[C]: in function '__len'
2019-12-10 15:46:05 -  	data/npc/lib/npcsystem/npchandler.lua:320: in function 'parseMessage'
2019-12-10 15:46:05 -  	data/npc/lib/npcsystem/npchandler.lua:657: in function <data/npc/lib/npcsystem/npchandler.lua:648>

 

 

npchandler.lua

Spoiler

-- Advanced NPC System by Jiddo

if NpcHandler == nil then
local storage, duration = 1.4, 0.8
    -- Constant talkdelay behaviors.
    TALKDELAY_NONE = 0 -- No talkdelay. Npc will reply immedeatly.
    TALKDELAY_ONTHINK = 1 -- Talkdelay handled through the onThink callback function. (Default)
    TALKDELAY_EVENT = 2 -- Not yet implemented

    -- Currently applied talkdelay behavior. TALKDELAY_ONTHINK is default.
    NPCHANDLER_TALKDELAY = TALKDELAY_ONTHINK

    -- Constant indexes for defining default messages.
    MESSAGE_GREET = 1 -- When the player greets the npc.
    MESSAGE_FAREWELL = 2 -- When the player unGreets the npc.
    MESSAGE_BUY = 3 -- When the npc asks the player if he wants to buy something.
    MESSAGE_ONBUY = 4 -- When the player successfully buys something via talk.
    MESSAGE_BOUGHT = 5 -- When the player bought something through the shop window.
    MESSAGE_SELL = 6 -- When the npc asks the player if he wants to sell something.
    MESSAGE_ONSELL = 7 -- When the player successfully sells something via talk.
    MESSAGE_SOLD = 8 -- When the player sold something through the shop window.
    MESSAGE_MISSINGMONEY = 9 -- When the player does not have enough money.
    MESSAGE_NEEDMONEY = 10 -- Same as above, used for shop window.
    MESSAGE_MISSINGITEM = 11 -- When the player is trying to sell an item he does not have.
    MESSAGE_NEEDITEM = 12 -- Same as above, used for shop window.
    MESSAGE_NEEDSPACE = 13 -- When the player don't have any space to buy an item
    MESSAGE_NEEDMORESPACE = 14 -- When the player has some space to buy an item, but not enough space
    MESSAGE_IDLETIMEOUT = 15 -- When the player has been idle for longer then idleTime allows.
    MESSAGE_WALKAWAY = 16 -- When the player walks out of the talkRadius of the npc.
    MESSAGE_DECLINE     = 17 -- When the player says no to something.
    MESSAGE_SENDTRADE = 18 -- When the npc sends the trade window to the player
    MESSAGE_NOSHOP = 19 -- When the npc's shop is requested but he doesn't have any
    MESSAGE_ONCLOSESHOP = 20 -- When the player closes the npc's shop window
    MESSAGE_ALREADYFOCUSED = 21 -- When the player already has the focus of this npc.
    MESSAGE_WALKAWAY_MALE = 22 -- When a male player walks out of the talkRadius of the npc.
    MESSAGE_WALKAWAY_FEMALE = 23 -- When a female player walks out of the talkRadius of the npc.

    -- Constant indexes for callback functions. These are also used for module callback ids.
    CALLBACK_CREATURE_APPEAR = 1
    CALLBACK_CREATURE_DISAPPEAR = 2
    CALLBACK_CREATURE_SAY = 3
    CALLBACK_ONTHINK = 4
    CALLBACK_GREET = 5
    CALLBACK_FAREWELL = 6
    CALLBACK_MESSAGE_DEFAULT = 7
    CALLBACK_PLAYER_ENDTRADE = 8
    CALLBACK_PLAYER_CLOSECHANNEL = 9
    CALLBACK_ONBUY = 10
    CALLBACK_ONSELL = 11
    CALLBACK_ONADDFOCUS = 18
    CALLBACK_ONRELEASEFOCUS = 19
    CALLBACK_ONTRADEREQUEST = 20

    -- Addidional module callback ids
    CALLBACK_MODULE_INIT     = 12
    CALLBACK_MODULE_RESET = 13

    -- Constant strings defining the keywords to replace in the default messages.
    TAG_PLAYERNAME = "|PLAYERNAME|"
    TAG_ITEMCOUNT = "|ITEMCOUNT|"
    TAG_TOTALCOST = "|TOTALCOST|"
    TAG_ITEMNAME = "|ITEMNAME|"
    TAG_TIME = "|TIME|"
    TAG_BLESSCOST = "|BLESSCOST|"
    TAG_PVPBLESSCOST = "|PVPBLESSCOST|"
    TAG_TRAVELCOST = "|TRAVELCOST|"

    NpcHandler = {
        keywordHandler = nil,
        focuses = nil,
        talkStart = nil,
        idleTime = 120,
        talkRadius = 3,
        talkDelayTime = 1, -- Seconds to delay outgoing messages.
        talkDelay = nil,
        callbackFunctions = nil,
        modules = nil,
        shopItems = nil, -- They must be here since ShopModule uses 'static' functions
        eventSay = nil,
        eventDelayedSay = nil,
        topic = nil,
        messages = {
            -- These are the default replies of all npcs. They can/should be changed individually for each npc.
            [MESSAGE_GREET] = "Greetings, |PLAYERNAME|.",
            [MESSAGE_FAREWELL] = "Good bye, |PLAYERNAME|.",
            [MESSAGE_BUY] = "Do you want to buy |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?",
            [MESSAGE_ONBUY] = "Here you are.",
            [MESSAGE_BOUGHT] = "Bought |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.",
            [MESSAGE_SELL] = "Do you want to sell |ITEMCOUNT| |ITEMNAME| for |TOTALCOST| gold coins?",
            [MESSAGE_ONSELL] = "Here you are, |TOTALCOST| gold.",
            [MESSAGE_SOLD] = "Sold |ITEMCOUNT|x |ITEMNAME| for |TOTALCOST| gold.",
            [MESSAGE_MISSINGMONEY] = "You don't have enough money.",
            [MESSAGE_NEEDMONEY] = "You don't have enough money.",
            [MESSAGE_MISSINGITEM] = "You don't have so many.",
            [MESSAGE_NEEDITEM] = "You do not have this object.",
            [MESSAGE_NEEDSPACE] = "You do not have enough capacity.",
            [MESSAGE_NEEDMORESPACE] = "You do not have enough capacity for all items.",
            [MESSAGE_IDLETIMEOUT] = "Good bye.",
            [MESSAGE_WALKAWAY] = "Good bye.",
            [MESSAGE_DECLINE] = "Then not.",
            [MESSAGE_SENDTRADE] = "Of course, just browse through my wares.",
            [MESSAGE_NOSHOP] = "Sorry, I'm not offering anything.",
            [MESSAGE_ONCLOSESHOP] = "Thank you, come back whenever you're in need of something else.",
            [MESSAGE_ALREADYFOCUSED] = "|PLAYERNAME|, I am already talking to you.",
            [MESSAGE_WALKAWAY_MALE] = "Good bye.",
            [MESSAGE_WALKAWAY_FEMALE] = "Good bye."
        }
    }

    -- Creates a new NpcHandler with an empty callbackFunction stack.
    function NpcHandler:new(keywordHandler)
        local obj = {}
        obj.callbackFunctions = {}
        obj.modules = {}
        obj.eventSay = {}
        obj.eventDelayedSay = {}
        obj.topic = {}
        obj.focuses = {}
        obj.talkStart = {}
        obj.talkDelay = {}
        obj.keywordHandler = keywordHandler
        obj.messages = {}
        obj.shopItems = {}

        setmetatable(obj.messages, self.messages)
        self.messages.__index = self.messages

        setmetatable(obj, self)
        self.__index = self
        return obj
    end

    -- Re-defines the maximum idle time allowed for a player when talking to this npc.
    function NpcHandler:setMaxIdleTime(newTime)
        self.idleTime = newTime
    end

    -- Attackes a new keyword handler to this npchandler
    function NpcHandler:setKeywordHandler(newHandler)
        self.keywordHandler = newHandler
    end

    -- Function used to change the focus of this npc.
    function NpcHandler:addFocus(newFocus)
        if self:isFocused(newFocus) then
            return
        end

        self.focuses[#self.focuses + 1] = newFocus
        self.topic[newFocus] = 0
        local callback = self:getCallback(CALLBACK_ONADDFOCUS)
        if callback == nil or callback(newFocus) then
            self:processModuleCallback(CALLBACK_ONADDFOCUS, newFocus)
        end
        self:updateFocus()
    end

    -- Function used to verify if npc is focused to certain player
    function NpcHandler:isFocused(focus)
        for _, v in pairs(self.focuses) do
            if v == focus then
                return true
            end
        end
        return false
    end

    -- This function should be called on each onThink and makes sure the npc faces the player it is talking to.
    --    Should also be called whenever a new player is focused.
    function NpcHandler:updateFocus()
        for _, focus in pairs(self.focuses) do
            if focus ~= nil then
                doNpcSetCreatureFocus(focus)
                return
            end
        end
        doNpcSetCreatureFocus(0)
    end

    -- Used when the npc should un-focus the player.
    function NpcHandler:releaseFocus(focus)
        if shop_cost[focus] ~= nil then
            shop_amount[focus] = nil
            shop_cost[focus] = nil
            shop_rlname[focus] = nil
            shop_itemid[focus] = nil
            shop_container[focus] = nil
            shop_npcuid[focus] = nil
            shop_eventtype[focus] = nil
            shop_subtype[focus] = nil
            shop_destination[focus] = nil
            shop_premium[focus] = nil
        end

        if self.eventDelayedSay[focus] then
            self:cancelNPCTalk(self.eventDelayedSay[focus])
        end

        if not self:isFocused(focus) then
            return
        end

        local pos = nil
        for k, v in pairs(self.focuses) do
            if v == focus then
                pos = k
            end
        end

        self.focuses[pos] = nil

        self.eventSay[focus] = nil
        self.eventDelayedSay[focus] = nil
        self.talkStart[focus] = nil
        self.topic[focus] = nil

        local callback = self:getCallback(CALLBACK_ONRELEASEFOCUS)
        if callback == nil or callback(focus) then
            self:processModuleCallback(CALLBACK_ONRELEASEFOCUS, focus)
        end

        if Player(focus) ~= nil then
            closeShopWindow(focus) --Even if it can not exist, we need to prevent it.
            self:updateFocus()
        end
    end

    -- Returns the callback function with the specified id or nil if no such callback function exists.
    function NpcHandler:getCallback(id)
        local ret = nil
        if self.callbackFunctions ~= nil then
            ret = self.callbackFunctions[id]
        end
        return ret
    end

    -- Changes the callback function for the given id to callback.
    function NpcHandler:setCallback(id, callback)
        if self.callbackFunctions ~= nil then
            self.callbackFunctions[id] = callback
        end
    end

    -- Adds a module to this npchandler and inits it.
    function NpcHandler:addModule(module)
        if self.modules ~= nil then
            self.modules[#self.modules + 1] = module
            module:init(self)
        end
    end

    -- Calls the callback function represented by id for all modules added to this npchandler with the given arguments.
    function NpcHandler:processModuleCallback(id, ...)
        local ret = true
        for _, module in pairs(self.modules) do
            local tmpRet = true
            if id == CALLBACK_CREATURE_APPEAR and module.callbackOnCreatureAppear ~= nil then
                tmpRet = module:callbackOnCreatureAppear(...)
            elseif id == CALLBACK_CREATURE_DISAPPEAR and module.callbackOnCreatureDisappear ~= nil then
                tmpRet = module:callbackOnCreatureDisappear(...)
            elseif id == CALLBACK_CREATURE_SAY and module.callbackOnCreatureSay ~= nil then
                tmpRet = module:callbackOnCreatureSay(...)
            elseif id == CALLBACK_PLAYER_ENDTRADE and module.callbackOnPlayerEndTrade ~= nil then
                tmpRet = module:callbackOnPlayerEndTrade(...)
            elseif id == CALLBACK_PLAYER_CLOSECHANNEL and module.callbackOnPlayerCloseChannel ~= nil then
                tmpRet = module:callbackOnPlayerCloseChannel(...)
            elseif id == CALLBACK_ONBUY and module.callbackOnBuy ~= nil then
                tmpRet = module:callbackOnBuy(...)
            elseif id == CALLBACK_ONSELL and module.callbackOnSell ~= nil then
                tmpRet = module:callbackOnSell(...)
            elseif id == CALLBACK_ONTRADEREQUEST and module.callbackOnTradeRequest ~= nil then
                tmpRet = module:callbackOnTradeRequest(...)
            elseif id == CALLBACK_ONADDFOCUS and module.callbackOnAddFocus ~= nil then
                tmpRet = module:callbackOnAddFocus(...)
            elseif id == CALLBACK_ONRELEASEFOCUS and module.callbackOnReleaseFocus ~= nil then
                tmpRet = module:callbackOnReleaseFocus(...)
            elseif id == CALLBACK_ONTHINK and module.callbackOnThink ~= nil then
                tmpRet = module:callbackOnThink(...)
            elseif id == CALLBACK_GREET and module.callbackOnGreet ~= nil then
                tmpRet = module:callbackOnGreet(...)
            elseif id == CALLBACK_FAREWELL and module.callbackOnFarewell ~= nil then
                tmpRet = module:callbackOnFarewell(...)
            elseif id == CALLBACK_MESSAGE_DEFAULT and module.callbackOnMessageDefault ~= nil then
                tmpRet = module:callbackOnMessageDefault(...)
            elseif id == CALLBACK_MODULE_RESET and module.callbackOnModuleReset ~= nil then
                tmpRet = module:callbackOnModuleReset(...)
            end
            if not tmpRet then
                ret = false
                break
            end
        end
        return ret
    end

    -- Returns the message represented by id.
    function NpcHandler:getMessage(id)
        local ret = nil
        if self.messages ~= nil then
            ret = self.messages[id]
        end
        return ret
    end

    -- Changes the default response message with the specified id to newMessage.
    function NpcHandler:setMessage(id, newMessage)
        if self.messages ~= nil then
            self.messages[id] = newMessage
        end
    end

    -- Translates all message tags found in msg using parseInfo
    function NpcHandler:parseMessage(msg, parseInfo)
        local ret = msg
        if type(ret) == 'string' then
            for search, replace in pairs(parseInfo) do
                ret = string.gsub(ret, search, replace)
            end
        else
            for i = 1, #ret do
                for search, replace in pairs(parseInfo) do
                    ret = string.gsub(ret, search, replace)
                end
            end
        end
        return ret
    end

    -- Makes sure the npc un-focuses the currently focused player
    function NpcHandler:unGreet(cid)
        if not self:isFocused(cid) then
            return
        end

        local callback = self:getCallback(CALLBACK_FAREWELL)
        if callback == nil or callback() then
            if self:processModuleCallback(CALLBACK_FAREWELL) then
                local msg = self:getMessage(MESSAGE_FAREWELL)
                local player = Player(cid)
                local playerName = player and player:getName() or -1
                local parseInfo = { [TAG_PLAYERNAME] = playerName }
                self:resetNpc(cid)
                msg = self:parseMessage(msg, parseInfo)
                self:say(msg, cid, true)
                self:releaseFocus(cid)
            end
        end
    end

    -- Greets a new player.
    function NpcHandler:greet(cid, message)
        if cid ~= 0 then
            local callback = self:getCallback(CALLBACK_GREET)
            if callback == nil or callback(cid, message) then
                if self:processModuleCallback(CALLBACK_GREET, cid) then
                    local msg = self:getMessage(MESSAGE_GREET)
                    local player = Player(cid)
                    local playerName = player and player:getName() or -1
                    local parseInfo = { [TAG_PLAYERNAME] = playerName }
                    msg = self:parseMessage(msg, parseInfo)
                    self:say(msg, cid, true)
                else
                    return
                end
            else
                return
            end
        end
        self:addFocus(cid)
    end

    -- Handles onCreatureAppear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_APPEAR callback.
    function NpcHandler:onCreatureAppear(creature)
        local cid = creature.uid
        if cid == getNpcCid() then
            local npc = Npc()
            if next(self.shopItems) then
                local speechBubble = npc:getSpeechBubble()
                if speechBubble == 3 then
                    npc:setSpeechBubble(4)
                else
                    npc:setSpeechBubble(2)
                end
            else
                if self:getMessage(MESSAGE_GREET) then
                    npc:setSpeechBubble(1)
                end
            end
        end

        local callback = self:getCallback(CALLBACK_CREATURE_APPEAR)
        if callback == nil or callback(cid) then
            if self:processModuleCallback(CALLBACK_CREATURE_APPEAR, cid) then
                --
            end
        end
    end

    -- Handles onCreatureDisappear events. If you with to handle this yourself, please use the CALLBACK_CREATURE_DISAPPEAR callback.
    function NpcHandler:onCreatureDisappear(creature)
        local cid = creature.uid
        if getNpcCid() == cid then
            return
        end

        local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR)
        if callback == nil or callback(cid) then
            if self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid) then
                if self:isFocused(cid) then
                    self:unGreet(cid)
                end
            end
        end
    end

    -- Handles onCreatureSay events. If you with to handle this yourself, please use the CALLBACK_CREATURE_SAY callback.
    function NpcHandler:onCreatureSay(creature, msgtype, msg)
        local cid = creature.uid
        local callback = self:getCallback(CALLBACK_CREATURE_SAY)
        if callback == nil or callback(cid, msgtype, msg) then
            if self:processModuleCallback(CALLBACK_CREATURE_SAY, cid, msgtype, msg) then
                if not self:isInRange(cid) then
                    return
                end

                if self.keywordHandler ~= nil then
                    if self:isFocused(cid) and msgtype == TALKTYPE_PRIVATE_PN or not self:isFocused(cid) then
                        local ret = self.keywordHandler:processMessage(cid, msg)
                        if not ret then
                            local callback = self:getCallback(CALLBACK_MESSAGE_DEFAULT)
                            if callback ~= nil and callback(cid, msgtype, msg) then
                                self.talkStart[cid] = os.time()
                            end
                        else
                            self.talkStart[cid] = os.time()
                        end
                    end
                end
            end
        end
    end

    -- Handles onPlayerEndTrade events. If you wish to handle this yourself, use the CALLBACK_PLAYER_ENDTRADE callback.
    function NpcHandler:onPlayerEndTrade(creature)
        local cid = creature.uid
        local callback = self:getCallback(CALLBACK_PLAYER_ENDTRADE)
        if callback == nil or callback(cid) then
            if self:processModuleCallback(CALLBACK_PLAYER_ENDTRADE, cid, msgtype, msg) then
                if self:isFocused(cid) then
                    local player = Player(cid)
                    local playerName = player and player:getName() or -1
                    local parseInfo = { [TAG_PLAYERNAME] = playerName }
                    local msg = self:parseMessage(self:getMessage(MESSAGE_ONCLOSESHOP), parseInfo)
                    self:say(msg, cid)
                end
            end
        end
    end

    -- Handles onPlayerCloseChannel events. If you wish to handle this yourself, use the CALLBACK_PLAYER_CLOSECHANNEL callback.
    function NpcHandler:onPlayerCloseChannel(creature)
        local cid = creature.uid
        local callback = self:getCallback(CALLBACK_PLAYER_CLOSECHANNEL)
        if callback == nil or callback(cid) then
            if self:processModuleCallback(CALLBACK_PLAYER_CLOSECHANNEL, cid, msgtype, msg) then
                if self:isFocused(cid) then
                    self:unGreet(cid)
                end
            end
        end
    end

    -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback.
    function NpcHandler:onBuy(creature, itemid, subType, amount, ignoreCap, inBackpacks)
        local cid = creature.uid
        if (os.time() - getPlayerStorageValue(cid, storage)) >= duration then
        setPlayerStorageValue(cid, storage, os.time()) -- DELAY PRA COMPRAR
        local callback = self:getCallback(CALLBACK_ONBUY)
        if callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks) then
            if self:processModuleCallback(CALLBACK_ONBUY, cid, itemid, subType, amount, ignoreCap, inBackpacks) then
                --
            end
        end
        else
            return false
        end
    end

    -- Handles onSell events. If you wish to handle this yourself, use the CALLBACK_ONSELL callback.
    function NpcHandler:onSell(creature, itemid, subType, amount, ignoreCap, inBackpacks)
        local cid = creature.uid
        local callback = self:getCallback(CALLBACK_ONSELL)
        if callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks) then
            if self:processModuleCallback(CALLBACK_ONSELL, cid, itemid, subType, amount, ignoreCap, inBackpacks) then
                --
            end
        end
    end

    -- Handles onTradeRequest events. If you wish to handle this yourself, use the CALLBACK_ONTRADEREQUEST callback.
    function NpcHandler:onTradeRequest(cid)
        local callback = self:getCallback(CALLBACK_ONTRADEREQUEST)
        if callback == nil or callback(cid) then
            if self:processModuleCallback(CALLBACK_ONTRADEREQUEST, cid) then
                return true
            end
        end
        return false
    end

    -- Handles onThink events. If you wish to handle this yourself, please use the CALLBACK_ONTHINK callback.
    function NpcHandler:onThink()
        local callback = self:getCallback(CALLBACK_ONTHINK)
        if callback == nil or callback() then
            if NPCHANDLER_TALKDELAY == TALKDELAY_ONTHINK then
                for cid, talkDelay in pairs(self.talkDelay) do
                    if talkDelay.time ~= nil and talkDelay.message ~= nil and os.time() >= talkDelay.time then
                        selfSay(talkDelay.message, cid, talkDelay.publicize and true or false)
                        self.talkDelay[cid] = nil
                    end
                end
            end

            if self:processModuleCallback(CALLBACK_ONTHINK) then
                for _, focus in pairs(self.focuses) do
                    if focus ~= nil then
                        if not self:isInRange(focus) then
                            self:onWalkAway(focus)
                        elseif self.talkStart[focus] ~= nil and (os.time() - self.talkStart[focus]) > self.idleTime then
                            self:unGreet(focus)
                        else
                            self:updateFocus()
                        end
                    end
                end
            end
        end
    end

    -- Tries to greet the player with the given cid.
    function NpcHandler:onGreet(cid, message)
        if self:isInRange(cid) then
            if not self:isFocused(cid) then
                self:greet(cid, message)
                return
            end
        end
    end

    -- Simply calls the underlying unGreet function.
    function NpcHandler:onFarewell(cid)
        self:unGreet(cid)
    end

    -- Should be called on this npc's focus if the distance to focus is greater then talkRadius.
    function NpcHandler:onWalkAway(cid)
        if self:isFocused(cid) then
            local callback = self:getCallback(CALLBACK_CREATURE_DISAPPEAR)
            if callback == nil or callback() then
                if self:processModuleCallback(CALLBACK_CREATURE_DISAPPEAR, cid) then
                    local msg = self:getMessage(MESSAGE_WALKAWAY)
                    local player = Player(cid)
                    local playerName = player and player:getName() or -1
                    local playerSex = player and player:getSex() or 0

                    local parseInfo = { [TAG_PLAYERNAME] = playerName }
                    local message = self:parseMessage(msg, parseInfo)

                    local msg_male = self:getMessage(MESSAGE_WALKAWAY_MALE)
                    local message_male = self:parseMessage(msg_male, parseInfo)
                    local msg_female = self:getMessage(MESSAGE_WALKAWAY_FEMALE)
                    local message_female = self:parseMessage(msg_female, parseInfo)
                    if message_female ~= message_male then
                        if playerSex == PLAYERSEX_FEMALE then
                            selfSay(message_female)
                        else
                            selfSay(message_male)
                        end
                    elseif message ~= "" then
                        selfSay(message)
                    end
                    self:resetNpc(cid)
                    self:releaseFocus(cid)
                end
            end
        end
    end

    -- Returns true if cid is within the talkRadius of this npc.
    function NpcHandler:isInRange(cid)
        local distance = Player(cid) ~= nil and getDistanceTo(cid) or -1
        if distance == -1 then
            return false
        end

        return distance <= self.talkRadius
    end

    -- Resets the npc into its initial state (in regard of the keywordhandler).
    --    All modules are also receiving a reset call through their callbackOnModuleReset function.
    function NpcHandler:resetNpc(cid)
        if self:processModuleCallback(CALLBACK_MODULE_RESET) then
            self.keywordHandler:reset(cid)
        end
    end

    function NpcHandler:cancelNPCTalk(events)
        for aux = 1, #events do
            stopEvent(events[aux].event)
        end
        events = nil
    end

    function NpcHandler:doNPCTalkALot(msgs, interval, pcid)
        if self.eventDelayedSay[pcid] then
            self:cancelNPCTalk(self.eventDelayedSay[pcid])
        end

        self.eventDelayedSay[pcid] = {}
        local ret = {}
        for aux = 1, #msgs do
            self.eventDelayedSay[pcid][aux] = {}
            doCreatureSayWithDelay(getNpcCid(), msgs[aux], TALKTYPE_PRIVATE_NP, ((aux-1) * (interval or 4000)) + 700, self.eventDelayedSay[pcid][aux], pcid)
            ret[#ret + 1] = self.eventDelayedSay[pcid][aux]
        end
        return(ret)
    end

    -- Makes the npc represented by this instance of NpcHandler say something.
    --    This implements the currently set type of talkdelay.
    --    shallDelay is a boolean value. If it is false, the message is not delayed. Default value is true.
    function NpcHandler:say(message, focus, publicize, shallDelay, delay)
        if type(message) == "table" then
            return self:doNPCTalkALot(message, delay or 6000, focus)
        end

        if self.eventDelayedSay[focus] then
            self:cancelNPCTalk(self.eventDelayedSay[focus])
        end

        local shallDelay = not shallDelay and true or shallDelay
        if NPCHANDLER_TALKDELAY == TALKDELAY_NONE or shallDelay == false then
            selfSay(message, focus, publicize and true or false)
            return
        end

        stopEvent(self.eventSay[focus])
        self.eventSay[focus] = addEvent(function(npcId, message, focusId)
            local npc = Npc(npcId)
            if npc == nil then
                return
            end

            local player = Player(focusId)
            if player then
                local parseInfo = {[TAG_PLAYERNAME] = player:getName(), [TAG_TIME] = getTibianTime(), [TAG_BLESSCOST] = getBlessingsCost(player:getLevel()), [TAG_PVPBLESSCOST] = getPvpBlessingCost(player:getLevel())}
                npc:say(self:parseMessage(message, parseInfo), TALKTYPE_PRIVATE_NP, false, player, npc:getPosition())
            end
        end, self.talkDelayTime * 1000, Npc().uid, message, focus)
    end
end
 

 

Estou com problema nessa magia :

 

Spoiler

Lua Script Error: [Spell Interface] 
2019-12-06 14:17:12 -  data/spells/scripts/monster/time guardiann.lua:onCastSpell
2019-12-06 14:17:12 -  data/spells/scripts/monster/time guardiann.lua:41: attempt to index a nil value
2019-12-06 14:17:12 -  stack traceback:
2019-12-06 14:17:12 -  	[C]: in function '__index'
2019-12-06 14:17:12 -  	data/spells/scripts/monster/time guardiann.lua:41: in function <data/spells/scripts/monster/time guardiann.lua:34>

 

 

Arquivo da magia time guardiann.lua

Spoiler

local monsters = {
    [1] = {pos = Position(32810, 32664, 14)},
    [2] = {pos = Position(32815, 32664, 14)}
}

local function functionBack(position, oldpos)
    local guardian = Tile(position):getTopCreature()
    local bool, diference, health = false, 0, 0
    local spectators, spectator = Game.getSpectators(Position(32813, 32664, 14), false, false, 15, 15, 15, 15)
    for v = 1, #spectators do
        spectator = spectators[v]
        if spectator:getName():lower() == 'the blazing time guardian' or spectator:getName():lower() == 'the freezing time guardian' then
            oldpos = spectator:getPosition()
            bool = true
        end
    end
    if not bool then
        guardian:remove()
        return true
    end
    local specs, spec = Game.getSpectators(Position(32813, 32664, 14), false, false, 15, 15, 15, 15)
    for i = 1, #specs do
        spec = specs
        if spec:isMonster() and spec:getName():lower() == 'the blazing time guardian' or spec:getName():lower() == 'the freezing time guardian' then
            spec:teleportTo(position)
            health = spec:getHealth()
            diference = guardian:getHealth() - health
        end
    end
    guardian:addHealth( - diference)
    guardian:teleportTo(oldpos)
end

function onCastSpell(creature, var)
    local index = math.random(1, 2)
    local monsterPos = creature:getPosition()
    if monsterPos.z ~= 14 then
        return true
    end
    local position = monsters[index].pos
    local form = Tile(position):getTopCreature()
    creature:teleportTo(position)
    local diference, health = 0, 0
    health = creature:getHealth()
    diference = form:getHealth() - health
    form:addHealth( - diference)
    form:teleportTo(monsterPos)
    addEvent(functionBack, 30 * 1000, position, monsterPos)
    return true
end
 

 

 

the time guardian.xml

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<monster name="The Time Guardian" nameDescription="the time guardian" race="undead" experience="50000" speed="340"  script="bossReward.lua">
    <health now="150000" max="150000"/>
    <look type="945" corpse="27753"/>
    <targetchange interval="2000" chance="5"/>
    <flags>
        <flag summonable="0"/>
        <flag attackable="1"/>
        <flag hostile="1"/>
        <flag illusionable="0"/>
        <flag convinceable="0"/>
        <flag pushable="0"/>
        <flag canpushitems="1"/>
        <flag canpushcreatures="1"/>
        <flag targetdistance="1"/>
        <flag staticattack="90"/>
        <flag runonhealth="0"/>
        <flag canwalkonenergy="1"/>
        <flag canwalkonfire="1"/>
        <flag canwalkonpoison="1"/>
        <flag preyable="0"/>
        <flag rewardboss="1"/>
    </flags>
    <attacks>
        <attack name="melee" interval="2000" skill="190" attack="300"/>
        <attack name="death" interval="2000" chance="15" range="7" radius="4" target="1" min="-600" max="-780">
            <attribute key="shootEffect" value="energy"/>
            <attribute key="areaEffect" value="energy"/>
        </attack>
        <attack name="energy" interval="2000" chance="15" length="9" spread="0" min="-600" max="-780">
            <attribute key="areaEffect" value="energy"/>
        </attack>
        <attack name="energy" interval="2000" chance="15" length="9" spread="3" min="-600" max="-780">
            <attribute key="areaEffect" value="energyarea"/>
        </attack>
        <attack name="energycondition" interval="2000" chance="20" radius="7" min="-2000" max="-2000">
            <attribute key="areaEffect" value="yellowspark"/>
        </attack>
        <attack name="bleedcondition" interval="2000" chance="20" length="9" spread="0" min="-2000" max="-2000">
            <attribute key="areaEffect" value="yellowspark"/>
        </attack>
    </attacks>
    <defenses armor="70" defense="70">
        <defense name="time guardian" interval="2000" chance="10"/>
        <defense name="time guardiann" interval="2000" chance="10"/>
    </defenses>
    <elements>
        <element earthPercent="70"/>
        <element icePercent="70"/>
        <element energyPercent="70"/>
        <element firePercent="70"/>
        <element holyPercent="70"/>
        <element deathPercent="70"/>
        <element physicalPercent="70"/>
    </elements>
    <immunities>
        <immunity name="paralyze"/>
        <immunity name="drunk"/>
        <immunity name="invisible"/>
    </immunities>
    <voices interval="2000" chance="5">
        <voice sentence="This place is sacred!"/>
    </voices>
    <loot>
        <item id="2148" countmax="100" chance="100000"/><!-- gold coin -->
        <item id="2148" countmax="100" chance="100000"/><!-- gold coin -->
        <item id="2152" countmax="25" chance="100000"/><!-- platinum coin -->
        <item id="2150" countmax="10" chance="100000"/><!-- small amethyst -->
        <item id="2145" countmax="10" chance="100000"/><!-- small diamond -->
        <item id="2149" countmax="10" chance="100000"/><!-- small emerald -->
        <item id="2147" countmax="10" chance="100000"/><!-- small ruby -->
        <item id="9970" countmax="10" chance="100000"/><!-- small topaz -->
        <item id="7590" countmax="5" chance="100000"/><!-- great mana potion -->
        <item id="8472" countmax="10" chance="100000"/><!-- great spirit potion -->
        <item id="8473" countmax="10" chance="100000"/><!-- ultimate health potion -->
        <item id="18413" countmax="3" chance="100000"/><!-- blue crystal shard -->
        <item id="18415" countmax="3" chance="100000"/><!-- green crystal shard -->
        <item id="18414" countmax="3" chance="100000"/><!-- blue crystal shard -->
        <item id="7439" chance="100000"/><!-- berserk potion -->
        <item id="2158" chance="100000"/><!-- blue gem -->
        <item id="2155" chance="100000"/><!-- green gem -->
        <item id="13293" chance="2000"/><!-- leather whip -->
        <item id="12410" chance="2000"/><!-- luminous orb -->
        <item id="5904" chance="2000"/><!-- magic sulphur -->
        <item id="7894" chance="1000"/><!-- magma legs -->
        <item id="7440" chance="2000"/><!-- mastermind potion -->
        <item id="2214" chance="2000"/><!-- ring of healing -->
        <item id="2153" chance="2000"/><!-- violet gem -->
        <item id="2154" chance="2000"/><!-- yellow gem -->
        <item id="11240" chance="1000"/><!-- guardian boots -->
        <item id="2436" chance="1000"/><!-- skull staff -->
        <item id="2197" chance="1000"/><!-- stone skin amulet -->
        <item id="11240" chance="1000"/><!-- guardian boots -->
        <item id="27624" chance="500" unique="1"/><!-- Part of a Rune(terceira) -->
        <item id="8904" chance="1000"/><!-- Spellscroll of Prophecies -->
        <item id="5809" chance="100" unique="1"/><!-- Soul Stone -->
        <item id="2539" chance="100"/><!-- Phoenix Shield -->
        <item id="7417" chance="100"/><!-- Runed Sword -->
        <item id="25377" chance="100000"/><!-- Gold Token -->
        <item id="25172" chance="100000"/><!-- Silver Token -->
    </loot>
</monster>
 

 

 

Se puder ajudar agradeço muito.

Editado por Duduks (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Muvuka
      Alguem tem anti-nuker igual a esse 
       

       
    • Por Muvuka
      [SQLite] -=[TFS]=- 0.4 8.60 Alguem faz apk mobile pra mim ip: dexsoft.ddns.net
       
      pra mim
       
      https://www.mediafire.com/file/5klqnyy6k7jda0u/OTClientV8.rar/file
       
      TA TUDO AI
    • Por yuriowns
      Salve rapazes, estou precisando de um client próprio para o meu servidor 7.4, preciso que algum programador experiente e com referências faça um client do jeito que eu procuro. Responda aqui para fazermos um orçamento, obrigado!

      Não sei se estou no lugar certo, se não me desculpem e peço que movam por gentileza!
    • Por paulo thush
      Pessoal to com um grande problema, estou com um servidor TFS 1.4x 10.98, recentemente começou dar um problema, sempre quando falava "trade" com o npc dava um erros, com qual quer npc, o erro e o seguinte.
       
       
      me falaram que o problema e nas sourcer que precisava mudar umas coisas me passaram um link no github esse aqui 
      https://github.com/otland/forgottenserver/pull/3996/files
       
      porem eu vi vídeos no youtube ensinando a compilar, já vi muitos tópicos como compilar a sourcer, ai quando vou compilar da esse erro
      já tentei instalar, desinstala muitas coisas, alterar também não vai, minha sourcer e essa 
      https://github.com/otland/forgottenserver
       
       
      Alguém poderia me ajuda com esse erro, ou ate compilar 100% as sourcer. os Tópicos que eu tentei para compilar e esse daqui, se não poder o link me desculpe.
      https://forums.otserv.com.br/index.php?/forums/topic/169234-windowsvc2019-compilando-sources-tfs-14-vcpkg/
       
      alguém me da uma luz por favor kkk
    • Por Ryzek
      Uso tfs 0.4 trunk3884 bem simples.
      Queria acrescentar magic effects para 255 pois o meu só vai até 69. Encontrei um tópico que falava sobre porém parece ter sido removido, não consigo acessar!
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo