BlackTibia

No estás conectado. Conéctate o registrate

 » Open Tibia » Pedido de Scripts » 

[PEDIDO] Script de Trainer ChangeMap

[PEDIDO] Script de Trainer ChangeMap

#1 [PEDIDO] Script de Trainer ChangeMap el Lun Abr 04, 2016 1:43 pm

Smile20


Novato
HOLA  CHICOS QUIERO PEDIRLES UN SCRIPT


Bueno tengo un server con "ChangeMap" con 2 citys "Thais y Venore" en cada uno hay un Teleport
pero Tengo un pequeño problema
y es el siguiente:

Si estas en Thais y pasas por el Teleport Te llevara a los Trainers pero si sucede el Changemap y pasas por el Teleport para salir de los trainers
te lleva es para Thais y los demas players estan en Venore
Sucede el mismo problema si estas en venore



Quisiera saber un script para que (Si estas en Trainers(Bien sea si entraste por Thais o Venore) a la hora de salir de los trainers te lleve a la city que va por el "ChangeMap" no se si me di a entender)



Osea Si estas en trainers, cuando termines de skill pases por el teleport y te lleve a la city correspondiente que hiso el changeMap

Espero que me Puedan Ayudar

#2 Re: [PEDIDO] Script de Trainer ChangeMap el Lun Abr 04, 2016 7:39 pm

Belerofonte


Administrador
[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]

#3 Re: [PEDIDO] Script de Trainer ChangeMap el Lun Abr 04, 2016 10:29 pm

Smile20


Novato
[Tienes que estar registrado y conectado para ver este vínculo]  Amigo puse ese script y me sale el siguiente error en consola

Código:
[4/4/2016 22:14:46] >>> Loading movements... [Error - LuaInterface::loadFile] data/movements/scripts/changeTP.lua:25: '}' expected near '7'
[4/4/2016 22:14:46] [Error - Event::checkScript] Cannot load script (data/movements/scripts/changeTP.lua)
[4/4/2016 22:14:46] data/movements/scripts/changeTP.lua:25: '}' expected near '7'

Asi esta mi ChangeTp.lua
Código:
local c = {
    [9554] = {x = 981, y = 982, z = 8}, -- [ActionID del teleport Shops de las Ciudades] = {Coordenada del lugar de llegada a Shops}
    [9555] = {x = 985, y = 982, z = 8}, -- [ActionID del teleport Quest de las Ciudades] = {Coordenada del lugar de llegada a Quest}
    [9556] = {x = 241, y = 362, z = 7}, -- [ActionID del teleport Trainers de las Ciudades] = {Coordenada del lugar de llegada a Trainers}
    Str = 50555, -- StorageKey extraído del mod changeMaps. (Déjalo como está)
    Misc = {
      [9551] = { -- ActionID del teleport Shops que envía a las ciudades.
        val = {
          [0] = {x = 978, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Carlin.
          [1] = {x = 982, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Thais.
          [2] = {x = 986, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Simple war.
          [3] = {x = 990, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Desert.
        },
      },
      [9552] = { -- ActionID del teleport Quest que envía a las ciudades.
        val = {
          [0] = {x = 979, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Carlin.
          [1] = {x = 983, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Thais.
          [2] = {x = 987, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Simple war.
          [3] = {x = 991, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Desert.
        },
      },
      [9553] = { -- ActionID del teleport Trainers que envía a las ciudades.
        val = {
          [0] = {x = 250, y = 178, z 7}, -- Coordenada del lugar de llegada, en Carlin.
          [1] = {x = 386, y = 625, z = 7}, -- Coordenada del lugar de llegada, en Thais.
          [2] = {x = 988, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Simple war.
          [3] = {x = 992, y = 988, z = 8}, -- Coordenada del lugar de llegada, en Desert.
        },
      },
    },
  }

y en Movements.xml tengo

Código:
<movevent type="StepIn" actionid="9551;9552;9553;9554;9555;9556" event="script" value="changeTP.lua"/>

y por si es necesario aki esta mi ChangeMap
Globalevents.xml
Código:
<globalevent name="changemap" interval="1500000" event="script" value="changemap.lua"/>

Lua:
Código:
local config, new = {
   minTownId = 1,
   maxTownId = 2
}, 0
function onThink(interval, lastExecution)
   for _, pid in ipairs(getPlayersOnline()) do
      local town = getPlayerTown(pid)
      new = town < config.maxTownId and town + 1 or config.minTownId
      doPlayerSetTown(pid, new)
      doTeleportThing(pid, getTownTemplePosition(new))
      doRemoveConditions(pid)
      doCreatureAddHealth(pid, getCreatureMaxHealth(pid))
      doCreatureAddMana(pid, getCreatureMaxMana(pid))
          doBroadcastMessage("Map has been changed! Next map change will be in 1 hour!", MESSAGE_STATUS_WARNING)
   end
   db.executeQuery("UPDATE players SET town_id = ".. new ..", posx = 0, posy = 0, posz = 0;")
   return true
end

#4 By Guasapen el Lun Abr 04, 2016 11:02 pm

guasapen


Miembro
Hola,,! smile yo tengo un push war tan bn de change map y se supo que al logear de los trainers te lleva directamente al templo ya sea el color no se si me explique no se porque tengas ese error

#5 Re: [PEDIDO] Script de Trainer ChangeMap el Mar Abr 05, 2016 12:11 pm

Belerofonte


Administrador
Mía culpa. Genius.
Código:
<movevent type="StepIn" uniqueid="9557" event="script" value="changeTeleport.lua"/>
Código:
function onStepIn(cid, item, position, fromPosition, toPosition)
    if isPlayer(cid) then
        doTeleportThing(cid, getPlayerMasterPos(cid))
        doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
    end

  return true
end

Los portales de las ciudades hasta los trainers que sean los normales, sus coordenadas editadas desde el Remeres.
Y ese uniqueid del movements, en el portal de dentro de trainers.



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] Script de Trainer ChangeMap el Mar Abr 05, 2016 1:30 pm

Smile20


Novato
[Tienes que estar registrado y conectado para ver este vínculo] Amigo Disculpa la molestia
Sabes que puse el script en Changeteleport.lua
Código:
function onStepIn(cid, item, position, fromPosition, toPosition)
    if isPlayer(cid) then
        doTeleportThing(cid, getPlayerMasterPos(cid))
        doSendMagicEffect(getThingPos(cid), CONST_ME_TELEPORT)
    end

  return true
end

y en Movements.xml puse o mismo
Código:
<movevent type="StepIn" uniqueid="9557" event="script" value="changeTeleport.lua"/>
y lo Probe Pero cuando entro al teleport que me lleva a las citys no me Teletransporta.

Luego cerre y abri el server
Pero a la hora de entrar me cambia las Posx posy y posz de todos los Players
[Tienes que estar registrado y conectado para ver esa imagen]

Intento cambiarlas pero no me deja :/

#7 Re: [PEDIDO] Script de Trainer ChangeMap el Mar Abr 05, 2016 5:48 pm

Belerofonte


Administrador
Respecto al portal, verifica que no tengas dicho uniqueid o el que le hayas puesto ya en uso por otro script. En ese caso lo puedes saber si en la consola te suelta un mensaje tipo "duplicate uniqueid: bla bla bla" y lo cambias por otro.
O también asegurate se lo hayas puesto al portal en la sección de uniqueid y no actionid en el remeres.



Respecto a las coordenadas, xD eso es por culpa del otro script que ya tenías. Supuse que si ya lo usabas: te funcionaría bien. La verdad es que a mí también me hace lo mismo en mi server y si intento conectarme con cualquier jugador sale el típico mensaje de "Temple position is wrong contact with any bla bla bla..."

Es debido a esta línea:
  db.executeQuery("UPDATE players SET town_id = ".. new ..", posx = 0, posy = 0, posz = 0;")

Para no tener que volver a cambiar cada coordenada manualmente desde la base de datos, edita la coordenada de dicha línea con cualquiera, por ejemplo:
 db.executeQuery("UPDATE players SET town_id = ".. new ..", posx = 1000, posy = 1000, posz = 7;")

Y pones un interval corto en la línea del globalevents para que se ejecute el script cuanto antes y no tengas que esperar una hora para ello.



Luego deja de usar dicho script y prueba con esta modificación:
Código:
 local config, new, temple = {
    left = {x = 841, y = 991, z = 6}, -- Esquina superior izquierda del área que conforme los trainers.
    right = {x = 845, y = 994, z = 7}, -- Esquina inferior derecha del área que conforme los trainers.

    min = 3, -- TownTemple mínimo.
    max = 5 -- TownTemple máximo.
  }, 0

local function isNotTeleport(cid)
    if isInRange(getThingPos(cid), config.left, config.right) then
      return
    end

  return true
end

local function changeMap()
    for _, pid in ipairs(getPlayersOnline()) do
        if isNotTeleport(pid) then
            doPlayerSetTown(pid, new)
            doTeleportThing(pid, temple)
            doRemoveCondition(pid, CONDITION_INFIGHT)
        end
    end

  temple = nil
    doBroadcastMessage('It has been one hour! The map has been changed! | Online Players: ' .. #getPlayersOnline())
    db.executeQuery('UPDATE players SET town_id='.. new)
end

function onThink(interval, lastExecution)
  new = new < config.max and new + 1 or config.min
  temple = getTownTemplePosition(new)
    doBroadcastMessage('Game map changing in 5 minutes. New Map: ' .. getTownName(new) .. '.')
    addEvent(changeMap, 1000)
 return true
end

Lo extraje de aquí: [Tienes que estar registrado y conectado para ver este vínculo]
Y puse para que el script no afecte a los que están en trainers, pues como dice el usuario de abajo: el script teletransportaría a todos sin excepción. Por lo que, ahora ya, no.

Respecto a la zona de:
   left = {x = 841, y = 991, z = 6}, -- Esquina superior izquierda del área que conforme los trainers.
   right = {x = 845, y = 994, z = 7}, -- Esquina inferior derecha del área que conforme los trainers.

Me refiero a esto:

Si la zona posee 1 solo piso:
[Tienes que estar registrado y conectado para ver esa imagen]



Si la zona posee más de 1:
[Tienes que estar registrado y conectado para ver esa imagen]
(En el piso superior pones la coordenada de la variable "left" y en el piso inferior la de la variable "right")



Volviendo a la puñetera ;D línea de antes, solo que ahora sin coordenada:
Código:
   db.executeQuery('UPDATE players SET town_id='.. new)
La cual es necesaria para los jugadores que se hayen desconectados, cuando hagan login sean llevados a la town cambiada.

En mi servidor no me funciona un carajo Yao ming no sé si en el tuyo ocurrirá igual.
O sea, si por ejemplo la ciudad es cambiada a Thais y el jugador que sea se conecta y aparece en Venore, entonces, en tal caso pones este otro:
Código:
 local config, new, temple = {
    ChangeMapKey = 403812, -- Storage Key que gustes.
    left = {x = 841, y = 991, z = 6}, -- Esquina superior izquierda del área que conforme los trainers.
    right = {x = 845, y = 994, z = 7}, -- Esquina inferior derecha del área que conforme los trainers.

    min = 3, -- TownTemple mínimo.
    max = 5 -- TownTemple máximo.
  }, 0

local function isNotTeleport(cid)
    if isInRange(getThingPos(cid), config.left, config.right) then
      return
    end

  return true
end

local function changeMap()
    for _, pid in ipairs(getPlayersOnline()) do
        if isNotTeleport(pid) then
            setGlobalStorageValue(config.ChangeMapKey, new)
            doPlayerSetTown(pid, new)
            doTeleportThing(pid, temple)
            doRemoveCondition(pid, CONDITION_INFIGHT)
        end
    end

  temple = nil
    doBroadcastMessage('It has been one hour! The map has been changed! | Online Players: ' .. #getPlayersOnline())
end

function onThink(interval, lastExecution)
  new = new < config.max and new + 1 or config.min
  temple = getTownTemplePosition(new)
    doBroadcastMessage('Game map changing in 5 minutes. New Map: ' .. getTownName(new) .. '.')
    addEvent(changeMap, 1000)
 return true
end

Y, Server/Data/Creaturescripts/Scripts/... Login.lua (el archivo ya existente) antes del último "return true end"
Código:
   local ChangeMapKey = 403812 -- Mismo Storage Key que pusiste en changemap.lua
        doTeleportThing(cid, getTownTemplePosition(getGlobalStorageValue(ChangeMapKey)))



Última edición por Belerofonte el Mar Abr 05, 2016 7:13 pm, editado 2 veces



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] Script de Trainer ChangeMap el Mar Abr 05, 2016 5:51 pm

Luismc


Novato
Bueno amigo hay un pequeño problema con eso que pides te puedo explicar, si tienes el change map ya sea team vs team o solo change map, todos los players deberian cambiar de town id, o sea ya son parte de otro map y son redirijidos a esa ciudad al templo. Lo que tienes q hacer es hacer un trainer para cada ciudad y listo. Si tienes algun problema comenta de nuevo

#9 By Guazapen el Miér Abr 06, 2016 10:40 am

guasapen


Miembro
asi es Como Dise Luismc solo pon los trainers para cada ciudad y listo

#10 Re: [PEDIDO] Script de Trainer ChangeMap el Miér Abr 06, 2016 12:47 pm

Belerofonte


Administrador
[Tienes que estar registrado y conectado para ver este vínculo] escribió:asi es Como Dise Luismc solo pon los trainers para cada ciudad y listo
[Tienes que estar registrado y conectado para ver este vínculo] escribió:Bueno amigo hay un pequeño problema con eso que pides te puedo explicar, si tienes el change map ya sea team vs team o solo change map, todos los players deberian cambiar de town id, o sea ya son parte de otro map y son redirijidos a esa ciudad al templo. Lo que tienes q hacer es hacer un trainer para cada ciudad y listo. Si tienes algun problema comenta de nuevo
Ya edité el script de mi anterior comentario para que el cambio de mapa no se ejecute en el área donde se hayen los trainers



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]

#11 By Guazapen el Miér Abr 06, 2016 1:08 pm

guasapen


Miembro
[Tienes que estar registrado y conectado para ver este vínculo] Muy Buena Script Lo Que Comente Es Una Cosa Muy Simple Y sencilla Para Mas Facil....XD o_O

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 .