Beiträge von Jeffry

    Dennoch bleibt meine Meinung, in dem Bereich sind manche returns ziemlich überflüssig!


    Hier zwei Beispiele:
    public OnPlayerConnect(playerid)
    {
    //Nehmen wir an, playerid ist 1:
    if(playerid == 0) //nein, gehe zu Zeile 9
    {
    //...
    return 1;
    }
    if(playerid == 1) //ja
    {
    //...führe Code aus.
    return 1; //Springe aus OnPlayerConnect heraus. Fertig.
    }
    //Wird nicht aufgerufen.
    if(playerid == 2)
    {
    //...
    return 1;
    }
    if(playerid == 3)
    {
    //...
    return 1;
    }
    return 1;
    }


    public OnPlayerConnect(playerid)
    {
    //Nehmen wir an, playerid ist 1:
    if(playerid == 0) //nein, gehe zu Zeile 8
    {
    //...
    }
    if(playerid == 1) //ja
    {
    //...führe Code aus.
    }
    //hier geht es weiter
    if(playerid == 2) //nein
    {
    //...
    }
    if(playerid == 3) //nein
    {
    //...
    }
    return 1; //Springe aus OnPlayerConnect heraus. Fertig.
    }



    => Wir haben im 2. Beispiel 2 if-Abfragen mehr gemacht, das entspricht der doppelten CPU Last. Wenn du jetzt die Zeit misst, für x Durchläufe, dann wird Beispiel 1 doppelt so schnell fertig sein, als Beispiel 2. Jetzt stell dir vor wir machen das mit 1000 Dialogen. Wenn da bereits der zweite aufgerufen wird, dann hast du 998 unnötige if-Abfragen, das entspricht einer fast 500-fachen CPU Last.


    Die returns sind also ganz und gar nicht unnötig.

    Na dann musst du dort das Label auch entfernen lassen:


    forward EndGodMode(playerid);
    public EndGodMode(playerid)
    {
    if(!InProtectionMode[playerid]) return 1;
    else InProtectionMode[playerid] = false;
    SetPlayerHealth(playerid, 100);

    DestroyDynamic3DTextLabel(SpawnProtectionInfo[playerid]);
    SpawnProtectionInfo[playerid]=Text3D:-1; //Das hier übrigens auch beim anderen hin machen.
    return 1;
    }

    Hat er doch...


    Hast du die Funktion nicht definiert?


    Füge unten in deinem gesamten Code das ein:
    stock sSpieler(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
    }

    Na du hast ja hier zwei Timer angegeben. Ist das nicht gewollt?
    if(GetPlayerVirtualWorld(playerid) == 0) SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);
    else SetTimerEx("EndGodMode", 3000, false, "i", playerid);


    Dann ändere es zu:
    if(GetPlayerVirtualWorld(playerid) == 0) SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);
    else SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);
    Bzw mach die Abfrage ganz weg, einfach nur:
    SetTimerEx("EndSpawnProtection", 3000, false, "i", playerid);


    Falls es doch so gewollt ist, poste die EndGodMode Funktion.

    Das return 1; ist an manchen stellen ziemlich überflüssig


    Im Gegenteil!
    Es ist sogar gut, dass er innerhalb der if-Abfragen die returns hat, denn der Ablauf ist "durchfallend", das heißt wenn kein return da ist, dann werden die folgenden if-Abfragen auch gemacht. Ist das return da, nicht. Das schont die CPU.


    => Daher: Wenn von der Skriptlogik her möglich: return verwenden, wenn nichts mehr folgt.

    Wieviel Arbeitsspeicher braucht denn ein SAMP Sever standardmäßig?
    Also würden 4GB Reichen, wenn man noch nen Teamspeak server laufen lässt oder 8GB für beides?


    Also meiner braucht mit 47 Spieler online zur Zeit 238MB RAM. Das steigt aber nicht linear, bei 100 Spieler sind es hochgerechnet ca. 300MB.


    Also das sollte eigentlich reichen, wenn du 4GB hast. Je nach dem wie viel das Teamspeak braucht.

    Ich nehme mal an, das Gangfight System ist nicht im gleichen Code, als die pInfo Deklaration, richtig?


    Ändere das zu:
    stock GetPlayerFaction(playerid){
    new Member = CallRemoteFunction("GetpMember","i",playerid);
    if(Member)
    return Member;
    new Leader = CallRemoteFunction("GetpLeader","i",playerid);
    if(Leader)
    return Leader;
    return 0;
    }



    Und füge in dem Code, in dem pInfo deklariert ist das ein, ganz unten.
    forward GetpMember(playerid);
    public GetpMember(playerid)
    {
    return pInfo[playerid][pMember];
    }


    forward GetpLeader(playerid);
    public GetpLeader(playerid)
    {
    return pInfo[playerid][pLeader];
    }


    Denn du kannst keine Variablen mit "CallRemoteFunction" aufrufen, sondern nur "forward"-Funktionen.

    Du hast es unter die falsche Klammer geschrieben.
    Achte darauf, dass du deinen Code richtig einrückst, dann passiert dir sowas nicht.


    if(dialogid == DIALOG_HILFE)
    {

    if(listitem == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE1,DIALOG_STYLE_MSGBOX,"Allgemeine Hilfe","/stats /lizenzen (/liz) /kaufen (24/7) /kopfhörer /navi /report","OK","");
    }
    if(listitem == 1)
    {
    //ShowPlayerDialog(playerid,DIALOG_HH,DIALOG_STYLE_MSGBOX,"Haushilfe"," -> /kaufehaus - Damit kannst du dir ein Haus kaufen.\n -> /verkaufehaus - Damit kannst du dein Haus verkaufen.\n -> /haustuer - damit kannst du dein Haus auf-/zuschließen.\n -> /hausbetreten - Damtit kannst du dein Haus betreten. -> /hausverlassen - Damit kannst du dein Haus verlassen,\n","Weiter","Schließen");
    }
    if(listitem == 2)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE2,DIALOG_STYLE_MSGBOX,"Handy Hilfe","...","OK","");
    }
    if(listitem == 3)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE3,DIALOG_STYLE_LIST,"Job Hilfe","Drogendealer\nTaxifahrer\nPizzaliferant\nStuntman","OK","");
    }

    }


    if(dialogid == DIALOG_HILFE1)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    if(dialogid == DIALOG_HILFE2)
    {
    if(response)
    {
    ShowPlayerDialog(playerid,DIALOG_HILFE,DIALOG_STYLE_LIST,"Hilfe System 2.1","Allgemeine Hilfe\nHaus Hilfe\nHandy Hilfe\nJob Hilfe","OK","");
    }
    }


    // Dialog Jobs
    if(dialogid == DIALOG_JOBS)
    {
    if(response == 0)
    {
    SendClientMessage(playerid,COLOR_ORANGE,"Jobauswahl abgebrochen!");
    return 1;
    }
    if(listitem == 0)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast erfolgreich dein Arbeitslosengeld I beantragt!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du erhälst es ab sofort jeden Zahltag!");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitslos sein um Arbeitslosengeld I zu beantragen!");
    return 1;
    }
    }
    if(listitem == 1)
    {
    if(Spieler[playerid][Beruf] > 0)
    {
    Spieler[playerid][Beruf] = 0;
    SendClientMessage(playerid,COLOR_YELLOW,"Du hast deinen Job gekündigt und bist nun Arbeitslos!");
    SendClientMessage(playerid,COLOR_YELLOW,"Du kannst Arbeitslosengeld I beantragen um ohne Arbeit Geld zu bekommen!");
    EnableStuntBonusForPlayer(playerid,0);
    return 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst einen Job haben um zu kündigen!");
    return 1;
    }
    }
    if(listitem == 2)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 2;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Drogendealer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 3)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Taxifahrer!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 4)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 4;
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Pizzalieferant!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    if(listitem == 5)
    {
    if(Spieler[playerid][Beruf] == 0)
    {
    Spieler[playerid][Beruf] = 3;
    EnableStuntBonusForPlayer(playerid, 1);
    SendClientMessage(playerid,COLOR_YELLOW,"Du bist nun Stuntman!");
    SendClientMessage(playerid,COLOR_YELLOW,"Unter dem Menü Jobhilfe (/hilfe) findest du alle Befehle!");
    return 1;

    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst arbeitlos sein um einen neuen Job anzunehmen!");
    return 1;
    }
    }
    }

    //Erstellen des Labels für playerid
    SpawnProtectionInfo[playerid] = CreateDynamic3DTextLabel("SPAWN PROTECTION", C_RED, 0.0, 0.0, 0.0, 50.0, playerid, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);

    Zu
    if(SpawnProtectionInfo[playerid]!=Text3D:-1) DestroyDynamic3DTextLabel(SpawnProtectionInfo[playerid]);
    SpawnProtectionInfo[playerid]=Text3D:-1;
    //Erstellen des Labels für playerid
    SpawnProtectionInfo[playerid] = CreateDynamic3DTextLabel("SPAWN PROTECTION", C_RED, 0.0, 0.0, 0.0, 50.0, playerid, INVALID_VEHICLE_ID, 1, -1, -1, -1, 100.0);


    Und die Deklaration:
    SpawnProtectionInfo[MAX_PLAYERS]={Text3D:-1,...};
    Die drei Punkte sollen da sein, das sagt dem Compiler, dass es für alle Indizes gemacht wird.



    Außerdem solltest du bei deinem EndSpawnProtection abfragen, ob er die Protection noch hat.
    if(!InProtectionMode[playerid]) return 1;

    format(strP,sizeof(strP),Spieler[playerid][Bank],"{BDBDBD}[{00FFFF}Drogen:{FF00FF}%s{BDBDBD}]\n",Spieler[playerid][Drogen],"{BDBDBD}[{00FFFF}Materials:{FF00FF}%s{BDBDBD}]\n",Spieler[playerid][Materials]);
    Zu
    format(strP,sizeof(strP),"%s{BDBDBD}[{00FFFF}Drogen:{FF00FF}%s{BDBDBD}]\n""{BDBDBD}[{00FFFF}Materials:{FF00FF}%s{BDBDBD}]\n",strP,Spieler[playerid][Drogen],Spieler[playerid][Materials]);




    Außerdem muss an das obere Format, da lange, ganz an das Ende vor die Klammer noch
    ,Spieler[playerid][Bank]
    hin.

    Das else stand unter der falschen if-Abfrage.


    if(dialogid == DIALOG_LOGIN) //Wenn der Dialog-Login aufgerufen wird
    {
    if(response == 0) //Falls der Spieler auf abbrechen drückt
    {
    return 1;
    }
    if(response == 1) //Falls der Spieler auf Login drückt
    {
    if(!strlen(inputtext)) //Hier wird überprüft ob was eingegben wurde
    {
    SendClientMessage(playerid,-1,"Dein angegebenes Passwort war nicht lang genug!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login", "Abbrechen"); //Dialog erneut zeigen
    return 1;
    }
    else
    {
    SendClientMessage(playerid,-1,"Spieler wird geladen!");
    SpawnPlayer(playerid);
    Login(playerid,MD5_Hash(inputtext));
    return 1;
    }
    }
    }
    if(dialogid == DIALOG_REGISTER) //Falls der DIALOG_REGISTER aufgerufen wird
    {
    if(response == 0) //Falls er auf abrrechen drückt..
    {
    return 1;
    }
    if(response == 1)
    {
    if(!strlen(inputtext)) //Überprüft ob was eingegeben wird...
    {
    SendClientMessage(playerid,-1,"Dein eingegebenes Passwort war nicht lang genug!");
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"Registrierung","Herzlichen Willkommen auf Incredible German Reallife!\nBitte gib nun dein Password ein, um auf dem Server Spielen zu können!","Register","Abbrechen");
    return 1;
    }
    else
    {
    SendClientMessage(playerid,-1,"Spieler wird geladen!");
    Register(playerid,MD5_Hash(inputtext));
    SpawnPlayer(playerid);
    return 1;
    }
    }
    }