Ir para conteúdo

Featured Replies

Postado

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>

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo