[SAMMELTHREAD] Kleine Scripting Fragen

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • Beitrag von IceWave ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Meine amx war vorher 2.3MB groß


    Sie ist jetzt 130MB groß



    Das einzige großaritge was ich geändert habe, waren die Player und Vehicle schleifen.


    Ich habe eine variabel erstellt die die maximale ID wiedergibt für einen Spieler und ein Fahrzeug, so dass die Schleifen nicht unnötig mehr durchlaufen.

  • Bin gerade dabei, habe die variabeln nun zu Konstanten gemacht, so wie es vorher ja durch die MAX_PLAYERS definierung war und habe den Code, der die Variabel der ID anpasst auskommentiert.


    //


    Die datei bleibt so groß, obwohl Ich das nun folgend angepasst habe:


    new const MaxPlayers = MAX_PLAYERS;
    new const MaxVehicles = MAX_VEHICLES;


    Beispiel:
    for(new i = 0; i <= MaxPlayers; i++)
    {
    if(!IsPlayerConnected(i) || !LoggedIn[i] || IsPlayerNPC(i) || i == playerid) continue;
    if(Spieler[i][Fraktion] != Frak_Hitmen) continue;
    SendClientMessage(i,0x00A5FFFF, str);
    }


  • Das macht doch keinen Sinn...


    Wenn du den Beitrag vorher gelesen hättest, wüsstest du, das die Vermutung war, dass es daran liegt, dass ich die Schleifen geändert habe.


    Vorher hatte ich die schleifen wie folgt:
    for(new i = 0; i < MAX_PLAYERS; i++)


    Mit der neuen Funktion dank RC2 wollte ich das abändern, so das die Schleifen kürzer werden, hatte dabei ein kleines Problemchen und mir wurde geraten nicht die Funktionen zu nutzen, sondern es durch eigene variabeln zu regeln.


    Dies habe ich gemacht, und um zu testen ob es nun an der Änderung liegt, habe ich die Variabeln die ich nun in den Schleifen nutze einfach zu constanten gemacht mit den vorherigen Wert, und zwar dem von MAX_PLAYERS.


    Somit sind die Schleifen nun so wie vorher, ohne dass ich nun wieder jede einzelne Schleife umschreiben muss.

  • new const MaxPlayers = MAX_PLAYERS;
    new const MaxVehicles = MAX_VEHICLES;


    Da muss ich meinem Vorposter recht geben..das ist absoluter Schwachsinn :D


    Wenn du das umbenennen willst, mach es so:


    #define MaxPlayers MAX_PLAYERS
    #define MaxVehicles MAX_VEHICLES

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Einen Unterschied macht es trotzdem nicht, in der Performance von Schleifen, da MAX_PLAYERS schon eine Konstante ist.


    Wenn du MAX_PLAYERS kleiner machen willst, dann geh in die a_samp.inc und mach es kleiner.
    Oder schreibe in deinem Gamemode:
    #undef MAX_PLAYERS
    #define MAX_PLAYERS 100

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich kommentiere gerade alles aus was ich in der letzten Zeit gemacht habe, war gottseidank nicht viel.


    Meine Empfehlung:
    Jeden Tag ein Backup machen, und sofort bevor man etwas ausprobiert. Dann kann man es in jedem Fall sofort rückgängig machen.


    Hat mir damals das ein oder andere mal den Code gerettet. Ich mache es aber auch heute noch, auch wenn ich es eigentlich nicht mehr brauche, zumindest in PAWN.

  • ich möchte beim Login / Register mit Textdraws arbeiten, ist es jetzt sinnvoller diese unter OnGameModeInit einfach so zu erstellen:
    Textdraw[1] = TextDrawCreate(254.000000, 110.000000, "Login / Register");


    oder genau zu dem Zeitpunkt wo man sie braucht erst erstellen:
    gPlayerTextDraw[playerid] = CreatePlayerTextDraw(playerid, 10.000000, 141.000000, "MyTextDraw");

  • hi, ich bins wieder.
    Und zwar habe ich das Problem dass ich immer noch die Skinauswahl beim Login da habe, also einfach ohne dass ich mich einlogge auf spawnen drücken kann.


    Natürlich habe ich schon nachgekuckt und gegoogelt, hat auch geklappt mit setspawninfo bei onplayerrequestclass, aber nur wenn ich bei dem callback auch SpawnPlayer(playerid);
    reinschreibe, aber ich möchte natürlich dass er erst wenn er sich eingeloggt hat spawnt, geht das auch?

  • Ja, du musst SetSpawnInfo nur einmal ausführen, bevor SpawnPlayer ausgeführt wird. Wenn es bei OnPlayerRequestClass steht passt das. Du kannst es aber auch nochmal dort einfügen, wo der Spieler gespawnt wird, wenn er das richtige Passwort eingegeben hat, dann bist du auf der sicheren Seite.

  • public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    SetSpawnInfo(playerid,0,0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
    }



    public OnPasswortResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbverbindung);
    if(num_rows==1)
    {
    sInfo[playerid][eingeloggt] = 1;
    SetPlayerScore(playerid,cache_get_field_content_int(0,"level",dbverbindung));
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbverbindung);
    SetPlayerMoney(playerid,cache_get_field_content_int(0,"geld",dbverbindung));
    sInfo[playerid][adminlevel] = cache_get_field_content_int(0,"adminlevel",dbverbindung);

    loadPlayerCars(playerid);

    new query[128];
    format(query,sizeof(query),"UPDATE user SET eingeloggt='%i' WHERE id='%i'",sInfo[playerid][eingeloggt],sInfo[playerid][db_id]);
    mysql_function_query(dbverbindung,query,false,"","");


    SetSpawnInfo(playerid,0,0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    SpawnPlayer(playerid);//------------------------------------------------------HIER
    }
    else
    {
    SendClientMessage(playerid,ROT,"Dein Passwort ist falsch!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Login","Abbrechen");
    }
    return 1;
    }


    Müsste ja eigentlich richtig sein oder?


    Funktioniert irgendwie nicht, nur wenn ich bei onplayerrequestclass direkt spawnen lasse. Aber das möchte ich ja nicht..