Jump to content

NazoX

Miembro
  • Contador contenido

    823
  • Ingreso

  • Última visita

  • Días ganados

    20

Mensajes publicados por NazoX

  1. Bueno, como dije que lo probaría aquí vengo a comentar algunas cosillas.

     

    1-Hay que hacerle unos pequeños cambios porque hay funciones que puedes que no tengas, (solo adaptarlo a tu código).

    2-Hay que tener cuidado porque (por lo menos en mi caso ya lo descartaré porque creo que es un problema mío pero lo comento igual x las moscas), parece que por algún motivo aumenta la memoria y esto puede generarte algún que otro error (este error probablemente mío, se soluciona aumentando la ram usada y listo).

    3-me he dado cuenta que es lo mismo que 

     por tanto, necesitas el sistema de Budokan completo con su mapa para hacerlo funcionar, incluyendo crear la parte del cliente, resumido, funciona, pero sistema incompleto. 

  2. No porque mucha gente me toco los cojones e iba de lista, así que decidí borrarlo, y me da coñazo hacerlo, aun así el uitooltip, es el que menos problemas debería darte, pues el problema es la parte de localeinfo que usa la línea para ejecutar las líneas, publica mejor una foto con tu problema. 

  3. Tenéis que saber si estáis usando el locale_string normal de toda la vida, o está usando alguna versión de BlackDragon61  (Mali), Oswap, Zenu, u otro de los que han creado varios tipos de versiones de locale_string.

    Algunos usan solo números, por ejemplo 1 2 3 y 4 en el juego lee otra línea y ejecuta el número , 1-Hola 2-Metin2 3-Nazox 4- has recibido experiencia.

    otros métodos usan una simple línea como la de la foto, y tiene otro archivo las cuales las traduce automáticamente. El problema de usar files públicos para ahorraros trabajo, es que tenéis problemas de este tipo, porque son cosas mezcladas y mal echas, averigua que versión usa de locale_String o si simplemente es un error, puedes meter cualquier otro locale_string y debería solucionarse, en caso de que no use ningún sistema de los anteriores mencionados. Si no funciona, tenéis que buscar pues el que este usando y completar la guía o ver que falta.

    Y a muy malas, pues dentro del juego veréis los textos en coreano, y vais haciéndolo a mano línea por línea.

  4. En 26/7/2021 a las 6:10, 【ℛ-𝓝】ℛ𝔂𝓼𝒆 dijo:

    Gracias

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.
     supuse que era por algún end, ahora solo me falta la funcion de STATE COMPLETE que la saco de algunos files que tenga por ahí e.e

    Debes iniciar sesión para ver el contenido del archivo adjunto en esta publicación.

    Te falta la función pc.set_skill_level no state complete... 

  5. hace 8 horas, ALEXANDER2020 dijo:

    Si tienes razon el problema los que evisto tienen lo mismo pero haré mi mejor esfuerzo 😊

    Se llaman así porque son portales y no debes modificarlo para evitar problema, y los que no sean npcs, ponle los nombres que te de a ti la gana, xD, no entiendo porque te molesta, si. 98% de esos no los vas a usar o son portales los cuales no salen los nombres ingame. 

  6. hace 6 horas, Kenshi Torres dijo:

    Yo me referia las servefiles tiene unas quest de bienvenida que abre y te dice bienvenido te aparecen unas letras rojas y coji esa quest agrege alas de martysama y no aparecio los graficos rojos que suele aparecer

    Eso es porque no tienes el scripts de colores, en las funciones para poder usar las letras de colores, sacalas de akron y ponlas en tu base y podrás usar letras de colores. 

  7. Enserio estoy leyendo quest de inicio gráficos, y que no borra en martysama?, 

    No es mejor decir, no tengo ni puta idea de usar un script y hacer funcionar una quest básica, me ayudáis?. 

    1-ese error seguramente es porque al modificarla se ha roto la cadena con la que está formada, la solución es instalar la original o probar otra y tener más cuidado al traducir. 

    2-El script de borrado te lo recomiendo, funciona muy bien en todos los servefiles no hagas caso a que no funciona en marty. 

    3-no es un sistema, es una quest y no tiene nada que ver con gráficas o ese fallo, por dios si es que al final me van a banear. 

  8. hace 27 minutos, adrielitosuperwai dijo:

    Buenas, te agradezco la respuesta, pero no. No parece que me de ningún tipo de error. Eso es lo que me resulta extraño, que no hay indicios de que haya algún problema, tan solo no me abre la ventana de los eventos. 😕 Estoy utilizando el cliente del metin2pandora, no se si tiene algo que ver pero lo digo por si acaso.

    Revisa que hayas compilado todo correctamente, y que hayas agregado todo bien, también mira si tienes alguna función en game.py como "F4" o algo así con  la función del calendario.

  9. hace 4 horas, TheKing24 dijo:

    pues, que si ese sistema se puede abrir a través del npc del almacén?? con la quest 

    No tiene nada q ver el almacén con este otro, es un almacén especial, con esa quest solo abres el almacén normal, si quisieras que se abriese este tendrías q hacer una función y añadirla en el cliente sobre ese sistema y listo. 

  10. Como algunos tienen problema con la versión publicada, pondré aquí en que parte va cada línea, ya que en el otro solo te pone "añade" y listo.

    Requisitos:

    -Ultima versión de Great Offline Shop

    -Comprobar que te funcionase la Offline shop, pues hay veces que directamente ni se prueba y de por si no funciona

    -Si no te  funciona con esta guía es porque no es la misma versión o necesitas adaptarla de otra forma.

     

    1- Vamos al source game en nuestro servidor, y abrimos el archivo input.h y buscamos:

    Quote

        protected:
            CPacketInfoGG     m_packetInfoGG;
    };

    ahora, antes de eso añadimos:

    Quote

            void        SendOfflineShopMessage(LPDESC d, const char * c_pData);

    tendría que quedarte algo así:

    70820f72b489ec99dc4a20d13a6c98a2.png

    2-Ahora nos vamos al archivo input2_p2p.cpp y a los includes añadimos:

    Quote

    #include "buffer_manager.h"

    2,1-Ahora buscamos:

    Quote

    int CInputP2P::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)
    {
        if (test_server)
            sys_log(0, "CInputP2P::Anlayze[Header %d]", bHeader);

        int iExtraLen = 0;

        switch (bHeader)
        {
            case HEADER_GG_SETUP:
                Setup(d, c_pData);
                break;

    Antes de esta función añadimos:

    Quote

    void CInputP2P::SendOfflineShopMessage(LPDESC d, const char * c_pData)
    {
        TPacketGGOfflineShopMessage * p = (TPacketGGOfflineShopMessage *)c_pData;
        LPCHARACTER ch = CHARACTER_MANAGER::instance().FindByPID(p->dwTargetPID);

        if (ch)
        {
            LPDESC pkVictimDesc = ch->GetDesc();

            if (pkVictimDesc)
            {
                char msg[CHAT_MAX_LEN + 1];
                snprintf(msg, sizeof(msg), LC_TEXT("Your item %s sold, buyer is: %s."), p->szItemName, p->szName);

                TPacketGCWhisper pack;

                int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);

                pack.bHeader = HEADER_GC_WHISPER;
                pack.wSize = sizeof(TPacketGCWhisper)+len;
                pack.bType = WHISPER_TYPE_SYSTEM;
                strlcpy(pack.szNameFrom, "[Offline Shop]", sizeof(pack.szNameFrom));

                TEMP_BUFFER buf;

                buf.write(&pack, sizeof(TPacketGCWhisper));
                buf.write(msg, len);
                pkVictimDesc->Packet(buf.read_peek(), buf.size());
            }
        }
    }

    y así se tendría que ver:

    014e7943bb8502f05c8c0a0cc2234df1.png

    Ahora volvemos a buscar:

    Quote

    int CInputP2P::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)

    y al final del todo antes de :

    Quote

    return (iExtraLen);

    añadimos:

    Quote

            case HEADER_GG_OFFLINE_SHOP_SEND_MESSAGE:
                SendOfflineShopMessage(d, c_pData);
                break;    

    tiene que quedar así:

    68a5917c55ba430ee44af07fc795ed9c.png

    3-Ahora abrimos nuestro packet.h y buscamos lo siguiente:

    Quote

    HEADER_GG_CHECK_AWAKENESS

    y debajo añadimos:

    Quote

    HEADER_GG_OFFLINE_SHOP_SEND_MESSAGE    = 53,

    *nota* Es recomendable verificar que no se está utilizando el packet 53 para evitar problemas de paquetes,

    fd9295b8c564faa9d6fdd50c05cbaa54.png

    Ahora vamos al final del todo, y antes de :

    Quote

    #pragma pack()
    #endif

    agregamos:

    Quote

    typedef struct SPacketGGOfflineShopMessage
    {
        BYTE    bHeader;
        DWORD    dwTargetPID;
        char    szName[CHARACTER_NAME_MAX_LEN + 1];
        char    szItemName[ITEM_NAME_MAX_LEN + 1];
    } TPacketGGOfflineShopMessage;

    0e62e1b77bdd9c72519c1676d72b61e6.png

    5-Nos dirigimos a packet_info.cpp y buscamos:

    Quote

    Set(HEADER_GG_CHECK_AWAKENESS,        sizeof(TPacketGGCheckAwakeness),    "CheckAwakeness",        false);

    y debajo añadimos:

    Quote

    Set(HEADER_GG_OFFLINE_SHOP_SEND_MESSAGE, sizeof(TPacketGGOfflineShopMessage), "OfflineShopUpdateMessage", false);

    c9cd1ce37c15e84a41ba02c4782cc760.png

    6.Ahora abrimos shop.cpp y añadimos en los includes:

    Quote

    #include "p2p.h"

    6-Ahora buscamos:

    Quote

    #ifdef FULL_YANG
                snprintf(buf, sizeof(buf), "%s %u(%s) %lld %u", pkNewItem->GetName(), mpid, m_pkPC->GetName(), dwPrice, pkNewItem->GetCount());
                LogManager::instance().ItemLog(ch, pkNewItem, szBuy.c_str(), buf);
                snprintf(buf, sizeof(buf), "%s %u(%s) %lld %u", pkNewItem->GetName(), ch->GetPlayerID(), ch->GetName(), dwPrice, pkNewItem->GetCount());
                LogManager::instance().ItemLog(m_pkPC, pkNewItem, szSell.c_str(), buf);
    #else
                snprintf(buf, sizeof(buf), "%s %u(%s) %u %u", pkNewItem->GetName(), mpid, m_pkPC->GetName(), dwPrice, pkNewItem->GetCount());
                LogManager::instance().ItemLog(ch, pkNewItem, szBuy.c_str(), buf);
                snprintf(buf, sizeof(buf), "%s %u(%s) %u %u", pkNewItem->GetName(), ch->GetPlayerID(), ch->GetName(), dwPrice, pkNewItem->GetCount());
                LogManager::instance().ItemLog(m_pkPC, pkNewItem, szSell.c_str(), buf);
    #endif

    *Nota* si no lo encuentras, o tienes varios (solo deberías tener este), se añade en la función:

    Quote

    #ifdef OFFLINE_SHOP
    #include "char.h"
    int CShop::Buy(LPCHARACTER ch, BYTE pos)

    bien, debajo del ifdef FULL_YANG añadimos:

    Quote

                LPCHARACTER BuyPMCh = CHARACTER_MANAGER::instance().FindByPID(m_pkPC->GetPrivShopOwner());
                if (BuyPMCh)
                {
                    char msg[CHAT_MAX_LEN + 1];
                    snprintf(msg, sizeof(msg), LC_TEXT("Your item %s x%u sold, buyer is: %s."), pkNewItem->GetName(), pkNewItem->GetCount(), ch->GetName());
                    LPDESC pkVictimDesc = BuyPMCh->GetDesc();
                    if (pkVictimDesc)
                    {
                        TPacketGCWhisper pack;
                        int len = MIN(CHAT_MAX_LEN, strlen(msg) + 1);
                        pack.bHeader = HEADER_GC_WHISPER;
                        pack.wSize = sizeof(TPacketGCWhisper)+len;
                        pack.bType = WHISPER_TYPE_SYSTEM;
                        strlcpy(pack.szNameFrom, "[Offline Shop]", sizeof(pack.szNameFrom));
                        TEMP_BUFFER buf;
                        buf.write(&pack, sizeof(TPacketGCWhisper));
                        buf.write(msg, len);
                        pkVictimDesc->Packet(buf.read_peek(), buf.size());
                    }
                }
                else
                {
                    TPacketGGOfflineShopMessage p;
                    p.bHeader = HEADER_GG_OFFLINE_SHOP_SEND_MESSAGE;
                    p.dwTargetPID = m_pkPC->GetPlayerID();
                    strlcpy(p.szItemName, pkNewItem->GetName(), sizeof(p.szItemName));
                    strlcpy(p.szName, ch->GetName(), sizeof(p.szName));
                    P2P_MANAGER::instance().Send(&p, sizeof(TPacketGGOfflineShopMessage));
                }

     

    159463598c4027a742f402516e7c352d.png

    y este será el resultado:

    Debes iniciar sesión para ver el contenido del enlace en esta publicación.

     

  11. Bueno, hace poco, prácticamente horas, he recuperado una cuenta de youtube de hace 10 años  o así, en el cual tenía uno de tantos videos que hacía para ayudar a la gente en aquella época.

    Lastimosamente, solo tengo uno, que es el de como Poner NPC verde y tal (guía que sirve actualmente a pesar de los años que hace), intentaré recuperar todos los demás que tenía en otras cuentas, en fin, al ver el video y recuperar la cuenta me ha dado un golpe de nostalgia y bueno, seamos sinceros, la comunidad hispana es una mierda, y todos vuestros servers son una mierda, porque solo os molestáis en coger basura y abrirlo sin modificar ni la tienda general. (Que se lo tome a pecho quien quiera, yo hablo en general), y por otro lado, siento que al menos así, a los 3 o 4 tías o tíos que hayan  y tengan ganas de aprender de verdad, pues tendrán una pequeña ayuda a través de mis videos, sin la necesidad de buscar nada, o lo mínimo. Soy el primero que quiere que la comunidad hispana al menos deje algo decente y no cualquier porquería, así que bueno, el formato del video seguirá el toque antiguo, "bloc de notas, paso por paso, ver como paraba el video, etc", es un toque que me gusta y no quiero perder, por lo demás, como digo en el video nada más empezar, si no sabéis hacer lo del video, apagar el ordenador, posición fetal y a llorar, porque entonces eres con perdón, inutil, ya que hasta mi abuela y mi prima de 1 año haría un servidor mejor que el 90 % de lo que hay público, y por desgracia no es coña, ahorraos lo de, todos hemos sido novatos noseque blablabla, prefiero ahorrarme mi historia, pero resumido, me ha tocado buscarme la vida, mientras yo en ciertas épocas aportaba mis conocimientos y nadie me brindaba su ayuda, y si con las 100k de guías ni con un vídeo podéis encender el server tela xD, en fin que me en rollo, obviar el video de la NPC tendría 11-13 años así que entender las faltas de ortografía y tal, y en fin, al que le guste bien y al que no, ya sabe donde está la puerta, saludos a todos, 

    El primer video trata sobre crear tu propio vdi + crear servidor basado en Marty v4 y los futuros videos serán con esta base virgen para que aprendáis, dejo link, saludos a todos 

    #Si encontráis algún error notificarlo.

  12. C#, C++,  python, lua, quest, MysQL, FreeBSD, necesitas saber todo , pero más C++ , python, lua y quest, estaría bien que supieras de FreeBSD para crear tu propio VDI con tu propia versión de FreeBSD, y así ejecutarlo en 32 o 64 bits con sus libs correspondiente, también saber que versión de C++ / gcc usa tus files, junto su versión de mysql, etc, para el caso que quieras hacer ciertas cosas, actualizar a una versión más actual de c++ por ejemplo c++11, c++14, c++17, c++2A (creo que se llama idk), y todo esas movidas, 🙂

  13. hace 1 hora, Borja Dorta dijo:

    buenas,perdon por abir temas viejos eh descargado y configurado todo como en el video y no me da error ni nada pero al enceder el server  no abre ningun ch como podria cambiar la ip el root es .akr y .on2 no me deja abrirlo con eternexus para configurar la ip y no encuentro el archivo serverinfo.py

    gracias de antemano 🙂

    Trae un archivo config que se mete en la carpeta de eternexus y te dejará extraerlo.

  14. hace 2 minutos, Kenshi Torres dijo:

    Vale gracias oye será que puedo reemplazar esos archivos con los de zentarís2 de todas formas esos zentaris es akron2

    El problema que esos archivos van más cosas, como otros sistemas, o botones de inventarios, u otras cosas, si no has implementado nada nuevo en ninguno de los 2, si puedes,

    si tienes algo diferente, te tocará adaptarlo , sacarlo del otro y meterlo!

×
×
  • Crear nuevo...