Postado Dezembro 28, 2016 8 anos 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: Mostrar conteúdo oculto <?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>
Postado Dezembro 28, 2016 8 anos troca essa primeira linha: <?xml version="1.0" encoding="UTF-8"?> por <?xml version="1.0" encoding="ISO-8859-1"?>
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.