Ir para conteúdo
  • Cadastre-se

Sitema/Mod [MODS] [8.6] Fire Storm Event - Automático


Posts Recomendados

50 minutos atrás, bertzz25 disse:

Aqui ta bugando quando entra um player só, ele não fecha o evento e fica dando loop no reward para o unico player que entrou...

 

 

ajuda nois Vodkart

 

logico né, só pode entrar no min 2 players no evento.

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
  • Respostas 53
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Evento for fun para colocar no seu ot, quem é atingido pelo fogo morre, o último a sobreviver ganha.   O evento é automático, mas também possui um comando para dar inicio ao evento, só usar

seu serve deve ser em milesegundos   troque essa linha:   <globalevent name="Storm_Fire_Start" interval="60" event="script"><![CDATA[   por   <globaleve

@Vodkart vou testar ele jaja, mas to com uma duvida, no dia e o horario esta assim ["Monday"] = {"18:00","20:00","18:00"}, tem 2x o 18:00 foi erro de digitação ?

31 minutos atrás, Vodkart disse:

 

logico né, só pode entrar no min 2 players no evento.

 

Sim... Exatamente esse o problema, quando ele da o erro de que não tem players suficientes para o evento, o TP não fecha e os storage não são resetados.

 

Porém todo o player que entra no TP ganha a reward e na hora é automaticamente teleportado para o temple, como se fosse um loop.

 

Já verifiquei seu script, mas não encontrei nenhum erro que causasse o mal funcionamento das funções removeFireTp() e ZerarStorFire()

 

 

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

DODGERS OT

Global 8.60 24/7

 

Servidor Dedicado 24 horas online projetado para mais de 400 players online.

 

Stages

 

1 - 80 level, 300x

81 - 150 level, 250x
151 - 170 level, 200x
171 - 180 level, 150x
181 - 190 level, 100x
191 - 200 level, 50x
201 - 230 level, 15x
231 - 250 level, 10x
251 - 300 level, 5x
301 - 800 level, 3x
801+ level, 1x

 

Skill Rate: 30x
Magic Rate: 20x
Loot Rate: 3x

 

PVP Protection: Level 50

 

http://www.dodgers-ot.com

Global 8.60 24h

Link para o post
Compartilhar em outros sites
7 minutos atrás, bertzz25 disse:

 

Sim... Exatamente esse o problema, quando ele da o erro de que não tem players suficientes para o evento, o TP não fecha e os storage não são resetados.

 

Porém todo o player que entra no TP ganha a reward e na hora é automaticamente teleportado para o temple, como se fosse um loop.

 

Já verifiquei seu script, mas não encontrei nenhum erro que causasse o mal funcionamento das funções removeFireTp() e ZerarStorFire()

 

 

 

 

seu serve deve ser em milesegundos

 

troque essa linha:

 

<globalevent name="Storm_Fire_Start" interval="60" event="script"><![CDATA[

 

por

 

<globalevent name="Storm_Fire_Start" interval="60000" event="script"><![CDATA[

 

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

Faz sentido mesmo Vodkart !

 

Valeu a ajuda ae brother rep++, caso o problema persista mando outro post aqui :D:D:D

 

Abraços

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

DODGERS OT

Global 8.60 24/7

 

Servidor Dedicado 24 horas online projetado para mais de 400 players online.

 

Stages

 

1 - 80 level, 300x

81 - 150 level, 250x
151 - 170 level, 200x
171 - 180 level, 150x
181 - 190 level, 100x
191 - 200 level, 50x
201 - 230 level, 15x
231 - 250 level, 10x
251 - 300 level, 5x
301 - 800 level, 3x
801+ level, 1x

 

Skill Rate: 30x
Magic Rate: 20x
Loot Rate: 3x

 

PVP Protection: Level 50

 

http://www.dodgers-ot.com

Global 8.60 24h

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

Mano perfeito o sistema funciona 100% sem nem um erro testado e aprovado aqui na v. 0.3.6 rodou lizinho sem nem um problema recomendo evento bem divertido =), obrigado pelo trabalho em desenvolver o script e por disponibilizar para gente muito grato =)

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

Gostaria de suporte sobre este evento, são apenas 3 duvidas que estou tentando arrumar aqui!

Eu uso TFS 0.4, as duvidas é:

 

Qual a causa deste erro que da na distro, na maioria das vezes?

Spoiler

2i734ef.png

 

Os fire está caindo muito rapido, mais muito rapido mesmo, bem dizer o evento começa e já acaba matando todo mundo de tão rapido que os fire cai, como regulo isso?

 

Teria como fazer o player receber o item direto na backpack do player mesmo, sem receber outra Backpack?

 

Aguardo e muito obrigado pelo mods, gostei porem estou com esses problemas que estou tentando resolver, obrigado!

 

                                                           

55f6tc.gif                     

Link para o post
Compartilhar em outros sites

Outra duvida é, instalei o mods, precisa instalar o arquivo rar que você deixou também? ou só o mods?

Segundo é essa parte no mods:

Spoiler

<movevent type="StepIn" actionid ="45111" event="script">

devo colocar actionid em alguma coisa pelo rme??

 

                                                           

55f6tc.gif                     

Link para o post
Compartilhar em outros sites
41 minutos atrás, Vodkart disse:

me passa teu mods editado pra mim ver

O mods aqui geralmente deu muitos probleminhas, retire e instalei o .rar e esta tudo certinho até então, obrigado!

 

                                                           

55f6tc.gif                     

Link para o post
Compartilhar em outros sites
  • 1 month later...
  • 3 weeks later...

Localizei um bug, se o player entrar e der utana vid ou por o ring quando o evento é iniciado ele n reconhece que tem esse player q está de "ghost" , teria como barrar o anel e a magia no evento?

Link para o post
Compartilhar em outros sites
  • 1 year later...

@Vodkart vod meu amor desculpa reviver mas se eu tiver um server NTO e os effects forem diferentes, eu posso trocar estas linhas
            addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
            addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)

por estas?
            addEvent(doSendMagicEffect, 150, pos, 110)
            addEvent(doSendMagicEffect, 150, pos, 120)
?

ja testei, funcionou <3 

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

 

 

 

  • 532144234_Logo_NTO_BLOOD_Finish_HIM_By_Antonio_Luckas(3).png.fd58d1af125a7e82ccdd751637e9ca93.png
Link para o post
Compartilhar em outros sites
  • 5 months later...

Vod estou com um probleminha... por ex: entrou 10 players no portal, dai quando da o tempo de iniciar o evento ele simplesmente fala que não houve vencedor e também não manda os players para o templo. Enviei convite para você no discord ja faz 1 semana para tentar conversar sobre isso porém vc nem aceitou ;/

Link para o post
Compartilhar em outros sites
6 horas atrás, pokadelo disse:

Vod estou com um probleminha... por ex: entrou 10 players no portal, dai quando da o tempo de iniciar o evento ele simplesmente fala que não houve vencedor e também não manda os players para o templo. Enviei convite para você no discord ja faz 1 semana para tentar conversar sobre isso porém vc nem aceitou ;/

 

me manda seu mods pra mim dar uma olhada

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

 

3 minutos atrás, pokadelo disse:

@Vodkart

 

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<mod name="Fire Storm Event" version="8.6" author="Vodkart" contact="" enabled="yes">
<config name="fire_config"><![CDATA[
Fire = {
    storages = {172354, 172355}, -- storage Count
    players = {min = 2, max = 50}, -- min, max players no evento
    minLevel = 20, -- level minimo para entrar no event
    rewards = {{2160,10},{2494,1}}, -- premios que vai receber
    timeToStartEvent = 30, -- segundos para começar o evento
    CheckTime = 5, -- time to check event
    teleport = {{x=158, y=49, z=7}, {x=32409 , y=32474, z=7}}, -- posição do teleport, posição para onde o jogador vai
    arena = {{x=32393,y=32463,z=7},{x=32423,y=32463,z=7}} -- posição começo e final da area
}
Fire_Days = {
    ["Monday"] = {"13:00","18:00","20:00","22:00"},
    ["Tuesday"] = {"12:41","18:00","20:00","22:00"},
    ["Wednesday"] = {"13:00","18:00","20:00","22:00"},
    ["Thursday"] = {"13:00","18:00","20:00","22:00"},
    ["Friday"] = {"13:00","18:00","20:00","22:00"},
    ["Saturday"] = {"13:00","18:00","20:00","22:00"},
    ["Sunday"] = {"13:00","18:00","20:00","22:00"}
}
function removeFireTp()
    local t = getTileItemById(Fire.teleport[1], 1387).uid
    return t > 0 and doRemoveItem(t) and doSendMagicEffect(Fire.teleport[1], CONST_ME_POFF)
end
function ZerarStorFire()
    setGlobalStorageValue(Fire.storages[1], 0)
    setGlobalStorageValue(Fire.storages[2], 0)
end
function getPlayersInFireEvent()
    local t = {}
    for _, pid in pairs(getPlayersOnline()) do
        if isInRange(getPlayerPosition(pid), Fire.arena[1], Fire.arena[2]) then
            t[#t+1] = pid
        end
    end
    return t
end
function getFireRewards(cid, items)
    local backpack = doPlayerAddItem(cid, 1999, 1) -- backpackID
    for _, i_i in ipairs(items) do
        local item, amount = i_i[1],i_i[2]
        if isItemStackable(item) or amount == 1 then
            doAddContainerItem(backpack, item, amount)
        else
            for i = 1, amount do
                doAddContainerItem(backpack, item, 1)
            end
        end
    end
end
function doFireInArea(n)
    if #getPlayersInFireEvent() > 1 then
        for i = 1, n do
            local pos = {x=math.random(Fire.arena[1].x, Fire.arena[2].x), y=math.random(Fire.arena[1].y,Fire.arena[2].y), z=Fire.arena[1].z}
            local m = getTopCreature(pos).uid
            doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
            addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
            addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
            if m ~= 0 and isPlayer(m) then
                doSendMagicEffect(getCreaturePosition(m), CONST_ME_FIREAREA)
                doCreatureSay(m, "Ooh Burn Burn", TALKTYPE_ORANGE_1)
                local corpse = doCreateItem(3058, 1, getPlayerPosition(m))
                doItemSetAttribute(corpse, "description", "You recognize " .. getCreatureName(m) .. ". He was killed by Fire Field.")
                doSendMagicEffect(getPlayerPosition(m), CONST_ME_POFF)
                doTeleportThing(m, getTownTemplePosition(getPlayerTown(m)))
                doPlayerSendTextMessage(m, MESSAGE_EVENT_ADVANCE, "[Fire Storm Event] You died burned out.")
            end
        end
        local x = 2700-(200*n)
        addEvent(doFireInArea, x <= 0 and 500 or x, n+1)
    elseif #getPlayersInFireEvent() == 1 then
        local cid = getPlayersInFireEvent()[1]
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
        getFireRewards(cid, Fire.rewards)
        doBroadcastMessage("Fire Storm Event have finished. The winner is ".. getCreatureName(cid).. ". Congratulations.", MESSAGE_EVENT_ADVANCE)
        ZerarStorFire()
    else
        doBroadcastMessage("No one Won the Fire Storm Event.", MESSAGE_EVENT_ADVANCE)
        ZerarStorFire()
    end
end
function CheckFireEvent(delay)
    if getGlobalStorageValue(Fire.storages[1]) ~= (Fire.players.max+1) then
        if delay > 0 and getGlobalStorageValue(Fire.storages[1]) < Fire.players.max then
            doBroadcastMessage("[Fire Stortm Event] Starting in " .. delay .. " minutes! The teleport will be closed when the event start!", MESSAGE_STATUS_WARNING)
        elseif delay == 0 and getGlobalStorageValue(Fire.storages[1]) < Fire.players.min then
            for _, cid in pairs(getPlayersInFireEvent()) do
                doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
            end
            removeFireTp()
            doBroadcastMessage("The Fire Storm event could not start because of to few players participating.\n At least " .. Fire.players.min .. " players is needed!", MESSAGE_STATUS_WARNING)
            ZerarStorFire()
        elseif delay == 0 and getGlobalStorageValue(Fire.storages[1]) >= Fire.players.min then
            removeFireTp()
            doBroadcastMessage("Good Lucky! The event will start on "..Fire.timeToStartEvent.." seconds. get ready!")
            addEvent(doFireInArea, Fire.timeToStartEvent*1000, 1)
        end
        addEvent(CheckFireEvent, 60000, delay-1)
    end
end
]]></config>
<globalevent name="Storm_Fire_Start" interval="60" event="script"><![CDATA[
domodlib('fire_config')
function onThink(interval, lastExecution)
    if Fire_Days[os.date("%A")] then
        local hrs = tostring(os.date("%X")):sub(1, 5)
        if isInArray(Fire_Days[os.date("%A")], hrs) and getGlobalStorageValue(Fire.storages[2]) <= 0 then
            local tp = doCreateItem(1387, 1, Fire.teleport[1])
            doItemSetAttribute(tp, "aid", 45111)
            CheckFireEvent(Fire.CheckTime)
            setGlobalStorageValue(Fire.storages[1], 0) 
        end
    end
    return true
end]]></globalevent>
<event type="login" name="Storm_Fire_Login" event="script"><![CDATA[
domodlib('fire_config')
function onLogin(cid)
    registerCreatureEvent(cid, "FireStormBatle")
    if isInRange(getPlayerPosition(cid), Fire.arena[1], Fire.arena[2]) then
        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)))
    end
    return true
end]]></event>
<event type="combat" name="FireStormBatle" event="script"><![CDATA[
domodlib('fire_config')
if isPlayer(cid) and isPlayer(target) and isInRange(getPlayerPosition(cid), Fire.arena[1], Fire.arena[2]) then
    doPlayerSendCancel(cid, "You may not attack this player.")
    return false
end
return true
]]></event>
<movevent type="StepIn" actionid ="45111" event="script"><![CDATA[
domodlib('fire_config')
function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then return true end
    if getPlayerAccess(cid) > 3 then return doTeleportThing(cid, Fire.teleport[2]) end
    if getPlayerLevel(cid) < Fire.minLevel then
        doTeleportThing(cid, fromPosition, true)
        doPlayerSendCancel(cid, "You need to be at least level " .. Fire.minLevel .. ".")
        doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE)
        return true
    end
    if getGlobalStorageValue(Fire.storages[1]) <= Fire.players.max then
        doTeleportThing(cid, Fire.teleport[2])
        setGlobalStorageValue(Fire.storages[1], getGlobalStorageValue(Fire.storages[1])+1)
        doBroadcastMessage(getPlayerName(cid) .. " entered the fire stortm event! Currently " .. getGlobalStorageValue(Fire.storages[1]) .. " players have joined!", MESSAGE_STATUS_CONSOLE_RED)
        if getGlobalStorageValue(Fire.storages[1]) == Fire.players.max then
            setGlobalStorageValue(Fire.storages[1], getGlobalStorageValue(Fire.storages[1])+1)
            removeFireTp()
            doBroadcastMessage("The event will start on "..Fire.timeToStartEvent.." seconds. get ready!")
            addEvent(doFireInArea, Fire.timeToStartEvent*1000, 1)
        end 
    end
    return true
end]]></movevent>
<talkaction words="/firestart;!firestart" access="5" event="buffer"><![CDATA[
domodlib('fire_config')
if getGlobalStorageValue(Fire.storages[2]) > 0 then
    doPlayerSendCancel(cid, "The event is already starting.") return true
elseif not param or not tonumber(param) then 
    doPlayerSendCancel(cid, "Use only numbers.") return true 
end
local param = tonumber(param) <= 0 and 1 or tonumber(param)
local tp = doCreateItem(1387, 1, Fire.teleport[1])
doItemSetAttribute(tp, "aid", 45111)
CheckFireEvent(tonumber(param))
setGlobalStorageValue(Fire.storages[1], 0)
setGlobalStorageValue(Fire.storages[2], 1)
]]></talkaction>
<globalevent name="FireDebug-Start" type="start" event="buffer"><![CDATA[
domodlib('fire_config')
ZerarStorFire()
return true]]></globalevent>
</mod>

 

 

ele ta assim, infelizmente eu não entendo muita coisa, apenas baixei os arquivos que vc disponibilizou lá e instalei.

 

 

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

@pokadelo acho que a position Y do seu mapa está errado, nessa linha aqui:

 

  arena = {{x=32393,y=32463,z=7},{x=32423,y=32463,z=7}} -- posição começo e final da area

 

está certo? 32463 as duas?? se sim, então deixa assim:

 

  arena = {{x=32393,y=32463,z=7},{x=32423,y=32464,z=7}} -- posição começo e final da area

 

mas confere certinho a pos Y ai...

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

@Vodkart

alterei la como você disse porém, não mudou em nada o erro.

isso aqui aparece em game

18:26 [Fire Stortm Event] Starting in 1 minutes! The teleport will be closed when the event start!

18:26 Account Menage entered the fire stortm event! Currently 1 players have joined!
18:26 Cannabis Sativa entered the fire stortm event! Currently 2 players have joined!
18:27 Good Lucky! The event will start on 30 seconds. get ready!
18:28 No one Won the Fire Storm Event.

 

 

antes do evento começar ja avisa que não houve vencedores e não envia ninguém para o templo.

 

 e isso aqui mostra na distro

> Broadcasted message: "[Fire Stortm Event] Starting in 1 minutes! The teleport will be closed when the event start!".
> Broadcasted message: "Account Menage entered the fire stortm event! Currently 1 players have joined!".
> Broadcasted message: "Cannabis Sativa entered the fire stortm event! Currently 2 players have joined!".
> Broadcasted message: "Good Lucky! The event will start on 30 seconds. get ready!".
> Broadcasted message: "No one Won the Fire Storm Event.".

 

 

EDIT: Criei outra area agora para testar mudei la as positions tudo certinho e erro também continuou.

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

@pokadelo 

 

posso ver como ficou ali na parte das configurações?

 

 

e outra...

 

seu serve deve ser em milesegundos

 

nesta linha, troque "60" por "60000"

 

<globalevent name="Storm_Fire_Start" interval="60" event="script"><![CDATA[

 

por

 

<globalevent name="Storm_Fire_Start" interval="60000" event="script"><![CDATA[

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 Absolute
      Olá amigos, membros, visitantes, papagaios, enfim...

      Depois de muito me pedirem o evento SNOWBAL WAR EVENT, trago ele 100% pra vocês.

      Como funciona?
      Os jogadores irão se divertir em uma emocionante partida de guerra de bolas de neve. O objetivo principal do evento é derrubar o número máximo de jogadores durante uma partida - atirando bolas de neve contra seus inimigos. O jogador que mais pontos fizer até o termino do evento será o vencedor (recompensa pode ser configurada).

      Sem delongas, vamos ao que interessa...
       
       
       
       

      Em data/actions abra o seu actions.xml e insira a seguinte linha:
       
       
      <action actionid="7900" event="script" value="snowballaction.lua" />

      Em data/actions/scripts crie um arquivo com o nome de snowballaction.lua e insira o seguinte conteúdo:
      function onUse(cid, item, frompos, item2, topos) if item.actionid == 7900 then if(SBW_AMMOINFI) then doPlayerSendTextMessage(cid, 27, "as bolas de neve sao infinitas, nao ha necessidade que voce compre-as.") else if (getPlayerStorageValue(cid, SBW_SCORE) > 0) and (getPlayerStorageValue(cid, SBW_AMMO) < 30) then doPlayerSetStorageValue(cid, SBW_SCORE, getPlayerStorageValue(cid, SBW_SCORE)-1) doPlayerSetStorageValue(cid, SBW_AMMO, getPlayerStorageValue(cid, SBW_AMMO)+SBW_AMMOBUY) doPlayerSendTextMessage(cid, 27, "Voce trocou " .. SBW_AMMOBUY .. "x bolas de neve por 1 ponto de placar.") doSendMagicEffect(getCreaturePosition(cid),4) else doPlayerSendTextMessage(cid, 27, "Voce nao possui pontos de jogo o suficiente ou ja esta carregando muitas bolas de neve.") end end end end  
       
       
       

      Em data/talkactions abra o seu talkactions.xml e insira a seguinte linha:
       
      <talkaction words="!snowball" event="script" value="snowballtalk.lua"/>

      Em data/talkactions/scripts crie um arquivo com o nome de snowballtalk.lua e insira o seguinte conteúdo:
      function onSay(cid, words, param, channel) local k = string.explode(param, ",") if(k[1] ~= nil) then if(string.upper(k[1]) == 'INFO') then local score = {} local output = "Voce tem " .. getPlayerStorageValue(cid, SBW_SCORE) .. " pontos.\nVoce tem "..getPlayerStorageValue(cid, SBW_AMMO).."x municoes.\n------------------\nO maior matador:\n" for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, SBW_INEVENT) then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, SBW_SCORE)}) end end local lx = table.getn(score) if(lx > 3) then lx = 3 end table.sort(score, function(a, b) return a[2] > b[2] end) for k = 1,lx do output = output .. k..". "..score[k][1] .." [".. score[k][2] .."].\n" end doPlayerPopupFYI(cid, output) end if (string.upper(k[1]) == 'ATIRAR') then if(getPlayerStorageValue(cid, SBW_INEVENT) == 1) and not getTileInfo(getThingPos(cid)).protection then if getPlayerStorageValue(cid, SBW_EXAUSTHED) <= 1 then if(getPlayerStorageValue(cid, SBW_AMMO) > 0) then if SBW_STATUS == 'on' then if(SBW_AMMOINFI == false) then doPlayerSetStorageValue(cid, SBW_AMMO, getPlayerStorageValue(cid, SBW_AMMO)-1) end doPlayerSetStorageValue(cid, SBW_EXAUSTHED, 2) lineAnimation(getPlayerLookDirection(cid),getCreaturePosition(cid),12,cid,1,0,1,0,0,0,1,0) addEvent(doPlayerSetStorageValue, SBW_SHOOTEXAUSTHED, cid, SBW_EXAUSTHED, 1) if (getPlayerStorageValue(cid, SBW_AMMO) ~= 1) then doPlayerSendTextMessage(cid, 27, "Restam "..getPlayerStorageValue(cid, SBW_AMMO).."x bolas de neve.") else doPlayerSendTextMessage(cid, 27, "Usando sua ultima bola de neve, recarregue.") end end else doPlayerSendCancel(cid, "Voce esta sem bolas de neve, recarregue no centro do campo ou mate um inimigo.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end else doPlayerPopupFYI(cid, "Acalme-se voce deve esperar para atirar novamente.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return false end else doPlayerPopupFYI(cid, "Voce precisa estar dentro evento ou fora da pz.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) end end end return true end function lineAnimation(lookDir,playerPos,effect,cid,fvar,fpos,ffound,fposV,fcheck,fvcid,floopCounter,fvpid, name) local var = fvar local pos = fpos local found = ffound local posV = fposV local check = fcheck local vcid = fvcid local loopCounter = floopCounter local vpid = fvpid local storage = SBW_EXAUSTHED if var < 2 then vcid = cid end pos = playerPos if not isInWallArray(convert(lookDir,pos)) then--isInWallArray({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z}) then --isInArray(t.onShoot.misc.walls_id, getThingfromPos({x=convert(lookDir,pos).x, y=convert(lookDir,pos).y,z=convert(lookDir,pos).z, stackpos=0}).itemid) then doSendDistanceShoot(pos, convert(lookDir,pos),effect) pos = convert(lookDir,pos) var=var+1 posV = convertV(lookDir,playerPos) for _, pid in ipairs(getPlayersOnline()) do if (getCreaturePosition(pid).x == pos.x and getCreaturePosition(pid).y == pos.y and getCreaturePosition(pid).z == pos.z) then --if loopCounter > 2 then vpid = pid --end if (vpid ~= vcid) then if var > 2 then if (getCreaturePosition(pid).x == posV.x and getCreaturePosition(pid).y == posV.y and getCreaturePosition(pid).z == posV.z) then killPlayer(pid,pos,getCreatureName(vcid)) if (lookDir == 0) or (lookDir == 2) then var = 6 else var = 8 end end end killPlayer(pid,pos,vcid) if (lookDir == 0) or (lookDir == 2) then var = 6 else var = 8 end end end loopCounter = loopCounter +1 end if (lookDir == 0) or (lookDir == 2) then if var ~= 6 then addEvent(lineAnimation, SBW_BALLSPEED, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end else if var ~= 8 then addEvent(lineAnimation, SBW_BALLSPEED, lookDir,pos,effect,nil,var,pos,found,posV,check,vcid,loopCounter,vpid) else var = 1 end end else doSendMagicEffect(convert(lookDir,pos),2) var = 1 end end local ret = {} function convert(lookDir,pos) local positions = { [0] = {x = pos.x, y = pos.y-1, z = pos.z}, [1] = {x = pos.x+1, y = pos.y, z = pos.z}, [2] = {x = pos.x, y = pos.y+1, z = pos.z}, [3] = {x = pos.x-1, y = pos.y, z = pos.z} } ret = positions[lookDir] return ret end local ret = {} function convertV(lookDir,pos) local positions = { [0] = {x = pos.x, y = pos.y+1, z = pos.z}, [1] = {x = pos.x-1, y = pos.y, z = pos.z}, [2] = {x = pos.x, y = pos.y-1, z = pos.z}, [3] = {x = pos.x+1, y = pos.y, z = pos.z} } ret = positions[lookDir] return ret end function isInWallArray(pos) for k = 0, table.getn(SBW_WALLSID) do if getTileItemById(pos, SBW_WALLSID[k]).itemid == SBW_WALLSID[k] then --this doesn't even make sense but tried other ways and it gave errors, so meh 2lazy2search return true end end return false end function killPlayer(cid, pos, killer) local t_l = SBW_AREA[1] local b_r = SBW_AREA[2] local posti = {} local isPossibleToTeleportPlayer = false while (isPossibleToTeleportPlayer == FALSE) do posti = Position(math.random(t_l.x,b_r.x), math.random(t_l.y, b_r.y), 7) if isInWallArray(posti) == FALSE then isPossibleToTeleportPlayer = TRUE end end doTeleportThing(cid, posti) doSendMagicEffect(pos,2) doSendMagicEffect(posti,6) doSendAnimatedText(pos, ""..getCreatureName(killer).." ", 55) doPlayerSendTextMessage(cid, 27, "Voce morreu para "..getCreatureName(killer)..".") doPlayerSetStorageValue(killer, SBW_SCORE, getPlayerStorageValue(killer, SBW_SCORE)+SBW_POINTSKILL) doPlayerSendTextMessage(killer, 27, "You've killed "..getCreatureName(cid)..".") if SBW_LOSTSCORE then doPlayerSetStorageValue(cid, SBW_SCORE, getPlayerStorageValue(cid, SBW_SCORE)-1) end if SBW_RESETAMMO then doPlayerSetStorageValue(cid, SBW_AMMO, SBW_MINAMMO) end end  
       
       
       
       
      Em data/globalevents abra o seu globalevents.xml e insira a seguinte linha:
      <globalevent name="StartSBW" time="19:00" event="script" value="events/snowballglobalevent.lua"/>
      Em data/globalevents/scripts crie um arquivo com o nome de snowballglobalevent.lua e insira o seguinte conteúdo:
      function onTime() function isInWallArray(pos) for k = 0, table.getn(SBW_WALLSID) do if (getTileItemById(pos, SBW_WALLSID[k]).itemid == SBW_WALLSID[k]) then return true end end return false end function endsnowball() local score = {} if not SBW_USEWAIT then doRemoveItem(getTileItemById(SBW_TP, 1387).uid) end for _, pid in ipairs(getPlayersOnline()) do if getPlayerStorageValue(pid, SBW_INEVENT) > 0 then table.insert(score, {getCreatureName(pid), getPlayerStorageValue(pid, SBW_SCORE)}) doPlayerSetStorageValue(pid, SBW_INEVENT, 0) doPlayerSetStorageValue(pid, SBW_SCORE, 0) doPlayerSetStorageValue(pid, SBW_AMMO, 0) doTeleportThing(pid, SBW_TPEND) end end table.sort(score, function(a, b) return a[2] > b[2] end) --local random_item = SBW_REWARDS[math.random(1, #SBW_REWARDS)] local hora = os.date("%X") local data = os.date("%x") if table.getn(score) > 0 then if SBW_ADDREWARD then for _, pid in ipairs(getPlayersOnline()) do if getCreatureName(pid) == score[1][1] then for op,ad in pairs(SBW_REWARDS) do doPlayerAddItem(pid, ad[1], ad[2]) end break end end end db.query("INSERT INTO `snowballwar` VALUES ('', ".. db.escapeString(score[1][1]) .. ",".. score[1][2] ..", ".. db.escapeString(data) ..", ".. db.escapeString(hora) ..");") db.query("UPDATE `players` SET `sbw_points`=`sbw_points`+".. score[1][2] .." WHERE `name` = " .. db.escapeString(score[1][1]) .. ";") doBroadcastMessage("[SNOWBALL EVENT] encerrou-se, parabens ao jogador "..score[1][1].." que venceu o SnowBall Event com "..score[1][2].." pontos.") end return true end local t_l = SBW_AREA[1] local b_r = SBW_AREA[2] function moveToEvent() for _, pid in ipairs(getPlayersOnline()) do if isInRange(getCreaturePosition(pid), SBW_WAITROOM[1], SBW_WAITROOM[2]) then local posti = {} local isPossibleToTeleportPlayer = false while (isPossibleToTeleportPlayer == FALSE) do posti = Position(math.random(t_l.x,b_r.x), math.random(t_l.y, b_r.y), 7) if (isInWallArray(posti) == FALSE) then isPossibleToTeleportPlayer = TRUE end end doTeleportThing(pid, posti) doPlayerSetStorageValue(pid, SBW_INEVENT, 1) doPlayerSetStorageValue(pid, SBW_AMMO, SBW_MINAMMO) doPlayerSetStorageValue(pid, SBW_SCORE, 0) doPlayerSendTextMessage(pid, 27, "[SNOWBALL WAR] Seja bem vindo, aqui estao os comandos que voce vai usar durante o evento\n!snowball atirar --Atirar uma bola de neve.\n!snowball info --Isso mostra seus pontos de jogos e a quantia de bolas de neve que voce tem. Tambem mostra o ranking de pontos do evento.\n Recarregue suas bolas de neve clicando em frente ao gerador no centro do campo.\nAltamente recomendado adicionar estes comandos a sua hotkeys.") end end doRemoveItem(getTileItemById(SBW_TP, 1387).uid) addEvent(endsnowball, SBW_DURATION*1000*60) doBroadcastMessage(SBW_MSGSTART) end local time = os.date("*t") local timeopen1 = math.ceil(SBW_TIMEWAIT / 4) local timeopen2 = math.ceil(SBW_TIMEWAIT / 2) if (SBW_STARTAUTO) and (isInArray(SBW_DAYS,time.wday)) then doBroadcastMessage(SBW_MSGWARNING) if SBW_USEWAIT then addEvent(doBroadcastMessage, timeopen1*1000*60, "[SNOWBALL WAR] - Resta(m) ".. timeopen2 .." minuto(s) para iniciar o evento!") if (timeopen2 ~= timeopen1) then addEvent(doBroadcastMessage, timeopen2*1000*60, "[SNOWBALL WAR] - Resta(m) ".. timeopen1 .." minuto(s) para iniciar o evento!") end addEvent(moveToEvent, SBW_TIMEWAIT*1000*60) doCreateTeleport(1387, SBW_TPGO, SBW_TP) else if SBW_TFS == "0.3" then doItemSetAttribute(doCreateItem(1387, SBW_TP), "aid", 2880) else doSetItemActionId(doCreateItem(1387, SBW_TP), 2880) end if(SBW_DURATION > 0) then addEvent(endsnowball, SBW_DURATION*1000*60) end end end return true end  
       
       
       
       
      Em data/movements abra o seu movements.xml e insira a seguinte linha:
      <movevent type="StepIn" actionid ="2880" event="script" value="snowballmovement.lua"/>  
      Em data/movements/scripts crie um arquivo com o nome de snowballglobalmovement.lua e insira o seguinte conteúdo:
      function onStepIn(cid, item, pos) doTeleportThing(cid, SBW_TPGO) doBroadcastMessage("[SNOWBALL WAR] O " ..getCreatureName(cid).. " player esta participando do evento snowball.", MESSAGE_STATUS_CONSOLE_ORANGE) doPlayerSetStorageValue(cid, SBW_INEVENT, 1) doPlayerSetStorageValue(cid, SBW_AMMO, SBW_MINAMMO) doPlayerSetStorageValue(cid, SBW_SCORE, 0) end  
       
       
       
       
      Já estamos quase terminando!
      Agora em data/lib crie um arquivo com o nome de SBW.lua com o seguinte conteúdo:
       
      -- This script is part of Snow Ball War Event Tibiaking Absolute -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- // -- POSIÇÕES IMPORTANTES SBW_AREA = {{x = 1214, y = 1205, z = 7}, {x = 1251, y = 1242, z = 7}}-- AREA DO EVENTO | Canto superior esquerdo / inferior direito SBW_WAITROOM = {{x = 1229, y = 1220, z = 6}, {x = 1235, y = 1226, z = 6}} -- AREA DE ESPERA | Canto superior esquerdo / inferior direito SBW_TP = {x = 165, y = 45, z = 7} -- local onde teleport sera criado (entrada de jogadores) SBW_TPGO = {x = 1232, y = 1223, z = 6} -- local onde teleport vai levar (saida de jogadores) SBW_TPEND = {x = 155, y = 54, z = 7} -- local onde serao teleport ao final do evento SBW_GERADOR = {x = 1232, y = 1223, z = 7} -- local onde gerador vai ficar -- CONFIGURAÇÕES DO EVENTO SBW_DAYS = {1,2,3,4,5,6,7} -- dias de semana que vai abrir SBW_DURATION = 10 -- duração do evento em minutos SBW_POINTSKILL = 1 -- pontos de jogo por morte SBW_AMMOBUY = 20 -- quantia de munições compradas por cada ponto SBW_MINAMMO = 50 -- munição inicial dos jogadores SBW_TIMEWAIT = 3 -- tempo na sala de espera em minutos SBW_AMMOINFI = false SBW_LOSTSCORE = true SBW_RANDOMIZE = true SBW_RESETAMMO = true SBW_STARTAUTO = true SBW_USEWAIT = true --PREMIO DO EVENTO SBW_ADDREWARD = true SBW_REWARDS = { {6527,500}, {2345,1} } -- // Não mexa daqui para baixo SBW_TFS = "0.4" -- STORAGES SBW_EXAUSTHED = 2455 SBW_INEVENT = 2460 SBW_SCORE = 2465 SBW_AMMO = 2400 SBW_WALLSID = {5324,7003,7021,6712,7023,7002,6713,6714,6869,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6707,6708,6709,6710,6711,2698,2697,7020,6719,6720,6721,6722,6723,6724,6725,6726,6727,6761,6762,6768,6769,4608,4609,4610,4611,4612,4613,4614,4615,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4664,4665,4666,7008,7009,7010,7011,8239,7004,7005,7006,7007,6627,6628,6629,6630,6631,6632,6633,6634,6635,6636,6637,6638,7022} SBW_BALLSPEED = 150 SBW_SHOOTEXAUSTHED = 1000 SBW_SHOOTDIR = 0 SBW_STATUS = 'on' -- MENSAGENS SBW_MSGWARNING = "[SNOWBALL WAR] Abriu o teleport de ingresso para o evento, para participar se dirija ate o templo do servidor." SBW_MSGSTART = "[SNOWBALL WAR] O teleport foi removido e o evento foi iniciado, boa sorte a todos participantes." A frente das configuração solicitadas explica onde devem ser modificados.
       
       
       
       
       
      E por fim, vá até o seu banco de dados (phpmyadmin) e insira a seguinte query:
      CREATE TABLE IF NOT EXISTS `snowballwar` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `score` int(11) NOT NULL, `data` varchar(255) NOT NULL, `hora` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `id` (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;  
      Ainda no phpmyadmin execute:
      ALTER TABLE `players` ADD `sbw_points` int(11);  
       
      Importe o arquivo SNOWBALL.otbm em seu mapa!
      Imagem do mapa:


      Download do mapa: https://www.sendspace.com/file/mae37z
      Scan do mapa: https://www.virustotal.com/pt/file/94a507c71ef4cc241e415f2a8290441f7fa77809d804e24be18e9581a85c4740/analysis/1479161634/
       
       


      É importante lembrar que peguei o script de um autor e realizei as modificações o tornando público para a comunidade exclusiva do TIBIAKING.

      Espero que façam um ótimo proveito.

      See you later.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo