Aha, so heißt das enum.
Jetzt suche nach "[pInfo]".
Das was dort nach dem "new" steht, muss anstelle von "pInfo" in die beiden Funktionen die du in den Gamemode eingefügt hast.
Aha, so heißt das enum.
Jetzt suche nach "[pInfo]".
Das was dort nach dem "new" steht, muss anstelle von "pInfo" in die beiden Funktionen die du in den Gamemode eingefügt hast.
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.
Dass heißt die Variable nicht "pInfo", sondern irgendwie anders.
Suche mal in deinem "Dark.pwn" nach "pMember". So muss die Variable dann heißen.
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.
Wie schon gesagt, die zwei "Get..." müssen in den Code in dem pInfo deklariert ist, also in den Godfather Code. Ganz unten am besten.
Du musst oben unter die Includes schreiben:
new TicketAngenommen[MAX_PLAYERS];
(oder eben als boolean, falls du das willst)
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.
format(string, sizeof(string), "%s hat Skin %d", SpielerName(playerid), GetPlayerSkin(playerid));
TextDrawSetString(...);
Wenn du es für alle haben willst, eben einen Loop durch alle Spieler, und jeweils "string" mitgeben.
Ok, wo sehe ich das ein, im Task Manager oder wo ??
Yup, wenn du es auf deinem Rechner hast.
Ich bin bei gta-servers.de, da sieht man es im Control Panel.
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.
https://github.com/pBlueG/SA-MP-MySQL/releases, seite geht?
Dort gibt es das R5 nicht. ![]()
Du musst
TogglePlayerSpectating(playerid, 0);
machen, wenn du dich eingeloggt hast.