Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Galera, adicionei um mod no meu server de base (PDA) e tá dando o seguinte error.
 

> Loading pikachuevent.xml...[Error - ScriptingManager::loadFromXml] Cannot load mod mods/pikachuevent.xml
Line: 44, Info: Input is not proper UTF-8, indicate encoding !
Bytes: 0xE7 0x6F 0x75 0x2C

failed!

segue o mod:
 

Spoiler

<?xml version="1.0" encoding="UTF-8"?>
<mod name="PikachuEvent" version="1.0" author="Absolute" contact="tibiaking.com" enabled="yes">

    <config name="config_pikachu_event">
        <![CDATA[
            configPikachuEvent = {
                storages = {
                    main = 'PikachuEventMain', -- set free storage
                    player = 'PikachuEventPlayer', -- set free storage
                    joining = 'PikachuEventJoining', -- set free storage
                    kills = 'PikachuEventKills', -- set free storage
                    exhaust = 'PikachuEventExhaust', -- set free storage
                    countEvent = 'PikachuEventCountEvent' -- set free storage
                },
                
                position = {x=251,y=435,z=6}, -- position to which player is teleporting
                room = {
                    from = {x=237,y=435,z=6}, -- left top corner of event room
                    to = {x=264,y=435,z=6} -- right bottom corner of event room
                },                
                
                rewards = {8301, 8302, 8303, 8310}, -- reward id which player can win (reward is random)        
                players = {
                    max = 20, -- max players in event
                    min = 1, -- min players to event start
                    minLevel = 50, -- min level to join to event
                    pvpEnabled = false -- can players hit theirselfs
                },
                
                days = {
                    ['Monday'] = {'17:30:00'}, 
                    ['Wednesday'] = {'09:00:00'}, 
                    ['Friday'] = {'17:30:00'}, 
                    ['Sunday'] = {'17:30:00'}
                },
                
                spawnDelay = 5000, -- miliseconds
                amountCreatingMonsters = 6,
                monsters = {'Charizard', 'Venusaur', 'Blastoise', 'Brave Venusaur', 'Brave Charizard', 'Brave Blastoise'}, -- name of monsters which is creating in event

                delayTime = 5.0, -- time in which players who joined to event are teleporting to teleport position [miuntes]
                startEvent = 30, -- time from teleport to start event [seconds]
                stopEvent = 20000, -- [seconds]
                text = '-PL-\nO evento começou, Boa Sorte!\n\n-ENG-\nO evento começou, Boa Sorte!'
            }
        ]]>
    </config>
    
    <lib name="lib_pikachu_event">
        <![CDATA[
            function doStopPikachuEvent()
                if getStorage(configPikachuEvent.storages.main) > 0 then
                    local playerTable, creatureTable = {}, {}

                    for x = configPikachuEvent.room.from.x, configPikachuEvent.room.to.x do
                        for y = configPikachuEvent.room.from.y, configPikachuEvent.room.to.y do
                            local n, i = getTileInfo({x=x, y=y, z=configPikachuEvent.room.from.z}).creatures, 1
                            if n ~= 0 then
                                local v = getThingfromPos({x=x, y=y, z=configPikachuEvent.room.from.z, stackpos=i}).uid
                                while v ~= 0 do
                                    if isPlayer(v) then
                                        table.insert(playerTable, v)
                                        if n == #playerTable then
                                            break
                                        end
                                    elseif isMonster(v) then
                                        table.insert(creatureTable, v)
                                        if n == #creatureTable then
                                            break
                                        end
                                    end
                                    i = i + 1
                                    v = getThingfromPos({x=x, y=y, z=configPikachuEvent.room.from.z, stackpos=i}).uid
                                end
                            end
                        end
                    end

                    if #playerTable > 1 then
                        table.sort(playerTable, function(a, b) return (getCreatureStorage(a, configPikachuEvent.storages.kills)) > (getCreatureStorage(b, configPikachuEvent.storages.kills)) end)
                        
                        local prize = math.random(#configPikachuEvent.rewards)
                        
                        doTeleportThing(playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])))
                        doCreatureSetStorage(playerTable[1], configPikachuEvent.storages.kills, 0)
                        doPlayerAddItem(playerTable[1], configPikachuEvent.rewards[prize], 1)
                        doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1]))
                        doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'Parabéns, você venceu e recebeu '..getItemNameById(configPikachuEvent.rewards[prize])..' como recompensa.')
                        doBroadcastMessage('Monster invasion encerrado. O vencedor de hoje é '..getCreatureName(playerTable[1])..'. Parabéns!')
                        doSetStorage(configPikachuEvent.storages.main, -1)
                        
                        db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Pikachu\", \"" .. getCreatureName(playerTable[1]) .. "\", \"" .. getItemNameById(configPikachuEvent.rewards[prize]) .. "\", " .. getStorage(configPikachuEvent.storages.countEvent) ..");")

                        for i = 2, #playerTable do
                            doCreatureAddHealth(playerTable, getCreatureMaxHealth(playerTable) - getCreatureHealth(playerTable))
                            doCreatureAddMana(playerTable, getCreatureMaxMana(playerTable) - getCreatureMana(playerTable))
                            doTeleportThing(playerTable, getTownTemplePosition(getPlayerTown(playerTable)))
                            doPlayerSendTextMessage(playerTable, MESSAGE_EVENT_ADVANCE, 'You loss.')
                            doSendMagicEffect(getThingPos(playerTable), CONST_ME_STUN)
                            doCreatureSetStorage(playerTable, configPikachuEvent.storages.kills, 0)
                        end

                        for i = 1, #creatureTable do
                            if isMonster(creatureTable) then
                                doRemoveCreature(creatureTable)
                            end
                        end
                        
                        doSetStorage(configPikachuEvent.storages.countEvent, getStorage(configPikachuEvent.storages.countEvent) + 1)
                    elseif #playerTable == 0 then
                        for i = 1, #creatureTable do
                            if isMonster(creatureTable) then
                                doRemoveCreature(creatureTable)
                            end
                        end
                    
                        doBroadcastMessage('No one win in Monster invasion.')
                        doSetStorage(configPikachuEvent.storages.main, -1)
                        doSetStorage(configPikachuEvent.storages.countEvent, getStorage(configPikachuEvent.storages.countEvent) + 1)
                    end
                end
            end

            function doStartPikachuEvent()
                doSetStorage(configPikachuEvent.storages.joining, -1)

                if configPikachuEvent.players.min <= doCountPlayersPikachuEvent() then
                    for _, cid in ipairs(getPlayersOnline()) do
                        if getCreatureStorage(cid, configPikachuEvent.storages.player) > 0 then
                            doCreatureSetStorage(cid, configPikachuEvent.storages.player, -1)
                            doTeleportThing(cid, configPikachuEvent.position)
                            doCreatureSetNoMove(cid, false)
                            doRemoveCondition(cid, CONDITION_INFIGHT)
                            
                            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Preparem-se. Monster invasion começa em '..configPikachuEvent.startEvent..' seconds.')
                        end
                    end
                    
                    addEvent(doSetStorage, configPikachuEvent.startEvent * 1000, configPikachuEvent.storages.main, 1)
                    addEvent(doStopPikachuEvent, configPikachuEvent.stopEvent * 1000)
                    addEvent(doRepeatCheckPikachuEvent, configPikachuEvent.startEvent * 1000 + 2000)
                    
                    doBroadcastMessage('Monster invasion começou. Boa Sorte a Todos!')
                else
                    for _, cid in ipairs(getPlayersOnline()) do
                        if getCreatureStorage(cid, configPikachuEvent.storages.player) > 0 then
                            doCreatureSetNoMove(cid, false)
                            doRemoveCondition(cid, CONDITION_INFIGHT)
                        end
                    end
                    
                    doBroadcastMessage('Monster invasion não começou pois não tinha players suficiente.')
                end
            end
            
            function doRepeatCheckPikachuEvent()
                if getStorage(configPikachuEvent.storages.main) > 0 then
                    local playerTable, creatureTable, xTable, yTable = {}, {}, {}, {}

                    for x = configPikachuEvent.room.from.x, configPikachuEvent.room.to.x do
                        for y = configPikachuEvent.room.from.y, configPikachuEvent.room.to.y do
                            local n, i = getTileInfo({x=x, y=y, z=configPikachuEvent.room.to.z}).creatures, 1
                            if n ~= 0 then
                                local v = getThingfromPos({x=x, y=y, z=configPikachuEvent.room.to.z, stackpos=i}).uid
                                while v ~= 0 do
                                    if isPlayer(v) then
                                        table.insert(playerTable, v)
                                        if n == #playerTable then
                                            break
                                        end
                                    elseif isMonster(v) then
                                        table.insert(creatureTable, v)
                                        if n == #creatureTable then
                                            break
                                        end
                                    end
                                    i = i + 1
                                    v = getThingfromPos({x=x, y=y, z=configPikachuEvent.room.to.z, stackpos=i}).uid
                                end
                            end
                            
                            table.insert(xTable, x)
                            table.insert(yTable, y)
                        end
                    end

                    if #playerTable == 1 then
                        local prize = math.random(#configPikachuEvent.rewards)
                        
                        addEvent(doTeleportThing, 200, playerTable[1], getTownTemplePosition(getPlayerTown(playerTable[1])), true)
                        doPlayerAddItem(playerTable[1], configPikachuEvent.rewards[prize], 1)
                        doCreatureSetStorage(playerTable[1], configPikachuEvent.storages.kills, 0)
                        doCreatureAddHealth(playerTable[1], getCreatureMaxHealth(playerTable[1]) - getCreatureHealth(playerTable[1]))
                        doCreatureAddMana(playerTable[1], getCreatureMaxMana(playerTable[1]) - getCreatureMana(playerTable[1]))
                        doPlayerSendTextMessage(playerTable[1], MESSAGE_EVENT_ADVANCE, 'Parabéns, você venceu e recebeu '..getItemNameById(configPikachuEvent.rewards[prize])..' como recompensa.')
                        doBroadcastMessage('Monster invasion encerrado. O vencedor de hoje é '..getCreatureName(playerTable[1])..'. Parabéns.')
                        db.query("INSERT INTO `events` (`event_name`, `winner_name`, `won_item`, `time_win`) VALUES (\"Pikachu\", \"" .. getCreatureName(playerTable[1]) .. "\", \""..getItemNameById(configPikachuEvent.rewards[prize]).."\", "..getStorage(configPikachuEvent.storages.countEvent)..");")
                        
                        for i = 1, #creatureTable do
                            if isMonster(creatureTable) then
                                doRemoveCreature(creatureTable)
                            end
                        end
                        
                        doSetStorage(configPikachuEvent.storages.main, -1)
                        doSetStorage(configPikachuEvent.storages.countEvent, getStorage(configPikachuEvent.storages.countEvent) + 1)
                        return
                    elseif #playerTable == 0 then
                        for i = 1, #creatureTable do
                            if isMonster(creatureTable) then
                                doRemoveCreature(creatureTable)
                            end
                        end
                    
                        doBroadcastMessage('Nenhum vencedor em monster invasion event.')
                        doSetStorage(configPikachuEvent.storages.main, -1)
                        
                        doSetStorage(configPikachuEvent.storages.countEvent, getStorage(configPikachuEvent.storages.countEvent) + 1)
                        return
                    end
                
                    local pos = {x=xTable[math.random(#xTable)], y=yTable[math.random(#yTable)], z=7}                
                    for i = 1, configPikachuEvent.amountCreatingMonsters do
                        doCreateMonster(configPikachuEvent.monsters[math.random(#configPikachuEvent.monsters)], pos, false, false, false)
                        doSendMagicEffect(pos, CONST_ME_BATS)
                    end
                    
                    addEvent(doRepeatCheckPikachuEvent, configPikachuEvent.spawnDelay)
                end
            end
            
            function doCountPlayersPikachuEvent()
                local x = 0
                for _, cid in ipairs(getPlayersOnline()) do
                    if getCreatureStorage(cid, configPikachuEvent.storages.player) > 0 then
                        x = x + 1
                    end
                end
                return x
            end
            
            function doStartCountingPikachuEvent(x)
                if configPikachuEvent.delayTime-x > 0 then
                    doBroadcastMessage('Monster invasion começa em '..configPikachuEvent.delayTime-x..' minutes. Você pode participar, use o comando "!minvasion join".')
                    addEvent(doStartCountingPikachuEvent, 60*1000, x+1)
                end
            end
        ]]>
    </lib>

    <talkaction words="!minvasion" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")

            function onSay(cid, words, param)
                if getStorage(configPikachuEvent.storages.joining) ~= 1 then
                    return doPlayerSendCancel(cid, 'Monster invasion ainda não começou.')
                elseif param == '' then
                    return doPlayerSendCancel(cid, 'Command param required (say: "minvasion join" or "!minvasion leave.").')
                elseif getPlayerLevel(cid) < configPikachuEvent.players.minLevel then
                    return doPlayerSendCancel(cid, 'Você não pode participar do evento se for level '..configPikachuEvent.players.minLevel..'-.')
                elseif getTileInfo(getThingPos(cid)).protection ~= true then
                    return doPlayerSendCancel(cid, 'Para participar do evento você precisa está em aréa pz.')
                elseif exhaustion.check(cid, configPikachuEvent.storages.exhaust) ~= false then
                    return doPlayerSendCancel(cid, 'Você precisa esperar '..exhaustion.get(cid, configPikachuEvent.storages.exhaust)..' segundos para usar este comando novamente.')
                end

                if param == 'join' then
                    if getCreatureStorage(cid, configPikachuEvent.storages.player) > 0 then
                        return doPlayerSendCancel(cid, 'Você já está participando do evento, espere pacientemente até que o evento inicie.')
                    elseif doCountPlayersPikachuEvent() == configPikachuEvent.players.max then
                        return doPlayerSendCancel(cid, 'Desculpe, dessa vez já tem o máximo de players na árena.')
                    end
                    
                    doCreatureSetNoMove(cid, true)
                    doPlayerPopupFYI(cid, configPikachuEvent.text)
                    doCreatureSetStorage(cid, configPikachuEvent.storages.player, 1)
                    doAddCondition(cid, createConditionObject(CONDITION_INFIGHT, -1))
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, 'Você está participando do monster invasion event. Você não pode andar até que o evento comece. Espere pacientemente até que o evento inicie.')
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'Você entrou no monster invasion event.')
                elseif param == 'leave' then
                    if getCreatureStorage(cid, configPikachuEvent.storages.player) <= 0 then
                        return doPlayerSendCancel(cid, 'Você não pode sair do evento caso você não tenha entrado.')
                    end
                    
                    doCreatureSetNoMove(cid, false)
                    doCreatureSetStorage(cid, configPikachuEvent.storages.player, -1)
                    doRemoveCondition(cid, CONDITION_INFIGHT)
                    doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'Você saiu do monster invasion event')
                end
                
                exhaustion.set(cid, configPikachuEvent.storages.exhaust, 5)                
                return true
            end
        ]]>
    </talkaction>
    
    <talkaction words="!startpikachu" access="5" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")
            domodlib("lib_pikachu_event")

            function onSay(cid, words, param)
                if getStorage(configPikachuEvent.storages.main) > 0 then
                    return doPlayerSendCancel(cid, 'Monster invasion já está acontecendo.')
                end
            
                doStartCountingPikachuEvent(0)

                for _, pid in ipairs(getPlayersOnline()) do
                    if getCreatureStorage(pid, configPikachuEvent.storages.player) > 0 then
                        doCreatureSetStorage(pid, configPikachuEvent.storages.player, -1)
                        doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                        doCreatureSetStorage(pid, configPikachuEvent.storages.kills, 0)
                    end
                end

                doSetStorage(configPikachuEvent.storages.joining, 1)
                addEvent(doStartPikachuEvent, configPikachuEvent.delayTime * 60 * 1000)
                return true
            end
        ]]>
    </talkaction>
    
    <talkaction words="!stoppikachu" access="5" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")
            domodlib("lib_pikachu_event")

            function onSay(cid, words, param)
                if getStorage(configPikachuEvent.storages.main) > 0 then
                    doStopPikachuEvent()
                else
                    doPlayerSendCancel(cid, 'You can not do it if Pikachu Plague Attack is not enabled.')
                end
                return true
            end
        ]]>
    </talkaction>

    <globalevent name="Pikachu_Event_Days" interval="1000" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")
            domodlib("lib_pikachu_event")
            
            local daysOpen = {}            
            for k, v in pairs(configPikachuEvent.days) do
                table.insert(daysOpen, k)
            end
            
            function onThink(interval)
                if isInArray(daysOpen, os.date('%A')) then
                    if isInArray(configPikachuEvent.days[os.date('%A')], os.date('%X', os.time())) then
                        if getStorage(configPikachuEvent.storages.joining) ~= 1 then
                            doStartCountingPikachuEvent(0)

                            for _, pid in ipairs(getPlayersOnline()) do
                                if getCreatureStorage(pid, configPikachuEvent.storages.player) > 0 then
                                    doCreatureSetStorage(pid, configPikachuEvent.storages.player, -1)
                                    doTeleportThing(pid, getTownTemplePosition(getPlayerTown(pid)), true)
                                    doCreatureSetStorage(pid, configPikachuEvent.storages.kills, 0)
                                end
                            end

                            doSetStorage(configPikachuEvent.storages.joining, 1)
                            addEvent(doStartPikachuEvent, configPikachuEvent.delayTime * 60 * 1000)
                        end
                    end
                end
                return true
            end
        ]]>
    </globalevent>
    
    <event type="statschange" name="Pikachu_Event_Dead" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")

            function onStatsChange(cid, attacker, type, combat, value)
                if type == 1 and getCreatureHealth(cid) <= value then
                    if isInRange(getThingPos(cid), configPikachuEvent.room.from, configPikachuEvent.room.to) then
                        if isPlayer(cid) then
                            doCreatureAddHealth(cid, getCreatureMaxHealth(cid) - getCreatureHealth(cid))
                            doCreatureAddMana(cid, getCreatureMaxMana(cid) - getCreatureMana(cid))
                            doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
                            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You loss due to attack.')
                            
                            doSendAnimatedText(getThingPos(cid), value, TEXTCOLOR_RED)
                            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
                            doCreatureSetStorage(cid, configPikachuEvent.storages.kills, 0)
                            return false
                        end
                    end
                elseif configPikachuEvent.players.pvpEnabled ~= true and isInArray({1,3}, type) and isPlayer(attacker) and isPlayer(cid) then
                    if isInRange(getThingPos(cid), configPikachuEvent.room.from, configPikachuEvent.room.to) then
                        return false
                    end
                end
                return true
            end
        ]]>
    </event>

    <event type="kill" name="Pikachu_Event_Kill" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")

            function onKill(cid, target, damage, flags)
                if isInRange(getThingPos(cid), configPikachuEvent.room.from, configPikachuEvent.room.to) then
                    if isInArray(configPikachuEvent.monsters, getCreatureName(target)) then
                        doCreatureSetStorage(cid, configPikachuEvent.storages.kills, math.max(0, getCreatureStorage(cid, configPikachuEvent.storages.kills) + 1))
                    end
                end
                return true
            end
        ]]>
    </event>

    <event type="login" name="Pikachu_Event_Login" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")

            function onLogin(cid)
                if getCreatureStorage(cid, configPikachuEvent.storages.player) > 0 then
                    doCreatureSetStorage(cid, configPikachuEvent.storages.player, -1)
                    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), true)
                    doCreatureSetNoMove(cid, false)
                    doRemoveCondition(cid, CONDITION_INFIGHT)
                    doCreatureSetStorage(cid, configPikachuEvent.storages.player.kills, 0)
                end

                registerCreatureEvent(cid, 'Pikachu_Event_Dead')
                registerCreatureEvent(cid, 'Pikachu_Event_Kill')
                return true
            end
        ]]>
    </event>
    
    <globalevent name="Pikachu_Event_Start" type="startup" event="script">
        <![CDATA[
            domodlib("config_pikachu_event")

            function onStartup()
                doSetStorage(configPikachuEvent.storages.main, -1)
                doSetStorage(configPikachuEvent.storages.joining, -1)
                return true
            end
        ]]>
    </globalevent>
</mod>

 

Link para o post
Compartilhar em outros sites

troca essa primeira linha:

 

<?xml version="1.0" encoding="UTF-8"?>

 

por

 

<?xml version="1.0" encoding="ISO-8859-1"?>  

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

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 LeoTK
      Salve galera neste tópico irei postar algumas prints do mapa do servidor para quem queira acompanhar e quem sabe até utilizar de inspiração para mapear o seu NTO.
       
      #Att 11/08/2022

       
       
       
       
      Konoha (Em Desenvolvimento)
       
       
       
       
    • Por DiigooMix
      Como o título já diz, será que alguém possui sprite do hitto e se possível as transformações dele?
    • Por OmegaZero
      Olá gostaria que alguém me ajudasse com uma "scripting" não sei se é pela mesma, seria o seguinte uma determinada arma teria a chance de dar double hit e não sei oque fazer alguem poderia ajudar?

      OBS:não sei se é o local correto se não for mova, desculpe
    • Por Madarasenju
      Olá galera do Tibia King, queria por uns npc's no meu server que não tem função de trade nem nada do tipo, queria que eles só andassem como enfeite, Rep+ Pra quem me ajudar... grato desde já.
    • Por SilenceRoot
      A magia é assim o você usa a a magia e ela ficará ativado por 10 segundos, até que o inimigo lance a primeira magia ou todos de uma vez, quando ele lançar a primeira magia, ele não lhe acertará ou seja esquivando dela, e logo em seguida será teletransportado aleatoriamente ao redor do inimigo que usou.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo