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.
Wenn du das rückgängig machst, dann ist es wieder 2.3MB?
Wenn ja, dann poste bitte mal das was du eingefügt hast. 130MB ist etwas zu viel.
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);
}
new const MaxPlayers = MAX_PLAYERS;
new const MaxVehicles = MAX_VEHICLES;
Das macht doch keinen Sinn...
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
Wenn du das umbenennen willst, mach es so:
#define MaxPlayers MAX_PLAYERS
#define MaxVehicles MAX_VEHICLES
Da muss ich meinem Vorposter recht geben..das ist absoluter Schwachsinn
Wenn du das umbenennen willst, mach es so:
#define MaxPlayers MAX_PLAYERS
#define MaxVehicles MAX_VEHICLES
Macht das einen großaritgen unterschied?
Macht das einen großaritgen unterschied?
Es ist aufjedenfall 1000x besser als:
new const MaxPlayers = MAX_PLAYERS;
new const MaxVehicles = MAX_VEHICLES;
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
Habe ich bereits gemacht
Ist auf 20
//
ändert nichts daran, ist trotzdem 130MB groß, also liegt es an etwas anderem.
Hat jemand eine Ahnung, was genau das verursachen kann?
Das kann viele Gründe haben. Hast du mal alles rückgängig gemacht, was du gemacht hast?
Irgendwelche Includes eingefügt, oder das crashdetect Plugin?
Hast du die alte amx mal gelöscht, bzw. die pwn mal umbenannt?
Ich kommentiere gerade alles aus was ich in der letzten Zeit gemacht habe, war gottseidank nicht viel.
Ich lösche auch mal die plugins aus dem script die ich aktualisiert habe.
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");
Variante 1, da sich der Inhalt des Textdraws nicht ändert.
Jeden Tag ein Backup machen
Oder einfach Dropbox verwenden, da wird bei jeder Änderung ein Backup gemacht.
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..