BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[Pedido] Npc que otorge summons

[Pedido] Npc que otorge summons

#1 [Pedido] Npc que otorge summons el Lun Jun 20, 2016 8:57 am

Acan


Miembro
un npc que al hablar con el te de un summon, que no sea comprándolo.

#2 Re: [Pedido] Npc que otorge summons el Lun Jun 20, 2016 3:46 pm

bradyan


Aprendiz
[Tienes que estar registrado y conectado para ver este vínculo] escribió:un npc que al hablar con el te de un summon, que no sea comprándolo.

Tazuna xD .

https://www.facebook.com/WOSLATINO/

#3 Re: [Pedido] Npc que otorge summons el Mar Jun 21, 2016 10:06 am

Acan


Miembro
BUMP!

#4 Re: [Pedido] Npc que otorge summons el Miér Jun 22, 2016 7:09 am

Acan


Miembro
BUMB!

#5 Re: [Pedido] Npc que otorge summons el Jue Jun 23, 2016 6:26 am

Belerofonte


Administrador
Pues... ya sabes que cuando me hacen un pedido de algo en concreto, yo tiendo a no solo hacer el script, sino que también, a ponerle mi granito de arena para mejorarlo o darle algún toque de originalidad, aunque eso no sea lo que se me haya pedido.

Y sí bien es cierto que, a veces, eso puede llegar a ser un defecto mío más que una ventaja. Ya que al fin y al cabo esto se trata de que el usuario hace un pedido esperando a que alguien se lo resuelva sin esperar nada más, si hubiera querido el script de otra forma(con ese toque extra de originalidad) lo habría pedido también. Pero no es el caso.

Por todo ello, te pregunto: (elige una opción)
A) ¿Deseas que le añada ese toque mío al tema del Npc, para añadirle algo de realidad? O sea, hacer esa misión de Naruto con el escoltado "Tazuna" lo más real posible, y así, poder diferenciarlo bien de cualquier otro server que ya contenga la Saga.

B) ¿O simplemente quieres que me ciña a lo que dice tu post, que el Npc solamente dé un summon y punto?



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#6 Re: [Pedido] Npc que otorge summons el Jue Jun 23, 2016 6:58 am

Acan


Miembro
a

#7 Re: [Pedido] Npc que otorge summons el Vie Jun 24, 2016 7:31 pm

Belerofonte


Administrador
Npc Hokage:
Servidor\Data\Npc\Scripts\... Hokage Office2.lua
Código:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end

local config = {
    Key = 8000, -- Storage Key de toda la saga.
    Value = 16, -- Storage Value necesario para aceptar esta misión.
    Keyword = 'mission', -- Palabra clave que el jugador ha de decir para aceptar la misión, tras el saludo.

    Convoy = 'Tazuna', -- 'Nombre' de la criatura(monstruo) a escoltar.
    Respawn = {x = 706, y = 1106, z = 7}, -- {Coordenada} donde aparecerá el summon. (A ser posible, fuera del rango de visión del jugador, para que se vea acercarse a él. Y no falsamente aparezca de la nada)
    Delayed = 3, -- Segundos tras los cuales el summon a escoltar dirá la frase escogida al azar de varias, con la que aparecerá en escena.

    Team = 3, -- Máxima cantidad de participantes que formará la Party. (En el caso de que la haya)
}

function creatureSayCallback(cid, type, msg)
    if(not npcHandler:isFocused(cid)) then
        return false
    end

    local Tazuna, Jugador, Equipo = config.Convoy, getCreatureName(cid), config.Team
    local Speech = {
        Tazuna = { -- Posible frase que dirá al azar Tazuna al "entrar en escena" tras haberse aceptado la misión de escolta.
            'Ah! De modo que... serás tú, ' .. Jugador .. ' quién me escoltará?... Uhmmmm...',
            '¿Un enclenque como tú me va a escoltar hasta bla bla bla?... Pfff... ¡qué remedio!',
            '¿Nos vamos ya?',
        },

        Hokage = {
            TakenMission = 'Debes de escoltar a ' .. Tazuna .. ' hacia bla bla bla...', -- Cuando se acepte la misión.
            AlreadyHeld = 'Vamos, ' .. Jugador .. '! No hagamos esperar a nuestro cliente ' .. Tazuna .. '.', -- Cuando se intente aceptar la misión teniendo ya al summon Tazuna.
            Accomplished = 'Ya completáste esta misión!', -- Cuando se intente aceptar la misión habiéndola cumplida ya anteriormente.
            ExceededLimit = 'Si vas en equipo, solamente puedes aceptar esta misión si tu grupo está formado por un número máximo de {' .. Equipo .. ' intergrantes}. Reúne a tu equipo y luego ven a hablar conmigo.', -- Cuando se intente aceptar la misión superando el límite(config.Team) de miembros en la misma party.
        },
    }

    local function hasEscort(cid)
        if #getCreatureSummons(cid) > 0 then
            for _, getSummon in ipairs(getCreatureSummons(cid)) do
                if getCreatureName(getSummon) == config.Convoy then
                    return false
                end
            end
        end
        return true
    end

    local function isPartyPlayersReady(cid)
        if #getPartyMembers(cid) <= config.Team then
            for _, member in ipairs(getPartyMembers(cid)) do
                if getPlayerStorageValue(member, config.Key) ~= config.Value then
                    selfSay((getCreatureName(cid) ~= getCreatureName(member) and 'No permito que {' .. getCreatureName(member) .. '} haga esta misión! Escoge a otro para que se una a tu equipo.' or Speech.Hokage.Accomplished), cid) -- Si se intenta aceptar la misión y un miembro de la misma party no tiene el storage Value(config.Value) necesario.
                    return
                end
                if hasEscort(member) == false then
                    selfSay((getCreatureName(cid) ~= getCreatureName(member) and 'Ya le pedí esta misión a {' .. getCreatureName(member) .. '}.' or Speech.Hokage.AlreadyHeld), cid) -- Si se intenta aceptar la misión aun cuando un miembro de la misma party ya la tiene aceptada.
                    return
                end
            end
         else
            selfSay(Speech.Hokage.ExceededLimit, cid)
            return
        end
        return true
    end

    local function doCreateEscorted(cid)
        local summon = doCreateMonster(config.Convoy, config.Respawn)
        doConvinceCreature(cid, summon)
        selfSay(Speech.Hokage.TakenMission, cid)
        addEvent(function(cid, summon)
            if isPlayer(cid) and isCreature(summon) then
                doCreatureSay(summon, Speech.Tazuna[math.random(#Speech.Tazuna)], TALKTYPE_SAY)
            end
        end, config.Delayed * 1000, cid, summon)
    end

    if msgcontains(msg, config.Keyword) then
        if isInParty(cid) then
            if isPartyPlayersReady(cid) then
                doCreateEscorted(cid)
            end
         else
            if hasEscort(cid) == false then
                selfSay(Speech.Hokage.AlreadyHeld, cid)
                return
            end

            if getPlayerStorageValue(cid, config.Key) == config.Value then
                doCreateEscorted(cid)
                return true
            end
        end
    end
    return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Zonas a editar:
local config = {
   Key = 8000, -- Storage Key de toda la saga.
   Value = 16, -- Storage Value necesario para aceptar esta misión.
   Keyword = 'mission', -- Palabra clave que el jugador ha de decir para aceptar la misión, tras el saludo.

   Convoy = 'Tazuna', -- 'Nombre' de la criatura(monstruo) a escoltar.
   Respawn = {x = 706, y = 1106, z = 7}, -- {Coordenada} donde aparecerá el summon. (A ser posible, fuera del rango de visión del jugador, para que se vea acercarse a él. Y no falsamente aparezca de la nada)
   Delayed = 7, -- Segundos tras los cuales el summon a escoltar dirá la frase escogida al azar de varias, con la que aparecerá en escena.

   Team = 3, -- Máxima cantidad de participantes que formará la Party. (En el caso de que la haya)
}

local Speech = {
       Tazuna = { -- Posible frase que dirá al azar Tazuna al "entrar en escena" tras haberse aceptado la misión de escolta.
           'Ah! De modo que... serás tú, ' .. Jugador .. ' quién me escoltará?... Uhmmmm...',
           '¿Un enclenque como tú me va a escoltar hasta bla bla bla?... Pfff... ¡qué remedio!',
           '¿Nos vamos ya?',
       },

       Hokage = {
           TakenMission = 'Debes de escoltar a ' .. Tazuna .. ' hacia bla bla bla...', -- Cuando se acepte la misión.
           AlreadyHeld = 'Vamos, ' .. Jugador .. '! No hagamos esperar a nuestro cliente ' .. Tazuna .. '.', -- Cuando se intente aceptar la misión teniendo ya al summon Tazuna.
           Accomplished = 'Ya completáste esta misión!', -- Cuando se intente aceptar la misión habiéndola cumplida ya anteriormente.
           ExceededLimit = 'Si vas en equipo, solamente puedes aceptar esta misión si tu grupo está formado por un número máximo de {' .. Equipo .. ' intergrantes}. Reúne a tu equipo y luego ven a hablar conmigo.', -- Cuando se intente aceptar la misión superando el límite(config.Team) de miembros en la misma party.
       },
   }

Y dos frases más, que dirá el Hokage en el caso de que algún miembro de la party no posee el storage value requerido por tener uno menor o por haber completado esta misión ya anteriormente:
local function isPartyPlayersReady(cid)
       if #getPartyMembers(cid) <= config.Team then
           for _, member in ipairs(getPartyMembers(cid)) do
               if getPlayerStorageValue(member, config.Key) ~= config.Value then
                   selfSay((getCreatureName(cid) ~= getCreatureName(member) and 'No permito que {' .. getCreatureName(member) .. '} haga esta misión! Escoge a otro para que se una a tu equipo.' or Speech.Hokage.Accomplished), cid) -- Si se intenta aceptar la misión y un miembro de la misma party no tiene el storage Value(config.Value) necesario.
                   return
               end
               if hasEscort(member) == false then
                   selfSay((getCreatureName(cid) ~= getCreatureName(member) and 'Ya le pedí esta misión a {' .. getCreatureName(member) .. '}.' or Speech.Hokage.AlreadyHeld), cid) -- Si se intenta aceptar la misión aun cuando un miembro de la misma party ya la tiene aceptada.
                   return
               end
           end
        else
           selfSay(Speech.Hokage.ExceededLimit, cid)
           return
       end
       return true
   end



Introducción. ¿Qué hace esta parte de código?
- Si el jugador no tiene party:
Lo saluda y le dice la palabra clave(config.Keyword).
Y si el jugador posee un storage value determinado(config.Value) el Npc Hokage le entregará la misión de escoltar a una criatura(config.Convoy).

El cual, será el summon Tazuna. Que aparece en una parte de la habitación donde pongas su coordenada(config.Respawn).
Segundos después(config.Delayed), Tazuna dirá una frase al azar de varias que pongas, como si se metiera en la conversación o saludara al jugador.
[Tienes que estar registrado y conectado para ver esa imagen]

- Si el jugador conforma una party con otros jugadores:
Lo saluda y dice la palabra clave(config.Keyword), y éste forma una party con un número de integrantes menor o igual al establecido(config.Team), se le hará entrega de la misión junto con la invocación del monstruo Tazuna y todo lo dicho anteriormente.

En el caso de que la party posea un número mayor al establecido(config.Team), el Hokage le notificará al jugador el número máximo que debe de tener su equipo(Speech.Hokage.ExceededLimit).
[Tienes que estar registrado y conectado para ver esa imagen]

En el caso en que el jugador o algún miembro de la party ya haya aceptado la misión anteriormente o no posea el storage value(config.Value) requerido, el Hokage se lo notificará al jugador con un mensaje u otro.
[Tienes que estar registrado y conectado para ver esa imagen]

Monstruo Tazuna:
Servidor\Data\Monster\... Monster.xml
Código:
<monster name="Tazuna" file="Tazuna.xml"/>

Servidor\Data\Monster\... Tazuna.xml
Código:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Tazuna" nameDescription="Tazuna" race="blood" speed="120">
 <health now="100" max="100"/>
    <look type="247" head="0" body="0" legs="0" feet="0" addons="0"/>
 <strategy attack="0" defense="0"/>
 <flags>
 <flag summonable="0"/>
 <flag attackable="1"/>
 <flag hostile="0"/>
 <flag illusionable="0"/>
 <flag convinceable="1"/>
 <flag pushable="1"/>
 <flag canpushitems="1"/>
 <flag canpushcreatures="1"/>
 <flag targetdistance="0"/>
 <flag staticattack="0"/>
 <flag runonhealth="0"/>
 </flags>
 <defenses armor="30" defense="20">
 </defenses>
 <elements>
 <element energyPercent="25"/>
 <element icePercent="20"/>
 <element firePercent="20"/>
 <element holyPercent="20"/>
 <element earthPercent="20"/>
 <element physicalPercent="15"/>
 <element deathPercent="-37"/>
 </elements>
    <script>
        <event name="TazunasFightingDh"/>
    </script>
</monster>

Creaturescripts:
Servidor\Data\Creaturescripts\... Creaturescripts.xml
Código:
<event type="combat" name="TazunasFightingCt" event="script" value="pedidos/Tazunas Fighting.lua"/>
<event type="login" name="TazunasFightingLn" event="script" value="pedidos/Tazunas Fighting.lua"/>
<event type="preparedeath" name="TazunasFightingDh" event="script" value="pedidos/Tazunas Fighting.lua"/>

Servidor\Data\Creaturescripts\Scripts\... Tazunas Fighting.lua
Código:
local Convoy = 'Tazuna' -- 'Nombre' de la criatura(monstruo) a escoltar.
local Speech = {
    Wasted = 'Has fracasado en la misión de escolta. Has permitido que mataran a ' .. Convoy ..'.', -- Mensaje que le aparecerá al jugador(o miembros de la party), tras fracasar la misión de escolta.

    Tazuna = { -- Posible frase que dirá al azar Tazuna al morir
        'Uuhh... Ya decía yo... que eras muy enclenque...',
        'AaaAaarrGgghhh!!... aGgh! Adiós mundo cruel.',
        'Todo nuestro esfuerzo no ha servido de nada. Aquí se acaba todo.',
        'Ouch! Decidle a mis queridos puentes... que les quiero. A... ad... adi.. ós.......!',
    },
}

function onLogin(cid)
    registerCreatureEvent(cid, "TazunasFightingCt")
    return true
end

function onCombat(cid, target)
    if isPlayer(cid) and (isMonster(target) and getCreatureName(target) == Convoy) then
        return false
    end
    return true
end

function onPrepareDeath(cid, deathList)
    if getCreatureMaster(cid) then
        doCreatureSay(cid, Speech.Tazuna[math.random(#Speech.Tazuna)], TALKTYPE_SAY)
        cid = getCreatureMaster(cid)
        if isInParty(cid) then
            for _, member in ipairs(getPartyMembers(cid)) do
                doPlayerSendTextMessage(member, MESSAGE_STATUS_WARNING, Speech.Wasted)
            end
         else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, Speech.Wasted)
        end
    end
    return true
end

Zonas a editar:
local Convoy = 'Tazuna' -- 'Nombre' de la criatura(monstruo) a escoltar.
local Speech = {
   Wasted = 'Has fracasado en la misión de escolta. Has permitido que mataran a ' .. Convoy ..'.', -- Mensaje que le aparecerá al jugador(o miembros de la party), tras fracasar la misión de escolta.

   Tazuna = { -- Posible frase que dirá al azar Tazuna al morir
       'Uuhh... Ya decía yo... que eras muy enclenque...',
       'AaaAaarrGgghhh!!... aGgh! Adiós mundo cruel.',
       'Todo nuestro esfuerzo no ha servido de nada. Aquí se acaba todo.',
       'Ouch! Decidle a mis queridos puentes... que les quiero. A... ad... adi.. ós.......!',
   },
}



Introducción. ¿Qué hace esta parte de código?
- El monstruo(config.Convoy) Tazuna, no podrá atacar a jugadores ni a monstruos. Solamente podrá recibir daño procedente de monstruos. Por ello, debe de ser defendido y prevenir que muera.

Si Tazuna muere, se le notificará al jugador (o miembros de la party en el caso de que haya una) de que han fracasado en la misión, y que pueden volver a hablar con el Hokage para reintentarla.
[Tienes que estar registrado y conectado para ver esa imagen]

Movements:
Servidor\Data\Movements\... Movements.xml
Código:
<movevent type="StepIn" actionid="13006" event="script" value="Tazunas Finished Escort.lua"/>
Ese ActionID o el que gustes, se lo pones a la línea de tiles por las que el jugador tendrá que pasar obligatoriamente hacia el bote, y otra línea de tiles, cerca del barco.
[Tienes que estar registrado y conectado para ver esa imagen]
Esta última línea pegada al bote es para, por si se da el caso, en el que el jugador que lleva al summon Tazuna tiene una party de integrantes superior a lo establecido. Para que Tazuna le vuelva a notificar la cantidad exacta de integrantes que deben ser para poder completar la misión. Aunque, en realidad puedes poner ese ActionID en toda esa zona donde quieras, para que se active al pisar cualquiera de los tiles donde lo pongas.

Servidor\Data\Movements\Scripts\... Tazunas Finished Escort.lua
Código:
-- By Belerofonte, contact: http://www.blacktibia.org/u3171

local config = {
    Key = 8000, -- Storage Key de toda la saga.
    Value = 17, -- Storage Value otorgado al pisar el ActionID y finalizar la misión.

    Convoy = 'Tazuna', -- 'Nombre' de la criatura(monstruo y NPC) a escoltar.
    BoatPos = {x = 718, y = 1095, z = 7}, -- {Coordenada} del bote hacia donde se dirigirá el summon escoltado.
    Interval = 900, -- Milisegundos que tardará en dar cada paso al dirigirse hacia el bote. Cuanto menor sea el valor, más rápido se desplazará.

    Team = 3, -- Máxima cantidad de participantes que formará la Party. (En el caso de que la haya)
}

local Speech = {
    ExceededLimit = { -- Posible frase de negación que dirá al azar Tazuna al pisar el ActionID teniendo el jugador una Party de integrantes superior al límite(config.Team) establecido.
        'Con más de ' .. config.Team .. ' hundiremos el bote! Solo necesito a un equipo de ' .. config.Team .. ' personas conmigo.',
        '¿Es paranoia mía o ahora somos más de los que en su momento partímos desde la Aldea? Solo necesito a un grupo de ' .. config.Team .. ' integrantes!',
        '¡Hey, heey, heeeyy! ¡¡alto!! Yo solo pagué por un servicio de ' .. config.Team .. ' integrantes! No quiero a más protectores que ' .. config.Team .. '...',
    },

    Accomplished = { -- Posible frase que dirá al azar Tazuna al pisar el ActionID para dirigirse al bote y acabar la misión satisfactoriamente.
        'Vamos. Subámonos sigilosamente a ese bote.',
        '¡Subámonos al bote! ¡vamos!',
        'El resto del camino tendrá que ser por mar.',
    },
}

local function getSummon(cid)
    if #getCreatureSummons(cid) > 0 then
        for _, monster in ipairs(getCreatureSummons(cid)) do
            if getCreatureName(monster) == config.Convoy then
                return monster
            end
        end
    end
    return false
end

local function loop(callback, delay, times, cid, direction)
    if times >= 1 then
        callback(cid, direction)
        addEvent(loop, delay, callback, delay, times - 1, cid, getDirectionTo(getThingPos(cid), config.BoatPos))
     else
        local getLook = getCreatureLookDirection(cid)
        doRemoveCreature(cid)
        if isPlayer(getTopCreature(config.BoatPos).uid) then
            doMoveCreature((getTopCreature(config.BoatPos).uid), SOUTH)
        end
        if not isNpc(getTopCreature(config.BoatPos).uid) then
            local Belero = doCreateNpc(config.Convoy, config.BoatPos)
            doCreatureSetLookDirection(Belero, getLook)
        end
    end
end

function onStepIn(cid, item, position, fromPosition, toPosition)
    if (isPlayer(cid) and getSummon(cid)) then
        if getDistanceBetween(getThingPos(getSummon(cid)), getThingPos(cid)) > 3 then
            return true
        end
    end

    if isMonster(cid) and getCreatureMaster(cid) and getCreatureName(cid) == config.Convoy then
        cid = getCreatureMaster(cid)
     elseif not (isPlayer(cid) and getSummon(cid)) then
        return true
    end

    if isInParty(cid) then
        if #getPartyMembers(cid) <= config.Team then
            for _, member in ipairs(getPartyMembers(cid)) do
                if getPlayerStorageValue(member, config.Key) == config.Value - 1 then
                    setPlayerStorageValue(member, config.Key, config.Value)
                end
            end
         else
            if exhaustion.get(cid, config.Boat) == false then
                doCreatureSay(getSummon(cid), Speech.ExceededLimit[math.random(#Speech.ExceededLimit)], TALKTYPE_SAY)
                exhaustion.set(cid, config.Boat, 5)
            end
            return
        end
     else
        if (isPlayer(cid) and getSummon(cid)) then
            if getPlayerStorageValue(cid, config.Key) == config.Value - 1 then
                setPlayerStorageValue(cid, config.Key, config.Value)
            end
        end
    end

    if isNpc(getTopCreature(config.BoatPos).uid) then
        doRemoveCreature(getTopCreature(config.BoatPos).uid)
    end

    local Blacktibia = doCreateMonster(config.Convoy, getThingPos(getSummon(cid)))
    doCreatureSay(Blacktibia, Speech.Accomplished[math.random(#Speech.Accomplished)], TALKTYPE_SAY)
    doRemoveCreature(getSummon(cid))
    doChangeSpeed(Blacktibia, 0 - getCreatureSpeed(Blacktibia))
    loop(doMoveCreature, config.Interval, getDistanceBetween(getThingPos(Blacktibia), config.BoatPos), Blacktibia, getDirectionTo(getThingPos(Blacktibia), config.BoatPos))
    return true
end

Zonas a editar:
local config = {
   Key = 8000, -- Storage Key de toda la saga.
   Value = 17, -- Storage Value otorgado al pisar el ActionID y finalizar la misión.

   Convoy = 'Tazuna', -- 'Nombre' de la criatura(monstruo y NPC) a escoltar.
   BoatPos = {x = 718, y = 1095, z = 7}, -- {Coordenada} del bote hacia donde se dirigirá el summon escoltado.
   Interval = 900, -- Milisegundos que tardará en dar cada paso al dirigirse hacia el bote. Cuanto menor sea el valor, más rápido se desplazará.

   Team = 3, -- Máxima cantidad de participantes que formará la Party. (En el caso de que la haya)
}

local Speech = {
   ExceededLimit = { -- Posible frase de negación que dirá al azar Tazuna al pisar el ActionID teniendo el jugador una Party de integrantes superior al límite(config.Team) establecido.
       'Con más de ' .. config.Team .. ' hundiremos el bote! Solo necesito a un equipo de ' .. config.Team .. ' personas conmigo.',
       '¿Es paranoia mía o ahora somos más de los que en su momento partímos desde la Aldea? Solo necesito a un grupo de ' .. config.Team .. ' integrantes!',
       '¡Hey, heey, heeeyy! ¡¡alto!! Yo solo pagué por un servicio de ' .. config.Team .. ' integrantes! No quiero a más protectores que ' .. config.Team .. '...',
   },

   Accomplished = { -- Posible frase que dirá al azar Tazuna al pisar el ActionID para dirigirse al bote y acabar la misión satisfactoriamente.
       'Vamos. Subámonos sigilosamente a ese bote.',
       '¡Subámonos al bote! ¡vamos!',
       'El resto del camino tendrá que ser por mar.',
   },
}



Introducción.  ¿Qué hace esta parte de código?
Si finalmente el jugador que posea el summon Tazuna, o el propio Tazuna pisa el suelo con ActionID(Movements), Tazuna dirá una frase de entre varias al azar y se dirigirá automáticamente hasta el bote(config.BoatPos).
[Tienes que estar registrado y conectado para ver esa imagen]

Añadiéndosele el storage value(config.Value) al jugador(o miembros de la party) que le permitirá acceder a la siguiente misión, y ésta habrá terminado.

Si el jugador que posea el summon Tazuna pisa el suelo con ActionID y Tazuna se encuentra a más de 3 tiles alejado del jugador: no ocurrirá nada. En tal caso, el jugador tendrá que esperar a que Tazuna lo persiga hasta llegar a su destino, y una vez ahí, se activará el Movements si cualquiera de los 2 vuelve a pisar ese suelo. Moviendo a Tazuna automáticamente hasta el bote y dando la misión por finalizada.
[Tienes que estar registrado y conectado para ver esa imagen]
...al llegar al barco, el monstruo Tazuna se removerá y será sustiuido por el Npc Tazuna(el archivo del siguiente Spoiler).

Si el jugador que posea el summon Tazuna, o el mismo Tazuna pisa el suelo con ActionID y el jugador posee una party con un número de integrantes(config.Team) mayor al establecido, Tazuna lo notificará con una frase de varias al azar, que no podrá completar la misión hasta que vuelva a reunir un grupo de menor o igual integrantes al necesario.
[Tienes que estar registrado y conectado para ver esa imagen]

Npc Tazuna:
Servidor\Data\Npc\... Tazuna.xml
Código:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Tazuna" script="data/npc/scripts/Tazuna.lua" walkinterval="0" floorchange="0">
   <health now="100" max="100"/>
   <look type="247" head="0" body="0" legs="0" feet="0" addons="0" corpse="2212"/>
</npc>
El cual lo editas a tu gusto: el saludo, despedida, etc, etc... y su respectivo archivo.lua donde se tendrá que tener el storage value 17 para adquirir la recompensa de haberlo escoltado y aceptar la siguiente misión...

Fuck yeah!



Sugerencia para evitar futuros quebraderos de cabeza:
[Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo] - [Tienes que estar registrado y conectado para ver este vínculo]
[Tienes que estar registrado y conectado para ver esa imagen]

#8 Re: [Pedido] Npc que otorge summons el Jue Jul 07, 2016 9:08 pm

Acan


Miembro
BUMP!

Contenido patrocinado


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.

 

¿Quién está en línea?

En total hay 0 usuarios en línea: 0 Registrados, 0 Ocultos y 0 Invitado

Usuarios navegando en este foro: Ninguno

Forum Statistics

Nuestros miembros han públicado un total de posts en temas.
Actualmente hay miembros registrados.
Démosle la bienvenida al miembro más reciente,
La mayor cantidad de usuarios en línea ha sido de .