Ir para conteúdo

Demonbholder

Infante
  • Total de itens

    1551
  • Registro em

  • Última visita

  • Dias Ganhos

    24

Posts postados por Demonbholder

  1. Spoiler

    local config = {    semana_mes = "semana",
        days = {1,2,3,4,5,6,7}, -- Dia das semanas que irá acontecer o evento
        goblet = 10127, -- Troféu que vai pro vencedor do evento
        rewards = {6132, 2152, 2160}, -- Recompensas.
        moneyReward = {2160, 300, 1},-- {moneyId, quantidade, usar}1 pra usar 0 pra não usar}
        points = 1,
     
     
        playerCount = 2001, -- Storage dos players que entram e sai do evento
        zombieCount = 2002, -- Storage do zombie do event
        teleportActionId = 2008, -- Action ID do teleport
        teleportPosition = {x = 165, y = 48, z = 7, stackpos = 1}, -- Onde o teleport é criado
        teleportToPosition = {x = 549, y = 131, z = 7}, -- Pra onde será teleportado
        teleportId = 1387, -- ID do teleporte
        timeToStartEvent = 1, -- Minutos que o portal irá ficar aberto até os player entrarem
        timeBetweenSpawns = 20, -- Segundos dps do evento ser startado começarem a aparecer os zombie
        zombieName = "event zombie", -- Nome do zombie sumonado
        playersNeededToStartEvent = 2, -- Players necessários pro evento ser iniciado
        
        -- Area que o zumbi vai spawnar
        fromPosition = {x = 523, y = 100, z = 7}, -- top de fromPosition até
        toPosition = {x = 587, y = 165, z = 7} -- -- em baixo toPostion
        }
     
     
    function onTime()
        local time = os.date("*t")
        if (config.semana_mes == "semana" and isInArray(config.days,time.wday)) or (config.semana_mes == "mes" and isInArray(config.days,time.day)) or config.semana_mes == "" then
       local tp = doCreateTeleport(config.teleportId, config.teleportToPosition, config.teleportPosition)
       doItemSetAttribute(tp, "aid", config.teleportActionId)
       doBroadcastMessage("[Zombie-Event] Vai começar em " .. config.timeToStartEvent .. " minutos! O teleporte vai abrir no templo e sera fechado assim que o evento iniciar. (Premio 3ppoints para o ultimo sobrevivente!) ", MESSAGE_STATUS_WARNING)
       setGlobalStorageValue(config.playerCount, 0)
       setGlobalStorageValue(config.zombieCount, 0)
       addEvent(startEvent, config.timeToStartEvent * 1000 * 60)
        end
        return TRUE
    end
     
     
    function startEvent()   
        
        local fromp, top = config.fromPosition, config.toPosition
     
     
        if getGlobalStorageValue(config.playerCount) >= config.playersNeededToStartEvent then
            addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
            doBroadcastMessage("Boa sorte para os participantes! O portal foi fechado.", MESSAGE_STATUS_WARNING)
            
            for x = fromp.x, top.x do
                for y = fromp.y, top.y do
                    for z = fromp.z, top.z do
                        areapos = {x = x, y = y, z = z, stackpos = 253}
                        getPlayers = getThingfromPos(areapos)
                        if isPlayer(getPlayers.uid) then
                            doPlayerSendTextMessage(getPlayers.uid, MESSAGE_EVENT_ADVANCE, "O primeiro Zombie vai aparecer em " .. config.timeBetweenSpawns .. " segundos! BOA SORTE!")
    pvgaylord()
                        end
                    end
                end
            end
        else
            doBroadcastMessage("The Zombie event could not start because of to few players participating.\n At least " .. config.playersNeededToStartEvent .. " players is needed!", MESSAGE_STATUS_WARNING)
            for x = fromp.x, top.x do
                for y = fromp.y, top.y do
                    for z = fromp.z, top.z do
                        areapos = {x = x, y = y, z = z, stackpos = 253}
                        getPlayers = getThingfromPos(areapos)
                        if isPlayer(getPlayers.uid) then
                            doTeleportThing(getPlayers.uid, getTownTemplePosition(getPlayerTown(getPlayers.uid)), false)
                            doSendMagicEffect(getPlayerPosition(getPlayers.uid), CONST_ME_TELEPORT)
                        end
                    end
                end
            end
        end
    end
     
     
    function spawnZombie()
        if getGlobalStorageValue(config.playerCount) >= 2 then
            pos = {x = math.random(config.fromPosition.x, config.toPosition.x), y = math.random(config.fromPosition.y, config.toPosition.y), z = math.random(config.fromPosition.z, config.toPosition.z), stackpos = 253}
            if getThingFromPos(pos).uid == 0 then
                doSummonCreature(config.zombieName, pos)
                doSendMagicEffect(pos, CONST_ME_MORTAREA)
                setGlobalStorageValue(config.zombieCount, getGlobalStorageValue(config.zombieCount)+1)
                doBroadcastMessage("Um Zombie nasceu, temos " .. getGlobalStorageValue(config.zombieCount) .. " Zombies no evento. Corram!", MESSAGE_STATUS_CONSOLE_RED)
                addEvent(spawnZombie, config.timeBetweenSpawns * 1000)
            end
        else
    local fromp, top = config.fromPosition, config.toPosition
            for x = fromp.x, top.x do
                for y = fromp.y, top.y do
                    for z = fromp.z, top.z do
                        areapos = {x = x, y = y, z = z, stackpos = 253}
                        cid = getThingfromPos(areapos).uid
                        if isPlayer(cid) then
    doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)
    doBroadcastMessage(getCreatureName(cid)..' sobreviveu dos Zombie e venceu o evento.')
                       for _,items in ipairs(config.rewards) do
                     doPlayerAddItem(cid, items, 1)
                     doPlayerAddPoints(cid, config.points)
          end
                  if config.moneyReward[3] == 1 then
             doPlayerAddItem(cid, config.moneyReward[1], config.moneyReward[2])
             end
                     doBroadcastMessage(getPlayerName(cid) .. " venceu o Zombie Event! Parabens!", MESSAGE_STATUS_WARNING)
                     local goblet = doPlayerAddItem(cid, config.goblet, 1)
                   doItemSetAttribute(goblet, "description", "Premio de " .. getPlayerName(cid) .. " por vencer o Zombie Event.")
       elseif isMonster(cid) then
    doRemoveCreature(cid)
                        end
                    end
                end
            end
        end
    end
     
     
     
     
     
     
    function pvgaylord()
    local fromp, top, p, m = config.fromPosition, config.toPosition, 0, 0
    for x = fromp.x, top.x do
                for y = fromp.y, top.y do
                    for z = fromp.z, top.z do
                        local areapos = {x = x, y = y, z = z, stackpos = 253}
                        local cid = getThingfromPos(areapos).uid
                        if isPlayer(cid) then
    p = p+1
       elseif isMonster(cid) then
    m = m+1
                        end
                    end
                end
            end
    if p ~= getGlobalStorageValue(config.playerCount) then
    setGlobalStorageValue(config.playerCount, p)
    end
    if p < 2 then
    return true
    end
    addEvent(pvgaylord,100,nil)
    end

     

  2. Eu também não sei muito, eu entendo a linguagem, mas não sei como funciona a integração com as versões dos clients e tal. Meu chute é que cada versão do tfs seja para uma versão determinada do tibia, até porque a cada versão são adicionadas novas funcionalidades no jogo, logo as sources tem que ser alteradas. Outra coisa, se você mudar as sources, vários códigos em lua podem apresentar problemas, já que algumas funções mudam de uma versão para outra.

     

    Quanto ao outro problema, você cria uma ladder com o /i e ela funciona mas uma ladder com esse mesmo id que foi colocada pelo map editor não funciona? Se for isso, tem que ver o que o /i ta fazendo para fazer a ladder funcionar.

  3. Acho que o RigBy respondeu quase tudo, só um adendo: a função do utevo res é feita nas sources, em spells.cpp.

     

    Se você está usando tfs 1.0 e tiver curiosidade, vá em spells.cpp e procure por InstantSpell::SummonMonster.

  4. Olá,

    Muito obrigado pela atenção. Você vê a possibilidade dessa alteração nas sources? Eu não sei muito, mas acredito que usando a mesma forma que as talkactions utilizam para obter o parâmetro WORDS funcione...

    Obrigado, abraços.

     

    Sim, acho que é mais ou menos por ai. Eu não estou muito acostumado a mexer nas sources, mas se quiser podemos tentar.

     

    Obs: antes de começar, faça um backup de tudo!

     

    Você está usando tfs 1.0? Se sim, vai em spells.cpp, procura por:

     

    InstantSpell::executeCastSpell

     

    Nessa função, procura por:

     

    LuaScriptInterface::pushVariant(L, var);
    

     

    Abaixo dessa linha, coloque:

     

    LuaScriptInterface::pushString(L, getWords());
    

     

    E por último, troque isto:

     

    return m_scriptInterface->callFunction(2);
    

    Por isto:

     

    return m_scriptInterface->callFunction(3);

    Se a compilação der certo, tenta usar uma spell assim:

     

    function onCastSpell(cid, var, words)

     

    Senão, posta o erro. Não tenho um ambiente de testes aqui, por isso não pude testar.

  5. Eu não pude testar, pois não tenho nenhum ambiente de teste aqui, mas você chegou a testar mais de uma vez com o mesmo char? É que o script só vai começar a funcionar a partir da segunda vez que você deslogar.

     

    Se mesmo assim não funcionar, ocorreu algum erro no console (executável)?

  6. Eu lembro que há um tempo atrás, em um concurso, conseguimos colocar um pen drive como prêmio, bastante gente participou.

     

    Mas se não tem patrocínio, então não tem muito o que fazer... de repente uma camiseta com uma estampa do xtibia (sempre pensava nessa ideia), mas ainda sim é meio caro e não sei se o pessoal gostaria.

     

    Eu gostaria de participar do concurso biggrin.png

  7. @Zet

     

    Não sei se era isso, mas da uma olhada:

    local config =
    {
    	segundos = 5,
    	lerIP = true,
    	storage = 201507080001
    }
    
    function onLogout(cid)
    
    	local timeNow = os.time()
    	local totalTime = getPlayerLastLoginSaved(cid) + config.segundos
    
    	if totalTime >= timeNow then
    		if not config.lerIP or getPlayerStorageValue(cid, config.storage) == getPlayerIp(cid) then
    			doPlayerSendTextMessage(cid, 19, "[Pokémon X Timer] Aguarde ".. totalTime - timeNow .." segundo(s) Para Poder Deslogar!.")
    			return false
    		end
    	end
    
    	setPlayerStorageValue(cid, config.storage, getPlayerIp(cid))
    	return true
    end
    



    @Bruno

    Acho que o seu sleep trava o servidor inteiro.

  8. Oi, acredito que não tenha como sem alterar as sources, pois os únicos parâmetros que são passados pelo onCastSpell são o id do player e o var, sendo que o var (em C++) é uma struct:

    struct LuaVariant {
    LuaVariant() {
    type = VARIANT_NONE;
    number = 0;
    }

    LuaVariantType_t type;
    std::string text;
    Position pos;
    uint32_t number;
    };

     

    Basicamente serve pra saber o target da spell, podendo ser por nome, posição, id do player...

     

    Dei uma pesquisada aqui nas sources e não achei nada para resolver o teu problema por lua, mas talvez alguém saiba de algum jeito.

  9. Você tem as sources? Se sim, pode encontrar todas funções.

     

    Exemplo: https://github.com/otland/forgottenserver/blob/master/src/luascript.cpp

    https://github.com/otland/forgottenserver/blob/master/src/luascript.h

     

    Lembrando que ai não estão as funções feitas em lua, apenas em C++. As funções feitas em lua devem estar na pasta data/lib/.

     

    Exemplo: https://github.com/otland/forgottenserver/blob/master/data/lib/compat/compat.lua

  10. 
    

    function doClearMissionArea(fromPos, toPos)

    for x = fromPos.x, toPos.x do

    for y = fromPos.y, toPos.y do

    for z = fromPos.z, toPos.z do

    local cid = getTopCreature({x = x, y = y, z = z}).uid

    if cid > 0 then

    if isPlayer(cid) then

    if getPlayerStorageValue(cid, 1050) == 19 then

    setPlayerStorageValue(cid, 15335, 2)

    setPlayerStorageValue(cid, 1050, 20)

    doTeleportThing(cid, {x = 33353, y = 31410, z = 8})

    doSendMagicEffect({x = 33353, y = 31410, z = 8}, CONST_ME_TELEPORT)

    end

    else

    doRemoveCreature(cid)

    end

    end

    end

    end

    end

    return true

    end

  11. 
    

    function onStepIn(cid, item, position, lastPosition)

    start = 0

    if item.actionid == 8014 then

    for i = 1, 4 do

    local creature = getTopCreature(pos).uid

    if creature > 0 then

    if isPlayer(creature) then

    if getGlobalStorageValue(8014) < 1 then

    if getPlayerStorageValue(creature, 1050) == 19 then

    start = start + 1

    if creature == cid then

    doCreatureSay(cid, "A clicking sound tatters the silence.", TALKTYPE_ORANGE_1)

    end

    end

    end

    end

    end

    end

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...