BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

(Pedido) Spell summon.

(Pedido) Spell summon.

#1 (Pedido) Spell summon. el Miér Jul 08, 2015 10:51 am

Avsilon


Miembro
Buenas a todos, como dice el titulo vengo a pedirles un spell un tanto complicado para mi al menos:
Este spell me gustaria que hiciera lo siguiente al usarlo:

1) Al usar el spell este invocara a tu alrededor esqueletos, con la siguinete area: (AREA_SQUARE1X1)
2) Me gustaria ademas que este spell, cuando mas magic level seas te cree otras cosas, es decir, si eres magic level 20 te creara los esqueletos hasta magic level 40 que en vez de esqueletos te creara zombies.

Espero que puedan ayudarme.

Un saludo, gracias.

#2 Re: (Pedido) Spell summon. el Miér Jul 08, 2015 11:52 pm

Avsilon


Miembro
BUMP!

#3 Re: (Pedido) Spell summon. el Sáb Jul 11, 2015 7:40 pm

Avsilon


Miembro
BUMP!

#4 Re: (Pedido) Spell summon. el Jue Jul 16, 2015 10:44 am

Avsilon


Miembro
BUMP!

#5 Re: (Pedido) Spell summon. el Jue Jul 16, 2015 2:09 pm

Belerofonte


Administrador
Prueba:
Código:
local c = {
    config = {
   -- {Rango de MagicLvl mínimo, Rango de MagicLvl máximo, 'Nombre del summon'},
      {0, 40, 'Skeleton'},
      {40, 60, 'Zombies'},
    },

    max = {60, 'Chicken'}, -- {MagicLvl máximo total, 'Nombre del summon'},
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253
  local thing = getThingFromPos(pos).uid

    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if #getCreatureSummons(cid) >= 8 then
          return doPlayerSendCancel(cid, 'You can have only 8 summons.') and true
        end

        for _, v in pairs (c.config) do
          local auto = {
            [{v[1], v[2]}] = {v[3]},
          }

            for MagLvl, i in pairs(auto) do
                if getPlayerMagLevel(cid, false) > MagLvl[1] and getPlayerMagLevel(cid, false) <= MagLvl[2] then

                    for d = 0, 7 do
                      MyCreature = doSummonCreature(i[1], getPosByDir(getThingPos(cid), d, 1), false, true)
                        doConvinceCreature(cid, MyCreature)
                        doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                        if #getCreatureSummons(cid) >= 8 then break end
                    end

                 elseif getPlayerMagLevel(cid, false) > c.max[1] then
                    for d = 0, 7 do
                      MyCreature = doSummonCreature(c.max[2], getPosByDir(getThingPos(cid), d, 1), false, true)
                        doConvinceCreature(cid, MyCreature)
                        doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                        if #getCreatureSummons(cid) >= 7 then break end
                    end
                end
            end

        end

    end

end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end

Zona(básica) a editar:
local c = {
   config = {
  -- {Rango de MagicLvl mínimo, Rango de MagicLvl máximo, 'Nombre del summon'},
     {0, 40, 'Skeleton'},
     {40, 60, 'Zombies'},
   },

   max = {60, 'Chicken'}, -- {MagicLvl máximo total, 'Nombre del summon'},
 }

Respecto a la variable config.
El jugador que posea Nivel Mágico mayor a "MagicLvl mínimo que pongas" y Nivel Mágico menor o igual al MagicLvl máximo que pongas invocará el monstruo que pongas.

Respecto a la variable max.
Es para que se invoque el monster que pongas solamente si el jugador posee un Nivel Mágico superior. Será el Nivel mágico más elevado que estipules.


O sea, que en la table de la variable config, pones tantas líneas como quieras, duplicando las anteriores y editando sus parámetros, para así añadir más rangos de niveles y monstruos a invocar. Ejemplo:
config = {
  -- {Rango de MagicLvl mínimo, Rango de MagicLvl máximo, 'Nombre del summon'},
     {0, 40, 'Skeleton'},
     {40, 60, 'Zombies'},
     {60, 75, 'Bear'},
     {75, 93, 'Beholder'},
     {93, 105, 'Cacotas'},
   },

Y la de la variable max, dejas solamente una, esa misma línea. Exponiendo el Nivel Mágico máximo que le hayas puesto en la última línea anterior de la variable congif. en este caso sería el 105.


Espero que me entiendas. Me he explayado de más explicando porque creo que puede ser algo confuso xD



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) Spell summon. el Jue Jul 16, 2015 2:19 pm

Avsilon


Miembro
Muchisimas Gracias Belerofonte, me funciona a la perfeccion y tu explicacion es bastante buena, esta todo correcto lo unico que me gustaria añadir a ver si puedes:

1) Me gustaria que fuera en un area de este tipo: (AREA_SQUARE1X1), es que hay un esqueleto que aparece encima del otro, pero solo uno los demas aparecen bien.

2) Al nivel limite, es decir, el que tu me has puesto que es 60 y un chicken, me gustaria que cuando llegaras a ese magic level maximo al utilizar el spell este te creara una combinacion de esqueletos y zombies.

#7 Re: (Pedido) Spell summon. el Jue Jul 16, 2015 2:22 pm

Belerofonte


Administrador
alvaro007 escribió:hay un esqueleto que aparece encima del otro, pero solo uno los demas aparecen bien.

¿Lo estás probando con el GOD? ;D

Respecto a lo otro: ok. Me pondré a ello ahora, cuando pueda.



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) Spell summon. el Jue Jul 16, 2015 2:32 pm

Avsilon


Miembro
Si lo probe con el GOD, lo acabo de probar con el Player y va justo como te lo pedi, muchisimas gracias Belerofonte, tienes REP+, a ver si consigues hacerme lo otro y ya te lo agradeceria x2.

Muy bueno el spell gracias.

#9 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 3:46 am

Belerofonte


Administrador
Ok. Ahora parte del funcionamiento del script y cosas ha editar han cambiado. Por lo que, olvida el anterior.
Código:
local config = {

    Stats = { -- Nivel e invocación.
      Lvl1 = 40, Sum1 = 'Demon Skeleton',
      Lvl2 = 60, Sum2 = 'Zombie',
    },

    Messg = {
      'You can have only 8 summons.', -- Aparecerá cuando se tenga ya 8 invocaciones y se intente invocar más.
      'There\'s no free space to summon!', -- Aparecerá cuando no haya más espacio.
    },

    Radio = 2, -- Tiles de distancia que aparecerán las invocaciones, DESDE el jugador invocador.
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253

  local thing = getThingFromPos(pos).uid
    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if #getCreatureSummons(cid) >= 8 then
          return doPlayerSendCancel(cid, config.Messg[1]) and true
        end

      local c = {
        [config.Stats.Lvl1] = {config.Stats.Sum1},
        [config.Stats.Lvl2] = {config.Stats.Sum2},
      }

        for k, v in pairs (c) do
            if getPlayerMagLevel(cid, false) < k then
                for d = 0, 7 do
                  local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), d, config.Radio))

                    if not position then
                      return doPlayerSendCancel(cid, config.Messg[2])
                    end

                  MyCreature = doSummonCreature(v[1], position, false, true)
                    doConvinceCreature(cid, MyCreature)
                    doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                    if #getCreatureSummons(cid) >= 8 then break end
                end
              break
            end
        end

      local dir = {
        [NORTH] = {config.Stats.Sum1},
        [NORTHWEST] = {config.Stats.Sum2},
        [WEST] = {config.Stats.Sum1},
        [SOUTHWEST] = {config.Stats.Sum2},
        [SOUTH] = {config.Stats.Sum1},
        [SOUTHEAST] = {config.Stats.Sum2},
        [EAST] = {config.Stats.Sum1},
        [NORTHEAST] = {config.Stats.Sum2},
      }

        if getPlayerMagLevel(cid, false) > 0 then
            for k, v in pairs (c) do
                if getPlayerMagLevel(cid, false) < k then
                  return false
                end
            end

            for k, v in pairs(dir) do
              local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), k, config.Radio))

                if not position then
                  return doPlayerSendCancel(cid, config.Messg[2])
                end

              MyCreature = doSummonCreature(v[1], position, false, true)
                doConvinceCreature(cid, MyCreature)
                doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                if #getCreatureSummons(cid) >= 8 then break end
            end
        end

    end
end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end

Zona(básica) a editar:
local config = {

   Stats = { -- Nivel e invocación.
     Lvl1 = 40, Sum1 = 'Demon Skeleton',
     Lvl2 = 60, Sum2 = 'Zombie',
   },

   Messg = {
     'You can have only 8 summons.', -- Aparecerá cuando se tenga ya 8 invocaciones y se intente invocar más..
     'There\'s no free space to summon!', -- Aparecerá cuando no haya más espacio.
   },

   Radio = 2, -- Tiles de distancia que aparecerán las invocaciones, DESDE el jugador invocador.
 }

Respecto a la variable Stats.
- Toda persona que posea un nivel inferior a 40(es decir, un nivel comprendido entre 0 - 39), pues invocará 'Demon Skeleton' a su alrededor.

- Toda persona que posea un nivel inferior a 60(es decir, un nivel comprendido entre 40 - 59), pues invocará 'Zombie' a su alrededor.

- Toda persona que posea un nivel igual o superior al estipulado en la segunda línea de la table anterior, "Lvl2", en este caso: 60. pues invocará 'Zombies' & 'Demons Skeletons' mezclados.


Respecto a la variable Messg.
- En el primer mensaje. ¿Por qué un límite de 8 invocaciones por vez?
Porque es la cantidad de tiles que rodean al jugador en la plantilla de AREA_SQUARE1X1.

Es decir, que si el jugador tiene invocado a 8 'Zombies' y matan a 2, quedándose con 6 'Zombies'. Si el jugador vuelve a conjurar el hechizo solamente invocará a los 2 'Zombies' que le faltaban. Y no a 8 más, para que no pueda invocar a infinitos monstruos.

- En el segundo mensaje. No tiene mucha historia, si no hay más espacio alrededor del jugador pues no se invocará a más criaturas. Solamente se invocará en los lugares posibles.


Respecto a la variable Radio.
Ejemplo:
Radio 1
Radio 2
Radio 3

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



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]

#10 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 5:40 am

Avsilon


Miembro
Esta bien el script, pero me gustaria crear Skeleton, a nivel mas bajo mira asi:

Código:
local config = {

    Stats = { -- Nivel e invocación.
      Lvl1 = 40, Sum1 = 'Skeleton',--> Que este sea desde ml 40 hasta ml 60
      Lvl2 = 60, Sum2 = 'Zombie',--> Que este sea desde ml 60 hasta ml 70
      Lvl3 = 70, Sum3 = 'Demon Skeleton',--> Que este sea desde ml 70 hasta ml 80
      Lvl4 = 80, Sum4 = 'Combinacion de Demon Skeleton y Zombies',--> Que este sea desde ml 80 hasta el final ya.
 },

    Messg = {
      'You can have only 8 summons.', -- Aparecerá cuando se tenga ya 8 invocaciones.
      'There\'s no free space to summon!', -- Aparecerá cuando no haya más espacio.
    },

    Radio = 1, -- Tiles de distancia que aparecerán las invocaciones, DESDE el jugador invocador.
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253

  local thing = getThingFromPos(pos).uid
    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if #getCreatureSummons(cid) >= 8 then
          return doPlayerSendCancel(cid, config.Messg[1]) and true
        end

      local c = {
        [config.Stats.Maglvl1] = {config.Stats.Sum1},
        [config.Stats.Maglvl2] = {config.Stats.Sum2},
      }

        for k, v in pairs (c) do
            if getPlayerMagLevel(cid, false) < k then
                for d = 0, 7 do
                  local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), d, config.Radio))

                    if not position then
                      return doPlayerSendCancel(cid, config.Messg[2])
                    end

                  MyCreature = doSummonCreature(v[1], position, false, true)
                    doConvinceCreature(cid, MyCreature)
                    doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                    if #getCreatureSummons(cid) >= 8 then break end
                end
              break
            end
        end

      local dir = {
        [NORTH] = {config.Stats.Sum1},
        [NORTHWEST] = {config.Stats.Sum2},
        [WEST] = {config.Stats.Sum1},
        [SOUTHWEST] = {config.Stats.Sum2},
        [SOUTH] = {config.Stats.Sum1},
        [SOUTHEAST] = {config.Stats.Sum2},
        [EAST] = {config.Stats.Sum1},
        [NORTHEAST] = {config.Stats.Sum2},
      }

        if getPlayerMagLevel(cid, false) > 0 then
            for k, v in pairs (c) do
                if getPlayerMagLevel(cid, false) < k then
                  return false
                end
            end

            for k, v in pairs(dir) do
              local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), k, config.Radio))

                if not position then
                  return doPlayerSendCancel(cid, config.Messg[2])
                end

              MyCreature = doSummonCreature(v[1], position, false, true)
                doConvinceCreature(cid, MyCreature)
                doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                if #getCreatureSummons(cid) >= 8 then break end
            end
        end

    end
end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end

Y además me gustaria que al usar el spell invocara a todos pero que no se pudiera volver a usar el spell hasta que no esten todos muertos.

De antemano muchas gracias Belerofonte por el esfuerzo y tiempo que estas aplicando en mi.

#11 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 7:17 am

Belerofonte


Administrador
Oks. No te preocupes

Código:
 local Radio = 2 -- Distancia de sqm donde aparecerán las invocaciones.

  local Stats = {
    min1 = 40, max1 = 60, sum1 = 'Skeleton', --> (Desde ml 40 hasta ml 59)
    min2 = 60, max2 = 70, sum2 = 'Zombie', --> (Desde ml 60 hasta ml 69)
    min3 = 70, max3 = 80, sum3 = 'Demon Skeleton', --> (Desde ml 70 hasta ml 79)
  }

  local Messg = {
    'You need magic level +' ..  Stats.min1 .. '.', -- Aparecerá cuando se tenga un Nivel Mágico inferior al mínimo, expuesto en la variable Stats - min1.
    'You need not have any summon.', -- Aparecerá si el jugador ya posee alguna invocación activa.
    'There\'s no free space to summon more!', -- Aparecerá cuando no haya más espacio a su alrededor para invocar.
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253

  local thing = getThingFromPos(pos).uid
    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if getPlayerMagLevel(cid, false) < Stats.min1 then
          return doPlayerSendCancel(cid, Messg[1]) and true
        end

        if #getCreatureSummons(cid) > 0 then
          return doPlayerSendCancel(cid, Messg[2]) and true
        end

      local c = {
        [{Stats.min1, Stats.max1}] = {Stats.sum1},
        [{Stats.min2, Stats.max2}] = {Stats.sum2},
        [{Stats.min3, Stats.max3}] = {Stats.sum3},
      }

        for k, v in pairs (c) do
            if getPlayerMagLevel(cid, false) >= k[1] and getPlayerMagLevel(cid, false) < k[2] then

                for d = 0, 7 do

                  local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), d, Radio))

                    if not position then
                      return doPlayerSendCancel(cid, Messg[3])
                    end

                  MyCreature = doSummonCreature(v[1], position, false, true)
                    doConvinceCreature(cid, MyCreature)
                    doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                end

              break
            end
        end

      local dir = {
        [NORTHWEST] = {Stats.sum2},
        [NORTH] = {Stats.sum3},
        [SOUTHWEST] = {Stats.sum2},
        [WEST] = {Stats.sum3},
        [SOUTHEAST] = {Stats.sum2},
        [SOUTH] = {Stats.sum3},
        [NORTHEAST] = {Stats.sum2},
        [EAST] = {Stats.sum3},
      }

        if getPlayerMagLevel(cid, false) >= Stats.max3 then

            for k, v in pairs(dir) do
              local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), k, Radio))

                if not position then
                  return doPlayerSendCancel(cid, Messg[3])
                end

              MyCreature = doSummonCreature(v[1], position, false, true)
                doConvinceCreature(cid, MyCreature)
                doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

            end

        end

    end
end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end



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]

#12 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 7:29 am

Avsilon


Miembro
Si esta bien, pero en la combinacion de demon skeleton con zombies solo aparecen los demon skeleton al norte, sur, este y oeste, el noreste, sureste, noroste y noreste, que son los lugares donde estarian los zombies, esta vacio, los zombies no, y he puesto tu script tal cual.

#13 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 7:37 am

Avsilon


Miembro
Ya esta Belerofonte era fallo mio, no tenia bien metido los zombies, muchisimas gracias por esta gran spell te lo agradezco. Cierren tema solucionado.

PD: Belerefonte, mira me harias un gran favor, pdi un spell hace tiempo y estuvo ayudandome Dantarrix, pero hay fallos aun a ver si puedes hacer algo: [Tienes que estar registrado y conectado para ver este vínculo]

REP++

#14 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 7:51 am

Belerofonte


Administrador
alvaro007 escribió:No no el script esta correctisimo Belerofonte, es fallo mio que dice mi consola que los zombies no funcionan, lo que es la criatura
Jaja, ok.

Aunque hay un par de asuntos que no me terminan de convencer, y hemos de aclarar.
1. El jugador no podrá accionar este script si el cual ya posee alguna invocación activa. Aun cuando la invocación se trate de cualquier otra criatura extraída del conjuro "utevo res" o de cualquier otro script de invocación.

2. Si el jugador no posee el espacio suficiente a su alrededor para invocarlos a todos pues se invoca solo unos pocos, los que se puedan invocar en los posibles espacios libres que hayan.

Por ejemplo, digamos que por esa razón el jugador solamente invoca a 3 Skeletons.
Si dicho jugador luego se mueve hacia otro lugar donde sí haya todo el espacio necesario... no podrá volver a invocar los Skeletons restantes(5) hasta que los 3 anteriores hayan muerto o desaparecido.


¿Intento cambiar algo de eso, o así está bien?



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]

#15 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 7:59 am

Avsilon


Miembro
Mm, asi esta estupendamente Belerofonte, aunque hay una cosa que me gustaria cambiar ahora que lo pienso, mira:

Código:
local Radio = 1 -- Distancia de sqm donde aparecerán las invocaciones.

  local Stats = {
    min1 = 40, max1 = 60, sum1 = 'Skeleton', --> (Desde ml 40 hasta ml 59)
    min2 = 60, max2 = 70, sum2 = 'Ghoul', --> (Desde ml 60 hasta ml 69)
    min3 = 70, max3 = 80, sum3 = 'Demon Skeleton', --> (Desde ml 70 hasta ml 79)
  }

  local Messg = {
    'You need magic level +' ..  Stats.min1 .. '.', -- Aparecerá cuando se tenga un Nivel Mágico inferior al mínimo, expuesto en la variable Stats - min1.
    'You need not have any summon.', -- Aparecerá si el jugador ya posee alguna invocación activa.
    'There\'s no free space to summon more!', -- Aparecerá cuando no haya más espacio a su alrededor para invocar.
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253

  local thing = getThingFromPos(pos).uid
    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if getPlayerMagLevel(cid, false) < Stats.min1 then
          return doPlayerSendCancel(cid, Messg[1]) and true
        end

        if #getCreatureSummons(cid) > 0 then
          return doPlayerSendCancel(cid, Messg[2]) and true
        end

      local c = {
        [{Stats.min1, Stats.max1}] = {Stats.sum1},
        [{Stats.min2, Stats.max2}] = {Stats.sum2},
        [{Stats.min3, Stats.max3}] = {Stats.sum3},
      }

        for k, v in pairs (c) do
            if getPlayerMagLevel(cid, false) >= k[1] and getPlayerMagLevel(cid, false) < k[2] then

                for d = 0, 7 do

                  local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), d, Radio))

                    if not position then
                      return doPlayerSendCancel(cid, Messg[3])
                    end

                  MyCreature = doSummonCreature(v[1], position, false, true)
                    doConvinceCreature(cid, MyCreature)
                    doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                end

              break
            end
        end

      local dir = {
        [NORTHWEST] = {Stats.sum2},
        [NORTH] = {Stats.sum3},
        [SOUTHWEST] = {Stats.sum2},
        [WEST] = {Stats.sum3},
        [SOUTHEAST] = {Stats.sum2},
        [SOUTH] = {Stats.sum3},
        [NORTHEAST] = {Stats.sum2},
        [EAST] = {Stats.sum3},
      }

        if getPlayerMagLevel(cid, false) >= Stats.max3 then

            for k, v in pairs(dir) do
              local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), k, Radio))

                if not position then
                  return doPlayerSendCancel(cid, Messg[3])
                end

              MyCreature = doSummonCreature(v[1], position, false, true)
                doConvinceCreature(cid, MyCreature)
                doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

            end

        end

    end
end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end

Me gustaria quitar los Demon Skeleton, es decir, me gustaria que:

Código:

    min1 = 40, max1 = 60, sum1 = 'Skeleton', --> (Desde ml 40 hasta ml 59)
    min2 = 60, max2 = 70, sum2 = 'Ghoul', --> (Desde ml 60 hasta ml 69)
    min3 = 70, max3 = 80, sum3 = 'Demon Skeleton', --> Esta linea en vez de ser Demon Skeleton, me gustaria que fuera la convinacion de demon skeleton con zombies.

Es decir que puedas invocar del ml 40 al 59 skeleton, del ml 60 al 69 zombies, y en vez de invocar demon skeleton del ml 70 al 79, invoce solo la convinacion de demon skeleton y zombies.

Podria ser posible hacer eso?

#16 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 8:20 am

Belerofonte


Administrador
alvaro007 escribió:Es decir que puedas invocar del ml 40 al 59 skeleton, del ml 60 al 69 zombies, y en vez de invocar demon skeleton del ml 70 al 79, invoce solo la convinacion de demon skeleton y zombies.

Podria ser posible hacer eso?

Listo.
Código:
local Radio = 2 -- Distancia de sqm donde aparecerán las invocaciones.

  local Stats = {
    min1 = 40, max1 = 60, sum1 = 'Skeleton', --> (Desde ml 40 hasta ml 59)
    min2 = 60, max2 = 70, sum2 = 'Ghoul', --> (Desde ml 60 hasta ml 69)

    Remix = {'Zombie', 'Demon Skeleton'}, -- Mezcla de ambas invocaciones para quien posea el mismo Nivel Mágico o superior al expuesto en la variable Stats - max2.
  }

  local Messg = {
    'You need magic level +' ..  Stats.min1 .. '.', -- Aparecerá cuando se tenga un Nivel Mágico inferior al mínimo, expuesto en la variable Stats - min1.
    'You need not have any summon.', -- Aparecerá si el jugador ya posee alguna invocación activa.
    'There\'s no free space to summon more!', -- Aparecerá cuando no haya más espacio a su alrededor para invocar.
  }

function onTargetTile(cid, pos)
  pos.stackpos = 253

  local thing = getThingFromPos(pos).uid
    if isPlayer(thing) or isMonster(thing) and thing ~= cid then

        if getPlayerMagLevel(cid, false) < Stats.min1 then
          return doPlayerSendCancel(cid, Messg[1]) and true
        end

        if #getCreatureSummons(cid) > 0 then
          return doPlayerSendCancel(cid, Messg[2]) and true
        end

      local c = {
        [{Stats.min1, Stats.max1}] = {Stats.sum1},
        [{Stats.min2, Stats.max2}] = {Stats.sum2},
      }

        for k, v in pairs (c) do
            if getPlayerMagLevel(cid, false) >= k[1] and getPlayerMagLevel(cid, false) < k[2] then

                for d = 0, 7 do

                  local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), d, Radio))

                    if not position then
                      return doPlayerSendCancel(cid, Messg[3])
                    end

                  MyCreature = doSummonCreature(v[1], position, false, true)
                    doConvinceCreature(cid, MyCreature)
                    doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

                end

              break
            end
        end

      local dir = {
        [NORTHWEST] = {Stats.Remix[1]},
        [NORTH] = {Stats.Remix[2]},
        [SOUTHWEST] = {Stats.Remix[1]},
        [WEST] = {Stats.Remix[2]},
        [SOUTHEAST] = {Stats.Remix[1]},
        [SOUTH] = {Stats.Remix[2]},
        [NORTHEAST] = {Stats.Remix[1]},
        [EAST] = {Stats.Remix[2]},
      }

        if getPlayerMagLevel(cid, false) >= Stats.max2 then

            for k, v in pairs(dir) do
              local position = getClosestFreeTile(cid, getPosByDir(getThingPos(cid), k, Radio))

                if not position then
                  return doPlayerSendCancel(cid, Messg[3])
                end

              MyCreature = doSummonCreature(v[1], position, false, true)
                doConvinceCreature(cid, MyCreature)
                doSendMagicEffect(getThingPos(MyCreature), CONST_ME_TELEPORT)

            end

        end

    end
end

  local combat = createCombatObject()
    setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
  return doCombat(cid, combat, var)
end




alvaro007 escribió:PD: Belerefonte, mira me harias un gran favor, pdi un spell hace tiempo y estuvo ayudandome Dantarrix, pero hay fallos aun a ver si puedes hacer algo: [Tienes que estar registrado y conectado para ver este vínculo]

Casualmente hace un par de años intenté realizar dicho script para un server naruto. Pero lamentablemente no tuve y sigo sin tener ni zorra idea acerca de editar sources, compilar, etc..., por ello estube pendiente en ese post tuyo.

Y efectivamente para que al "clon" se le cambie el nombre en tiempo real hay que tocar las sources. Eso sin contar con que Dantarrix es mejor scripter que yo, y si a él no le sale algo... eso significa que a mí aún menos xD



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]

#17 Re: (Pedido) Spell summon. el Sáb Jul 18, 2015 8:34 am

Avsilon


Miembro
Muchisimas gracias Belerofonte, esta muy bien el script, funciona exactamente como te lo pedi, REP++ para ti y mis agradecimoentos.

PD: Dantarrix es muy buen scripter pero tu tampoco te quedas corto ehh, eres un crack, bueno no te preocupes sino puedes hacer nada con ese spell pero podrias hacer algo con este: [Tienes que estar registrado y conectado para ver este vínculo]

Tema Solucionado.

#18 Re: (Pedido) Spell summon. Hoy a las 4:29 am

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 .