Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 03/28/21 in all areas

  1. 1- DESCARGAR NUESTRO EMULADOR Lo primero que necesitaremos es nuestro emulador rAthena ultima revisión y para ello debemos descargar Tortoise SvN aqui: https://tortoisesvn.net/downloads.html Una vez descargamos el Tortoise Svn nos vamos al escritorio y creamos una carpeta con nombre rAthena, a dicha carpeta le damos click derecho y elegimos la opcion SVN Checkout... Se abrirá la ventana de CheckOut y en el URL of repository colocamos https://github.com/rathena/rathena/trunk y en Revision ponemos HEAD Al darle Ok, el programa empezara a descargar el emulador a la carpeta rAthena, si todo salio bien habrás descargado con éxito tu emulador con la ultima revisión del repositorio. 2- CREAR NUESTRO SERVIDOR Una vez descargado el emulador, necesitaremos crear nuestra base de datos SQL en nuestro ordenador, con las credenciales del servidor, para ello vamos a necesitar el programa MySql Nos dirigimos a este link https://dev.mysql.com/downloads/installer/ y elegimos la opción mas pesada de 420 MB. Al momento de instalarlo nos irán saliendo las opciones de configuración, en la de High Availability marcamos la primera opción, Standalone MySQL Server y le damos next En la Opcion Type and Networkimg elegimos Development Computer y NO TOCAMOS ABSOLUTAMENTE MAS NADA DENTRO DE ESTA CONFIGURACION! le damos Next y entraremos en el Methodo de Autenticacion, aqui solamente marcamos Use Legacy y le damos al Next En Account & Roles, para el password de Root pondremos como pasword ragnarok en minúsculas, ragnarok es la que contraseña que viene por defecto en el inter athena conf del emulador. En Windows Service dejamos todo como esta y le damos next En la siguiente ventana, le damos a EXECUTE para que se empiezen a aplicar todas las configuraciones, Cuando todos los ganchos están en verde indica que se instalo bien tu servidor, En este punto, tienes instalado tu servidor local en tu computadora y esta corriendo. 3- DESIGNAR EL NOMBRE CORRECTO DE NUESTRO SERVIDOR ROOT EN LOS COMPONENTES DEL SERVIDOR Ya que tenemos nuestro servidor Root en la computadora, nos vamos a nuestro folder de emulador rAthena, buscamos la carpeta conf, y dentro encontraremos el archivo inter_athena, como este es un archivo de texto le damos a editar, y nos vamos a la parte de Global SQL Settings En la linea 31, en login_server_id reemplazamos ragnarok por root, pues root es el servidor SQL que instalamos en nuestro ordenador, y deberá quedar así: // MySQL Login server login_server_ip: 127.0.0.1 login_server_port: 3306 login_server_id: root login_server_pw: ragnarok login_server_db: ragnarok login_codepage: login_case_sensitive: no En la parte de ipban_db_id también cambiamos el ragnarok y ponemos root, debera quedar asi: ipban_db_ip: 127.0.0.1 ipban_db_port: 3306 ipban_db_id: root ipban_db_pw: ragnarok ipban_db_db: ragnarok ipban_codepage: En el char_server_id reemplazamos ragnarok y ponemos root, debera quedar asi: // MySQL Character server char_server_ip: 127.0.0.1 char_server_port: 3306 char_server_id: root char_server_pw: ragnarok char_server_db: ragnarok El map_server_id también le reeplazamos el ragnarok y le ponemos el nombre root ya que este es el nombre dado por nuestro servidor sql, deberá quedar asi: // MySQL Map Server map_server_ip: 127.0.0.1 map_server_port: 3306 map_server_id: root map_server_pw: ragnarok map_server_db: ragnarok Por ultimo pero no menos importantes los logs, en log_db_id reemplazamos ragnarok por root, debiendo quedar así: // MySQL Log Database log_db_ip: 127.0.0.1 log_db_port: 3306 log_db_id: root log_db_pw: ragnarok log_db_db: ragnarok log_codepage: log_login_db: loginlog CHAR_ATHENA Ya que terminamos de ajustar el inther athena conf, nos vamos al char_athena conf, esta parte es importante porque aquí seteamos el mapa de inicio de nuestros personajes creados. Eliges el mapa de inicio de tus novice para renewal o pre renewal.. Te recomiendo usar una data renewal si vas a usar un punto de partida renewal, NO PUEDES ser renewal sin data renewal pues se te pondra la pantalla negra cuando logees tu char... mas adelante te enseñare como configurar tu emulador para renewal o pre-renewal Dentro de char_athena también desactivamos algo bastante molesto llamado pincode, solo basta encontrar la linea que dice pincode_enabled y ponemos no, deberá quedar así: //=================================== // Pincode system //=================================== // NOTE: Requires client 2011-03-09aragexeRE or newer. // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse. // Default: yes pincode_enabled: no LOGIN_ATHENA Aquí solo necesitamos ajustar una sola cosa! y es el poder Habilitar la creación de nuestro personaje con _M o _F En la linea 54 de este file ponemos yes en la opcion "//Can you use _M/_F to make new accounts o the server? Debera quedar así: // Can you use _M/_F to make new accounts on the server? // Note: This only works if client side password encryption is not enabled. new_account: yes terminamos las configuraciones del emulador por ahora. 4- GESTIONAR NUESTRA BASE DE DATOS Una vez configurado el inter_athena.conf char_athena.conf y login_athena.conf necesitaremos un programa para crear nuestra BASE DE DATOS, yo recomiendo altamente el programa HeidiSQL por su facilidad de uso, este es el primero que use cuando empece a crear servers, y nunca me ha fallado. Link de descarga aqui: https://www.heidisql.com/download.php Una vez tenemos Instalado Heidi!, procedemos a crear la base de datos de nuestro servidor, elegimos Nueva, Aquí Lo importante es mantener el usuario root ya que ese es el nombre de nuestro servidor de datos sql, en contraseña debemos poner ragnarok en minuscula, pues es la clave que elegimos al instalar mysql y son las claves de los componentes que vienen por defecto en el inter_atena.conf. Al nombre de la sesión le puedes poner el que mas te guste, yo lo dejare en unnamed para guiarlos mejor. Cuando la tenemos creada le damos a abrir, hacemos click derecho sobre Unnamed o el nombre de sesion que le hayas dado, eliges crear nuevo, y le das click a base de datos. Es MUY MUY IMPORTANTE que el nombre de la base de datos sea ragnarok pues es el mismo nombre que tienen los componentes del server en el inter_atena.conf que previamente configuramos ok? Una vez creada la base de datos ragnarok la seleccionamos y nos vamos a la pestaña archivo Al abrir la pestaña archivo seleccionamos cargar archivo SQL, y se nos abrirá la ventana de exploración, en la cual elegimos rAthena, luego sql-files y elegimos main y logs con control, una vez seleccionados main y logs le damos a abrir. Una vez abiertas dirígete a la pestaña main, y ejecutala dandole click al triangulo azul, veras como se van cargando las tablas en la base de datos ragnarok Una vez terminada de cargar las main, selecciona la de logs y procede con lo mismo, click al triangulo para ejecutar, la tabla logs es importante ya que esta registra los movimientos de items, objetos comandos, en fin es como una bitacora que ni so se carga el emulador se la pasara enviando warnings. Otros sql-files que podrias cargar dentro de la db ragnarok serian el roulette_default_data por si quieres implementar la ruleta en tu servidor, pero los premios y requisitos de la ruleta se configuran en esa misma tabla y no en scripts. Cuando se ha cargado todo, presiona f5, esto recargara las tablas, en pocas palabras actualizara o refrescara heidi y MAGIA puedes ir a la tabla login, y luego a la pestaña datos, la account_id 1 es del sistema y esa no la puedes ocupar para tu char, alli van a parar los chars que creas en tu server, para ser ADMIN con todos los comandos debes ponerte 99 el el group id. Ya tenemos servidor, y base de datos. 5- COMPATIBILIZAR EL EJECUTABLE Y COMPILAR NUESTRO EMULADOR Antes de Encender nuestro emulador debemos configurarlo y luego compilarlo. El cliente o ejecutable que recomiendo es 2018-06-20eRagexeRE.exe pues es el que considero mas estable, este ejecutable lo puedes descargar en el post de MathReaper Para compatibilizar el exe con el emulador debes ir a tu carpeta rAthena y elegir la carpeta SCR, (ya estamos en territorios de alto riesgo), dentro de la carpeta scr nos vamos a la carpeta config y abrimos packets.hpp Para tener una mejor experiencia editando estos archivos, recomiendo el programa notepad++ lo puedes descargar aqui: https://notepad-plus-plus.org/downloads/ al abrir packets.hpp encontraremos la linea que tiene asignada la versión del exe #ifndef PACKETVER /// Do NOT edit this line! To set your client version, please do this instead: /// In Windows: Add this line in your src\custom\defines_pre.hpp file: #define PACKETVER YYYYMMDD /// In Linux: The same as above or run the following command: ./configure --enable-packetver=YYYYMMDD #define PACKETVER 20200401 #endif en el #define PACKETVER 20200401 debemos cambiar y asignar el exe que les recomendé en este caso el 20180620 el texto deberá quedar así #ifndef PACKETVER /// Do NOT edit this line! To set your client version, please do this instead: /// In Windows: Add this line in your src\custom\defines_pre.hpp file: #define PACKETVER YYYYMMDD /// In Linux: The same as above or run the following command: ./configure --enable-packetver=YYYYMMDD #define PACKETVER 20180620 #endif Para Evitar la Black Screen del Exe al seleccionar tu personaje deberás editar y agregar tu packet version en el siguiente archivo: SCR/CUSTOM/ defines_post.hpp defines_pre.hpp si lo vas a hacer pre renwal editas el defines_pre.hpp si lo vas a hacer renewal entonces edintas el defines_post.hpp // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef CONFIG_CUSTOM_DEFINES_PRE_HPP #define CONFIG_CUSTOM_DEFINES_PRE_HPP /** * rAthena configuration file (http://rathena.org) * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ **/ #define PACKETVER 20180620 #endif /* CONFIG_CUSTOM_DEFINES_PRE_HPP */ RENEWAL O PRE? El emulador viene RENEWAL por defecto, si queremos ser pre renewal tenemos que ir a la carpeta SCR de nuestro rAthena, luego a la carpeta config y abrimos renewal.hpp Una vez abierto lo único que debemos hacer es comentar la parte que dice #define Renewal, comentar no es mas que colocar dos slashes // al inicio del define de renewal! como muestra la imagen para deshabilitar todas las características de renewal solo basta con dejar el texto asi: //#define Renewal COMPILACION Una vez hecho todos estos cambio debemos compilar nuestro emulador! Para compilar el emulador necesitas tener instalado el Visual Studio Community, lo podrás conseguir en este link: https://visualstudio.microsoft.com/es/downloads/ Al momento de instalarlo deberás elegir las herramientas C+ yo recomiendo la universal windows platform development y desktop developtment with C++. el resto nisiquiera la vamos a mirar. Una vez tenemos el Visual Instalado nos vamos a la carpeta de nuestro emulador y abrimos la solución, de nombre rAthena.sln Una vez Abierta la solución!, ASEGURATE DE ELEGIR RELEASE como lo muestro en la IMAGEN y no Debug, luego click derecho en Solución rAthena y click a Compilar Solución, ahora deberás esperar que se compilen todos los proyectos Si tu compilación fue exitosa tendrás correctos todos los resultados Ya puedes abrir tu emulador, para ello ve a la carpeta rAthena y abre individualmente los proyectos loginserv charserv y mapserv Si quieres ahorrarte el trabajo de abrir siempre los 3 componentes del server cada vez que inicies tu emulador, abre solamente runserver, lamentablemente esto viene bugeado, y no se ha corregido, por lo cual tuve que editarlo para que funcionara, si lo quieres, PUEDES DESCARGAR ESTOS CON TODA CONFIANZA Y METERLOS EN TU CARPETA RATHENA, Reemplazando los que vienen por defecto, con esto podras abrir el emulador usando solo runserver. pero necesitaras estos 2 archivos que voy a poner aqui abajo: runserver.bat y serv.bat Si seguiste bien todas las indicaciones, tendrás abierto un emulador optimo y sin ningún error!. 6- CREAR NUESTRO CLIENTE Y DIFFEAR NUESTRO EXE PARA EMPEZAR A JUGAR NUESTRO EMULADOR Antes que nada necesitas el KRO COMPLETO, EL JUEGO RAGNAROK , Lo puedes descargar aquí mismo, Nuestro administrador Akkarin nos compartió el ultimo cliente en este topic: Una ves terminado de descargar y extraer el KRO Limpio, necesitaras crear los archivos de tu propio cliente, Estos archivos del cliente son los GRF y la Data Traducida que tiene Archivos Luas, Descripcion de Objetos, Quests, Entre Otros, y son los que deberás exportar a tu Ragnarok Limpio. Tengo a Disposición un RAR Limpio, con los archivos necesarios y básicos para un cliente, consta de 2 GRF's uno llamado Custom y Otro llamado Pal, tambien tiene un exe pre difeado que puedes usar para ir testeando tu servidor. Si tu servidor va a ser Pre Renewal, con los items, mapas, y descripciones de pre renewal deberas bajar este rar de mi unidad Drive: - https://drive.google.com/file/d/1M8gvEWnumjPwNwzXLrACBYYAqE3ptoRp/view?usp=sharing Si tu servidor va a ser RENEWAL con la descripcion de items, y mapas renewal deberas bajar este rar de mi unidad Drive: https://drive.google.com/file/d/18Pn4Zw0q_-yBTkE9n30JN8hGLGmL6iyo/view?usp=sharing Al descargar y extraerse, lo único que deberás hacer copiarlo todo y pegarlo a la carpeta del ro limpio. TODO LO QUE TE PIDA REEMPLAZAR LO REEMPLAZAS! estos archivos podrás editarlos o preservarlos por si quieres crear un instalador para tu usuarios. Si tienes el emulador encendido, puedes intentar entrar a tu servidor ejecutando el exe pre diffeado que acabas de pegar en tu ragnarok limpio, el de nombre 2018-06-20eRagexeRE_patched que te incluí en el RAR, Si te sale THE EXE HAS CHANGED al principio, cierra y vuelve a abrir, esto pasa una sola vez y te indica que el ejecutable que se usa es el de tu servidor y no el de Kro, Cuando abras podrás crear tu personaje, lo que indica que estas en el servicio correcto. Si quieres diffear tu propio ejecutable deberás descargar nemo Patcher en este Link: https://gitlab.com/4144/Nemo/ En imput exe file subes el ejecutable que hayas descargado, recuerda que debe ser la misma versión que definiste en tu emulador, en output es donde se va a generar el ejecutable diffeado, pones Load Client y se cargaran todos los parches posibles para el exe. Algunos diff Recomendados y Otros necesarios para que el cliente arranque sin problemas son: @ Bug Fix (Recommended) Allow close cutin by pressing esc key Allow space in guild name Always Load Client Plugins [Experimental] Always Show Resurrection Button Always Use Email for Char Deletion Always load Korea ExternalSettings lua file Cancel to Login Window (Recommended) Change RecommendedQuestInfoList*.lub path aqui escribes system\OngoingQuestInfoList Change character display deletion time from actual date to relative date Change minimal screen resolution limit Change new char name field height AQUI PONES 17 esto muestra el nombre correctamente al momento de crear tu personaje Chat Flood Remove Limit Custom Window Title aqio pones el nombre que le quieres dar a tu ventana de ragnarok Disable 1rag1 type parameters (Recommended) Disable Help Message on Login (Recommended) Disable Swear Filter Disconnect to Login Window Enable /who command (Recommended) Enable DNS Support (Recommended) Enable Effect for all Maps [Experimental] Enable Emblem hover for BG Enable Monster Tables Enable Multiple GRFs (Recommended) solo el recommended Enable Shortcut All Item Enable Title Bar Menu botones en tu ventana de ragnarok Enable guild while in clan si quieres guild mientras estas en clan, deberas modificar el script de clans en rathena para pasar este filtro Enforce Official Login Background Extend Chat Box Extend Chat Room Box Extend Npc Dialog Box Extend PM Box Fix Camera Angles (Recommended) Fix Homunculus attack AI Fix achievement counters for each type of achievement Por si habilitaras achievements Fix act delay for act files with many frames Fix item description bug Hide build info in client (Recommended) Hide packets from peek (Recommended) Hide zero date (1969-01-01) in guild members window Ignore /account: command line argument Ignore Lua Errors --- esto lo puedes desactivar cuando tengas tu cliente terminado Ignore Missing Palette Error --- esto lo puedes desactivar cuando tengas tu cliente terminado Ignore Resource Errors --- esto lo puedes desactivar cuando tengas tu cliente terminado Increase Headgear ViewID Ponle 4000, asumiento que meteras hat custom, ragnarok ya supero las 2000 IDS Increase Zoom Out 75% o max como quieras Increase hair style limit for human only in game (old) Load Custom lua file instead of iteminfo*.lub (Recommended) aqui debes poner System/iteminfo.lua Only First Login Background Read msgstringtable.txt (Recommended) Remove Gravity Ads (Recommended) Remove Gravity Logo (Recommended) Remove Hourly Announce (Recommended) Remove Serial Display (Recommended) Remove wrong chars from cash shop Restore Cash Shop Icon Restore Login Window (Recommended) Show Register Button boton de redireccion al enlace de registro de chars que hayas puesto en tu sclientinfo Show Replay Button aqui se reproduciran las partidas que grabes en tu ragnarok Skip License Screen Skip some hidden menu icon buttons si desactivaste botones este parche hara que se acomoden los espacios vacios entre botones ocultos Translate Client (Recommended) Use Ascii on All LangTypes (Recommended) Use Default Web Browser In Cashshop Use Default Web Browser for URL Use Normal Guild Brackets (Recommended) Use Official Cloth Palettes Necesario para que se muestren las paletas de colores Use Plain Text Descriptions (Recommended) Use Ragnarok Icon Use Tilde for Matk Los Diff que de ningún modo debes activar: Always Call SelectKoreaClientInfo() (Recommended) Aunque Diga recomended NO LO HABILITES Change Walk To Delay Incomodo, acelera la resuesta de clicks hara que camines hacia un npc aun despues de abrir su dialogo HKLM To HKCU NO LO HABILITES Skip Service Selection Screen NO LO HABILITES si rompes el protocolo de seleccion de servicio no podras abrir el select char window EDICIÓN DE GRF Y SCLIENTINFO El programa para editar tu grf sera GRF EDITOR de Tokei, este programa es el equivalente a un arma forjada por el mismo Hefesto, así recuerda darle un upvote si llegas a descargarlo Con este programa abres tu Custom.grf y podrás visualizar los archivos del GRF de tu servidor, recuerda que siempre que vayas a aplicar un cambio, deberás tener el exe del ragnarok cerrado. En la carpeta data de tu Custom.grf se encuentra el sclientinfo.xml, en el campo Display editas El nombre del servidor que se mostrara cuando abras tu ejecutable, podrás asignar o remover las ropas de game master, tambien podrás cambiar el link del web de registro al que te dirige el boton register. Si vas a subir tu emulador a un host deberas editar el sclientinfo y poner la ip en donde esta montado tu servidor. El orden de lectura de los GRF se asigna en un archivo llamado Data.ini y el orden debera ir asi: [Data] 1=custom.grf 2=palette.grf 3=rdata.grf 4=data.grf Como ha notado, el grf de palettes está aislado, si bien no es muy pesado, esta lleno de miles de archivos pals, si llegaras a descargar las paletas de kamishi te recomiendo usar un grf exclusivo de paletas y no mezclarlo con tu custom pues estanos hablado de mas de 40mil archivos que tomaran bastante tiempo en empaquetarse. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- Montar el Servidor a un Host Hasta Este Punto de la guía! ya tienes tu Servidor Local, Tu Emulador Funcional sin errores, Tu cliente con Exe y GRF custom. Para Montar tu emulador a un host recomiendo el programa WinSCP https://winscp.net/eng/download.php Abres Winscp y colocas las credenciales que te entrego tu proveedor de servicios Host Pasas el Emulador a la carpeta raiz de tu host Cambias los datos de tu char_athena.conf en este file editas el // Login Server IP y el // Character Server IP pones la ip del host. Edita tambien el // Server Communication username and password. Porque el default S1 Y P1 todos lo conocen, este debe coinicidir con la de tu main sql. En login_athena.conf no se editan ips. pero puedes volver a habilitar o deshabilitar la creacion de chars usando _M o _F, esto por si quieres que los registros sean únicamente por Control Panel // Can you use _M/_F to make new accounts on the server? // Note: This only works if client side password encryption is not enabled. new_account: no En map_athena.conf Colocas el mismo server comunication username y password que tienes en tu sql y en tu char_athena.conf, el default es S1 y P1 pero tu elige uno que nadie conozca. // Interserver communication passwords, set in account.txt (or equiv.) userid: passwd: En inter_athena.conf Aqui no se editan ips ni puertos, aquí solamente se se colocan las credenciales de las _db: y _pw: correspondientes a las que tienes creadas en la base de datos de tu proveedor de servicios. // MySQL Login server login_server_ip: 127.0.0.1 login_server_port: 3306 login_server_id: root login_server_pw: login_server_db: login_codepage: login_case_sensitive: no ipban_db_ip: 127.0.0.1 ipban_db_port: 3306 ipban_db_id: root ipban_db_pw: ipban_db_db: ipban_codepage: // MySQL Character server char_server_ip: 127.0.0.1 char_server_port: 3306 char_server_id: root char_server_pw: char_server_db: // MySQL Map Server map_server_ip: 127.0.0.1 map_server_port: 3306 map_server_id: root map_server_pw: map_server_db: // MySQL Log Database log_db_ip: 127.0.0.1 log_db_port: 3306 log_db_id: root log_db_pw: log_db_db: log_codepage: log_login_db: loginlog Abrir y Compilar tu emulador remotamente Para abrir tu emulador cargado al host, necesitaras un programa llamado Putty que puedes descargar aqui https://www.putty.org/ Al abrirlo en el campo Host Name or IP adress colocas la Ip de tu host y le das OPEN Ya estas dentro de tu vps, y el te va a solicitar el user y el password que te proporciono el Host, debes tener cuidado al colocar el password porque no se van a mostrar los typing en la consola. Al entrar exitosamente tendras un display de los comandos preparados por su proveedor, generalmente son ON, OFF, PREPARAR, COMPILAR etc. Con los que puedes arrancar, detener, reiniciar o compilar el emulador que tienes cargado en el host. Deberas compilar y iniciar el emulador después de haber editado los confs con los datos del host. Aqui vemos el trabajo de compilación mediante vps Aqui vemos como ha iniciado el servidor, debe estar lleno de status y no errores Aqui un logeo exitoso Recuerda editar tu sclientinfo y ponerle la ip de tu provedor de host.
    1 point
  2. Hello and welcome to the continued English translation project, started by @zackdreaver. Many may know already that zackdreaver stopped with his project and that I continued with it since then. See here. First of all thanks to zackdreaver for his time and passion, which he contributed so far with his project. But since there was no one else who had a project like his or someone who took his/her time to do all this work, I thought I could take over and learned the way to do it. The result can be found at this link: https://github.com/llchrisll/ROenglishRE I made a lot of progress so far regarding translations, skill rebalances and 2020 client support. Lately I also added the required files for pre-renewal, which still follows the same format as zackdreaver's ROEnglishPRE repo, by overwriting the renewal project files with the pre-renewal files. I also have an discord server setup for faster support, issue reporting and more. Link can be found at the repo above. The difference between these two projects is also how it is installed, but to make things easier I setup a wiki: https://github.com/llchrisll/ROenglishRE/wiki The actual guide can be found here: https://github.com/llchrisll/ROenglishRE/wiki/Project-Guide If you experience any trouble using this project, please use the discord server because I rarely visit the rAthena forum. Best regards, llchrisll aka Houndeye
    1 point
  3. Ah yeah, I've seen many requests about this. Generating RSM files from other formats (including RSM2) was not in my priority list but I'll see if I can do something about this. Well, RSM2 files are not handled yet! Comparing file formats is always a matter of pros and cons. The OBJ format lacks some features and is less compact than glTF 2.0, that's for sure. About FBX vs glTF 2.0 though, the main advantage is about development and maintenance I'd say. Since glTF is an open-source format, it's easy to find implementations, re-use them and also maintain a working converter in the future. Another advantage of glTF is its portability (to the web notably). FBX might be better for general purpose model editing at the moment though. Yeah I understand standalone executables are easier to use. I'll see if pyinstaller can do the trick.
    1 point
  4. prontera,155,173,5 script Give 94,{ if(getd("$Quest_"+get_unique_id())){ message strcharinfo(0),"Quest already done for this mac."; end; } if(countitem(512) >= 10 && countitem(513) >= 10){ delitem 512,10; delitem 513,10; getitem 501,1; setd "$Quest_"+get_unique_id(),getcharid(0); } else message strcharinfo(0),"Not enough items."; end; }
    1 point
  5. ... same person ... ok I answer this one, my main forum is hercules so I wont be around forever the trick is ... add return; to all the functions containing title MAIL, this will effectively block all the codes of mail to run src/map/clif.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index da270e2ff..13658d283 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -15342,6 +15342,7 @@ void clif_parse_Check(int fd, struct map_session_data *sd) /// 1 = over weight /// 2 = fatal error void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount, uint8 flag ){ + return; int fd = sd->fd; #if PACKETVER < 20150513 @@ -15397,6 +15398,7 @@ void clif_Mail_setattachment( struct map_session_data* sd, int index, int amount /// 09f2 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ZENY_FROM_MAIL) /// 09f4 <mail id>.Q <mail tab>.B <result>.B (ZC_ACK_ITEM_FROM_MAIL) void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *msg, uint8 result, enum mail_attachment_type type) { + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15433,6 +15435,7 @@ void clif_mail_getattachment(struct map_session_data* sd, struct mail_message *m /// 1 = recipinent does not exist /// 09ed <result>.B (ZC_ACK_WRITE_MAIL) void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15457,6 +15460,7 @@ void clif_Mail_send(struct map_session_data* sd, enum mail_send_result result){ /// 1 = failure // 09f6 <mail tab>.B <mail id>.Q (ZC_ACK_DELETE_MAIL) void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bool success ){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15486,6 +15490,7 @@ void clif_mail_delete( struct map_session_data* sd, struct mail_message *msg, bo /// 1 = failure void clif_Mail_return(int fd, int mail_id, short fail) { + return; WFIFOHEAD(fd,packet_len(0x274)); WFIFOW(fd,0) = 0x274; WFIFOL(fd,2) = mail_id; @@ -15497,6 +15502,7 @@ void clif_Mail_return(int fd, int mail_id, short fail) /// 024a <mail id>.L <title>.40B <sender>.24B (ZC_MAIL_RECEIVE) /// 09e7 <result>.B (ZC_NOTIFY_UNREADMAIL) void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, const char *title){ + return; #if PACKETVER < 20150513 int fd = sd->fd; @@ -15522,6 +15528,7 @@ void clif_Mail_new(struct map_session_data* sd, int mail_id, const char *sender, /// 1 = close void clif_Mail_window(int fd, int flag) { + return; WFIFOHEAD(fd,packet_len(0x260)); WFIFOW(fd,0) = 0x260; WFIFOL(fd,2) = flag; @@ -15540,6 +15547,7 @@ void clif_Mail_window(int fd, int flag) /// 0ac2 <packet len>.W <unknown>.B (ZC_ACK_MAIL_LIST3) /// { <type>.B <mail id>.Q <read>.B <type>.B <sender>.24B <expires>.L <title length>.W <title>.?B }* void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type type,int64 mailID){ + return; #if PACKETVER < 20150513 int fd = sd->fd; struct mail_data *md = &sd->mail.inbox; @@ -15733,6 +15741,7 @@ void clif_Mail_refreshinbox(struct map_session_data *sd,enum mail_inbox_type typ /// 0ac0 <mail id>.Q <unknown>.16B (CZ_OPEN_MAILBOX2) /// 0ac1 <mail id>.Q <unknown>.16B (CZ_REQ_REFRESH_MAIL_LIST2) void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct mail_data* md = &sd->mail.inbox; @@ -15796,6 +15805,7 @@ void clif_parse_Mail_refreshinbox(int fd, struct map_session_data *sd){ /// { }*n // TODO: Packet description => for repeated block void clif_Mail_read( struct map_session_data *sd, int mail_id ){ + return; int i, fd = sd->fd; ARR_FIND(0, MAIL_MAX_INBOX, i, sd->mail.inbox.msg[i].id == mail_id); @@ -15911,6 +15921,7 @@ void clif_Mail_read( struct map_session_data *sd, int mail_id ){ /// 0241 <mail id>.L (CZ_MAIL_OPEN) /// 09ea <mail tab>.B <mail id>.Q (CZ_REQ_READ_MAIL) void clif_parse_Mail_read(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -15929,6 +15940,7 @@ void clif_parse_Mail_read(int fd, struct map_session_data *sd){ /// Allow a player to begin writing a mail /// 0a12 <receiver>.24B <success>.B (ZC_ACK_OPEN_WRITE_MAIL) void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, bool success ){ + return; PACKET_ZC_ACK_OPEN_WRITE_MAIL p = { 0 }; p.PacketType = rodexopenwrite; @@ -15940,6 +15952,7 @@ void clif_send_Mail_beginwrite_ack( struct map_session_data *sd, char* name, boo /// Request to start writing a mail /// 0a08 <receiver>.24B (CZ_REQ_OPEN_WRITE_MAIL) void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ + return; char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15958,6 +15971,7 @@ void clif_parse_Mail_beginwrite( int fd, struct map_session_data *sd ){ /// Notification that the client cancelled writing a mail /// 0a03 (CZ_REQ_CANCEL_WRITE_MAIL) void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ + return; sd->state.mail_writing = false; } @@ -15965,6 +15979,7 @@ void clif_parse_Mail_cancelwrite( int fd, struct map_session_data *sd ){ /// 0a14 <char id>.L <class>.W <base level>.W (ZC_CHECK_RECEIVE_CHARACTER_NAME) /// 0a51 <char id>.L <class>.W <base level>.W <name>.24B (ZC_CHECK_RECEIVE_CHARACTER_NAME2) void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short class_, uint32 level, const char* name ){ + return; PACKET_ZC_CHECKNAME p = { 0 }; p.PacketType = rodexcheckplayer; @@ -15980,6 +15995,7 @@ void clif_Mail_Receiver_Ack( struct map_session_data* sd, uint32 char_id, short /// Request information about the recipient /// 0a13 <name>.24B (CZ_CHECK_RECEIVE_CHARACTER_NAME) void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { + return; static char name[NAME_LENGTH]; safestrncpy(name, RFIFOCP(fd, 2), NAME_LENGTH); @@ -15992,6 +16008,7 @@ void clif_parse_Mail_Receiver_Check(int fd, struct map_session_data *sd) { /// 09f1 <mail id>.Q <mail tab>.B (CZ_REQ_ZENY_FROM_MAIL) /// 09f3 <mail id>.Q <mail tab>.B (CZ_REQ_ITEM_FROM_MAIL) void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ + return; int i; struct mail_message* msg; #if PACKETVER < 20150513 @@ -16090,6 +16107,7 @@ void clif_parse_Mail_getattach( int fd, struct map_session_data *sd ){ /// 0243 <mail id>.L (CZ_MAIL_DELETE) /// 09f5 <mail tab>.B <mail id>.Q (CZ_REQ_DELETE_MAIL) void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); #else @@ -16134,6 +16152,7 @@ void clif_parse_Mail_delete(int fd, struct map_session_data *sd){ /// Request to return a mail (CZ_REQ_MAIL_RETURN). /// 0273 <mail id>.L <receive name>.24B void clif_parse_Mail_return(int fd, struct map_session_data *sd){ + return; int mail_id = RFIFOL(fd,packet_db[RFIFOW(fd,0)].pos[0]); //char *rec_name = RFIFOP(fd,packet_db[RFIFOW(fd,0)].pos[1]); int i; @@ -16155,6 +16174,7 @@ void clif_parse_Mail_return(int fd, struct map_session_data *sd){ /// 0247 <index>.W <amount>.L (CZ_MAIL_ADD_ITEM) /// 0a04 <index>.W <amount>.W (CZ_REQ_ADD_ITEM_TO_MAIL) void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ + return; struct s_packet_db* info = &packet_db[RFIFOW(fd,0)]; uint16 idx = RFIFOW(fd,info->pos[0]); #if PACKETVER < 20150513 @@ -16184,6 +16204,7 @@ void clif_parse_Mail_setattach(int fd, struct map_session_data *sd){ /// Remove an item from a mail /// 0a07 <result>.B <index>.W <amount>.W <weight>.W void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, int amount ){ + return; PACKET_ZC_ACK_REMOVE_ITEM_MAIL p = { 0 }; p.PacketType = rodexremoveitem; @@ -16213,6 +16234,7 @@ void clif_mail_removeitem( struct map_session_data* sd, bool success, int index, /// 0a06 <index>.W <amount>.W (CZ_REQ_REMOVE_ITEM_MAIL) void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) { + return; #if PACKETVER < 20150513 int type = RFIFOW(fd,packet_db[RFIFOW(fd,0)].pos[0]); @@ -16233,6 +16255,7 @@ void clif_parse_Mail_winopen(int fd, struct map_session_data *sd) /// 09ec <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL) /// 0a6e <packet len>.W <recipient>.24B <sender>.24B <zeny>.Q <title length>.W <body length>.W <char id>.L <title>.?B <body>.?B (CZ_REQ_WRITE_MAIL2) void clif_parse_Mail_send(int fd, struct map_session_data *sd){ + return; #if PACKETVER < 20150513 struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
    1 point
×
×
  • Create New...