Sviluppi & Guide

« Older   Newer »
 
  Share  
.
  1.     Like  
     
    .
    Avatar

    Il creatore di debbo

    Group
    Boss
    Posts
    2,482
    Vota
    0
    Location
    Sardegna

    Status
    Offline
    Miniguida Per Loggare


    Ecco a voi una miniguida per usare correttamente questi nuovi files.
    Per prima cosa, come ogni game e db normale, bisogna mettere il file game in share e il file db il db.
    Dopo prendere i files item_names.txt, item_proto.txt, mob_names.txt e mob_proto.txt e metterli nella cartella db.
    Fatto ciò prendere la cartella package e metterla in ogni core (db, auth, game99, ecc.)

    Il problema persistente e che bisogna trovare una dif adatta per bypassare il metodo di mettere quei .txt nel db e rimanere quindi i nostri vecchi proto.

    Update per loggare correttamente [Client]
    Per loggare correttamente avete bisogno come prima cosa un buon launcher aggiornato, vi do il launcher metin2client_sg_r34669 scaricabile da qui -> Clicca Qui

    E' possibile loggare con qualsiasi client ma è consigliabile usare root e locale_it del client ufficiale di Metin2.It, mentre il restante dei pack potrete prenderlo dal client di Metin2.SG.

    Come potrete notare il client di Metin2.It si fa inviare i dati dal locale_it.addr ecco come possiamo risolvere


    decompilare/ricompilare locale_it.addr ogni volta:
    serverinfo.py


    CODICE
    CHINA_PORT = 50000
    def BuildServerList(orderList):
       retMarkAddrDict = {}
       retAuthAddrDict = {}
       retRegion0 = {}

       ridx = 1
       for region, auth, mark, channels in orderList:
           cidx = 1
           channelDict = {}
           for channel in channels:
               key = ridx * 10 + cidx
               channel["key"] = key
               channelDict[cidx] = channel
               cidx += 1

           region["channel"] = channelDict

           retRegion0[ridx] = region
           retAuthAddrDict[ridx] = auth
           retMarkAddrDict[ridx*10] = mark
           ridx += 1

       return retRegion0, retAuthAddrDict, retMarkAddrDict
    # hackshield-server-patch-load begin
    import app, os
    app.ServerName = None
    name = app.GetLocalePath().replace("/", "_") + ".addr"
    path = os.sep.join(("pack", name))
    if os.access(path, os.R_OK):
       print "load_locale_addr:", path
       app.LoadLocaleAddr(path)
    # hackshield-server-patch-load end
    info = eval(open("serverinfo_mod.txt", "r").read())

    STATE_NONE = "..."

    STATE_DICT = {
       0 : "....",
       1 : "NORM",
       2 : "BUSY",
       3 : "FULL"
    }

    SERVER_ID_DICT = info["SERVERID"]
    REGION_NAME_DICT = info["NAME"]
    REGION_AUTH_SERVER_DICT = info["AUTHADDR"]
    REGION_DICT = info["GAMEADDR"]
    MARKADDR_DICT = info["MARKADDR"]




    La sezione di codice "hackshield-server-patch-load" (da begin a end) serve solo per avviare correttamente l'hackshield e i suoi updates (quindi si potrebbe anche rimuovere in caso si noppasse il suo load nel bin)
    Io ho utilizzato eval(open(file).read()) ma siete liberi di usare ciò che volete
    Il contenuto di locale_it.addr "riordinato" è Clicca Qui

    serverinfo_mod.txt


    CODICE
    {
       'AUTHADDR': {
           0: {
               3: {'ip': '79.110.85.120', 'port': 21150},
           }
       },
       'MARKADDR': {
           30: {'tcp_port': 22205, 'ip': '79.110.85.121', 'symbol_path': '10', 'mark': '10.tga'},
       },
       'GAMEADDR': {
           0: {
               3: {
                   'name': 'Omega',
                   'channel': {
                       1: {'state': '...', 'name': 'CH1   ', 'key': 31, 'ip': '79.110.85.120', 'tcp_port': 22105, 'udp_port': 22105},
                   }
               },
           }
       },
       'SERVERID': {3: u'1',},
       'NAME': {0: 'ITALY'}
    }



    Impostato così riesco a loggare su Omega Ch1 senza problemi
    Cambiatevi ip&porte con quelle che volete nel .txt e via




    *Tool che trasforma il serverinfo.py in locale_nazione.addr -> Clicca Qui


    Addon & Funzioni


    CITAZIONE
    Questi sono i CRC Ammessi:

    0x86A3C9C
    0x86A3C84

    Ma se create il file "MEMCRC" potete specificare i CRC da accettare.

    Questo solo se hackshield è abilitato

    Nel resto dei client non ho idea ancora quale sia compatibile.

    CITAZIONE
    Nuove configurazioni per CONFIG:

    SPEED_SERVER: 1/0 (?)
    XTRAP_ENABLE: 1/0 (Abilita XTRAP)
    SERVER_KEY: ? (?)

    Ecco le nuovi funzioni:


    CITAZIONE
    d.new_jump_party (una versione migliorata del d.join che permette la scelta di x e y nel warp iniziale, prende 3 arguments)
    party.give_buff (adda un affect a tutto il party, prende 8 arguments)
    pet.count_summoned (conta i pet evocati, prende 0 arguments, CHARACTER*+3684)
    pet.is_summon (controlla se esiste il pet in base al vnum, prende 1 arguments (vnum), CHARACTER*+3684)
    pet.spawn_effect (effettua un effectpacket in base al vnum di un pet e una data stringa, prende 2 arguments (vnum, effect))
    pet.summon (dovrebbe evocare 1 pet in base ad un sigillo e in base al vnum e il nome di un pet, prende 2 arguments (vnum, pet_name))
    pet.unsummon (dovrebbe far scomparire 1 pet in base al vnum, prende 1 argument (vnum))
    speedserver.get_holiday
    speedserver.set_holiday
    speedserver.get_wday
    speedserver.set_wday
    speedserver.init_holiday
    speedserver.init_wday
    speedserver.get_current_exp_priv

    Fix Errore "package"


    CITAZIONE
    Si può tenere quello su share e symlinkare i restanti così: (correggete i percorsi in base a come avete strutturato i sf)
    ln -s ../../share/package package
    In automatico su un intero channel:
    find /usr/game/channel -type d -name "game*" -exec ln -s ../../share/package {}/package \;
    #includendo first e auth (tendo ad avere auth dentro channel, ha più senso)
    find /usr/game/channel -type d \( -name "game*" -o -name "first" -o -name "auth" \) -exec ln -s ../../share/package {}/package \;

    Revision, Fix & Addon


    CITAZIONE
    Allora ragazzi,la revisione del launcher richiesta è quella pubblicata il "Sun, 13 Jul 2008 13:20:05 GMT".

    Altrimenti ho un altro metodo che non ho testato ma dovrebbe funzionare:

    Nel core (auth credo,ma mettetelo dappertutto) create il file "VERSION" ed inserite il timestamp del vostro launcher (vi spiego qui di seguito come fare) in questo modo
    VERSION: "%­s"
    Dove %­s sta per il datetime codificato in UNIX.
    Ora voi mi direte,come facciamo a prendere il datetime del launcher?

    Avviate il launcher in un qualsiasi client e come argument di avvio mettete /timestamp.
    Questo rileverà la giornata di rilascio e tramite un online tool potete convertire tale data in formato codificato Unix.

    Altro trick:

    Provate a loggare con un launcher qualunque,dovrebbe comparire nei syslog la seguente stringa:

    sys_log(
    0,
    "VERSION : WRONG VERSION USER : account:%­s name:%­s hostName:%­s server_version:%­s client_version:%­s",
    a2 + 120)
    Proprio il numero di client_version è il vostro client,modificatelo!

    TADA'!

    Testate e fatemi sapere.

    Altro metodo:

    0x080E54FB (JLE -> JMP)

    - - - Updated - - -

    Altra novità:

    Nel CONFIG potete inserire la voce WEB_AUTH

    Ovvero,si sacrifica l'Auth per far autenticare un utente su una pagina PHP.

    Formato:

    CITAZIONE
    WEB_AUTH: http://d3vsite.org/[SPAZIO]/percorsochevipare/nome.php

    Il file funzione tramite GET


    Infatti:
    WEB_AUTH syntax error (ex: WEB_AUTH <host(metin2.co.kr) uri(/kyw/gameauth.php)>\n

    La richiesta HTTP:
    GET %­s?auth_key=%­s&ip=%­s HTTP/1.1\r\nHost: %­s\r\nConnection: Close\r\n\r\n

    La risposta che si aspetta è:

    OK

    Nei casi di errori:

    switch ( strtol(v14, 0, 10) )
    {
    case 1:
    sys_err((int)"auth_OpenID", 494, "[auth_OpenID] : AuthKey incorrect", (unsigned int)openid_uri);
    break;
    default:
    break;
    case 6:
    sys_err((int)"auth_OpenID", 509, "[auth_OpenID] : AuthKey time over", (unsigned int)openid_uri);
    break;
    case 5:
    sys_err((int)"auth_OpenID", 506, "[auth_OpenID] : ip not delivered", (unsigned int)openid_uri);
    break;
    case 4:
    sys_err((int)"auth_OpenID", 503, "[auth_OpenID] : AuthKey not delivered", (unsigned int)openid_uri);
    break;
    case 3:
    sys_err((int)"auth_OpenID", 500, "[auth_OpenID] : used AuthKey", (unsigned int)openid_uri);
    break;
    case 2:
    sys_err((int)"auth_OpenID", 497, "[auth_OpenID] : ip incorrect", (unsigned int)openid_uri);
    break;
    }
     
    .
0 replies since 15/7/2013, 12:01   36 views
  Share  
.