Omega 377 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 (editado) Resposta ao tópico http://www.xtibia.com/forum/topic/218216-pedido-evento-fraghora/ Informações É um evento simples: quem mata mais durante a duração do evento, ganha os prêmios Intervalo entre uma execução e outra configurável Duração configurável Feito em mod (porque é mais fácil de instalar) Vem com comando informativo sobre o evento Testado em 8.6 Código Crie um arquivo chamado Blood Festival.xml na sua pasta de mods com o seguinte código: <?xml version="1.0" encoding="UTF-8"?> <!-- BLOOD FESTIVAL MOD FEITO POR LEORIC (OMEGA) Informações: http://www.xtibia.com/forum/topic/220919-the-blood-festival --> <mod name="Blood Festival" version="1.0" author="Leoric(Omega)" enabled="yes"> <config name="blood_lib"><![CDATA[ BLOOD_kills = 405050 BLOOD_global = 5152 BLOOD_time = 5153 BLOOD_config = { duration = 1 * 60 * 60, -- [1 * 60 * 60 = 1 hora] reward = {item = 1234, amount = 1, exp = 0, level = 5, money = 3000}, -- Recompensa para o vencedor do evento -- item = itemid da recompensa // amount = quantidade desse item // exp = quantidade de exp // level = quantidade de levels // money em GPs count_frags_only = false, -- [true] Conta somente frags (com skull) // [false] Conta todas as mortes PVP_enforced = true, -- [true] Tornará o servidor PVP enforced durante o evento // [false] As frags durante o evento serão contadas normalmente standard_pvp = 2, -- Se a opção acima está como true, coloque aqui o tipo de PVP do seu servidor (1 = NO-PVP, 2 = PVP, 3 = PVP-ENFORCED) -- Level mínimo para que um jogador conte como frag no evento min_level = 20, } function runBloodFestival() if getGlobalStorageValue(BLOOD_time) == -1 then setGlobalStorageValue(BLOOD_time, os.time(t)) end if os.time(t) - getGlobalStorageValue(BLOOD_time) >= BLOOD_config.duration then setGlobalStorageValue(BLOOD_time, -1) setGlobalStorageValue(BLOOD_global, -1) local winner = 0 local kills = 0 for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, BLOOD_kills) > kills then kills = getPlayerStorageValue(pid, BLOOD_kills) winner = pid end end if winner ~= 0 then doBroadcastMessage(getCreatureName(winner)..' has won the Blood Festival!') local reward = BLOOD_config.reward if reward.item then doPlayerAddItem(winner, reward.item, reward.amount or 1) end if reward.exp then doPlayerAddExperience(winner, reward.exp) end if reward.level then doPlayerAddSkill(winner, 8, reward.level) end if reward.money then doPlayerAddMoney(winner, reward.money) end else doBroadcastMessage('The Blood Festival has finished!') end if BLOOD_config.PVP_enforced and tonumber(BLOOD_config.standard_pvp) then setWorldType(tonumber(BLOOD_config.standard_pvp)) end return true end if getGlobalStorageValue(BLOOD_global) == -1 then doBroadcastMessage('The Blood Festival has started! Use !bloodinfo to get information about the event!') if BLOOD_config.PVP_enforced then setWorldType(WORLD_TYPE_PVP_ENFORCED) end end setGlobalStorageValue(BLOOD_global, 1) addEvent(runBloodFestival, 30000) return true end ]]></config> <globalevent name="blood_event" interval="14400000" event="script"><![CDATA[ domodlib('blood_lib') function onThink() doBroadcastMessage('The Blood Festival will start in one minute! Use !bloodinfo to get information about the event!') local func = db.query or db.executeQuery local query = func("UPDATE `player_storage` SET `value` = 0 WHERE `key` = "..BLOOD_kills..";") for _,pid in ipairs(getPlayersOnline()) do setPlayerStorageValue(pid, BLOOD_kills, 0) end addEvent(runBloodFestival, 60000) return true end ]]></globalevent> <event type="login" name="blood_login" event="script"><![CDATA[ domodlib('blood_lib') function onLogin(cid) if getGlobalStorageValue(BLOOD_global) == -1 and getPlayerStorageValue(cid, BLOOD_kills) > -1 then setPlayerStorageValue(cid, BLOOD_kills, -1) end registerCreatureEvent(cid, 'blood_kill') return true end ]]></event> <talkaction words="!bloodinfo" event="buffer"><![CDATA[ domodlib('blood_lib') local pvpname = {'NO-PVP', 'PVP', 'PVP-ENFORCED'} local active = getGlobalStorageValue(BLOOD_global) == -1 and 'OFF.' or 'ON.' local duration = getGlobalStorageValue(BLOOD_time) == -1 and '' or math.ceil((os.time(t) - getGlobalStorageValue(BLOOD_time))/60) local str = "The Blood Festival is a tournament in which you have "..math.ceil(BLOOD_config.duration / 60).. " minutes to kill as many players as you can. In the end, the winner will get a nice reward!" local str2 = "\nThe current status is: "..active local str3 = "\nOnly players level "..BLOOD_config.min_level.."+ will count for frags on the event." local str4 = active == 'OFF.' and '' or "\n"..duration.." minutes until the Blood Festival ends. PVP type is set to "..pvpname[getWorldType()].."." str = str..''..str2..''..str3..''..str4 doShowTextDialog(cid, 1965, str) return true ]]></talkaction> <event type="kill" name="blood_kill" event="script"><![CDATA[ domodlib('blood_lib') function onKill(cid, target) if not isPlayer(target) then return true elseif getGlobalStorageValue(BLOOD_global) == -1 then return true elseif BLOOD_config.count_frags_only and (getCreatureSkull(cid) < 3 or getCreatureSkull(target) >= 3) then return true elseif getPlayerLevel(target) < BLOOD_config.min_level then return true else if getPlayerStorageValue(cid, BLOOD_kills) == -1 then setPlayerStorageValue(cid, BLOOD_kills, 1) else setPlayerStorageValue(cid, BLOOD_kills, getPlayerStorageValue(cid, BLOOD_kills) + 1) end end return true end ]]></event> <globalevent name="blood_start" type="start" event="script"><![CDATA[ domodlib('blood_lib') function onStartup() if getGlobalStorageValue(BLOOD_global) > -1 then setGlobalStorageValue(BLOOD_global, -1) end return true end ]]></globalevent> </mod> Configurações Configuração padrão: 1 hora de duração e 4 horas entre o início de cada evento A duração, os prêmios e a opção de contar somente frags unjust são feitas na primeira parte do código, chamada blood_config O intervalo de execução entre os eventos vem como padrão 4hs (14400000 milissegundos). Esse intervalo pode ser modificado nessa parte: <globalevent name="blood_event" interval="14400000" event="script"><![CDATA[ Screenshot OBS.: Sim, eu uso muito mal o paint. Mas o script funciona. Editado Setembro 11, 2013 por omega blueheaven Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/ Compartilhar em outros sites More sharing options...
Jackgoku 15 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Uau!!! Gostei, mas isso seria mas para um baiak, não para global? por que esses frags do evento são contados normal igual para pegar red, ou ao termina o evento esses frags somem? Mas Rep+ pelo evento! Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560469 Compartilhar em outros sites More sharing options...
Omega 377 Postado Setembro 11, 2013 Autor Share Postado Setembro 11, 2013 Uau!!! Gostei, mas isso seria mas para um baiak, não para global? por que esses frags do evento são contados normal igual para pegar red, ou ao termina o evento esses frags somem? Mas Rep+ pelo evento! As frags contam normalmente. Pode pegar red, black, etc durante o evento e só vai sair normalmente. Em uma possível nova versão, posso adicionar essa configuração. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560471 Compartilhar em outros sites More sharing options...
Jackgoku 15 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Se for possível, colocar para não pegar red, ou nada, existe uma área específica ou no mapa todo que é o evento? gostaria de colocar no global versão 10.10. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560473 Compartilhar em outros sites More sharing options...
Omega 377 Postado Setembro 11, 2013 Autor Share Postado Setembro 11, 2013 Se for possível, colocar para não pegar red, ou nada, existe uma área específica ou no mapa todo que é o evento? gostaria de colocar no global versão 10.10. Cara, comecei a pensar aqui nesse seu pedido e pensei que poderia ser bem difícil. Mas é bem simples, na realidade: é só colocar o servidor PVP-Enforced durante o evento. Coloquei essa configuração no código, mas ainda vou testar umas coisas antes de divulgar. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560478 Compartilhar em outros sites More sharing options...
Jackgoku 15 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Amigo uma pergunta, tem como eu colocar um teleporte no templo, e os player que for participar tem que ir naquela arena. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560489 Compartilhar em outros sites More sharing options...
Omega 377 Postado Setembro 11, 2013 Autor Share Postado Setembro 11, 2013 Amigo uma pergunta, tem como eu colocar um teleporte no templo, e os player que for participar tem que ir naquela arena. Aí seria um evento bem diferente, teria que refazer algumas coisas. Testei aqui sua outra sugestão e tá funcionando: você pode habilitar pra colocar PVP-Enfo automaticamente e deixar seu tipo de PVP normal que automaticamente volta quando o evento termina. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560501 Compartilhar em outros sites More sharing options...
Jackgoku 15 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Obrigado amigo, gostei, como tinha dito no primeiro post, Rep+. E eu preciso de umas ajuda sobre uns erro em scripts no meu servidor, se você pode me ajudar me manda uma Private Messenger (PM) falando se pode, e assim que eu irei começar arrumar os erros na parte de scripts irei pedir ajuda. Obrigado. Atenciosamente, Jackgoku Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560506 Compartilhar em outros sites More sharing options...
luanluciano93 38 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Tem algum tipo de level mínimo para contar os frags? Tipo pro caso de alguém tiver char lvl baixo, ou inicial se nao tiver protection level? Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560538 Compartilhar em outros sites More sharing options...
Omega 377 Postado Setembro 11, 2013 Autor Share Postado Setembro 11, 2013 Tem algum tipo de level mínimo para contar os frags? Tipo pro caso de alguém tiver char lvl baixo, ou inicial se nao tiver protection level? Agora tem. Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560544 Compartilhar em outros sites More sharing options...
luanluciano93 38 Postado Setembro 11, 2013 Share Postado Setembro 11, 2013 Obrigado! REP+ Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560564 Compartilhar em outros sites More sharing options...
Vodkart 1515 Postado Setembro 12, 2013 Share Postado Setembro 12, 2013 bacana o sistema, tem algumas coisas que ainda podem ser implementadas, mas isso futuramente... REP+ campeão Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560928 Compartilhar em outros sites More sharing options...
Omega 377 Postado Setembro 13, 2013 Autor Share Postado Setembro 13, 2013 bacana o sistema, tem algumas coisas que ainda podem ser implementadas, mas isso futuramente... REP+ campeão Valeu =D Se tiver sugestões, mande aí, por enquanto o período da faculdade tá no início. E Vodkart, olhe suas mensagens... Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1560936 Compartilhar em outros sites More sharing options...
kleitonalan321 6 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 gostei do teu mod ganhou meu REP Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1563975 Compartilhar em outros sites More sharing options...
SkyDarkyes 104 Postado Setembro 22, 2013 Share Postado Setembro 22, 2013 Omega não é possivel fazer com que NÃO CONTE FRAG,e seja em um luga especifico tipo uma arena? Link para o comentário https://xtibia.com/forum/topic/220919-the-blood-festival/#findComment-1564138 Compartilhar em outros sites More sharing options...
Posts Recomendados