stock AdminFarbe(playerid)
{
new farbe;
switch(PlayerInfo[playerid][pAdmin])
{
case 0: farbe = 0x000000FF;
case 1: farbe = 0x5A00FFFF;
case 2: farbe = 0x2800FFFF;
case 3: farbe = 0x2800FFFF;
case 1337: farbe = 0x009BFFFF;
case 1338: farbe = 0x505050FF;
case 2000: farbe = 0x088A8EFF;
case 2001: farbe = 0xFF7800FF;
case 2002: farbe = 0xFF0000FF;
}
return farbe;
}
stock AdminFarbeS(playerid)
{
new farbe[9];
switch(PlayerInfo[playerid][pAdmin])
{
case 0: farbe = "{000000}";
case 1: farbe = "{5A00FF}";
case 2: farbe = "{2800FF}";
case 3: farbe = "{2800FF}";
case 1337: farbe = "{009BFF}";
case 1338: farbe = "{505050}";
case 2000: farbe = "{088A8E}";
case 2001: farbe = "{FF7800}";
case 2002: farbe = "{FF0000}";
}
return farbe;
}
Beiträge von Jeffry
-
-
ocmd:givepremium(playerid, params[])
{
if(!isAdmin(playerid,1337))return SendClientMessage(playerid,0xFFFFFFFF,"Du hast nicht die benötigten Rechte.");
new string[145], returnid;
if(sscanf(params, "u", returnid))return SendClientMessage(playerid, WEISS, "BENUTZE: {FFFFFF}/givepremium [Name/ID]");
if(!IsPlayerConnected(returnid))return SendClientMessage(playerid, WEISS, "FEHLER: {FFFFFF}Der Spieler ist nicht online");
if(sInfo[returnid][sPremium] == PREMIUM_PERM)return SendClientMessage(playerid, WEISS, "FEHLER: {FFFFFF}Die Person hat bereits Premium!");
format(string, sizeof string, "Du hast dem Spieler %s Lifetime Premium gegeben.", GetPName(returnid)),
SendClientMessage(playerid, WEISS, string),
format(string, sizeof string, "%s hat dir Lifetime Premium gegeben.", GetPName(playerid)),
SendClientMessage(returnid, WEISS, string),
sInfo[returnid][sPremium] = PREMIUM_PERM;
return 1;
}stock GetPName(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
return name;
} -
Könntest du das anhand einem Beispiel erklären? Ich habe nicht verstanden was du vor hast.
-
Durch das neuste:
http://forum.sa-mp.com/showthread.php?t=102865 -
Hm, hast du zufällig eine mehrzeilige Meldung mit vielen Zahlen im Compiler stehen?

-
Dann poste bitte mal den MySQL Log der kommt, wenn die Fahrzeuge gespeichert werden (LOG_ALL).
Funktioniert es denn alles, wenn du den Schritt mit dem Kauf weg lässt? Poste dann ggf. noch den Befehl um das Fahrzeug zu kaufen.Zum Edit:
Poste bitte dein SaveCarCheck. -
Welchen Wert hat
#define DIALOG_247
?Wahrscheinlich 1, oder? Ändere das.
-
Hast du den Code auch wirklich so wie ich es dir gemacht habe?
Kannst du die Tabelle in der Datenbank mal leeren und es dann erneut testen? Ich kann mir nicht vorstellen, dass alle diese Probleme nur durch diese kleine Änderung, die ich vorgenommen habe, auftreten, das würde keinen Sinn machen.
Bist du sicher, dass sonst alles passt, beim Speichern? -
Wirst du immer gleich so persönlich, wenn man ein Verbesserungsvorschlag hat?
Was war daran persönlich? Ich habe lediglich gesagt, dass deine Methode nicht funktioniert, wenn du das persönlich nimmst tut es mir natürlich Leid, es war nicht persönlich gemeint.
Dein Benchmark ist relativ... Es geht nicht mal hervor wie deine Daten befüllt sind.
Im besten Fall und schlechtesten Fall haben Insertionsort und Bubblesort gleiche Laufzeiten und Aufrufe.
Aber im Average Fall hat der Insertionsort die Hälfte der Aufrufe wie Buublesort. [ n(n-1)/2 zu n(n-1)/4]
Ist mir schon klar, nur wenn du sagst "nur Bruchteile" dann geht man davon aus, dass das auch der Fall ist und es nicht bei gleichen Daten langsamer ist (irrelevant welche Daten). Ob es wirklich so viel besser ist wäre nur mit einem entsprechenden Benchmark herauszufinden, den du ja nicht gemacht hast.
Ich würde dazu gerne mal Testdaten sehen, ob das wirklich so viel aus macht wie du sagst, ich bezweifle das nämlich nach meinem Test. -
Füge das Nativechecker Plugin in deinen Server ein und poste dann was im Server Log steht, wenn du den Server startest.
Siehe im Anhang, da das englische Forum mal wieder down ist.EDIT: (Post unten)
John 'Hannibal' Smith: Da dein Problem behoben ist, wäre es gut, wenn du den Thread auf erledigt setzt. Danke! -
stock isPlayerAnAdmin(playerid, p_rang)
{
if(GetPVarInt(playerid,"Adminlevel")>=p_rang) return 1;
return 0;
}stock isPlayerNotAnAdmin(playerid, p_rang)
{
if(GetPVarInt(playerid,"Adminlevel")<p_rang) return 1;
return 0;
} -
Der Algorithmus hat nur ein Bruchteil der Laufzeit.
Also wenn du schon so Aussagen machst, dann belege sie bitte auch. Ich habe es gerade getestet.1.) Deine Funktion funktioniert nicht, die sprengt dir in der while-Zeile das tmpKills Array, wenn help = i = MAX_PLAYERS ist.
2.) Sie hatte nicht mal annähernd nur ein Bruchteil der Laufzeit wenn das Array nicht gesprengt wird, sondern war sogar langsamer, um 4%.
3.) Ja, es gibt schnellere Varianten, aber das spielt hier kaum eine Rolle und außerdem ist der Bubble-Sort für die meisten am einfachsten zu verstehen.Ich würde gerne deine Tests sehen, die deine Aussage bestätigen.
-
ocmd:setadmin(playerid, params[])
{
//if(!IsPlayerAdmin(playerid))
if(isPlayerNotAnAdmin(playerid,1))
{
format(query, sizeof query, "[AdmMsg]: %s, Du bist nicht befugt diesen Befehl zu benutzen!" ,Spielername(playerid));
return SendClientMessage(playerid, Rot, query);
}
new pID;
if(sscanf(params, "ui", pID, rang)) return SendClientMessage(playerid, Blau, "[SysMsg]: Benutze: /setadmin [SpielerID][Rang 0 - 5]");
SetPVarInt(pID, "Adminlevel", rang);
SendClientMessage(playerid, Blau, "Der Vorgang war erfolgreich");
new query[256];
mysql_format(Handle, query, sizeof(query), "UPDATE `users` SET `Adminlevel`='%i' WHERE `username`='%s'",rang,Spielername(pID));
mysql_pquery(Handle, query);
return 1;
}stock isPlayerAnAdmin(playerid, rang)
{
if(GetPVarInt(playerid,"Adminlevel")>=rang) return 1;
return 0;
}stock isPlayerNotAnAdmin(playerid, rang)
{
if(getPVarInt(playerid,"Adminlevel")<rang) return 1;
return 0;
}Nächstes mal erkläre bitte auch was nicht geht.
-
-
Das mit dem Owner sollte jetzt passen, hatte dort das id vergessen, kopiere den Code von oben nochmal.
Löst das auch das Problem mit den Models? Das kann ich nämlich so nicht direkt nachvollziehen.
EDIT:
Aufgrund der aktuellen Änderung im Tutorial hier die korrekte Version:
Spoiler anzeigen forward LoadCars_Data();
public LoadCars_Data()
{
new rows, id, createdVehs;
rows = cache_num_rows();
for(new i=0; i<rows; i++)
{
id = cache_get_field_content_int(i, "id");
if(id < 0 || id >= sizeof(CarInfo)) continue;
cache_get_field_content(i, "Besitzer", CarInfo[id][Besitzer],handle,34);
CarInfo[id][modelID] = cache_get_field_content_int(i, "ModelID");
CarInfo[id][c_x] = cache_get_field_content_float(i, "PosX");
CarInfo[id][c_y] = cache_get_field_content_float(i, "PosY");
CarInfo[id][c_z] = cache_get_field_content_float(i, "PosZ");
CarInfo[id][c_a] = cache_get_field_content_float(i, "PosA");
CarInfo[id][c_color1] = cache_get_field_content_int(i, "Color1");
CarInfo[id][c_color2] = cache_get_field_content_int(i, "Color2");
CarInfo[id][c_Preis] = cache_get_field_content_int(i, "Preis");
CarInfo[id][c_Gekauft] = cache_get_field_content_int(i, "Gekauft");
CarInfo[id][c_Versicherung] = cache_get_field_content_int(i, "Versicherung");
if(CarInfo[id][modelID] >= 400 && CarInfo[id][modelID] <= 611)
{
new text[64];
CarInfo[id][c_vID] = CreateVehicle(CarInfo[id][modelID], CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z], CarInfo[id][c_a], CarInfo[id][c_color1], CarInfo[id][c_color2], -1);
format(text, sizeof(text), "Besitzer: %s\nKaufpreis: %d\nReparier Kosten: %d",CarInfo[id][Besitzer],CarInfo[id][c_Preis], CarInfo[id][c_Preis] / 10);
CarInfo[id][Carlable] = Create3DTextLabel(text,0x0FFF00FF,CarInfo[id][c_x], CarInfo[id][c_y], CarInfo[id][c_z],20.0,0,1);
Attach3DTextLabelToVehicle(CarInfo[id][Carlable],CarInfo[id][modelID], 0.0, 0.0, 2.0);
}
else
{
printf("[Error] Model-ID %d existiert nicht (ID: %d).", CarInfo[id][modelID], id);
}
if(GetVehicleModel(MAX_VEHICLES-1) != 0) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_VEHICLES) erreicht.");
createdVehs++;
if(createdVehs == MAX_AUTOS) return print("Es können keine weiteren Fahrzeuge geladen werden, Limit (MAX_AUTOS) erreicht.");
}
return 1;
}
-
Information:
Es wurde ein Fehler im LoadFracVehicles_Data() Callback gefunden und behoben. Je nach eigenem System-Aufbau sollte der eigene Code in diesem Callback überarbeitet werden.Dank geht an @_iPit_: der auf den Fehler gestoßen ist.
-
LeijaT:
new playerName[MAX_PLAYER_NAME+1], string[sizeIndex];
Nur um anzumerken: Das +1 ist nicht notwendig, selbst wenn GetPlayerName die vollen 24 Zeichen ausschöpft.Und sizeIndex scheint nirgends definiert zu sein.
new playerName[MAX_PLAYER_NAME], string[145];@Stormi25:
Zitatdirekt ins format rein
Das geht nicht. -
Ja, genau. In einer if Abfrage eben.
-
http://forum.sa-mp.com/showthread.php?t=247893
Ein Beispiel zum überprüfen ob die Eingabe eine erlaubte Email Adresse ist, ist dabei. -
Du musst es so schreiben:
cmd:atm(playerid,params[])
{
if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
for(new i=0; i<sizeof(AtmPositions); i++)
{
if(IsPlayerInRangeOfPoint(playerid,5,AtmPositions[i][PosX],AtmPositions[i][PosY],AtmPositions[i][PosZ]))
{
ShowPlayerDialog(playerid,DIALOG_ATM,DIALOG_STYLE_LIST,"Bankautomat","Abbuchen\nEinzahlen\nÜberweisen\nKontostand","Auswählen","Schliesen");
return 1;
}
}
return 1;
}