Unterschiedliches Wetter in San Andreas

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Willkommen zu meinem ersten Tutorial !


    In diesem Tutorial zeige ich euch wie man ein Wetter System erstellen kann das in jeder Stadt unterschiedliches Wetter setzt.
    Fangen wir an:


    Als erstes fügen wir oben im Script diese beiden Forwards ein:
    forward Wetter();
    forward SetWetter();
    Ein Forward leitet ein Public ein was am Ende des Scripts eingefügt wird.
    Jedoch arbeiten wir uns ersteinmal von Oben nach Unten.


    Nun wen ihr die beiden forwards eingefügt habt kommt der Nächste Schritt:
    Unter den New's schreiben wir nun folgendes hin:
    Dafür wir nicht für jede Stadt ein new machen müssen schreiben wir nun folgendes:
    new Weather[3];
    nun fügen wir drei weitere new's ein:
    new WetterRandomLS[] = { 1,2,3,15 };
    new WetterRandomSF[] = { 5,6,16 };
    new WetterRandomLV[] = { 1,2,3,4,5,18 };
    Mit diesen drei New's bestimmt man das Wetter der einzelnen Städte einstellen die später per Zufall gewählt werden.
    Die Zahlen sind die Wetter Ids. (Da ich in Wiki keine schöne Wetter id liste gefunden habe ist hier eine andere seite: WetterId's)
    Man kann natürlich auch nur
    new WetterRandom[] = { 1,2,3,4,5,6 };
    machen und somit für jede Stadt das Wetter so übernehmen doch ich erkläre euch nun die dreier Variante auf.
    Nun gehen wir unter public OnGameModeInit()
    dort fügen wir nun die Timer ein die wir brauchen um das Wetter zu ändern und noch eine kleine Funktion:
    Wetter();
    Dies schreiben wir unter OnGameModeInit um die Verschiedenen Wetter für jede Stadt beim Serverstart zu setzen.
    Wird dies nicht gemacht ist bis zum ersten mal durchlaufen des Timers das Wetter überall gleich.
    Nun zu den Timern die wir unter OnGameModeInit einfügen:
    SetTimer("Wetter",900000, 1);
    SetTimer("SetWetter",1000, 1);
    Nun eine kleine erklärung wie SetTimer funktioniert:
    Mit SetTimer erstellt ihr den Timer. Wetter und SetWetter ist der public der aufgerufen werden soll.
    Die 900000 oder die 1000 sind die Millisekunden indem dieses public aufgerufen werden soll.
    bsp: der Public Wetter wird jede 15 Minuten aufgerufen und der public SetWeather jede Sekunde.
    Die 1 am ende bedeutet das sich der Timer immer wiederholt würde man dort eine 0 einsetzen würde der public nur 1 mal ausgeführt werden und der Timer sich nicht wiederholen.
    Nun gehen wir weiter runter ins Script und schreiben unter den anderen publics nun diese beiden hinzu:
    public Wetter()
    {
    //Wetter 0 = LS , Wetter 1 = SF , Wetter 2 = LV
    Weather[0] = WetterRandomLS[random(sizeof(WetterRandomLS))];
    Weather[1] = WetterRandomSF[random(sizeof(WetterRandomSF))];
    Weather[2] = WetterRandomLV[random(sizeof(WetterRandomLV))];
    }
    Dort wird für jede Stadt eine Wetterid per Zufall gesetzt. Aber nur von den ids die ihr oben in den new eingetragen habt.
    Nun hat jede Stadt sein Wetter doch wir brauchen noch ein public um das Wetter für die Aktuelle Stadt festzulegen.
    public SetWetter()
    {
    new Float:xx, Float:yy, Float:zz;
    for(new i=0; i< GetMaxPlayers(); i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerPos(i, xx, yy, zz);
    if((xx > -992.5172 && xx < 4000.0000) && (yy < 528.0000 && yy > -4000.0000)) //Los Santos
    {
    SetPlayerWeather(i, Weather[0]);
    //Los Santos
    }
    if((xx > -4000.0000 && xx< -992.5172) && (yy < 4000.0000 && yy > -4000.0000)) //San Fierro
    {
    SetPlayerWeather(i, Weather[1]);
    //San Fierro
    }
    if((xx > -992.5172 && xx< 4000.0000) && (yy < 4000.0000 && yy > 528.0000)) //Las Venturas
    {
    SetPlayerWeather(i, Weather[2]);
    //Las Venturas
    }
    }
    }
    return 1;
    }
    Mit diesem Public überprüfen wir ob der jenige bsp. in SF ist und dan wird das Wetter für diesen Spieler richtig gesetzt.
    Dies geschieht jede Sekunde.
    Wenn ihr dies gemacht habt gratuliere ich euch den ihr habt nun ein 3 Städte Wettersystem !
    Bei Fragen oder Fehler könnt ihr mir sie gerne per PM schreiben oder auch hier im Thread.
    Und bitte nicht vergessen:
    Dies war mein erstes Tutorial :)


    Mit freundlichen Grüßen,
    Picaso



    Einmal editiert, zuletzt von [GSF]Zunno ()

  • Um die Position abzufragen reichen doch auch 5 sekunden oder mehr.


    Gutes tut 9/10


    //Edit: um statt for(new i=0; i<MAX_PLAYERS; i++) mach lieber for(new i=0; i<GetMaxPlayers(); i++) muss ja nicht für alle Spieler durchgehen, besonders nicht für die die nicht Online sind :thumbup:

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Um die Position abzufragen reichen doch auch 5 sekunden oder mehr.


    Gutes tut 9/10


    //Edit: um statt for(new i=0; i<MAX_PLAYERS; i++) mach lieber for(new i=0; i<GetMaxPlayers(); i++) muss ja nicht für alle Spieler durchgehen, besonders nicht für die die nicht Online sind :thumbup:

    Ja wie man den Timer einstellt ist jeden belieben.
    Ich habe dies auf 1 Sekunde gestellt da dan der Übergang von z.B. LS nach SF besser aussieht ^^ so das, dass wetter gleich umstellt oder z.B. beim /wetter cmd. das dort das Wetter nicht erst nach 5 Sekunden umstellt wird aber wie gesagt jeder kann es so einstellen wie er möchte :)


    Und das mit GetMaxPlayers, danke für die Info , ist sehr hilfreich ^^ ich werde es sofort ändern :D


    /Edit: Geändert

  • Wie du das testen kannst?


    - In ein beliebiges Script einbauen
    - Compilen
    - Auf deinem Homeserver starten und drauf connecten


    Wenn du dann in eine andere Stadt fährst, dann müsste auch ein anderes Wetter sein.
    Ganz einfach ;)

  • Ich weiß der thread ist schon etwas älter, aber kann mir jemand helfen?


    error 021: symbol already defined: "SetTimer"



    public OnGameModeInit()
    Wetter();
    SetTimer("Wetter",900000, 1);
    SetTimer("SetWetter",1000, 1);

  • da ^^

  • hmmm ^^


    warning 202: number of arguments does not match definition



    Eigentlich sind ja Warnungen nicht schlimm, aber mit denen kann ich den Server im Moment garnicht starten :(


    Also die zwei Warnungen sind wieder hier:


    SetTimerEx("Wetter",900000, 1);
    SetTimerEx("SetWetter",1000, 1);


    Gesamt:


    public OnGameModeInit()


    {
    Wetter();SetTimerEx("Wetter",900000, 1);
    SetTimerEx("SetWetter",1000, 1);




    //Edit:


    Oh yeeeah :D SO ist es richtig ^^


    public OnGameModeInit()
    {
    Wetter();
    SetTimer("Wetter",900000, 1);
    SetTimer("SetWetter",1000, 1);

    Einmal editiert, zuletzt von bigb ()