BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[Pedido]Script

[Pedido]Script

#1 [Pedido]Script el Sáb Nov 28, 2015 10:53 pm

Pharos


Miembro
Se busca un script para hacer que un teleport te pida un item (Blue note o heart)y a la vez haber matado un boss (Vashresamun) de hota quest para poderte teletransportar hacía una room, donde consigues una pieza de un sarcófago, y luego en otra parte del mapa unir las 8 pieza nada más pisando un tile y se convierta en helmet of the ancients.

http://www.blacktibia.org

#2 Re: [Pedido]Script el Dom Nov 29, 2015 6:30 pm

Pharos


Miembro
@up

http://www.blacktibia.org

#3 Re: [Pedido]Script el Lun Nov 30, 2015 6:19 pm

Pharos


Miembro
@up

http://www.blacktibia.org

#4 Re: [Pedido]Script el Dom Dic 20, 2015 11:57 am

Belerofonte


Administrador
Servidor/Data/Creaturescripts/... Creaturescripts.xml
Código:
<event type="kill" name="ReqMonsterKill" script="ReqMonsterKill.lua"/>

Servidor/Data/Creaturescripts/Scripts/... Login.lua (el archivo ya existente)
Código:
registerCreatureEvent(cid, "ReqMonsterKill")

Servidor/Data/Creaturescripts/Scripts/... ReqMonsterKill.lua
Código:

  local Config = {
    Monster = 'Vashresamun', -- 'Nombre' del monstruo.
    Key = 322631, -- Mismo Storage Key que le hayas puesto al del Movements.
    Value = 1, -- Storage Value otorgado al haber matado a Vashresamun(puesto al del Movements).
  }

function onKill(cid, target)

    if isMonster(target) and getCreatureName(target) == Config.Monster and getPlayerStorageValue(cid, Config.Key) ~= Config.Value then
        setPlayerStorageValue(cid, Config.Key, Config.Value)
    end

  return true
end

Zona (básica) a editar:
local Config = {
   Monster = 'Vashresamun', -- 'Nombre' del monstruo.
   Key = 322631, -- Mismo Storage Key que le hayas puesto al del Movements.
   Value = 1, -- Storage Value otorgado al haber matado a Vashresamun(puesto al del Movements).
 }



Servidor/Data/Movements/... Movements.xml
<movevent type="StepIn" uniqueid="9148; 9149" event="script" value="portal_Pharos.lua"/>

Ahí pones esos, o los uniqueid que gustes(que no estés usando ya en otro script). También, con el Remeres deberás ponerlos uno en el portal y otro en el tile del Helmet. Y en las variables del siguiente script.

Servidor/Data/Movements/Scripts/... portal_Pharos.lua
Código:

  local Portal = { -- Variables referentes al portal.
    PortalUID = 9148, -- UniqueID del portal.
    Item = 2349, -- ID del objeto requerido. ("Blue note o Heart")
    Key = 322631, -- Mismo Storage Key que le hayas puesto al del Creaturescripts.
    Value = 1, -- Storage Value otorgado al haber matado a Vashresamun(puesto al del Creaturescripts).
    Destiny = {x = 1007, y = 1035, z = 7}, -- Coordenada del lugar hacia donde llevará el portal.
  }

  local Connect = { -- Variables referentes al tile del Helmet of the Ancients.
    TileUID = 9149, -- UniqueID del tile que reensamble todas las piezas.
    Helmet = {2335, 2336, 2337, 2338, 2339, 2340, 2341}, -- Piezas que compongan el helmet.
    Complete = 2342, -- ID del Helmet of the Ancients(completo).
    Effect = CONST_ME_GIFT_WRAPS, -- Término del Efecto Mágico que aparecerá cuando junte todas las piezas.
    Msg = {
      'Piezas re-ensambladas!', -- 'Mensaje' al jugador cuando junte todas las piezas.
      'Aun no posees suficientes piezas.', -- 'Mensaje' al jugador cuando aún no posea todas las piezas necesarias.
    },
  }


local function isGotPieces(cid, helmet)

    for _, piece in ipairs(helmet) do
        if getPlayerItemCount(cid, piece) < 1 then return false end
    end

  return true
end

function onStepIn(cid, item, position, fromPosition, itemEx, toPosition)

    if isPlayer(cid) then
        if item.uid == Portal.PortalUID then

          local msgInit = 'Para poder acceder necesitas:' -- Frase que dé paso a los requerimientos.
          local msgItem = '- Tener una ' .. getItemNameById(Portal.Item) .. '.' -- Frase para el objeto necesario.
          local msgStor = '- Haber matado a Vashresamun.' -- Frase para la acción relacionada con el storage.

            if getPlayerItemCount(cid, Portal.Item) >= 1 and getPlayerStorageValue(cid, Portal.Key) == Portal.Value then
              return doTeleportThing(cid, Portal.Destiny) and true
            end

            if getPlayerItemCount(cid, Portal.Item) < 1 then
                msgInit = msgInit .. '\n' .. msgItem
            end

            if getPlayerStorageValue(cid, Portal.Key) < Portal.Value or getPlayerStorageValue(cid, Portal.Key) == nil then
                msgInit = msgInit .. '\n' .. msgStor
            end

            doTeleportThing(cid, fromPosition)
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, msgInit)
        end

        -------------------------------------------------------------------------------------------------------------

        if item.uid == Connect.TileUID then

            if not isGotPieces(cid, Connect.Helmet) then
              return doPlayerSendCancel(cid, Connect.Msg[2]) and true
            end

            for _, piece in pairs(Connect.Helmet) do
                doPlayerRemoveItem(cid, piece, 1)
            end

            doPlayerSendTextMessage (cid, MESSAGE_INFO_DESCR, Connect.Msg[1])
            doPlayerAddItem(cid, Connect.Complete)
            doSendMagicEffect(getThingPos(cid), Connect.Effect)
        end
    end

  return true
end

Zona (básica) a editar:
local Portal = { -- Variables referentes al portal.
   PortalUID = 9148, -- UniqueID del portal.
   Item = 2349, -- ID del objeto requerido.  ("Blue note o Heart")
   Key = 322631, -- Mismo Storage Key que le hayas puesto al del Creaturescripts.
   Value = 1, -- Storage Value otorgado al haber matado a Vashresamun(puesto al del Creaturescripts).
   Destiny = {x = 1007, y = 1035, z = 7}, -- Coordenada del lugar hacia donde llevará el portal.
 }

 local Connect = { -- Variables referentes al tile del Helmet of the Ancients.
   TileUID = 9149, -- UniqueID del tile que reensamble todas las piezas.
   Helmet = {2335, 2336, 2337, 2338, 2339, 2340, 2341}, -- Piezas que compongan el helmet.
   Complete = 2342, -- ID del Helmet of the Ancients(completo).
   Effect = CONST_ME_GIFT_WRAPS, -- Término del Efecto Mágico que aparecerá cuando junte todas las piezas.
   Msg = {
     'Piezas re-ensambladas!', -- 'Mensaje' al jugador cuando junte todas las piezas.
     'Aun no posees suficientes piezas.', -- 'Mensaje' al jugador cuando aún no posea todas las piezas necesarias.
   },
 }

Y en las líneas 36, 37, y 38:
         local msgInit = 'Para poder acceder necesitas:' -- Frase que dé paso a los requerimientos.
         local msgItem = '- Tener una ' .. getItemNameById(Portal.Item) .. '.' -- Frase para el objeto necesario.
         local msgStor = '- Haber matado a Vashresamun.' -- Frase para la acción relacionada con el storage.

Así, Dependiendo de la acción escogida...

Si tienes el ítem(Portal.Item) y no tienes tienes el storage value(Portal.Value), no te deja acceder:
En el juego se escribió:17:40 Para poder acceder necesitas:
- Haber matado a Vashresamun.

No tienes el ítem(Portal.Item) y sí tienes el storage value(Portal.Value), no te deja acceder:
En el juego se escribió:17:40 Para poder acceder necesitas:
- Tener una blue note.

No tienes el ítem(Portal.Item) y no tienes el storage value(Portal.Value), no te deja acceder:
En el juego se escribió:17:41 Para poder acceder necesitas:
- Haber matado a Vashresamun.
- Tener una blue note.

Si tienes el ítem(Portal.Item) y también tienes el storage value(Portal.Value), te deja acceder y no sale nada en el juego.



Nota.
En la variable Connect.Helmet Solo puse 7 objetos porque no encontré el octavo, ergo, se lo pones tú a tu gusto.
Y la obtención de cada una de "las piezas de los Sarcófagos" también se lo pones por tu cuenta, ya sea en cofres vía remeres o por script: [Tienes que estar registrado y conectado para ver este vínculo]



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]

#5 Re: [Pedido]Script el Dom Dic 20, 2015 12:48 pm

Pharos


Miembro
Vere como lo puedo utilizar, ya que no salió como lo queria, pero bueno algo es algo, agradezco tu colaboración belerofonte, muchas pero muchas gracias.

http://www.blacktibia.org

#6 Re: [Pedido]Script el Dom Dic 20, 2015 1:31 pm

Belerofonte


Administrador
GOD Pharos escribió:Vere como lo puedo utilizar, ya que no salió como lo queria, pero bueno algo es algo, agradezco tu colaboración belerofonte, muchas pero muchas gracias.
No, no. Explícame entonces mejor cómo lo querías detalladamente cada factor. No tires la toalla tan pronto ;D



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]

#7 Re: [Pedido]Script el Dom Dic 20, 2015 2:51 pm

Pharos


Miembro
Eh cambiado de idea, ya que vi que era más simple así te dejo unas fotos

[Tienes que estar registrado y conectado para ver esa imagen]



[Tienes que estar registrado y conectado para ver esa imagen]

http://www.blacktibia.org

#8 Re: [Pedido]Script el Lun Dic 21, 2015 7:26 pm

Belerofonte


Administrador
Ok. En los archivos que creaste anteriormente, sustituye su contenido por los siguientes:

Creaturescripts/Scripts/... ReqMonsterKill.lua
Código:

  local Config = {
    Key = 321630, -- Mismo Storage Key que le hayas puesto al del Movements.
    Pharaos = {
    -- ['nombre' del monstruo] = {Storage Key que gustes, Pieza otorgada al matarlo}
      ['ashmunrah'] = {321631, 2335},
      ['mahrdis'] = {321632, 2336},
      ['dipthrah'] = {321633, 2337},
      ['morguthis'] = {321634, 2338},
      ['rahemos'] = {321635, 2339},
      ['omruc'] = {321636, 2340},
      ['vashresamun'] = {321637, 2341},
      ['thalas'] = {321638, 2342},
    },
  }

function onKill(cid, target, lastHit)

  local v = Config.Pharaos[getCreatureName(target):lower()]
    if isMonster(target) and v and lastHit then

        if getPlayerStorageValue(cid, Config.Key) ~= getCreatureName(target):lower() then
            setPlayerStorageValue(cid, Config.Key, getCreatureName(target):lower())
        end

        if getPlayerStorageValue(cid, v[1]) ~= getCreatureName(target):lower() then
            setPlayerStorageValue(cid, v[1], getCreatureName(target):lower())
            doPlayerAddItem(cid, v[2], 1)
            addEvent(doPlayerSendTextMessage, 0.1, cid, MESSAGE_INFO_DESCR, 'Has obtenido ' .. getItemNameById(v[2]) .. ' x 1.')
        end
    end

  return true
end



Movements/... Movements.xml

<movevent type="StepIn" actionid="9148" uniqueid="9149" event="script" value="portal_Pharos.lua"/>
ActionID para cada portal de cada habitación donde se hayen los faraones.
UniqueID del único tile que enlace todas las piezas del Helmet of the Ancients.

Movements/Scripts/... portal_Pharos.lua
Código:

  local Portal = { -- Variables referentes al portal.
    PortalAID = 9148, -- ActionID del portal.
    Key = 321630, -- Mismo Storage Key que le hayas puesto al del Creaturescripts.
    Value = {'ashmunrah', 'mahrdis', 'dipthrah', 'morguthis', 'rahemos', 'omruc', 'vashresamun', 'thalas'}, -- 'Nombre' de todos los faraones a matar.
    Destiny = {x = 841, y = 1022, z = 7}, -- Coordenada del lugar hacia donde llevará el portal.
  }

  local Connect = { -- Variables referentes al tile del Helmet of the Ancients.
    TileUID = 9149, -- UniqueID del tile que reensamble todas las piezas.
    Helmet = {2335, 2336, 2337, 2338, 2339, 2340, 2341, 2342}, -- Piezas que compongan el helmet.
    Complete = 2343, -- ID del Helmet of the Ancients(completo).
    Destiny = {x = 1004, y = 1043, z = 7}, -- Coordenada del lugar hacia donde llevará el tile tras conseguir el Helmet.
    Msg = {
      'Piezas re-ensambladas!', -- Mensaje al jugador cuando junte todas las piezas.
      'Aun no posees suficientes piezas.', -- Mensaje al jugador cuando aún no posea todas las piezas necesarias.
    },
  }

local function isGotPieces(cid, helmet)

    for _, piece in ipairs(helmet) do
        if getPlayerItemCount(cid, piece) < 1 then return false end
    end

  return true
end

function onStepIn(cid, item, position, fromPosition, itemEx, toPosition)

    if isPlayer(cid) then
        if item.actionid == Portal.PortalAID then

          local pos, Eff = {}, {}
            if isInArray(Portal.Value, getPlayerStorageValue(cid, Portal.Key)) then
                pos = Portal.Destiny
                Eff = CONST_ME_TELEPORT

             else
               pos = fromPosition
               Eff = CONST_ME_NONE
               doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, 'Para poder acceder has de ser tu quien acabe con el Faraon de este lugar.')
            end

            doTeleportThing(cid, pos)
            doSendMagicEffect(getThingPos(cid), Eff)
            setPlayerStorageValue(cid, Portal.Key, -1)
        end

        -------------------------------------------------------------------------------------------------------------

        if item.uid == Connect.TileUID then

            if not isGotPieces(cid, Connect.Helmet) then
              return doPlayerSendCancel(cid, Connect.Msg[2])
            end

            for _, piece in pairs(Connect.Helmet) do
                doPlayerRemoveItem(cid, piece, 1)
            end

            doPlayerAddItem(cid, Connect.Complete)
            doPlayerSendTextMessage (cid, MESSAGE_INFO_DESCR, Connect.Msg[1])

            doTeleportThing(cid, Connect.Destiny)
            doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
        end
    end

  return true
end



Modus operandi:
Portal & Faraones:
- Si el jugador accede al portal de la sala del faraón sin haberlo matado, no le llevará a ninguna parte. Junto con una notificación de lo que ha de hacer para poder acceder.
- Si el jugador mata al faraón de su correspondiente sala, podrá acceder al portal anterior mencionado, y si es la primera vez que lo mata: recibirá una pieza de las 8 que conforman el Helmet of the Ancients. Junto con una notificación de dicha obtención.
- Tras haberlo matado, accedido al portal y teletransportado al lugar que sea, si vuelve a entrar a esa misma sala: tendrá que volver a matar al faraón para poder acceder al portal para salir. (Esta vez, sin obtener la pieza anteriormente conseguida).
Tile conmutador de piezas:
- Si el jugador pisa el tile sin poseer las 8 piezas necesarias, no será teletransportado a ningún lugar. Junto una notificación de ello.
- Si por el contrario el jugador dispone de las 8 piezas necesarias, será teletransportado a un lugar. Sustituyéndose todas las piezas a cambio del Helmet of the Ancients. Junto con una notificación de ello.



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]

#9 Re: [Pedido]Script el Lun Dic 21, 2015 7:36 pm

Pharos


Miembro
Muchas gracias belero, te amo , de pana te lo agradezco mucho.

http://www.blacktibia.org

#10 Re: [Pedido]Script Hoy a las 1:39 pm

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 .