server map wechseln via script

  • so eine frage mal an die spezis von euch


    also ich habe mir folgendes überlegt , ich habe ein et 255 linux server , problem an dem is das er mit mehr als 6 custom maps beim mapwechsel die player kickt ...
    so nun dachte ich mir mache ich mal ein verzeichnis wo alle maps drinne sind , nenne wir es "custommaps", sagen wir 25 custom maps hauen wir da rein, jetzt würde ich es gerne so haben das er via cron alle 12stunden 4 neue maps in das "tcetest" verzeichnis verschiebt und die alten wieder ins custommap verzeichnis zurück verschiebt , ok das sollte denke ich kein problem weiter sein das zu scripten nun aber das eigentliche problem was ich dabei noch habe. unter et gibt es ja die maps.cfg datei , so wenn nun ein map kopiert vorgang vonstatten geht habe ich ja ne sozusagen ne falsche maps.cfg datei weil da ja noch die alten maps drinnne stehen. ich würde gerne wissen wie ich es machen kann das er das "tcetest" verzeichnis nach maps bzw dem_*.pk3 dateien absucht und diese dann als maps.cfg datei erstellt plus die 4 standart build in maps aber nach möglichkeit nich einfach der reihe nach sondern eher zufallsgeneriert.. und zu schluss soll er an screen ein befehl über geben "exec server.cfg" damit der server sich mit den neuen maps neustartet ohne die players zu kicken

    hier mal ne maps.cfg datei ohne custom maps



    wichtig is auch das er beim erstellen der maps.cfg auch den syntax einhält
    php läuft auch auf mein system also könnten wir ggf php mit einbeziehen : print " set map1 "vstr bc ; map dem_northport ; set nextmap vstr map1""
    oder so änlich


    hoffe der ein oder andere hat da ein tip wie ich das am besten hinbekomme
    danke an alle
    wenn ihr noch infos brauch bitte sagt bescheid

  • Per PHP ein Verzeichnis auszulesen und den Inhalt in eine Datei zu schreiben ist weniger das Problem.


    Das PHP Script kannst du ja dann per Cron aufrufen nachdem du die Maps verschoben hast.

  • readdir() liest das Verzeichniss schon nach zufälliger Reihenfolge aus, wobei das auch immer vom Betriebssystem abhängt, wenn dir der Zufall nicht reicht schreibe das Ergebniss erst in ein Array und lass das dann mit array_rand() zufällig sortieren.


    Um nur 5 Maps auszulesen tausche die Zeile
    [code=phpjyc]<span class="syntaxkeyword">while (</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$verz</span><span class="syntaxkeyword">)) </span><span class="syntaxdefault"></span>[/codejyc]
    durch
    [code=phpjyc]<span class="syntaxkeyword">for(</span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">5</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$verz</span><span class="syntaxkeyword">); </span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">++) </span><span class="syntaxdefault"></span>[/codejyc]


    Ich schau mir das sobald ich dazu komm mal genauer an und schreibe dann einen Artikel dazu für die Knowledge Base.

  • ok danke


    habe das mal probiert mit dem umschreiben der zeile aber jetz habe ich noch ein paar probleme


    er erstellt zwar die datei maps.cfg aber ohne maps ..


    [quotel0b]set obj "set g_gametype 5"
    set obj "set bc "set g_gametype 7"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"
    set map1 "vstr bc ; map $file;"[/quotel0b]


    in dem verzeichnis /usr/local/games/maps befinden sich .pk3 dateien
    die endun .pk3 sollte in der maps.cfg nich vorhanden sein und zweitens hast du noch ne idee wie ich die set mapN immer im einen zähler erhöhkann , also erste map wäre set map1 ,zweite map dann set map2 ,aso und hinter ; map $file;" müsste dann noch ; set nextmap vstr map2" kommen , dies auch mit fortlaufenden zähler


    ich poste info halber nochmal eine vollständige maps.cfg
    [quotel0b]//set r-obj "set g_gametype 2"
    //set obj "set g_gametype 5"
    set bc "set g_gametype 7"


    set map1 "vstr bc ; map dem_hs_v2 ; set nextmap vstr map2"
    set map2 "vstr bc ; map dem_village ; set nextmap vstr map3"
    set map3 "vstr bc ; map dem_northport ; set nextmap vstr map4"
    set map4 "vstr bc ; map dem_ersatz1 ; set nextmap vstr map5"
    set map5 "vstr bc ; map dem_railhouse ; set nextmap vstr map6"
    set map6 "vstr bc ; map dem_ptd_2 ; set nextmap vstr map7"
    set map7 "vstr bc ; map dem_depot ; set nextmap vstr map8"
    set map8 "vstr bc ; map dem_np2 ; set nextmap vstr map9"
    set map9 "vstr bc ; map dem_gk50o ; set nextmap vstr map10"
    set map10 "vstr bc ; map dem_snow ; set nextmap vstr map1"


    vstr map1[/quotel0b]


    ps: was noch richtig gut wäre, wäre wenn man die 5 zufälligen ausgewälten dateien noch auf deren gesamt grösse hin prüfen kann sagen wir das sie alle zusammen nich
    mehr als 35MB gross sein sollen


    danke
    hoffe ich ärgere dich nich allzusehr ;P :lol:

  • Versuch mal den Code hier
    [code=php7yz]<span class="syntaxkeyword"><?</span><span class="syntaxdefault">php <br /> </span><span class="syntaxcomment">//Standart werte die in jeder Datei stehen sollen<br /> </span><span class="syntaxdefault">$maplist </span><span class="syntaxkeyword">= </span><span class="syntaxstring">'set obj "set g_gametype 5"' </span><span class="syntaxkeyword">. </span><span class="syntaxstring">"\n"</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxdefault">$maplist </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">'set obj "set bc "set g_gametype 7"' </span><span class="syntaxkeyword">. </span><span class="syntaxstring">"\n"</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxcomment">// Verzeichnis ausledsen<br /> </span><span class="syntaxdefault">$pfad</span><span class="syntaxkeyword">=</span><span class="syntaxstring">"./"</span><span class="syntaxkeyword">;<br /> </span><span class="syntaxdefault">$verz</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">opendir </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$pfad</span><span class="syntaxkeyword">);<br /> for(</span><span class="syntaxdefault">$i </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">5</span><span class="syntaxkeyword">; </span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">=</span><span class="syntaxdefault">readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$verz</span><span class="syntaxkeyword">); </span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">++)<br /> {<br /> if (</span><span class="syntaxdefault">filetype</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$pfad</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">)!=</span><span class="syntaxstring">"dir" </span><span class="syntaxkeyword">AND !</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'#.pk3#'</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">) AND </span><span class="syntaxdefault">$size </span><span class="syntaxkeyword">< </span><span class="syntaxdefault">35000000</span><span class="syntaxkeyword">)<br /> {<br /> </span><span class="syntaxdefault">$size </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">$size </span><span class="syntaxkeyword">+ </span><span class="syntaxdefault">filesize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">);<br /> </span><span class="syntaxdefault">$maplist </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">'set map'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword">.</span><span class="syntaxstring">' "vstr bc ; map '</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$file</span><span class="syntaxkeyword">.</span><span class="syntaxstring">';"' </span><span class="syntaxkeyword">. </span><span class="syntaxstring">"\n"</span><span class="syntaxkeyword">;<br /> }<br /> }<br /> <br /> </span><span class="syntaxcomment">// Am ende der dAtei anhängen<br /> </span><span class="syntaxdefault">$maplist </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">'vstr map1'</span><span class="syntaxkeyword">;<br /> <br /> </span><span class="syntaxdefault">closedir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$verz</span><span class="syntaxkeyword">);<br /><br /> </span><span class="syntaxcomment">// Datei schreiben<br /> </span><span class="syntaxdefault">$datei </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">fopen</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"maps.cfg"</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"r+"</span><span class="syntaxkeyword">);<br /> </span><span class="syntaxdefault">rewind</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datei</span><span class="syntaxkeyword">);<br /> </span><span class="syntaxdefault">fwrite</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datei</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$maplist</span><span class="syntaxkeyword">);<br /> </span><span class="syntaxdefault">fclose</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datei</span><span class="syntaxkeyword">); </span><span class="syntaxdefault"></span>[/code7yz]

  • danke nochmals tobi


    schade, naja der neue code macht auch nich das was er soll ...
    gucks du hier :


    [code6qd]set obj "set g_gametype 5"
    set obj "set bc "set g_gametype 7"
    set map "vstr bc ; map maps.cfg;"
    set map1 "vstr bc ; map best_top10_players.php;"
    vstr map1[/code6qd]


    hast du noch ne idee auf lager ?


    danke

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!