BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

¿Me hacen 2 scripts please? Gracias :)

¿Me hacen 2 scripts please? Gracias :)

#1 ¿Me hacen 2 scripts please? Gracias :) el Sáb Sep 13, 2014 2:29 pm

jmen


Nuevo
Hola pues holaa xD  Necesito 3 scripts y bueno, si alguien podía ser tan amable de hacérmelos  o por lo menos 1 se lo agradecería

1 - Un npc.

Este npc te pide que tenga EQUIPADO, un amuleto y aparte te quite 50cc... y luego te de acceso a pasar por una zona, si no lo tienes te dice que no puedes pasar. Seria asi:
--- Sin amuleto ---
Player: Hi
NPC: Usted no tiene el amuleto..
* Fin de la conversacion **
-- Con amuleto --
Player: Hi
Npc:  texto   texto   texto   texto   texto
Npc:   texto   texto   texto   texto
Player: Acceso
Npc:   texto   texto   texto   texto   texto el costo es 50cc
Player: Si
Npc:   texto   texto   texto   texto

Y luego le da un storage con duracion de 24 horas.... y bueno lo ultimo seria un piso que pida un storage.

2 -   un piso que al pisarlo te deje en 0 de mana y 20 de hp

3 - Saben el items "1485" (Empty coal basin) donde en tibia rl se pone algo para darte acceso a una zona?
Bueno quiero que al poner 3 items (demon dust, vampire dust y demonic essence) diferentes sobre 3 contenedores como estos se abra un portal por 60 segundos que te lleve a X lugar (Editable) y luego desaparesca y bueno, que sea obligatorio poner los 3 para que se abra o si no no hace nada


Buenoo gracias Espero que me ayuden por lo menos con 1 se lo agradeceria mucho y pues un saludo desde Venezuela

[Tienes que estar registrado y conectado para ver este vínculo]

#2 Re: ¿Me hacen 2 scripts please? Gracias :) el Sáb Sep 13, 2014 5:34 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:--- Sin amuleto ---
Player: Hi
NPC: Usted no tiene el amuleto..
* Fin de la conversacion **
-- Con amuleto --
Player: Hi
Npc:  texto   texto   texto   texto   texto
Npc:   texto   texto   texto   texto
Player: Acceso
Npc:   texto   texto   texto   texto   texto el costo es 50cc
Player: Si
Npc:   texto   texto   texto   texto

Esa segunda línea de contestación del Npc, ¿es que te equivocaste o realmente quieres que el Npc diga otra cosa aparte de la anterior contestación, sin que el jugador le haya dicho nada?

EDIT:
Y respecto a los recipientes en los que hay que poner esos 3 objetos,
1ª ¿es realmente necesario que no importe el orden del dónde colocar cada objeto?
2ª ¿o hay que seguir un orden?

Lo digo porque me está costando bastante hacerlo para la primera opción aunque lo seguiré intentando,
en cambio la segunda me sería más fácil Y para que el jugador sepa el orden se pondría con el Remeres su correspondiente objeto requerido enfrente de cada recipiente en algún lugar inaccesible...



Última edición por Belerofonte el Dom Sep 14, 2014 11:21 pm, editado 1 vez



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]

#3 Re: ¿Me hacen 2 scripts please? Gracias :) el Sáb Sep 13, 2014 5:46 pm

jmen


Nuevo
[Tienes que estar registrado y conectado para ver este vínculo] escribió:
[Tienes que estar registrado y conectado para ver este vínculo] escribió:--- Sin amuleto ---
Player: Hi
NPC: Usted no tiene el amuleto..
* Fin de la conversacion **
-- Con amuleto --
Player: Hi
Npc:  texto   texto   texto   texto   texto
Npc:   texto   texto   texto   texto
Player: Acceso
Npc:   texto   texto   texto   texto   texto el costo es 50cc
Player: Si
Npc:   texto   texto   texto   texto

Esa segunda línea de contestación del Npc, ¿es que te equivocaste o realmente quieres que el Npc diga otra cosa aparte de la anterior contestación, sin que el jugador le haya dicho nada?


Hola Si, aparte de la contestacion anterior sin que le halla dicho nada. Como por ejemplo

NPC: Pues aqui hay mucho territorio por explorar...
NPC: Pero es peligroso...


Es que sera un texto largo y no cabera en 1 respuesta,
Saludos

#4 Re: ¿Me hacen 2 scripts please? Gracias :) el Mar Sep 16, 2014 3:15 pm

jmen


Nuevo
Belefonte gracias!!. lo siento pero no puedo enviarte mensaje privado dice que no puedo x.x

Bueno para responder,  no, no importa, lo único importante sea que al colocar los 3 items diferentes sobre los recipientes ( 1 en cada uno) y  se abra el portal por 60 segundos y que te lleve a una posicion/lugar editable lugar

Saludos

#5 Re: ¿Me hacen 2 scripts please? Gracias :) el Mar Sep 16, 2014 10:55 pm

Belerofonte


Administrador
Oki, te vas a tu Servidor/Data/Npc/... copias un archivo.xml cualquiera de los que haya lo pegas en esa misma carpeta, le cambias el nombre que tenga por el que quieras, lo abres & sustitúyes todo lo que haya dentro a cambio de lo siguiente:
<?xml version="1.0" encoding="UTF-8"?>
<npc name="Amulet50cc" script="data/npc/scripts/PideAmuleto.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="230" head="7" body="87" legs="7" feet="87" addons="2"/>
   <parameters>
       <parameter key="message_farewell" value="Hasta nunca escoria bla bloa bla."/>
       <parameter key="message_walkaway" value="y se va sin despedirse ja jejijoju"/>
   </parameters>
</npc>
Obviamente le editas las frases que quieras dependiendo de si es despdida o si se va el jugador sin decir nada, nombre del Npc, nombre del siguiente archivo.lua, aspecto, etc...

Luego te vas  Servidor/Data/Npc/Scripts/... y mismo proceso, solo que esta vez es un archivo.lua y en su interior pegas lo siguiente:
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 c = {
   Amulets = 2138, -- ID del amuleto necesario tener equipado.
   Crystal = 2160, -- ID del objeto que usarás como dinero.
   Count = 50, -- Cantidad del dinero anterior necesario llevar.
   Storage = 597862, -- StorageID que gustes.
   Tiempus = 24, -- Horas que mantendrá el StorageID anterior.
 }
function greetCallback(cid) -- Saludo.
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 local player = getCreatureName(cid)
   if exhaustion.get(cid, c.Storage) == false then
       if (getPlayerSlotItem(cid, CONST_SLOT_NECKLACE).itemid == c.Amulets) then
           npcHandler:setMessage(MESSAGE_GREET, " texto   texto   texto   texto   texto ") -- Contestación del Npc al SALUDO del jugador, si el cual SÍ posee el amuleto.
           selfSay ("  texto   texto   texto   texto ", cid) -- Segunda contestación del Npc tras la anterior...
           talkState[talkUser] = 1        
        else
          npcHandler:setMessage(MESSAGE_GREET, "No traes contigo el talismán de Bla bla bla Beehehehe muuUUuUuu") -- Contestación del Npc al SALUDO del jugador si el cual NO posee el amuleto equipado necesario.
          npcHandler:releaseFocus(cid)
          npcHandler:resetNpc(cid)
       end
    else
      npcHandler:setMessage(MESSAGE_GREET, "vuelve mas tarde bla bla bla hiiihiiihirii hiiihiirihisdabugfxmnrrgn!") -- Contestación del Npc al SALUDO del jugador si el cual YA posee el StorageID por haberle pagado & tenido las cosas requeridas anteriormente.
      npcHandler:releaseFocus(cid)
      npcHandler:resetNpc(cid)
   end
 return true
end

function creatureSayCallback(cid, type, msg)
 local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
   if (not npcHandler:isFocused(cid)) then
     return false
   end
   if (msgcontains(msg, string.lower('acceso')) and talkState[talkUser] == 1) then -- 'Palabra clave' con la que el jugador a de seguir la conversación.
       selfSay('  texto   texto   texto   texto   texto el costo es {'..c.Count..' '..getItemPluralNameById(c.Crystal)..'}.', cid) -- Contestación del Npc a la palabra clave anterior del jugador, relacionado con el dinero necesario.
       talkState[talkUser] = 2
   end
   if((msgcontains(msg, string.lower('yes')) or msgcontains(msg, string.lower('si'))) and talkState[talkUser] == 2) then -- 'Palabras clave' con la que el jugador afirmará la proposición anterior acerca del dinero.
       if doPlayerRemoveItem(cid, c.Crystal, c.Count) then
           exhaustion.set(cid, c.Storage, c.Tiempus * 60 * 60)
           selfSay ("ahora puedes acceder a texto   texto   texto   texto   texto ", cid) -- Contestación del Npc al entregarle el StorageID de "Tiempus" determinado.
           talkState[talkUser] = 0
        else
          selfSay("no hay money Bla bla bla guau guau miau miau", cid) -- Contestación del Npc al haber afirmado el jugador sin tener el dinero necesario y por lo tanto sin recibir el StorageID.
          talkState[talkUser] = 0
          npcHandler:releaseFocus(cid)
          npcHandler:resetNpc(cid)
       end
   end
 return true
end
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

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


Ahora... para el suelo que detecte el StorageID que otorgó el NPC y así poder transpasarlo...
Y para el suelo que quite HP/MANA...
Te vas a tu Servidor/Data/Movements/Movements.xml y en una de las líneas pegas las siguientes:
<movevent type="StepIn" actionid="4813;4814" event="script" value="jmen trampa y Str.lua"/>
Un actionID para ponerlo al comienzo de la zona restringida por los requerimientos que pide el NPC,
y otro actionID para ponerlo en todos los tiles que quieras que quiten HP/MANA.


Luego te vas a tu Servidor/Data/Movements/Scripts/... mismo proceso que antes para crear un archivo.lua y en el cual pegas lo siguiente:
local c = {
 Str = { -- Destinado a la verificación de Storage.
   4813, -- ActionID del tile que verifique si el jugador posee el Storage de abajo. \ c.Str[1]
   597862, -- StorageID que gustes(el mismo que le pusíste al script del Npc).   / c.Str[2]
   'Hablaste con el Npc bla bla bla?' -- 'Mensaje' que le saldrá al que pise el tile sin haber tenido los requerimientos con el NPC. |  c.Str[3]
 },
 Hit = { -- Destinado a rebajar HP/MANA.
   4814, -- ActionID del tile que rebajará el HP/MANA del jugador que lo pise. / c.Hit[1]
   20, -- Cantidad de HP que se le habrá quedado al jugador. / c.Hit[2]
 },
}
function onStepIn(cid, item, pos, fromPos, toPos)
 local health, mana = getCreatureHealth(cid), getCreatureMana(cid)
   if isPlayer(cid) then
       if (item.actionid == c.Str[1]) then
           if exhaustion.get(cid, c.Str[2]) == false then
               doSendMagicEffect(pos, CONST_ME_POFF)
               doPlayerSendCancel(cid, c.Str[3])
               doTeleportThing(cid, toPos)
           end
       end
       if (item.actionid == c.Hit[1]) then
           doCreatureAddMana(cid, -mana)
           doCreatureAddHealth(cid, (-health+c.Hit[2]))
       end
   end
 return TRUE
end

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


Y por último para los recipientes...
Vuelves a tu Servidor/Data/Movements/Movements.xml y en una de las líneas pegas la siguiente:
<movevent type="AddItem" tileitem="1" actionid="4815" event="script" value="jmen recipientes.lua"/>
El actionid ese o el que pongas ahí será el que les has de poner en las propiedades de los 3 recipientes con el Remeres.

Luego vas a tu Servidor/Data/Movements/Scripts/... mismo proceso que antes para crear un archivo.lua y en el cual pegas lo siguiente:
function onAddItem(moveitem, tileitem, position, cid)
local c = {
 Recipie = {
-- {Objeto requerido, {Coordenada de donde se ha de poner el objeto requerido anterior},
   {5906, {x=845,y=1061,z=7}}, -- Demon Dust. \ v[1][1]
   {5905, {x=844,y=1062,z=7}}, -- Vampire Dust. \ v[2][1]
   {6500, {x=845,y=1063,z=7}}, -- Demonic Essence.\ v[3][1]
 },
 Telepor = {
   {x=845,y=1062,z=7}, -- Coordenada del lugar donde aparecerá el teleport.   \ c.Telepor[1]
   {x=848,y=1062,z=7}, -- Coordenada del lugar hacia donde llevará el teleport.   \ c.Telepor[2]
   CONST_ANI_EXPLOSION, -- Efecto Mágico de a Distancia que saldrá desde los 3 recipientes hasta el Teleport cuando aparezca. | c.Telepor[3]
   1387, -- ID del objeto(transpasable) que hará de teletransportador.     / c.Telepor[4]
   60, -- Segundos que permanecerá abierto el teleport.   / c.Telepor[5]
 },
 Msg = {
   'Los objetos han sido expulsados hacia tus pies por haber sobrepasado el limite.', -- Cuando se pongan más de 1 objeto en cualquier recipiente.
   'Ha'..(moveitem.type > 1 and 'n' or '')..' sido revocado'..(moveitem.type > 1 and 's' or '')..' porque ese no es su lugar.', -- Cuando se ponga uno de los objetos requeridos en el recipiente erróneo.
   'Ha'..(moveitem.type > 1 and 'n' or '')..' sido revocado'..(moveitem.type > 1 and 's' or '')..' a tus pies.', -- Cuando se ponga cualquier otro objeto/s no requerido.
 },
}
local function TPquit(pos)
 local Portal = getTileItemById(c.Telepor[1], c.Telepor[4]).uid
   if Portal > 0 then
       doSendMagicEffect(c.Telepor[1], CONST_ME_LOSEENERGY)
       doRemoveItem(Portal)
   end
end
local Portal = getTileItemById(c.Telepor[1], c.Telepor[4]).itemid
  local v = c.Recipie
   if isInArray({v[1][1], v[2][1], v[3][1]}, moveitem.itemid) then
     local m = {
       getTileItemById(v[1][2], v[1][1]).uid, -- | m[1]
       getTileItemById(v[2][2], v[2][1]).uid, -- | m[2]
       getTileItemById(v[3][2], v[3][1]).uid, -- | m[3]
     }
       if moveitem.type > 1 then
           doTeleportThing(moveitem.uid, getThingPos(cid), false)
           doPlayerSendCancel(cid, c.Msg[1])
         return true
       end
     local basin = getTileItemById(position, tileitem.itemid).uid
       if Portal == 0 and (moveitem.itemid == v[1][1] and m[2] > 0 and m[3] > 0 or moveitem.itemid == v[2][1] and m[1] > 0 and m[3] > 0 or moveitem.itemid == v[3][1] and m[1] > 0 and m[2] > 0) then
         local posi = {
           {m[1], m[2], m[3]}, -- \ posi[1][i]
           {v[1][2], v[2][2], v[3][2]}, -- \ posi[2][i]
         }
         for i = 1, 3 do
           doRemoveItem (posi[1][i])
           doSendMagicEffect(posi[2][i], CONST_ME_POFF)
           doSendDistanceShoot(posi[2][i], c.Telepor[1], c.Telepor[3])
         end
           doSendMagicEffect(c.Telepor[1], CONST_ME_TELEPORT)
           doCreateTeleport(c.Telepor[4], c.Telepor[2], c.Telepor[1])
           addEvent(TPquit, 1000 * c.Telepor[5], pos)
        elseif moveitem.itemid == v[1][1] and m[1] == 0 or moveitem.itemid == v[2][1] and m[2] == 0 or moveitem.itemid == v[3][1] and m[3] == 0 then
           doTeleportThing(moveitem.uid, getThingPos(cid), false)
           doPlayerSendCancel(cid, c.Msg[2])
         return true
       end
    else
      doTeleportThing(moveitem.uid, getThingPos(cid), false)
      doPlayerSendCancel(cid, c.Msg[3])
   end
 return true
end

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

Respecto a éste de los recipientes, como ha de haber un orden a la hora de poner cada objeto requerido en su correspondiente recipiente... puedes poner en el mapa como te dije: los objetos requeridos enfrente en algún lugar inaccesible para que el jugador no los pueda obtener y ponerles encima el objeto que bloquea invisible "1548" para que tampoco le puedan tirar cosas encima.
O poner un cartelito al lado de cada recipiente con en su interior una adivinanza describiéndo el objeto necesario... como gustes.

Editas a tu gusto cada línea con cada mini-explicación a su derecha distinguida cada una por un color dependiendo de la circunstancia.
Tómate tu tiempo para instalarlos & testearlos y luego me dices qué tal, cualquier duda o posible error(referentes a estos scripts); seguido del nombre & versión de la consola con la que abras tu server



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: ¿Me hacen 2 scripts please? Gracias :) el Miér Sep 17, 2014 12:28 pm

niconico


Novato
Omg que dificil

http://pokelatino.sytes.net

#7 Re: ¿Me hacen 2 scripts please? Gracias :) el Miér Sep 17, 2014 4:04 pm

jmen


Nuevo
Hola ! Gracias El del piso que quita hp y mana me sirve perfectamente. Al igual que el de los recipientes

EDIT: El del npc tambien funciona perfectamente, al parecer el unico problema es con el GOD pero no importa, a los players le funciona perfectamente


Saludos y gracias !!

#8 Re: ¿Me hacen 2 scripts please? Gracias :) el Miér Sep 17, 2014 5:00 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Hola ! Gracias El del piso que quita hp y mana me sirve perfectamente. Al igual que el de los recipientes

EDIT: El del npc tambien funciona perfectamente, al parecer el unico problema es con el GOD pero no importa, a los players le funciona perfectamente


Saludos y gracias !!
Claro aunque no es problema ya que es normal pues el God carece de exhaustion y usé dicha función para añadirle el StorageID por tiempo.

Pues okey, me alegro de que te funcionen. Cierro pues



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]

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 .