Hop til indhold
Stavox

FileWrite (Blacklist)


Thomads

Recommended Posts

Hey! 

Jeg er ved at udarbejde en blacklist til min gunshop, hvori det skal kunne være muligt at tilføje / fjerne spillere fra den ved hjælp af kommandoerne !fjern & !tilføj.

Blacklisten skulle gerne være permanent, dvs. de samme SteamID'er som bliver tilføjet, skal være der næste gang E2-Chippen bliver spawnet. 

Jeg har derfor arbejdet med funktionerne File, heriblandt FileWrite(), FileLoad() mm. MEN, jeg kan simpelthen ikke få det til at fungere...

 

Det der sker:

  • Den kan gemme (bruge Filewrite()) et par gange, hvorefter fileCanWrite() bliver ugyldig, og mit script kan ikke længere indlæse eller skrive i .txt filen?
  • Jeg bliver nødt til at hoppe ud og ind af serveren for at kunne bruge FileWrite() igen..

 

Jeg indsætter den kode jeg har skrevet indtil videre, og håber på, at nogle af jer kloge hoveder kan lede mig i den rigtige retning:surrender:

 

Spoiler

@name FileWrite_Test2
@inputs 
@outputs 
@persist Blacklist:array
@trigger 

if(first()){
    runOnFile(1)
    runOnChat(1)
    
    if(fileCanLoad()) {
        fileLoad("blacklist2.txt")
    } else{print("Filen kunne ikke indl" + ae() + "ses")}
        
    if(( !fileLoading())){
        IML = fileRead()
        for(I=1,vonDecode(IML):count()) {
            Blacklist[I,string] = (vonDecode(IML)[I,string])
        }
    }
    
    timer("save",10000)
}

   
if(chatClk() & chatClk(owner())){
    A = owner():lastSaid():lower():explode(" ")
    
    if(A[1,string]=="!tilf" + oe() + "j"){
        hideChat(1)
        B = findPlayerByName(A[2,string])
        if(B:isPlayer())  {
            Blacklist:pushString(B:steamID())
        }else{print("Kunne ikke finde spiller")}
        
    }elseif(A[1,string]=="!fjern"){
        B = findPlayerByName(A[2,string])
        if(B:isPlayer())  {
            for(I=0,Blacklist:count()) {
                if(B:steamID()==Blacklist[I,string]){
                    print("Fjernede " + Blacklist[I,string] + " fra blacklisten")
                    Blacklist:removeString(I)
                }
            }
        }else{print("Kunne ikke finde spiller")}
    }
}

if(clk("save")) {
    timer("save",10000)
    if(fileCanWrite()){
        fileWrite("blacklist2.txt",vonEncode(Blacklist))
        print(vonEncode(Blacklist))
        print("Filen blev gemt.")
    }else{print("fileCanWrite(!)"), reset()}
}

 

 

Link til kommentar
Del på andre sites

Du er ude i noget som ikke er helt simpelt, men vil gerne hjælpe dig.

 

Jeg har prøvet at beholde meget er din kode, så du vil forstå det jeg skrev. Dog har jeg lavet en hel del om, som burde gøre at det virker.

 

 

Som du kan se næsten i starten, så vælger jeg at forsinke din load med 1 sekund. Det gør jeg af den grund, at når du lukke E2´en, eller reloader den, så gemmer den også. I det du gør det, kan der ske en fejl, hvor du loader før du saver, og derfor kommer til at slette alt der er derinde.

 

vA82hEq.png

 

Når den så loader, så gør den endelig ikke noget specielt. Den burde gøre som normalt, og prøve igen efter 10 sekunder hvis den af en eller anden grund skulle fejle.

 

7NQCbhF.png

 

Efter det vil den automatisk tjekke når filen er loadet, hvilket sker lige efter. Det gør jeg ved at bruge fileClk(S) som endelig bare gøre som en normal clk(S), som aktivere hvis en specifik fil bliver loadet. I stedet for at tilføje hver enkelt som du gjorde, så laver jeg endelig bare array'et "Blacklist" om som du har oprettet i starten, til den array som bliver loadet. Ikke noget fancy der, som du ellers var ude i.

 

T5l03Pr.png

 

Nu til det sidste hvor du gemmer. Der har jeg valgt at indsætte både din timer, men også last() som endelig bare gør, at den vil gemme hvis du enten sletter, eller reloader den. Er lidt i tvivl som den gemmer hvis den crasher, men er næsten sikker på den gør. I stedet for at den gemmer med en konstant timer, så vil den gemme til sidst når du lukker E2'en, og når du enten tilføjer eller fjerner folk fra blacklisten. Det vil gøre så den ikke bliver kørt unødvendigt.

 

Dm6fznp.png

 

 

Her har du hele koden som burde virker. Har ikke ligefrem testet den, men lad os håbe :D

@name FileWrite_Test2
@inputs 
@outputs 
@persist Blacklist:array
@trigger 

if(first()){
    runOnFile(1)
    runOnChat(1)
    
    timer("LoadFile",1000)
}
   
if(chatClk() & chatClk(owner())){
    A = owner():lastSaid():lower():explode(" ")
    
    if(A[1,string]=="!tilf" + oe() + "j"){
        hideChat(1)
        B = findPlayerByName(A[2,string])
        if(B:isPlayer()){
            Blacklist:pushString(B:steamID())
            timer("FileSave",500)
        }else{printColor(vec(255,215,0),"[BLACKLIST] ",vec(255,255,255),"Kunne ikke finde spiller")}
        
    }elseif(A[1,string]=="!fjern"){
        B = findPlayerByName(A[2,string])
        if(B:isPlayer())  {
            for(I=0,Blacklist:count()) {
                if(B:steamID()==Blacklist[I,string]){
                    printColor(vec(255,215,0),"[BLACKLIST] ",vec(255,255,255),"Fjernede " + Blacklist[I,string] + " fra blacklisten")
                    Blacklist:removeString(I)
                    timer("FileSave",500)
                }
            }
        }else{printColor(vec(255,215,0),"[BLACKLIST] ",vec(255,255,255),"Kunne ikke finde spiller")}
    }
}

if(clk("LoadFile")){
    if(fileCanLoad()){
        fileLoad("blacklist2.txt")
    }
    else{
        printColor(vec(255,215,0),"[LOG] ",vec(255,255,255),"Filen kunne ikke indl" + ae() + "ses. Pr"+oe()+"ver igen om 10 sekunder.")
        timer("LoadFile",10000)
    }
}

if(fileClk("blacklist2.txt")){
    local Tbl = fileRead()
    if(Tbl){
        Blacklist = vonDecode(Tbl)
        printColor(vec(255,215,0),"[BLACKLIST] ",vec(255,255,255),"Indl"+ae()+"sning gennemf"+oe()+"rt.")
        printColor(vec(255,215,0),"[BLACKLIST] ",vec(255,255,255),+Blacklist:count()+" spillere er indl"+ae()+"st.")
    }
}

if(last()|clk("FileSave")){
    fileWrite("blacklist2.txt",vonEncode(Blacklist))
    if(!clk("File_Save")){
        printColor(vec(255,215,0),"[GUNSHOP] ",vec(255,255,255),+Blacklist:count()+" spillere er gemt.")
    }
}

 

Link til kommentar
Del på andre sites

Tusinde tak, Mads! 

Scriptet blev også lidt kringlet til sidst, idet jeg prøvede alle mulige hacky muligheder for at løse mit problem.:wow:

Jeg har ikke mulighed for at teste scriptet før i morgen tidlig, men jeg skal nok lige vende tilbage med et resultat :).

 

TAK:flex:

Link til kommentar
Del på andre sites

2 minutes ago, Thomads said:

Tusinde tak, Mads! 

Scriptet blev også lidt kringlet til sidst, idet jeg prøvede alle mulige hacky muligheder for at løse mit problem.:wow:

Jeg har ikke mulighed for at teste scriptet før i morgen tidlig, men jeg skal nok lige vende tilbage med et resultat :).

 

TAK:flex:

Du har været på rette vej, og var faktisk ikke så langt fra :D

 

Vil med glæde hjælpe dig med andet, da du faktisk kan forklare hvad fanden der er galt, og ikke skal have lavet alt :D

Link til kommentar
Del på andre sites

39 minutes ago, DetBareMads said:

Du har været på rette vej, og var faktisk ikke så langt fra :D

 

Vil med glæde hjælpe dig med andet, da du faktisk kan forklare hvad fanden der er galt, og ikke skal have lavet alt :D

Haha, tænkte også det var nødvendigt med en forklaring på det rodet stykke kode :pwn:

Link til kommentar
Del på andre sites

  • 2 weeks later...
6 hours ago, Jannikrouthe said:

hvor skal man gemme filen blacklist2.txt

for at den skal kunne findes af e2en?

 

 

5 hours ago, CasperDK / ZeNoxXi said:

steam/steamapps/common/Garrysmod/garrysmod/data/e2files

Det burde dog være irrelevant, idet E2'en automatisk er sat til at søge i det directory. 

Link til kommentar
Del på andre sites

9 hours ago, Casper Hede said:

Hvordan duer e2'en

 

!Tilføj [spiller] 

!Fjern [spiller]

 

Den gemmer en .txt fil i din lokale data mappe med et krypteret array, hvilket gør det muligt at gemme en blacklist med personer på tværs af genstart af spillet osv.

Koden er dog eksperimentel, og på trods af Mads' hjælp, oplevede jeg alligevel upålidelige krypteringer og fejlbare skrivninger / indlæsninger af filen, hvilket er derfor jeg droppede projektet.
Du skal være velkommen til at gøre brug af koden, hvis du vil!

Link til kommentar
Del på andre sites

53 minutes ago, Thomads said:

!Tilføj [spiller] 

!Fjern [spiller]

 

Den gemmer en .txt fil i din lokale data mappe med et krypteret array, hvilket gør det muligt at gemme en blacklist med personer på tværs af genstart af spillet osv.

Koden er dog eksperimentel, og på trods af ZeNoxXi's hjælp, oplevede jeg alligevel upålidelige krypteringer og fejlbare skrivninger / indlæsninger af filen, hvilket er derfor jeg droppede projektet.
Du skal være velkommen til at gøre brug af koden, hvis du vil!

Du mener vel Mads'

Link til kommentar
Del på andre sites

Arkiveret

Dette emne er nu arkiveret og er lukket for yderligere svar

Gæst
Dette emne er nu lukket for yderligere svar
×
×
  • Tilføj...

COOKIE- OG PRIVATLIVSPOLITIK PÅ STAVOX.DK

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privatlivspolitik - Vilkår for brug.