BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[AYUDA] con Script para anihilator!

[AYUDA] con Script para anihilator!

#1 [AYUDA] con Script para anihilator! el Jue Sep 04, 2014 5:20 pm

royalpaladin


Novato
data/actions/scripts/quest/anihi.lua
Description:
(luaGetThingFromPos) Tile not found


Asi tengo el Script

Script:
function onUse(cid, item, frompos, item2, topos)
if item.uid == 7100 then
if item.itemid == 1946 then

player1pos = {x=1844, y=1688, z=10, stackpos=253}
player1 = getThingfromPos(player1pos)

player2pos = {x=1843, y=1688, z=10, stackpos=253}
player2 = getThingfromPos(player2pos)

player3pos = {x=1842, y=1688, z=10, stackpos=253}
player3 = getThingfromPos(player3pos)

player4pos = {x=1841, y=1688, z=10, stackpos=253}
player4 = getThingfromPos(player4pos)



   if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then

 player1level = getPlayerLevel(player1.uid)
 player2level = getPlayerLevel(player2.uid)
 player3level = getPlayerLevel(player3.uid)
 player4level = getPlayerLevel(player4.uid)

 questlevel = 22

 if player1level >= questlevel and player2level >= questlevel and player3level >= questlevel and player4level >= questlevel then

    queststatus1 = getPlayerStorageValue(player1.uid,7100)
    queststatus2 = getPlayerStorageValue(player2.uid,7100)
    queststatus3 = getPlayerStorageValue(player3.uid,7100)
    queststatus4 = getPlayerStorageValue(player4.uid,7100)

    if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then

  --if 1==1 then
medusa1pos = {x = 1843, y = 1672, z = 10}
medusa2pos = {x = 1844, y = 1672, z = 10}
medusa3pos = {x = 1839, y = 1670, z = 10}
medusa4pos = {x = 1841, y = 1670, z = 10}
medusa5pos = {x = 1840, y = 1674, z = 10}
medusa6pos = {x = 1842, y = 1674, z = 10}

doSummonCreature("Medusa", medusa1pos)
doSummonCreature("Medusa", medusa2pos)
doSummonCreature("Medusa", medusa3pos)
doSummonCreature("Medusa", medusa4pos)
doSummonCreature("Medusa", medusa5pos)
doSummonCreature("Medusa", medusa6pos)

nplayer1pos = {x = 1842, y = 1672, z = 10}
nplayer2pos = {x = 1841, y = 1672, z = 10}
nplayer3pos = {x = 1840, y = 1672, z = 10}
nplayer4pos = {x = 1839, y = 1672, z = 10}

  doSendMagicEffect(player1pos,2)
  doSendMagicEffect(player2pos,2)
  doSendMagicEffect(player3pos,2)
  doSendMagicEffect(player4pos,2)

  doTeleportThing(player1.uid,nplayer1pos)
  doTeleportThing(player2.uid,nplayer2pos)
  doTeleportThing(player3.uid,nplayer3pos)
  doTeleportThing(player4.uid,nplayer4pos)

   doSendMagicEffect(nplayer1pos,10)
   doSendMagicEffect(nplayer2pos,10)
   doSendMagicEffect(nplayer3pos,10)
   doSendMagicEffect(nplayer4pos,10)

   doTransformItem(item.uid,1945)

  else
   doPlayerSendCancel(cid,"Sorry, not possible.")
  end
  else
  doPlayerSendCancel(cid,"Sorry, not possible.")
  end
 else
 doPlayerSendCancel(cid,"Sorry, not possible.")
 end
 end
if item.itemid == 1945 then
-- Here is the code start:
starting={x=979, y=846, z=7, stackpos=253}
checking={x=starting.x, y=starting.y, z=starting.z, stackpos=starting.stackpos}
ending={x=986, y=852, z=7, stackpos=253}
players=0
totalmonsters=0
monster = {}
repeat
creature= getThingfromPos(checking)
if creature.itemid > 0 then
if getPlayerAccess(creature.uid) == 0 then
players=players+1
end
 if getPlayerAccess(creature.uid) ~= 0 and getPlayerAccess(creature.uid) ~= 3 then
totalmonsters=totalmonsters+1
 monster[totalmonsters]=creature.uid
  end
end
checking.x=checking.x+1
 if checking.x>ending.x then
 checking.x=starting.x
 checking.y=checking.y+1
end
until checking.y>ending.y
if players==0 then
trash= {x=998, y=864, z=7}
current=0
repeat
current=current+1
doTeleportThing(monster[current],trash)
until current>=totalmonsters
doTransformItem(item.uid,1946)
end
-- Here is the end of it

end
end
return 1
end

Que debo de hacer? Se los agradeceria MUCHO! +rep!

#2 Re: [AYUDA] con Script para anihilator! el Vie Sep 05, 2014 5:17 pm

Belerofonte


Administrador
Parece un script algo obsoleto aunque interesante por la parte de abajo, pues se encarga de teletransportar cualquier objeto tirado & monstruos que queden resultantes tras la anterior ronda, teletransportarlos a una coordenada para que cuando vuelvan a entrar otros jugadores, los monstruos creados tengan la vida al completo y no salgan errores en la consola.

Claro que es algo antiguo y a mí tampoco me funcionaba bien por lo que lo edité un poquito c:
Le añadí algunas funciones para que hiciera lo anterior comentado salvo que ahora elimina los monstruos que hayan quedado porque ¿para qué hacerlos llevar a un lugar sin sentido?, y los objetos tirados también es tontería llevarlos a otro lado, por lo tanto que se borren con cada clean automático que tengas en el servidor.

Y ahora todo lo editable está en una sola parte explicado con anotaciones a su derecha.
Código:
-- Belero was here c:
--------****CONFIG ABAJO****--------
  local c = {
   Players = {
  QuestLevel = 22, -- Nivel necesario para poder acceder a la Quest.
-- XxxEntrada = {Coordenadas iniciales de cada jugador}, XxxSalida = {Coordenadas teletransportación de cada jugador},
    UnoEntrada = {x=1844, y=1688, z=10, stackpos=255}, UnoSalida = {x = 1842, y = 1672, z = 10},
    DosEntrada = {x=1843, y=1688, z=10, stackpos=255}, DosSalida = {x = 1841, y = 1672, z = 10},
    TreEntrada = {x=1842, y=1688, z=10, stackpos=255}, TreSalida = {x = 1840, y = 1672, z = 10},
    CuaEntrada = {x=1841, y=1688, z=10, stackpos=255}, CuaSalida = {x = 1839, y = 1672, z = 10},
   },
   Monsters = {
  MonstName = "Chicken", -- Nombre del monstruo que aparecerá en todas las coordenadas.
-- Coordenadas donde aparecerá el monstruo anterior(dentro del cuadrilátero que formen ambas coordenadas de la variable "Area").
    {{x = 1843, y = 1672, z = 10}},
    {{x = 1844, y = 1672, z = 10}},
    {{x = 1839, y = 1670, z = 10}},
    {{x = 1841, y = 1670, z = 10}},
    {{x = 1840, y = 1674, z = 10}},
    {{x = 1842, y = 1674, z = 10}},
   },
   Area = {
    SupIzq = {x=1839, y=1670, z=10}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área donde estén los monstruos anteriores.
    InfDer = {x=1844, y=1674, z=10}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área donde estén los monstruos anteriores.
   },
   Misc = {
    PalancaUID = 7100, -- Mismo UniqueID que le hayas puesto a la palanca y a la línea del Actions.xml
    AcabadaStr = 7100, -- Mismo StorageValue que le hayas puesto en la obtención de los cofres.
    PalancaOFF = 'Power-off!', -- Texto animado que saldrá en la palanca al accionarse y los jugadores entren a la quest.
    PalancaON = 'Power-on!', -- Texto animado que saldrá en la palanca al accionarse y eliminar los monstruos de la ronda anterior.
      Msg = {-- Mensajes que saldrán si al accionarse la palanca no funciona porque se detecta...
    "Alguno de vosotros ya ha realizado la Quest.", -- ...que algún jugador que ya haya completado la Quest anteriormente.
    "Alguno de vosotros no posee el nivel necesario.", -- ...que algún jugador no posee el nivel requerido en la variable anterior llamada "QuestLevel".
        "Se precisan de 4 aventureros, cada uno en su correspondiente lugar.", -- ...que faltan jugadores de los 4 necesarios.
        "Ya hay gente peleando dentro.", -- ...gente en el área donde se hayen los monstruos.
      },
   }
  }
--------****CONFIG ARRIBA****--------
function getPlayersInAreaa(fromPos, toPos) -- By Cyberm
  local sum = 0
  for xx = fromPos.x, toPos.x, 1 do
    for yy = fromPos.y, toPos.y, 1 do
      for zz = fromPos.z, toPos.z, 1 do
      local pid = getTopCreature({x = xx, y = yy, z = fromPos.z}).uid
        if isPlayer(pid) and getPlayerGroupId(pid) == 1 then
          sum = sum+1
        end
      end
    end
  end
 return sum
end

function doRemoveMonstersInArea(fromPos, toPos) -- Cyberm was here
  local sum = 0
  for xx = fromPos.x, toPos.x, 1 do
    for yy = fromPos.y, toPos.y, 1 do
      for zz = fromPos.z, toPos.z, 1 do
        local pid = getTopCreature({x = xx, y = yy, z = fromPos.z}).uid
        if isMonster(pid) then
          sum = sum+1
            if sum > 0 then
                doRemoveCreature(pid)
            end
        end
      end
    end
  end
 return sum
end

function onUse(cid, item, fromPos, item2, toPos)
    if item.uid == c.Misc.PalancaUID then
        if item.itemid == 1946 then
            player1 = getThingfromPos(c.Players.UnoEntrada)
            player2 = getThingfromPos(c.Players.DosEntrada)
            player3 = getThingfromPos(c.Players.TreEntrada)
            player4 = getThingfromPos(c.Players.CuaEntrada)

            if player1.itemid > 0 and player2.itemid > 0 and player3.itemid > 0 and player4.itemid > 0 then
                player1level = getPlayerLevel(player1.uid)
                player2level = getPlayerLevel(player2.uid)
                player3level = getPlayerLevel(player3.uid)
                player4level = getPlayerLevel(player4.uid)

                if player1level >= c.Players.QuestLevel and player2level >= c.Players.QuestLevel and player3level >= c.Players.QuestLevel and player4level >= c.Players.QuestLevel then
                    queststatus1 = getPlayerStorageValue(player1.uid, c.Misc.AcabadaStr)
                    queststatus2 = getPlayerStorageValue(player2.uid, c.Misc.AcabadaStr)
                    queststatus3 = getPlayerStorageValue(player3.uid, c.Misc.AcabadaStr)
                    queststatus4 = getPlayerStorageValue(player4.uid, c.Misc.AcabadaStr)

                    if queststatus1 == -1 and queststatus2 == -1 and queststatus3 == -1 and queststatus4 == -1 then
                      for _, s in ipairs(c.Monsters) do
                        doSummonCreature(c.Monsters.MonstName, s[1])
                      end

                        doSendMagicEffect(c.Players.UnoEntrada, CONST_ME_POFF)
                        doSendMagicEffect(c.Players.DosEntrada, CONST_ME_POFF)
                        doSendMagicEffect(c.Players.TreEntrada, CONST_ME_POFF)
                        doSendMagicEffect(c.Players.CuaEntrada, CONST_ME_POFF)

                        doTeleportThing(player1.uid, c.Players.UnoSalida)
                        doTeleportThing(player2.uid, c.Players.DosSalida)
                        doTeleportThing(player3.uid, c.Players.TreSalida)
                        doTeleportThing(player4.uid, c.Players.CuaSalida)

                        doSendMagicEffect(c.Players.UnoSalida, CONST_ME_TELEPORT)
                        doSendMagicEffect(c.Players.DosSalida, CONST_ME_TELEPORT)
                        doSendMagicEffect(c.Players.TreSalida, CONST_ME_TELEPORT)
                        doSendMagicEffect(c.Players.CuaSalida, CONST_ME_TELEPORT)

                        doSendAnimatedText(toPos, c.Misc.PalancaOFF, COLOR_RED)
                        doTransformItem(item.uid, 1945)
                     else
                       doPlayerSendCancel(cid, c.Misc.Msg[1])
                       doSendMagicEffect(toPos, CONST_ME_POFF)
                    end
                 else
                   doPlayerSendCancel(cid, c.Misc.Msg[2])
                   doSendMagicEffect(toPos, CONST_ME_POFF)
                end
             else
               doPlayerSendCancel(cid, c.Misc.Msg[3])
               doSendMagicEffect(toPos, CONST_ME_POFF)
            end
        end
        if item.itemid == 1945 then
        -- Here is the code start:
            if getPlayersInAreaa(c.Area.SupIzq, c.Area.InfDer) == 0 then
                doRemoveMonstersInArea(c.Area.SupIzq, c.Area.InfDer)
                doTransformItem(item.uid, 1946)
                doSendAnimatedText(toPos, c.Misc.PalancaON, COLOR_GREEN)
             else
               doPlayerSendCancel(cid, c.Misc.Msg[4])
               doSendMagicEffect(toPos, CONST_ME_POFF)
            end
            -- Here is the end of it
        end
    end
  return true
end

Instrucción:
--------****CONFIG ABAJO****--------
 local c = {
  Players = {
 QuestLevel = 22, -- Nivel necesario para poder acceder a la Quest.
-- XxxEntrada = {Coordenadas iniciales de cada jugador}, XxxSalida = {Coordenadas teletransportación de cada jugador},
   UnoEntrada = {x=1844, y=1688, z=10, stackpos=255}, UnoSalida = {x = 1842, y = 1672, z = 10},
   DosEntrada = {x=1843, y=1688, z=10, stackpos=255}, DosSalida = {x = 1841, y = 1672, z = 10},
   TreEntrada = {x=1842, y=1688, z=10, stackpos=255}, TreSalida = {x = 1840, y = 1672, z = 10},
   CuaEntrada = {x=1841, y=1688, z=10, stackpos=255}, CuaSalida = {x = 1839, y = 1672, z = 10},
  },
  Monsters = {
 MonstName = "Chicken", -- "Nombre" del monstruo que aparecerá en todas las coordenadas.
-- Coordenadas donde aparecerá el monstruo anterior(dentro del cuadrilátero que formen ambas coordenadas de la variable "Area").
   {{x = 1843, y = 1672, z = 10}},
   {{x = 1844, y = 1672, z = 10}},
   {{x = 1839, y = 1670, z = 10}},
   {{x = 1841, y = 1670, z = 10}},
   {{x = 1840, y = 1674, z = 10}},
   {{x = 1842, y = 1674, z = 10}},
  },
  Area = {
   SupIzq = {x=1839, y=1670, z=10}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área donde estén los monstruos anteriores.
   InfDer = {x=1844, y=1674, z=10}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área donde estén los monstruos anteriores.
  },
  Misc = {
   PalancaUID = 7100, -- Mismo UniqueID que le hayas puesto a la palanca y a la línea del Actions.xml
   AcabadaStr = 7100, -- Mismo StorageValue que le hayas puesto en la obtención de objetos los cofres.
   PalancaOFF = 'Power-off!', -- 'Texto' animado que saldrá en la palanca al accionarse y los jugadores entren a la quest.
   PalancaON = 'Power-on!', -- 'Texto' animado que saldrá en la palanca al accionarse y eliminar los monstruos de la ronda anterior.
     Msg = {-- Mensajes que saldrán si al accionarse la palanca no funciona porque se detecta...
   "Alguno de vosotros ya ha realizado la Quest.", -- ...que algún jugador que ya haya completado la Quest anteriormente.
   "Alguno de vosotros no posee el nivel necesario.", -- ...que algún jugador no posee el nivel requerido en la variable anterior llamada "QuestLevel".
       "Se precisan de 4 aventureros, cada uno en su correspondiente lugar.", -- ...que faltan jugadores de los 4 necesarios.
       "Ya hay gente peleando dentro.", -- ...gente en el área donde se hayen los monstruos.
     },
  }
 }
--------****CONFIG ARRIBA****--------

Respecto a las coordenadas de la variable "Area":
Area = {
   SupIzq = {x=1839, y=1670, z=10}, -- Coordenada de la ESQUINA SUPERIOR IZQUIERDA del área donde estén los monstruos anteriores.
   InfDer = {x=1844, y=1674, z=10}, -- Coordenada de la ESQUINA INFERIOR DERECHA del área donde estén los monstruos anteriores.
  },

Por ejemplo:
[Tienes que estar registrado y conectado para ver esa imagen]
Los SQM blancos son donde los jugadores son teletransportados.
Los SQM amarillentos es donde se crearían los monstruos cada vez que alguien entre.
La puerta, el final de la quest(en verdad los puedes poner en el orden que quieras no tiene por qué ser precisamente horizontal como sale en todos lados).
Y lo que coloreé es lo que explico en las variables.
Haciéndo como una cuadricula del área dependiendo de las coordenadas que pongas en la que han de estar los monstruos para que puedan ser eliminados.



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: [AYUDA] con Script para anihilator! el Sáb Sep 06, 2014 7:58 am

Elexonic


Miembro
Me gustan tus explicaciones belero y tus script si los haces tu tambien mucho!!
No hay lugar a errores con las explicaciones colores etc.. jajaj .. bien trabajado
saludos!!

#4 Re: [AYUDA] con Script para anihilator! el Jue Sep 11, 2014 12:41 am

royalpaladin


Novato
Belero, te amo! ya te di tu REP gracias <3
-Tema cerrado.

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 .