caanmasu Publicado 24 de Octubre del 2020 Reportar Compartir Publicado 24 de Octubre del 2020 borrar servidoresgame20 y mebe reacciono a esto 2 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 28 de Octubre del 2020 Author Reportar Compartir Publicado 28 de Octubre del 2020 ¡UP! ¿Alguien? ¿Quién dijo yo? ¿Quieren que la resuelva y explique todo todo o quieren participar aportar? Elijan, de las dos maneras se aprende muy bien ¿Para qué podría servir esta quest? Es muy similar a la del evento OX de dar un ítem de bienvenida, solo que esa función va por src. Acabo de dar una pista. Muy bien, esto puede servir para eso, dar un objeto por participación en un evento, por ejemplo un evento de jefes. Un GM pone que les de perlas rojas por decir, a todos los jugadores que estén participando. Esto lo hago sin pedir nada a cambio, aprovechen puesss! Fuegoooooooo! jejeje Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 3 de Noviembre del 2020 Author Reportar Compartir Publicado 3 de Noviembre del 2020 ¡UP! ¿Alguien? Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
XhebasT1an Publicado 3 de Noviembre del 2020 Reportar Compartir Publicado 3 de Noviembre del 2020 Un adelanto y miramos si podemos no? Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 3 de Noviembre del 2020 Author Reportar Compartir Publicado 3 de Noviembre del 2020 hace 9 minutos, XhebasT1an dijo: Un adelanto y miramos si podemos no? ¡Sí! Dale! Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 4 de Noviembre del 2020 Author Reportar Compartir Publicado 4 de Noviembre del 2020 quest regalar_items begin state start begin when 20095.chat."GM: Regalar ítems" with pc.is_gm() begin say_title(mob_name(npc.get_race())) say() say("¿Quieres regalar ítems a todos los") say("personajes que se encuentren en") say("tu mapa?") say("Digita el vnum") local vnum = math.ceil(tonumber(input())) if vnum == 0 or vnum == nil then return end say_title(mob_name(npc.get_race())) say() say("Digita la cantidad") local count = math.ceil(tonumber(input())) if count == 0 or count == nil then return end -- ya tenemos el ítem y la cantidad, ahora a darles a todos los pjs del mapa este objeto... end end end Este es el "esqueleto" La parte de local vnum = math.ceil(tonumber(input())) es una validación, o sea, evitar que metan ciertos datos que no son, como los decimales. El math.ceil() convierte el número en entero. Ahora para darle los ítems a todos los personajes? ese es el reto, let's go! Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
ReuS Publicado 4 de Noviembre del 2020 Reportar Compartir Publicado 4 de Noviembre del 2020 Recien me ando interesando de a poco en como funcionan las quest, , para darle el premio a todos seria algho asi creo pc.give_item2([local vnum = math.ceil(tonumber(input())] with pc.get_map_index() == pc.is_gm() then Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 4 de Noviembre del 2020 Author Reportar Compartir Publicado 4 de Noviembre del 2020 hace 1 hora, Zauron dijo: Recien me ando interesando de a poco en como funcionan las quest, , para darle el premio a todos seria algho asi creo pc.give_item2([local vnum = math.ceil(tonumber(input())] with pc.get_map_index() == pc.is_gm() then ufff pues bueno, muchas cosas pc.give_item2() es una función. Esta función da los ítems, efectivamente pero recibe como parámetros el ítem y la cantidad. pc.give_item2(item_vnum, item_count) Al ser "pc" significa "personal character" o sea, tú mismo, tu pj. O sea que si yo pongo pc.give_item2(27001, 10) le estaré dando al propio pj 10 potas rojas pequeñas. Por lo tanto, sí sería pc.give_item2(vnum, count) pero solo lo darías a tu propio pj. El "with" que pusiste solo se admite en los bloques "when". El "with" se usa para separar los disparadores de las condiciones. Es decir, si yo pongo when login or levelup or kill with pc.get_map_index() == 21 and pc.is_gm() begin Lo que va antes del with son los disparadores, que son "eventos" que se activan cuando suceda algo, por eso se llama "when" (cuando tal cosa suceda). El "with" equivale a un "and" pero le cambiaron el significado para poder identificar los disparadores de las condiciones que le siguen. Disparadores: login, levelup, kill......... cuando el pj se loguee, cuando suba de lvl o cuando mate algo Condiciones: pc.get_map_index() == 21, pc.is_gm()........ si el pj está en el mapa de index 21, si el pj es GM. Ahora sí continuando con el código, sería pc.give_item2(vnum, count) Ahora cómo hacemos para darle a todos los pjs del mapa los ítems? Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 8 de Noviembre del 2020 Author Reportar Compartir Publicado 8 de Noviembre del 2020 ¿Qué pasó amigos? bueno, aquí va una pista: para poder dar los objetos a todos los pjs del mapa primero hay que tener "guardados los pjs" en una tabla ya que de alguna parte los tengo que sacar xD Y por mi parte no usaré db para esto. Así que aquí les va el VID. El VID (Virtual ID) es "identificador virtual". Todo "character" (entiéndase como personaje, NPC, mob) tiene un VID mientras esté "activo" o "online". Todo NPC o mob tiene un VID, y si no hay, entonces es 0. Todo personaje tiene un VID, y si está desconectado pues es 0. La función que retornan los VID son npc.get_vid() o find_pc_by_num(String nombre). Esa fue una gran pista, así que si alguien se anima a seguir pues adelanteee! servidoresgame20 reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
caanmasu Publicado 31 de Mayo del 2021 Author Reportar Compartir Publicado 31 de Mayo del 2021 Voy a revivir el RETO! Sé que dar un objeto es algo muy básico. El reto está en entregarlo a varias personas porque ese comando se limita al persona actual. Así que lo planeo de esta manera: 1. Crear una tabla donde almacene los VIDs de los personajes. En los comentarios de arriba explico qué significa esto. La tabla va a estar en questlib porque si lo pongo en la quest, va a inicializarse de nuevo y se perderán los datos. vidPc_map = {} Así la llamé. Ten en cuenta que un /rel q vuelve a cargar el questlib.lua. 2. Hacer que la tabla se vaya llenando. Cuando un personaje se conecte, agregar su vid y el mapa en donde está. when login with not pc.is_gm() begin local idx = pc.get_map_index() if type(vidPc_map[idx]) != "table" then vidPc_map[idx] = {} end table.insert(vidPc_map[idx], pc.get_vid()) end En la lista no habrá GMs porque ellos no recibirán regalos. Capturo el index del personaje. Luego pregunto si la tabla donde guardo los VIDs es una tabla, y en caso de que no, asignarle una vacía. Inserto en la tabla el VID. La estructura de mi tabla será así: vidPc_map = { [map_index] = {vid_pj...}, [map_index] = {vid_pj...} ... } Ejemplo: vidPc_map = { [1] = {43254, 43255, 43256}, --Shinsoo [41] = {52552, 52553, 52554, 5255} --Jinno } Así que viéndolo de esa forma, es fácil insertar un valor en la tabla. Se crea una tabla en la posición del index del mapa y todos los elementos que agregue son los VIDs. Y cómo saco el VID? con la función pc.get_vid(). Cuando un personaje se desconecte o cambie de personaje, buscar su vid y eliminarlo. when logout or disconnect with not pc.is_gm() begin local idx = pc.get_map_index() if type(vidPc_map[idx]) == "table" then for i = 1, table.getn(vidPc_map[idx]) do if vidPc_map[idx][i] == pc.get_vid() then table.remove(vidPc_map[idx], i) end end end end Es muy parecido al anterior. La diferencia es que al desconectar el pj vas a buscar su VID. Obviamente tiene VID porque estuvo conectado. Tu deber es buscar el VID en la tabla del mismo map index, esto se hace un ciclo comparando los VIDs. Cuando lo encuentre, luego le da a remover la posición en la que estaba ese VID. 3. Regalar los ítems tomando la tabla de los VIDs. local idx = pc.get_map_index() for i = 1, table.getn(vidPc_map[idx]) do pc.select(vidPc_map[idx][i]) pc.give_item2(in_vnum, in_count) end Recorro la tabla de los VIDs de mi mismo mapa. A su vez, selecciono cada personaje y ya, doy el objeto. Esto de seleccionar el personaje funciona así: Yo pongo pc.select(vid_del_otro_pj) y esto hace que cuando yo use funciones de quest, se hagan hacia ese personaje y no hacia mí. Por ejemplo, si lo tengo seleccionado y pongo chat("Hola, soy "..pc.get_name()), va a mostrar ese chat en el personaje seleccionado y con su propio nombre. Ya lo demás es poner que el NPC pida los datos y pues ya es más básico. Quest completa: quest premio_mapa begin state start begin when 20095.chat."Regalar objetos a todos" with pc.is_gm() begin say_npc() say() say("Elige el vnum") local in_vnum = math.ceil(tonumber(input())) say_npc() say() say("Cantidad") local in_count = math.ceil(tonumber(input())) if in_vnum == nil or in_count == nil then return end local idx = pc.get_map_index() if type(vidPc_map[idx]) != "table" then syschat("No hay personas en el mapa") return end local personas = 0 local mi_vid = pc.get_vid() for i = 1, table.getn(vidPc_map[idx]) do pc.select(vidPc_map[idx][i]) pc.give_item2(in_vnum, in_count) personas = personas + 1 end pc.select(mi_vid) syschat("Les has regalado las cosas a "..personas.." jugadores") end when login with not pc.is_gm() begin local idx = pc.get_map_index() if type(vidPc_map[idx]) != "table" then vidPc_map[idx] = {} end table.insert(vidPc_map[idx], pc.get_vid()) end when logout or disconnect with not pc.is_gm() begin local idx = pc.get_map_index() if type(vidPc_map[idx]) == "table" then for i = 1, table.getn(vidPc_map[idx]) do if vidPc_map[idx][i] == pc.get_vid() then table.remove(vidPc_map[idx], i) end end end end end end --questlib --vidPc_map = {} Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Mensajes recomendados
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.