Unmantained Guida [SCRIPT]Pannello Cerca Player :)

Una guida contrassegnata come Unmantained contiene informazioni su un argomento obsoleto, non più utile o files non aggiornati da parte del creatore.
Stato
Discussione chiusa ad ulteriori risposte.

Spikelino

Utente Jade
18 Ottobre 2009
1,780
41
1,439
753
Ultima modifica da un moderatore:
Buonasera inforgiani :asd:

Molto tempo fa in un server vidi un pannello che permetteva di sapere dove fosse un player nella propria mappa(un semplice target) tuttavia non permetteva di sapere coordinate e mappa precisa , quindi ho pensato di farne uno in grado di poter trovare qualsiasi player in qualsiasi mappa con le coordinate precise.

Come funziona?
Al login prende la mappa e le coordinate e le salva per poi attivare un timer che controllerà le coordinate ogni 5 secondi. Il tempo è regolabile in base alle proprie esigenze , potete anche impostarlo a 60-120 secondi modificando la quarta riga della quest , ovvero :
loop_timer("refresh_pcp" , 5) dove 5 è il numero di secondi che passeranno tra un aggiornamento e l'altro.

Come lo implemento?
Iniziamo... ;)

Per prima cosa ecco la quest :

PHP:
quest pcp begin
    state start begin
        when login begin
            loop_timer("refresh_pcp" , 5)
        end
        when logout begin
            salva_info("off")
        end
        when letter begin
            send_letter("Pannello Cerca Player")
        end
        when refresh_pcp.timer begin
            salva_info("on")
        end
        when button or info begin
            say_title("PCP")
            say("Desideri sapere dove si trova un determinato player?")
            say("")
            say_reward("Non puoi cercare membri dello staff!")
            local nome = input()
            if check_gm(nome) then
                syschat("Non puoi cercare un membro dello staff!")
                return
            end
            if nome == nil then
                syschat("Devi inserire un nome!")
                return
            end
            say_title("PCP")
            carica_info(nome)
        end
    end
end

Subito dopo(va bene anche prima :asd:) inserite nel questlib questo :
PHP:
    directory = "/root/pcp/"
    lista_mappe = { [1] = "Villo 1 Shinso" , [3] = "Villo 2 Shinso" , [4] = "????",
                    [21] = "Villo 1 Chunjo" , [23] = "Villo 2 Chunjo" , [24] = "????",
                    [41] = "Villo 1 Jinno", [43] = "Villo 2 Jinno" , [44] = "????",
                    [61] = "Monte" , [62] = "Carta" , [63] = "Deserto",
                    [64] = "Valle" , [65] = "Tempio" , [66] = "Torre dei demoni",
                    [67] = "Bosco Fantasma" , [68] = "Bosco Rosso" , [69] = "Matrimonio",
                    [70] = "Terra dei giganti" , [71] = "Covo2" , [72] = "Atlantide 1",
                    [73] = "Atlantide 2" , [74] = "Monte 2" , [75] = "?????",
                    [77] = "Carta 2" , [78] = "????" , [81] = "Matrimonio" ,
                    [103] = "War" , [104] = "Covo1" , [105] = "War" ,
                    [107] = "Sotter Scimmie Facile" ,[108] = "Sotter Scimmie Normale",
                    [109] = "Sotter Scimmie Difficile" , [110] = "War" , [111] = "War",
                    [112] = "Mappa Duelli" , [113] = "OX" , [114] = "War tra regni"
            }
function salva_info(stato)
    os.remove(directory..pc.get_name())
    io.output(directory..pc.get_name())
    if stato == "on" then
        io.write("Il player si trova a : "..info_mappa(pc.get_map_index()) )
        io.write("\nIl player si trova alle coordinate : "..pc.get_local_x().." "..pc.get_local_y())
    else
        io.write("Il player è offline.")
    end
    io.close()
end
function info_mappa(index)
    if lista_mappe[index] == nil then
        return say("Il player non è stato trovato.")
    end
    return lista_mappe[index]
end
function carica_info(nome)
    file = io.open(directory..nome , "r")
    if not file then
        return say("Il player non è stato trovato.")
    end
    say(file:read())
    say(file:read())
end
function check_gm(nome)
    lista_gm = {
        "[GA]Spike",
        "[GM]Figo",
        "[SGM]Figolino",
        "[SSJGM]FigoFigo",
        }
    for i = 1,table.getn(lista_gm) do
        if lista_gm[i] == nome then
            return true
        end
    end
end

Come potrete notare controlla l'index della mappa nell'array lista_mappe e se ne trova qualcuna scrive il nome della mappa e salva , altrimenti avvisa di non aver trovato il player. Per aggiungere nuove mappe basterà modificare questo pezzo :

PHP:
lista_mappe = { [1] = "Villo 1 Shinso" , [3] = "Villo 2 Shinso" , [4] = "????",
                    [21] = "Villo 1 Chunjo" , [23] = "Villo 2 Chunjo" , [24] = "????",
                    [41] = "Villo 1 Jinno", [43] = "Villo 2 Jinno" , [44] = "????",
                    [61] = "Monte" , [62] = "Carta" , [63] = "Deserto",
                    [64] = "Valle" , [65] = "??????" , [66] = "Torre dei demoni",
                    [67] = "Bosco Fantasma" , [68] = "Bosco Rosso" , [69] = "Matrimonio",
                    [70] = "Terra dei giganti" , [71] = "Covo2" , [72] = "Atlantide 1",
                    [73] = "Atlantide 2" , [74] = "Monte 2" , [75] = "?????",
                    [77] = "Carta 2" , [78] = "????" , [81] = "Matrimonio" ,
                    [103] = "War" , [104] = "Covo1" , [105] = "War" ,
                    [107] = "Sotter Scimmie Facile" ,[108] = "Sotter Scimmie Normale",
                    [109] = "Sotter Scimmie Difficile" , [110] = "War" , [111] = "War",
                    [112] = "Mappa Duelli" , [113] = "OX" , [114] = "War tra regni",
                    [index] = "nome mappa", [index] = "nomemappa", [index] = "nomemappa"
            }
Se volete aggiungere nuove mappe basterà seguire l'esempio evidenziato in rosso , ovvero inserendo l'index e il nome che della mappa.

Per quanto riguarda la lista gm invece :
PHP:
function check_gm(nome)
    lista_gm = {
        "[GA]Spike",
        "[GM]Figo",
        "[SGM]Figolino",
        "[SSJGM]FigoFigo",
        "[GM]Esempio"
        }
    for i = 1,table.getn(lista_gm) do
        if lista_gm[i] == nome then
            return true
        end
    end
end
Non credo ci sia bisogno di spiegazione per questo xD

Quest_function :

PHP:
carica_info
salva_info
info_mappa
check_gm


Il pannello al momento può memorizzare solo mappa e coordinate ma con qualche piccola modifica potrete sapere razza,livello,dottrina,ecc... ma questo lo lascio a voi ;)

PS : Se trovate il nome delle mappe mancanti mandatemi un pm o rispondete alla discussione che provvederò ad aggiornare la lista.
 
Ultima modifica:
carina come cosa..se posso un consiglio metterei un check sull'input e leverei tutti quelle vocali accettante ^^
ps. leverei anche quei timer e lascerei esclusivamente gli event login e logout poichè ad ogni cambio di mappa viene considerato login.
So che poi le coordinate non sarebbero precise ma penso sia meglio che sovraccaricare la macchina con quella miriade di timer generati
Per il resto bravo
 
Molto bello bravo like!
PS: per la reputazione mi dispiace ma non me la fa mettere... la meritavi proprio continua cosi!

- - - Updated - - -

Molto bello bravo like!
PS: per la reputazione mi dispiace ma non me la fa mettere... la meritavi proprio continua cosi!
 
carina come cosa..se posso un consiglio metterei un check sull'input e leverei tutti quelle vocali accettante ^^
ps. leverei anche quei timer e lascerei esclusivamente gli event login e logout poichè ad ogni cambio di mappa viene considerato login.
So che poi le coordinate non sarebbero precise ma penso sia meglio che sovraccaricare la macchina con quella miriade di timer generati
Per il resto bravo

Un pò di tempo fa feci qualche test e il server test reggeva circa 100-200 mila volte al secondo(con un ciclo..non potendo avviare 100 mila pc xD) , senza dare problemi (controllavo anche la cpu su putty ovviamente..) :) per le vocali accentate le legge senza problemi , altrimenti non le avrei rimaste xD

ps: per check sull'input cosa intendi? non credo si possa fare kissà cosa xD
 
Scusa , cosa centra sapere il vid? Al massimo ci fai una query(rendendo il tutto meno preso e più pesante), senza contare che la funzione di yuko è per il kill..
 
Un pò di tempo fa feci qualche test e il server test reggeva circa 100-200 mila volte al secondo(con un ciclo..non potendo avviare 100 mila pc xD) , senza dare problemi (controllavo anche la cpu su putty ovviamente..) :) per le vocali accentate le legge senza problemi , altrimenti non le avrei rimaste xD

ps: per check sull'input cosa intendi? non credo si possa fare kissà cosa xD

metti un ciclo di controllo sull'input che non sia vuoto
 
Non funziona se il player è in un altro core/CH. Però sì, è effettivamente una soluzione molto arrangiata e che, con tutta probabilità, determinerà lag assurdo in game.

Beh , è una base come ho detto..si possono aggiungere ulteriori info (come il channel,razza,sesso,dottrina) come si può modificare il timer a 30 secondi o 60. In ogni caso non porterebbe nessun lag nemmeno se fosse settato a 1-2 secondi (ovviamente contando un numero di player < 500-600 su una macchina decente).

Mi fa fatica leggere ma sembra una cosa interessate dimmi cos'è cosi do il mio giudizio

Ti permette di sapere dove si trova un player , mappa e coordinate precise.
 
Beh , è una base come ho detto..si possono aggiungere ulteriori info (come il channel,razza,sesso,dottrina) come si può modificare il timer a 30 secondi o 60. In ogni caso non porterebbe nessun lag nemmeno se fosse settato a 1-2 secondi (ovviamente contando un numero di player < 500-600 su una macchina decente).
Tu ne sei pienamente convinto? Potrei capire se le informazioni venissero memorizzate nella RAM, ma qui si parla di i/o su un disco rigido che, tranne che per gli SSD, rappresenta un notevole bottleneck per le prestazioni. Pensa a X utenti online, ogni 5 secondi il sistema operativo dovrebbe andare a scrivere X files sul disco... pensaci bene, e dimmi se sei ancora convinto che non laggherebbe, asd.
 
Tu ne sei pienamente convinto? Potrei capire se le informazioni venissero memorizzate nella RAM, ma qui si parla di i/o su un disco rigido che, tranne che per gli SSD, rappresenta un notevole bottleneck per le prestazioni. Pensa a X utenti online, ogni 5 secondi il sistema operativo dovrebbe andare a scrivere X files sul disco... pensaci bene, e dimmi se sei ancora convinto che non laggherebbe, asd.

Provaci , io ho fatto i miei test ;)
 
Ultima modifica:
Tutti questi "+1" dati a parer mio sono solo ringraziamenti per il favoreggiamento della lag che porta questo script...
Vi rendete conto di che vuol dire un timer che refresha ogni 5 secondi la posizione del determinato player e per tutti i player dell' ipotetico server? :matto:
A parer mio bastano già tutti i ddoss che si prende un server di Metin2 (con sti tempi) per laggare al meglio ma evidentemente c'è chi non si accontenta :sisi:

Lag FTW
 
Ultima modifica:
Provaci , io ho fatto i miei test ;)

Ma hai provato su dedicati realmente aperti o hai fatto delle prove "simulate"? Io, molto tempo fa, quando usavo spesso i file per memorizzare i dati degli script, avevo fatto script simili a questo e su dedicati con 200/300 player online iniziavano a farsi sentire. E, oltretutto, avevano timer molto più rilassati di 5 secondi.
Sicuramente era anche colpa delle macchine che non avevano grandi prestazioni, non lo metto in dubbio, ma a mio parere un server di Metin2 non dovrebbe mettersi a laggare in nessun caso per colpa di uno script LUA.
 
Stato
Discussione chiusa ad ulteriori risposte.

DISCUSSIONI SIMILI

Indietro
Top Bottom