• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    [Pedido] [Pedido] Script Castle 24h Otservbr 12.72

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    3zequi3l

    3zequi3l
    Miembro
    Miembro
    Descripcion escribió:Hola, saludos para todos, de antemano muchas gracias, espero puedan ayudarme, necesito un Script de Castle 24h Otservbr 12.72
    sqm que al pisarlo, avisa a todos que la Guild "x" está intentando dominar el castle, el script de la puerta del castle que no deje pasar si no tiene castle... sqm que si no eres guild no puedes pasar..., etc
    Imagen Explicativa escribió:Imagen Explicativa: [Pedido] [Pedido] Script Castle 24h Otservbr 12.72 Tibiaf10
    Version del Scripts: TFs 1.x

    2 participantes

    2[Pedido] [Pedido] Script Castle 24h Otservbr 12.72 Empty [Codigo] - Castle 24 - Vie Jun 24, 2022 8:45 pm

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    3zequi3l escribió:
    Descripcion escribió:Hola, saludos para todos, de antemano muchas gracias, espero puedan ayudarme, necesito un Script de Castle 24h Otservbr 12.72
    sqm que al pisarlo, avisa a todos que la Guild "x" está intentando dominar el castle, el script de la puerta del castle que no deje pasar si no tiene castle... sqm que si no eres guild no puedes pasar..., etc
    Imagen Explicativa escribió:Imagen Explicativa: [Pedido] [Pedido] Script Castle 24h Otservbr 12.72 Tibiaf10
    Version del Scripts: TFs 1.x



    Crear un nuevo archivo en:
    Código:
    data/libs

    Luego colocar esto dentro:
    Código:
    CASTLE24H = {
     castleNome = "[Castle 24H]", -- Prefixo que irá aparecer nas mensagens
     mensagemPrecisaGuild = "You are not part of any guild.", -- Mensagem que irá aparecer caso o player não tenha guild
     mensagemGuildDominante = "The castle is already owned by your guild.", -- Mensagem caso o player tente dominar o castelo mesmo sendo da sua guild
     mensagemGuildNaoDominante = "The castle is not your guild's", -- Caso o castelo não seja da guild do player
     mensagemLevelMinimo = "You don't have enough level to invade the castle.", -- Caso o player não tenha nível para entrar
     mensagemBemvindo = "Welcome to your Castle24H.", -- Mensagem de bem-vindo à guild dominante
     levelParaDominar = true, -- true para precisar de nivel para dominar e false para não precisar
     level = 100, -- caso o levelParaDominar seja true, qual o nivel?
     tempoAvisar = 15, -- Tempo em SEGUNDOS para não ficar spammando que o player está invadindo
    }

    function CASTLE24H:getGuildIdFromCastle()
      local guildId  = -1
      local resultId = db.storeQuery("SELECT `guild_id` FROM `castle`;")
      if (resultId ~= false) then
        guildId = result.getDataInt(resultId, "guild_id")
        result.free(resultId)
      end
      return guildId
    end

    Mas adelante entrar en:
    Código:
    data/libs/libs.lua
    Colocar esto dentro:
    Código:
    dofile('data/lib/castle24.lua')

    Ahora irnos a:
    Código:
    data/events/scripts/player.lua
    Buscamos:
    Código:
    function Player:onGainExperience(source, exp, rawExp)
    Y pegar debajo:
    Código:
    -- Castle 24H
     local xpCastle = 0
     if self:getGuild() and self:getGuild():getId() == CASTLE24H:getGuildIdFromCastle() then
     xpCastle = exp * 0.2 -- +20% XP
    end

    Ahora nos dirigimos a:
    Código:
    data/movements/scripts
    Creamos 3 archivos... uno llamado


    dominateCastle.lua
    doorsCastle.lua
    invateCastle.lua



    Una vez hemos hecho eso, abrimos el archivo dominateCastle y pegamos esto dentro:
    Código:
    local salir = {
    [7540] = {x = 457, y = 1016, z = 6},
    }

    function onStepIn(creature, item, position, fromPosition)
     local player = creature:getPlayer()
        if not player then
            return false
        end

     local guild = player:getGuild()

        if not guild then
       player:getPosition():sendMagicEffect(CONST_ME_POFF)
     player:getPosition():sendMagicEffect(CONST_ME_TELEPORT)
     player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemPrecisaGuild .."")
     
            return false
        end

     local guildId = guild:getId()
     local guildName = guild:getName()

     if guildId == Game.getStorageValue(STORAGEVALUE_CASTLE_DOMINADO) or guildId == CASTLE24H:getGuildIdFromCastle() then
     player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemGuildDominante .."")
     player:getPosition():sendMagicEffect(CONST_ME_POFF)
     player:teleportTo(fromPosition, true)
     else
     Game.setStorageValue(STORAGEVALUE_CASTLE_DOMINADO, guildId)
     Game.broadcastMessage("".. CASTLE24H.castleNome .." The castle was taken over by the Player [".. player:getName() .."] from the Guild [".. guildName .."].", MESSAGE_STATUS_WARNING)
     player:getPosition():sendMagicEffect(CONST_ME_HOLYAREA)
     db.query(('UPDATE `castle` SET `name` = "%s", `guild_id` = %d'):format(guildName, guildId))
     return true
     end
    end

    Abrimos ahora el de DoorCastle.lua:
    Código:
    function onStepIn(creature, item, position, fromPosition)
     local player = creature:getPlayer()
        if not player then
            return false
        end

     local guild = player:getGuild()
        if not guild then
            player:teleportTo(fromPosition, true)
            player:sendCancelMessage(CASTLE24H.castleNome .." " ..CASTLE24H.mensagemPrecisaGuild)
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
            return true
        end

     local guildId = guild:getId()
     local guildName = guild:getName()


     if guildId == Game.getStorageValue(STORAGEVALUE_CASTLE_DOMINADO) or guildId == CASTLE24H:getGuildIdFromCastle() then
     return true
     else
     player:sendCancelMessage(CASTLE24H.castleNome .." " .. CASTLE24H.mensagemGuildNaoDominante .." [".. guildName .."].")
     player:teleportTo(fromPosition, true)
     player:getPosition():sendMagicEffect(CONST_ME_POFF)
     player:setDirection(DIRECTION_SOUTH)
     return true
     end
    end

    Ahora el ultimo:
    Código:
    function onStepIn(creature, item, position, fromPosition)
        local player = creature:getPlayer()
        if not player then
            return false
        end

        local guild = player:getGuild()
        if not guild then
            player:teleportTo(fromPosition, true)
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemPrecisaGuild .."")
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
            return false
        end

        local guildId = guild:getId()
        local guildName = guild:getName()
        local tempo = CASTLE24H.tempoAvisar

        if CASTLE24H.levelParaDominar == true and player:getLevel() < CASTLE24H.level then
            player:teleportTo(fromPosition, true)
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemLevelMinimo .." (".. CASTLE24H.level .."+)")
            player:getPosition():sendMagicEffect(CONST_ME_POFF)
        end

        if player:getStorageValue(STORAGEVALUE_CASTLE_SPAM) > os.time() and guild then
            return true
        end

     if (guild) and (guildId == CASTLE24H:getGuildIdFromCastle()) then
     if Game.getStorageValue(STORAGEVALUE_CASTLE_DOMINADO) == nil or not Game.getStorageValue(STORAGEVALUE_CASTLE_DOMINADO) then
     player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemBemvindo .."")
     return true
     end
     end

        if guildId ~= Game.getStorageValue(STORAGEVALUE_CASTLE_DOMINADO) or guildId ~= CASTLE24H:getGuildIdFromCastle() then
            Game.broadcastMessage("".. CASTLE24H.castleNome .." The castle is being invaded by the Player [".. player:getName() .."] from the Guild [".. guildName .."].", MESSAGE_STATUS_WARNING)
            player:setStorageValue(STORAGEVALUE_CASTLE_SPAM, (os.time() + tempo))
        else
            player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "".. CASTLE24H.castleNome .." ".. CASTLE24H.mensagemBemvindo .."")
        end

        return true
    end

    Ahora una vez hemos eso... nos falta activarlo, nos dirimos a movements.xml.
    Colocamos esto:
    Código:
    <movevent event="StepIn" actionid="7538" script="dominateCastle.lua" />
    <movevent event="StepIn" actionid="7539" script="invateCastle.lua" />
    <movevent event="StepIn" actionid="7540" script="doorsCastle.lua" />

    En teoria eso seria todo.
    Para alguna duda sobre los 3 archivos:
    El DominateCastle como dice su nombre es cuando pisas el sqm automaticamente tienes el castle dominado.

    ¿Lo quieres en palanca?
    - Basicamente donce dice onStepIn... renombrarlo a onUse.

    Entonces ahora el archivo llamado invitateCastle:
    - Es cuando un player de otra guild pisa el sqm, ahi es donde alertara a todos los jugadores.

    Por ultimo el DoorCastle, no hace falta hablar de el ya sabemos para que es.
    - Para que el dominador de castle pueda abrir la puerta.

    2 participantes

    3zequi3l

    3zequi3l
    Miembro
    Miembro
    muchas gracias pruebo y le aviso



    disculpe, pero es revscripts... no hay movements.xml Sad

    2 participantes

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    3zequi3l escribió:muchas gracias pruebo y le aviso



    disculpe, pero es revscripts... no hay  movements.xml Sad

    En revscripts es muy sencillo, exactamente el scripts con tan solo añadir:
    Esto añadir al principio del scripts:
    Código:
    local castle24 = MoveEvent()

    Cambiar:
    Código:
    function onStepIn(creature, item, position, fromPosition)
    A:
    Código:
    function castle24.onStepIn(creature, item, position, fromPosition)

    Añadir esto a lo ultimo del scripts:
    Código:
    castle24:aid(7548)
    castle24:register()

    2 participantes

    Contenido patrocinado


    2 participantes

    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).