Jump to content

caanmasu

Members
  • Content Count

    69
  • Joined

  • Last visited

  • Days Won

    9

caanmasu last won the day on September 1

caanmasu had the most liked content!

2 Followers

About caanmasu

  • Rank
    Aprendiz

Recent Profile Visitors

606 profile views
  1. No asusten al pelao Hay guías por todos lados. Solo usa los buscadores. Si definitivamente no pudiste con algo, abre un hilo y pide ayuda o pide ayuda directamente desde el chat o agrega a algún miembro a sus redes y le comentas tu caso. En este caso hay que ser más específico ya que tener server files implica un área muy grande y no se puede adivinar lo que estás pidiendo.
  2. Editado: ahora si la función no recibe parámetros, retornará el nombre del mapa actual. Si la función recibe el index, retornará el nombre del mapa de ese index. Ya tiene más utilidad ahora xD
  3. Hola a todos de nuevo! He creado una función que podría ser útil Ejemplo de uso: chat("Estás en "..pc.get_map_name()) Salida: Estás en Templo Hwang Otro ejemplo: Al usar anillo teleport y tienes los index en la tabla principal; tan solo usar esta función para que aparezcan los nombres sin necesidad de escribirlos. En otras palabras: si no recibe parámetros, retorna el nombre del mapa actual. Si recibe el index de un mapa, retornará el nombre de ese mapa. Agreguen sus mapas nuevos y verifiquen si los index corresponden con los nombres que he puesto. Deben incrustar este código en el questlib.lua y agregar la función pc.get_map_name en quest_functions ----------------BEGIN GET_MAP_NAME----------------------------------------- -- Función que retorna el nombre del mapa actual -- Pista: notice_all(pc.get_name().. " ha muerto en "..pc.get_map_name()) -- Camilo#0869 function pc.get_map_name(map_index) index_name = { [41] = "Jinno Ciudad 1", [43] = "Jinno Ciudad 2", [44] = "Tierra de Gremios Jinno", [45] = "Monos de Jinno", [1] = "Shinsoo Ciudad 1", [3] = "Shinsoo Ciudad 2", [4] = "Tierra de Gremios Shinsoo", [5] = "Monos de Shinsoo", [21] = "Chunjo Ciudad 1", [23] = "Chunjo Ciudad 2", [24] = "Tierra de Gremios Chunjo", [25] = "Monos de Chunjo", [61] = "Montaña Sohan", [62] = "Tierra de Fuego", [63] = "Desierto", [64] = "Valle de Orcos", [65] = "Templo Hwang", [66] = "Torre Demonios", [67] = "Bosque Fantasma", [68] = "Bosque Rojo", [69] = "Campo Serpiente", [70] = "Tierra de Gigantes", [71] = "Arañas 2", [72] = "Gruta 1", [73] = "Gruta 2", [81] = "Ceremonia de bodas", [103] = "Mapa de Guerras 1", [104] = "Cueva de Arañas", [105] = "Mapa de Guerras 2", [108] = "Monos normales", [109] = "Monos difíciles", [110] = "Guerra de gremios", [111] = "Guerra de gremios", [90] = "Budokan", [113] = "OX", [208] = "Cueva del Berán", [210] = "Bay", [211] = "Cape", [212] = "Down", [213] = "Thunder", [351] = "Arrador", [215] = "Nemere", [216] = "Catacumbas", [217] = "Arañas 3" } if map_index == nil then return index_name[pc.get_map_index()] else return index_name[map_index] end end --[[ Index basados en files Eternia2 Excepciones: 6 metin2_guild_village_01 26 metin2_guild_village_02 46 metin2_guild_village_03 63 metin2_map_n_desert_01 100 metin2_map_fielddungeon 101 metin2_map_resources_zon 107 metin2_map_monkey_dungeon 114 metin2_map_sungzi 118 metin2_map_sungzi_flame_hill_01 119 metin2_map_sungzi_flame_hill_02 120 metin2_map_sungzi_flame_hill_03 121 metin2_map_sungzi_snow 122 metin2_map_sungzi_snow_pass01 123 metin2_map_sungzi_snow_pass02 124 metin2_map_sungzi_snow_pass03 125 metin2_map_sungzi_desert_01 126 metin2_map_sungzi_desert_hill_01 127 metin2_map_sungzi_desert_hill_02 128 metin2_map_sungzi_desert_hill_03 181 metin2_map_empirewar01 182 metin2_map_empirewar02 183 metin2_map_empirewar03 200 gm_guild_build --]] -----------END GET_MAP_NAME-------------------------------------------- Éxitos!
  4. No las he probado pero son las del oficial y traducido como con Traductor de Google xD pero ahí puedes ponerle el sentido en cada say biologo_es.rar
  5. Yeah! la idea al final de todo es entretener. Las misiones diarias siempre hacen que los jugadores se queden más tiempo conectados y hagan más cosas. Además con la creatividad puedes cambiar muchas cosas y llegar más lejos. Cualquier cosa es básica cuando aprendes lo básico, hasta el C++. La diferencia está en el nivel que le pongas.
  6. Hola a todos de nuevo! He visitado varios foros buscando cómo volver las misiones diarias. Se veían muy enredadas y no probé ninguna, así que no sé si funcionaban. He creado mi propia manera de convertir una misión que se hace una vez por pj, a esa misma misión que se haga una vez al día. E incluso algo más interesante, una cantidad limitada de veces! Nota: las misiones se reinician a las 00:00 hora del servidor. Es necesario cambiar pj para poder hacer la misión de nuevo. La estructura de las misiones normales es más o menos así: quest mision begin state start begin when login begin set_state(run) end end state run begin when letter begin send_letter("Misión") end when button or info begin say("Información de la misión") end when kill begin pc.setqf("qf1", 1) pc.setqf("qf2", 1) set_state(__COMPLETE__) end end state __COMPLETE__ begin end end Y la estructura de mi misión diaria es así: -- Discord: Camilo#0869 quest mision_diaria begin state start begin when login begin CANTIDAD_MAXIMA = 1 local fecha_actual = tonumber(os.date("%d%m%y")) if pc.getqf("fecha_guardada") != fecha_actual then pc.delqf("cant_hechas") end if pc.getqf("cant_hechas") < CANTIDAD_MAXIMA then pc.setqf("fecha_guardada", fecha_actual) -- Aquí reinicio todos los qf de la misión pc.delqf("qf_a_reiniciar1") pc.delqf("qf_a_reiniciar2") ------------------------------------------ set_state(run) end end end state run begin when letter begin send_letter("Misión diaria") end when button or info begin say("Información de la misión") end when kill begin pc.setqf("qf_a_reiniciar1", 1) pc.setqf("qf_a_reiniciar2", 1) pc.setqf("cant_hechas", pc.getqf("cant_hechas")+1) syschat("Terminaste la misión. Hoy ya la has hecho "..pc.getqf("cant_hechas").." veces") set_state(start) -- Aquí termina la misión end end end Simplemente debes agregarle este contenido a tu when login del state start: CANTIDAD_MAXIMA = 1 local fecha_actual = tonumber(os.date("%d%m%y")) if pc.getqf("fecha_guardada") != fecha_actual then pc.delqf("cant_hechas") end if pc.getqf("cant_hechas") < CANTIDAD_MAXIMA then pc.setqf("fecha_guardada", fecha_actual) -- Aquí reinicio todos los qf de la misión pc.delqf("qf_a_reiniciar1") pc.delqf("qf_a_reiniciar2") ------------------------------------------ set_state(run) end En donde dice CANTIDAD_MAXIMA puse 1, o sea, que la misión solo se puede hacer una vez en el día. Tú puedes poner ahí el número que quieras. En donde dice lo de los reinicios debes agregar cada qf de la quest, así como se muestra en el código. Luego debemos agregar el reinicio de la quest, así: pc.setqf("cant_hechas", pc.getqf("cant_hechas")+1) syschat("Terminaste la misión. Hoy ya la has hecho "..pc.getqf("cant_hechas").." veces") set_state(start) -- Aquí termina la misión Esto se pone al final cuando ya se da la recompensa. Esto se reemplaza por el set_state(__COMPLETE__) típico de las misiones normales. ¿Cómo funciona? Calculo la fecha del servidor con os.date() cuando termino por primera vez la misión. Luego vuelvo a primer state y se genera una nueva fecha. Si las fechas coinciden, quiere decir que el día es el mismo, así que verifica el qf cant_hechas para ver si todavía puede hacer más misiones. Luego entra a la misión de nuevo. Cuando la fecha cambia y el pj se logea, entra a comparar las fechas y se da cuenta que son diferentes; así que reinicia el qf cant_hechas para que el pj pueda volver a hacer las misiones. Eso es todo amigos, éxitos!
  7. Yo subí una quest así, no sé si tengas la misma mía Ver post El ítem te mostrará las habilidades que no tengas al máximo y te sube la que selecciones
  8. Edité la publicación Olvidé agregar {"DAÑO_HABILIDAD", 71, "Daño de Habilidad", "%"}, {"DAÑO_MEDIA", 72, "Daño de Media", "%"}, pero ya, ya está en Pastebin, code y adjuntos. Si no saben cómo instalarlo o les causa error, escríbanme al Discord.
  9. Quest editor de ítems Hola amigos. He realizado esta quest para ustedes. Ver vídeo y leer descripción en la quest! Éxitos! Pastebin: dopador_camilo.quest questlib.lua quest_functions: gaussian calcular_hab_med say_title_center math.abs dopador_camilo.quest --[[ QUEST editora de ítems Consiste en asignar bonificaciones a los ítems de manera arbitraria. Solo se permiten tipos y valores de bonificaciones permitidas por el curso legal del juego. En otras palabras, los ítems solo pueden obtener valores que se consigan al cambiar los bonus con un Objeto Encantado. Configuración: 1. NPC: buscar when 20354.take begin; y cambiar por el id de tu NPC. 2. INTENTOS = 5000000 -> esta constante determina la cantidad de iteraciones al cambiar la hab y media. Puede saturar tu server por 3 segundos si pones valores muy altos. Requisitos para instalar: Descargar la parte del questlib.lua Agregar a quest_functions: gaussian calcular_hab_med say_title_center math.abs Notas: 1. Al poner encima un ítem al NPC 20354 (Guardián de la Ciudad) se te abrirá una ventana donde te dará la opción de editar el ítem. 2. Ítems disponibles: armas, armaduras, brazaletes, zapatos, collar, casco, escudo y pendientes. 3. Tomado del 1° al 5° bonus. No importa si el objeto no tiene bonus, se agregarán automáticamente. 4. En caso del arma de media y habilidad, pedirá dos entradas, una donde pide media y la otra habilidad. Si quieres solo media, pon la media a tu gusto y la habilidad en un número imposible (como el 111) Si quieres solo habilidad, pon la habilidad a tu gusto y la media en un número imposible (como el 111) Si quieres que salga 50 de media ó 25 de habilidad, lo que caiga primero, entonces pon 50 en media y 25 en habilidad. Después de escoger la media y habilidad, te saldrá una página donde saldrán los bonus disponibles para ese objeto y los valores que pueden salir. Aparecerán 3 páginas y así se completarán los 5 bonus. 5. Para objetos sin media y habilidad, pedirá escoger 5 bonus, en 5 páginas. 6. Si un objeto ya tiene un tipo de bonus, no puede volver a salir ese tipo de bonus. ¿Cómo funciona el programa? Al poner el objeto en el NPC evalúa si el objeto es de media y habilidad. Entonces busca en la base de datos si tiene addon_type = -1 ó 0 En caso de tener media (addon_type = -1), se harán muchos "cambios" hasta conseguir que la habilidad o media que salieron, sean mayores o iguales a las que escogió el jugador. Esos "cambios" son la simulación de media y habilidad, en donde realizo hasta 5 millones de iteraciones. La función de media y habilidad es la misma tomada de la oficial desde el source en el archivo ItemAddon.cpp Para más detalles sobre la media y habilidad visitar: [Hidden Content] Si no sale la media o habilidad elegida, entonces dirá "No dopó. Inténtalo de nuevo" En caso de que sí, entonces procede a dopar el resto así: En la base de datos busca el tipo de objeto y averigua los bonus que están asociados. Esto hace que a un arma no aparezca inmune apagón, por ejemplo. Luego busca los bonus que ya tiene inmersos en el ítem, tales como el HP que está en el brazalete de plata. Esos tipos de bonus los excluye. Ya se tienen los tipos de bonus que pueden salir en el objeto. Ahora se traducen a lenguaje humano. Por ejemplo, en vez de poner "ATT_SPEED" pone "Velocidad de Ataque" Ahora esos bonus en "lenguaje humano" saldrán en las opciones con un select_table(). Al seleccionar el tipo de bonus, aparecerá otra página donde se ven los valores. Esos valores pertenecen a los campos lv1, lv2, hasta lv5 de item_attr. Para poder agregar los bonus al objeto, se toman las variables que eligió el jugador en cada select. Con item.set_value() asigno los bonus al ítem. Esto se hace 3 o 4 veces dependiendo de la media y habilidad que haya salido. Y para objetos normales se realizan 5 veces. Cualquier duda comentar debajo de la publicación o escribirme al Discord. Discord: Camilo#0869 --]] quest dopador_camilo begin state start begin function get_str_sub_type(t, st) local sub_tipos = { [1] = {"weapon", 1}, [2] = {"body", 2, 0}, [3] = {"wrist", 2, 3}, [4] = {"foots", 2, 4}, [5] = {"neck", 2, 5}, [6] = {"head", 2, 1}, [7] = {"shield", 2, 2}, [8] = {"ear", 2, 6} } if t == 1 then return sub_tipos[1][1] end for i = 1, table.getn(sub_tipos) do if t == sub_tipos[i][2] and st == sub_tipos[i][3] then return sub_tipos[i][1] end end end function verificar(id) local apply_type = mysql_query("SELECT applytype0, applytype1, applytype2 FROM player.item_proto WHERE vnum = "..tonumber(id)..";") local types_prohibidos = {tonumber(apply_type.applytype0[1]), tonumber(apply_type.applytype1[1]), tonumber(apply_type.applytype2[1])} item.select(id) local item_type, item_sub_type = item.get_type(), item.get_sub_type() local bonus_type = mysql_query("SELECT apply, lv1, lv2, lv3, lv4, lv5 FROM player.item_attr WHERE "..dopador_camilo.get_str_sub_type(item_type, item_sub_type).." > 0;") local real_bonus_type, real_bonus_level = {}, {} for i = 1, table.getn(bonus_type.apply) do table.insert(real_bonus_level, {}) for j = 1, table.getn(apply2) do if bonus_type.apply[i] == apply2[j][1] and dopador_camilo.es_prohibido(dopador_camilo.get_vnum_applytype(bonus_type.apply[i]), types_prohibidos) != 1 then table.insert(real_bonus_type, apply2[j][1]) for k = 1, 5 do table.insert(real_bonus_level[table.getn(real_bonus_type)], bonus_type[i][k+1]) end end end end return real_bonus_type, real_bonus_level end function get_vnum_applytype(str) for i = 1, table.getn(apply2) do if apply2[i][1] == str then return apply2[i][2] end end end function get_str_applytype(name) for i = 1, table.getn(apply2) do if apply2[i][3] == name then return apply2[i][1] end end end function get_name_applytype(str) for i = 1, table.getn(apply2) do if apply2[i][1] == str then return apply2[i][3], apply2[i][4] end end end function es_prohibido(s, t) for i = 1, table.getn(t) do if s == t[i] then return 1 end end end function dopar_media(id) INTENTOS = 5000000 say_title_center("Dopador de Camilo[ENTER]") say_item_vnum(id) say("Ingresa la media que quieres sacar") local med = tonumber(input()) if med == nil then return end say_title_center("Dopador de Camilo[ENTER]") say_item_vnum(id) say("Ingresa la habilidad que quieres sacar") local hab = tonumber(input()) local cont = 0 for i = 1, INTENTOS do local h, m = calcular_hab_med() if m >= med or h >= hab then if m == 0 then item.set_value(0, 71, h) dopador_camilo.dopar(id, 4) elseif h == 0 then item.set_value(0, 72, m) dopador_camilo.dopar(id, 4) else item.set_value(0, 72, m) item.set_value(1, 71, h) dopador_camilo.dopar(id, 3) end return end cont = i end syschat("No dopó. Inténtalo de nuevo") end when 20354.take begin local r = mysql_query("SELECT addon_type FROM player.item_proto WHERE vnum = "..item.vnum..";") if r.addon_type[1] == "-1" or r.addon_type[1] == -1 then dopador_camilo.dopar_media(item.vnum) elseif item.get_type() == 1 or item.get_type() == 2 then dopador_camilo.dopar(item.vnum, 5) end end function dopar(id, cant_bonus) local type_bonus_temp, value_bonus_temp = dopador_camilo.verificar(id) local type_bonus, value_bonus = {}, {} local type_bonus_completo, value_bonus_completo = {}, {} for i = 1, table.getn(type_bonus_temp) do type_bonus_completo[i] = type_bonus_temp[i] type_bonus[i] = type_bonus_temp[i] value_bonus_completo[i] = {} value_bonus[i] = {} for j = 1, table.getn(value_bonus_temp[i]) do value_bonus[i][j] = value_bonus_temp[i][j] value_bonus_completo[i][j] = value_bonus_temp[i][j] end end for i = 1, table.getn(type_bonus) do type_bonus[i] = dopador_camilo.get_name_applytype(type_bonus[i]) end table.insert(type_bonus, "Cerrar") for i = 1, table.getn(value_bonus) do table.insert(value_bonus[i], "Volver") end local type_guardado, value_guardado = {}, {} for i = math.abs(6-cant_bonus), 5 do say_title("Elige el "..i.."° bonus") local sel_type = select_table(type_bonus) if sel_type != table.getn(type_bonus) then say_title("Elige el valor") local sel_value = select_table(value_bonus[sel_type]) if sel_value != 6 then table.insert(type_guardado, dopador_camilo.get_vnum_applytype(dopador_camilo.get_str_applytype(type_bonus[sel_type]))) table.insert(value_guardado, value_bonus[sel_type][sel_value]) table.remove(type_bonus, sel_type) table.remove(value_bonus, sel_type) else i = i - 1 end else return end end local cont = 0 for i = math.abs(cant_bonus-5), 4 do item.set_value(i, type_guardado[cont+1], value_guardado[cont+1]) cont = cont + 1 end syschat("Hecho!") end end end questlib.lua apply2 = { {"MAX_HP", 1, "Máx. HP", ""}, {"MAX_SP", 2, "Máx. SP", ""}, {"CON", 3, "VIT", ""}, {"INT", 4, "INT", ""}, {"STR", 5, "STR", ""}, {"DEX", 6, "DEX", ""}, {"ATT_SPEED", 7, "Velocidad de ataque", "%"}, {"MOV_SPEED", 8, "Velocidad de movimiento", "%"}, {"CAST_SPEED", 9, "Velocidad de hechizo", "%"}, {"HP_REGEN", 10, "Regeneración de HP", "%"}, {"SP_REGEN", 11, "Regeneración de SP", "%"}, {"POISON_PCT", 12, "Probabilidad de envenenar", "%"}, {"STUN_PCT", 13, "Probabilidad de apagón", "%"}, {"SLOW_PCT", 14, "Probabilidad de retardar", "%"}, {"CRITICAL_PCT", 15, "Probabilidad de golpes críticos", "%"}, {"PENETRATE_PCT", 16, "Probabilidad de golpes de penetración", "%"}, {"ATTBONUS_HUMAN", 17, "Fuerza contra humanos", "%"}, {"ATTBONUS_ANIMAL", 18, "Fuerza contra animales", "%"}, {"ATTBONUS_ORC", 19, "Fuerza contra orcos", "%"}, {"ATTBONUS_MILGYO", 20, "Fuerza contra místicos", "%"}, {"ATTBONUS_UNDEAD", 21, "Fuerza contra nomuertos", "%"}, {"ATTBONUS_DEVIL", 22, "Fuerza contra demonios", "%"}, {"STEAL_HP", 23, "Probabilidad de absorber HP", "%"}, {"STEAL_SP", 24, "Probabilidad de absorber SP", "%"}, {"MANA_BURN_PCT", 25, "Probabilidad de robar SP al enemigo", "%"}, {"DAMAGE_SP_RECOVER", 26, "Probabilidad de recuperar SP al golpear", "%"}, {"BLOCK", 27, "Probabilidad de bloquear ataques al cuerpo", "%"}, {"DODGE", 28, "Probabilidad de evitar flechas", "%"}, {"RESIST_SWORD", 29, "Defensa de espada", "%"}, {"RESIST_TWOHAND", 30, "Defensa de dos manos", "%"}, {"RESIST_DAGGER", 31, "Defensa de daga", "%"}, {"RESIST_BELL", 32, "Defensa de campana", "%"}, {"RESIST_FAN", 33, "Defensa de fan", "%"}, {"RESIST_BOW", 34, "Resistencia de flechas", "%"}, {"RESIST_FIRE", 35, "Resistencia a fuego", "%"}, {"RESIST_ELEC", 36, "Resistencia relámpago", "%"}, {"RESIST_MAGIC", 37, "Defensa mágica", "%"}, {"RESIST_WIND", 38, "Resistencia a viento", "%"}, {"REFLECT_MELEE", 39, "Probabilidad de reflectar ataques al cuerpo", "%"}, {"REFLECT_CURSE", 40, "Probabilidad de disipar", "%"}, {"POISON_REDUCE", 41, "Resistencia al veneno", "%"}, {"KILL_SP_RECOVER", 42, "Probabilidad de recuperar SP al matar", "%"}, {"EXP_DOUBLE_BONUS", 43, "Probabilidad de doble bonus de EXP", "%"}, {"GOLD_DOUBLE_BONUS", 44, "Probabilidad de doble caída de Yang", "%"}, {"ITEM_DROP_BONUS", 45, "Probabilidad de doble caída de objetos", "%"}, {"POTION_BONUS", 46, "Potion bonus", ""}, {"KILL_HP_RECOVER", 47, "Probabilidad de recuperar HP al matar", "%"}, {"IMMUNE_STUN", 48, "Defensa contra apagón", ""}, {"IMMUNE_SLOW", 49, "Defensa contra retardo", ""}, {"IMMUNE_FALL", 50, "Defensa contra caídas", ""}, {"SKILL", 51, "Habilidad", ""}, {"BOW_DISTANCE", 52, "Distancia de arco", ""}, {"ATT_GRADE_BONUS", 53, "Ataque", ""}, {"DEF_GRADE_BONUS", 54, "Defensa", ""}, {"MAGIC_ATT_GRADE", 55, "Ataque mágico", ""}, {"MAGIC_DEF_GRADE", 56, "Defensa mágica", ""}, {"CURSE_PCT", 57, "Probabilidad de maldecir", "%"}, {"MAX_STAMINA", 58, "Máx. Stamina", ""}, {"ATTBONUS_WARRIOR", 59, "Fuerza contra guerreros", "%"}, {"ATTBONUS_ASSASSIN", 60, "Fuerza contra ninjas", "%"}, {"ATTBONUS_SURA", 61, "Fuerza contra suras", "%"}, {"ATTBONUS_SHAMAN", 62, "Fuerza contra chamanes", "%"}, {"ATTBONUS_MONSTER", 63, "Fuerza contra monstruo", "%"}, {"DAÑO_HABILIDAD", 71, "Daño de Habilidad", "%"}, {"DAÑO_MEDIA", 72, "Daño de Media", "%"}, } function gaussian (mean, variance) return variance*math.sqrt(-2 * math.log(math.random())) * math.cos(2 * math.pi * math.random()) + mean end function calcular_hab_med() local g = gaussian(0, 5) local hab = math.floor(g) + 0.5 local med = 0 if math.abs(hab) <= 20 then med = -2*hab+math.abs(number(-8, 8) + number(-8, 8))+number(1, 4) else med = -2*hab+number(1, 5) end return math.floor(hab), math.floor(med) end function say_title_center(msg,r,g,b) local _color if (r and g and b) == nil then _color = color256(255, 230, 186) else _color = color256(r, g, b) end raw_script(string.format("[TEXT_HORIZONTAL_ALIGN_CENTER]%s%s%s[/TEXT_HORIZONTAL_ALIGN_CENTER][ENTER]", _color, msg, color256(196, 196, 196))) end Anexo: probar media y habilidad Dale a run Y en la línea print (calcularmedia(30, 1000000)) En donde está el 30 es la media y el 1kk son la cantidad de cambios. Cambia los valores y prueba dopador_camilo.rar
  10. Up! actualicen! go go go Hay vídeo! ver publicación de nuevo!
  11. Up! xD Ver publicación nuevamente. Go go go Nuevo vídeo!
  12. Hola amigo Me alegra que estés haciendo quests. No mucha gente se le mide a eso xD Luego de hacer varias quest creo que puedo recomendarte algunas cosas que fui aprendiendo 1. say("Los atuendos que escondia el libro ") say("") es lo mismo que say("Los atuendos que escondia el libro [ENTER]") y del mismo modo en sentido contrario :v 2. Cuando quieras que el título tenga el mismo nombre que el nombre del objeto: say_title(item.name) y para que el siguiente texto esté separado say_title(item.name.."[ENTER]") 3. say("Estimado/a "..pc.get_name().."") es lo mismo que say("Estimado/a "..pc.get_name()) 4. Para eliminar el objeto: item.remove() debes probar primero si se eliminan todos los objetos que tienes en el mismo slot o solo elimina uno. 5. Para crear una quest sencilla de personalizar se recomienda usar una función aparte donde retorne una estructura de datos. Suena complejo pero no lo es. function info() return { ["level_req"] = 120, ["item_req"] = 19, ["cant_item_req"] = 1, ["item_reward_x_raza"] = {11209, 11409, 11609, 11809} } end se entiende que va en la misma jerarquía que los when. Incluso puedes llamarla desde otros states. Así: local s = nombredelaquest.info() Esa línea va dentro del when. Luego para llamar a una de las variables de allí pones, por ejemplo, para el nivel requerido: say("Debes ser nivel "..s.level_req) 6. Para entregar cierto objeto a un personaje sin necesidad de que él escoja su raza, se hace así: Primero se saca el id de la raza así: pc.job esa sentencia bota números entre el 0 y el 3, donde: 0: guerrero 1: ninja 2: sura 3: chamán Luego para darle un objeto diferente por raza debes tener una pequeña lista de los 4 objetos que vas a dar, así: ["item_reward_x_raza"] = {11209, 11409, 11609, 11809} que es la misma lista que está arriba en la función. (se debe poner en el orden correcto, g, n, s, c) Después le das el ítem con give_item2(OBJETO_EN_EL_ARREGLO) Donde OBJETO_EN_EL_ARREGLO es alguno de los elementos que están en la lista. Por ejemplo, si es guerrero, entonces quedará give_item2(s.item_reward_x_raza[0]) Y va a tirar error. Por qué? porque las posiciones de las listas empiezan desde 1 y no de 0. Entonces solución: pc.job+1 Ahora sí. Solo pones: pc.give_item2(s.item_reward_x_raza[pc.job+1]) Ese sería mi aporte. Ánimossss!
  13. Corregido! actualicen! go go go! ver post de nuevo!
  14. Poner un else en el if if pc.count_item(50155) == 0 then else %%abrir premios end %%resto de ends
×
×
  • Create New...