Höhe 480, Breite 640. Egal welche Auflösung dein Bildschirm hat, die gesamte Breite entspricht 640 und die gesamte Höhe entspricht 480. Nennen wir es Punkte.
Beiträge von Jeffry
-
-
Aber hier hast du es doch verwendet:
format(String1,sizeof(String1),"/Deagle: %d",Dm[0]);Wie ist es denn dort definiert? Lokal im Callback? Wenn ja, poste bitte davon mal mehr Code, damit ich sehe wie du das dort machst.
-
Ganz hinten im ersten Query:
Tode='%i', WHERE id='%i'
Zu
Tode='%i' WHERE id='%i' -
Du musst die Größe das anklickbaren Bereiches mit PlayerTextDrawTextSize anpassen. https://wiki.sa-mp.com/wiki/PlayerTextDrawTextSize Der X Wert ist die Position PLUS die Größe des nach rechts anklickbaren Bereiches. Der Y Wert ist die geschätzte Höhe.
Angenommen du erstellst dein Textdraw bei X = 120 und Y = 90. Dann machst du den Text "Hallo Welt" da rein. Sagen wir, der Text ist so groß, dass er in etwa über ein Zehntel deines Bildschirmes geht (musst du abschätzen, oder mit einem Lineal abmessen), dann heißt das 640 durch 10, das wäre 64. Somit ist PlayerTextDrawTextSize-X = 120 + 64 = 184.
Nun misst, bzw. schätzt, du die Höhe des Textdraws, sagen wir mal du bekommst den Text in etwa 20 mal untereinander hin, bis dein Bildschirm von oben nach unten voll damit wäre. Heißt also: 480 durch 20, das gibt 24. Somit wäre PlayerTextDrawTextSize-Y = 24.Bei dir also in etwa:
PlayerTextDrawTextSize(playerid, WeaponEQUIP[playerid][3], 482.666564, 3.6); -
-
Wann?
Beim registrieren, beim normalen speichern oder wird es beim Login vielleicht nicht geladen?Durch die gemachten Änderungen kann das allerdings nicht passiert sein.
-
Hm? Ich habe nur das von deinem geposteten Code übernommen. Bist du sicher, dass du alles richtig gemacht hast?
-
printf("[ADMIN] %s hat sich zum Strand Autohaus teleportiert.",playerid);
zu:
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
printf("[ADMIN] %s hat sich zum Strand Autohaus teleportiert.",pname); -
-
Schreibe es bei OnPlayerRequestClass rein.
-
tayson87:
Lass dir vor
mysql_function_query(MySqlConnection,query,false,"","");
mal das Query im Server Log ausgeben und poste dann in einem neuen Thread was im Log steht, und den Code nochmal dazu.
printf("query: %s", query);@Voxa:
Versuche es so:
case 1://parteiwahlen
{
if(WahlenOffen == 0)return SendClientMessage(playerid, GRAU, "Es sind keine Wahlen offen.");
new parteistring[256],count;
format(parteistring, sizeof(parteistring), "Partei\tLeiter\tStimmen\n");
for(new p=1;p<MAX_PARTEI;p++)
{
if(PartInfo[p][ParteiCreatet] != 0 && PartInfo[p][ParteiAusgeschlossen] == 0)
{
format(parteistring,sizeof(parteistring),"%s%s\t%s\t%i\n",parteistring,PartInfo[p][ParteiName],PartInfo[p][ParteiOwner],PartInfo[p][ParteiStimmen]);
count++;
}
}
ShowPlayerDialog(playerid, DIALOG_PARTEIWAEHLEN, DIALOG_STYLE_TABLIST_HEADERS, ""#SERVERFARBE""#SERVERNAME"{FFFFFF}: Partei wählen",parteistring,"Wählen", "Abbrechen");
if(count == 0)return SendClientMessage(playerid, GRAU, "Es existieren keine Parteien zum wählen.");
}Edit:
@Voxa: Oh ja! Das auch, gut gesehen!
-
Kommt drauf an wo du ShowPlayerLoginScreen verwendest.
Wahrscheinlich kannst du den Spieler bei OnPlayerRequestClass direkt Spawnen (SetSpawnInfo -> SpawnPlayer). -
Die Idee dahinter, die Queries kürzer zu gestalten, ist zwar gut, aber die Umsetzung ist meiner Meinung nach nicht gut. Das liegt wohl auch daran, dass so ein Query einfach nicht kürzer gemacht werden kann als es ist, oder zumindest kaum.
Grundsätzlich würde ich MySQL Anfängern, an die dies wohl gerichtet ist, strengstens davon abraten, dies oder ähnliches zu nutzen, da sie so das Prinzip MySQL nicht lernen. Außerdem sehe ich keinen wirklichen Vorteil in diesem System.Warum?
- Mehr Code
- Langsamer
- Fehleranfälliger (vor allem wenn der String von 1024 voll ist und man es nicht merkt)
- Funktionseinschränkend (OR geht zum Beispiel nicht)
- Unübersichtlicher als ein ganz normales Query
- Schlechte Wartbarkeit/Allgemeinverständlichkeit (niemand weiß, dass Name|Alter für Name und Alter steht, da hätte ich wenigstens & genommen)
Zudem kommt, dass wenn man mehrere Queries hat, die unterschiedliche Spalten in derselben Tabelle ändern, dann muss man die "rows" Variable für dieses Query jedes mal, bzw. oft, neu anlegen, das ist Speicherverschwendung, wenn man in Betracht zieht, dass kein wirklicher Vorteil dabei entsteht.Außerdem fehlt beim Insert die Möglichkeit ein Callback aufzurufen, mit welchem zum Beispiel die neu eingefügte ID (A_I) über den Cache ausgelesen werden kann.
-
Dann musst du nach
Login(playerid,inputtext);
das hier nutzen:
http://wiki.sa-mp.com/wiki/SetSpawnInfo
und:
TogglePlayerSpectating(playerid,false);Natürlich auch nach
Register(playerid,inputtext); -
Poste bitte den Code von OnDialogResponse.
-
Dein Code geht dir auf die Bretter, wenn jemand sowas macht:
ReplaceString("Gemüse", "Schoki & Gemüse", string);
Dann wird nämlich gar nichts ausgegeben.So wäre es korrekt:
stock ReplaceString(const search[],const replace[], source[], size=sizeof source)
{
new i=strfind(source,search),tmp=strlen(search),len=strlen(replace);
if(i==-1) return 0;
for( ; i!=-1; i=strfind(source,search,false,i+len))
{
strdel(source,i,i+tmp);
strins(source,replace,i,size);
}
return 1;
} -
Um die Position hinter einem Fahrzeug herauszufinden, kannst du diese Funktion nutzen:
stock GetPosHinterFahrzeug(vehicleid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
{
if(GetVehicleModel(vehicleid) != 0)
{
new Float:a;
GetVehicleZAngle(vehicleid, a);
GetVehiclePos(vehicleid, x, y, z);
x -= (dist * floatsin(-a, degrees));
y -= (dist * floatcos(-a, degrees));
return true;
}
return false;
}Anstatt
GetVehiclePos(GetPlayerVehicleID(playerid),X,Y,Z);
dann eben:
GetPosHinterFahrzeug(GetPlayerVehicleID(playerid), 6.0, X , Y, Z);Und
Y-6
wieder zu:
Y -
#if defined FACTION_CARS_TUNEABLE
Hast du das auch definiert? Mach das ansonsten einfach mal weg, zusammen mit dem dazugehörigen #endif. -
Und wollte fragen wie man das ganze Übersichtlicher machen könnte wie zb bei DINI so
Dein Query an sich wird nicht funktionieren, da du "Alter" im Query hast (was ein SQL Befehl ist), es aber ohne Anfürungszeichen geschrieben hast.
zu:Ebenso fehlt hier etwas:
pInfo[playerid][pAlter],pInfo[playerid][pPerso],pInfo[playerid],GetPlayerMoney(playerid),
^^^
Zu deiner Frage wie man es übersichtlich schreiben kann:Ich finde diese Methode sehr übersichtlich. Das liegt wahrscheinlich auch daran, dass ich mich durch meine Arbeit mit SAP daran gewöhnt habe. Die Leerzeichen im Query sind bei PAWN eben etwas unschön im Query drin.
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new query[256];
format(query, sizeof(query), "UPDATE users SET ");
format(query, sizeof(query), "%s `Alter` = '%i', ", query, pInfo[playerid][pAlter] );
format(query, sizeof(query), "%s Personalausweis = '%i', ", query, pInfo[playerid][pPerso] );
format(query, sizeof(query), "%s Spawnchange = '%i' ", query, pInfo[playerid][pSpawnchange] );
format(query, sizeof(query), "%s WHERE id = '%i' ", query, pInfo[playerid][pDB] );
mysql_function_query(dbhandle, query, false, "", "");
}
return 1;
}Alternativ bietet sich das hier an:
stock SpielerSpeichern(playerid)
{
if(GetPVarInt(playerid,"loggedin")==1)
{
new query[256];
format(query, sizeof(query), "UPDATE users SET ");
format(query, sizeof(query), "%s`Alter`='%i',", query, pInfo[playerid][pAlter] );
format(query, sizeof(query), "%sPersonalausweis='%i',", query, pInfo[playerid][pPerso] );
format(query, sizeof(query), "%sSpawnchange='%i' ", query, pInfo[playerid][pSpawnchange] );
format(query, sizeof(query), "%sWHERE id='%i'", query, pInfo[playerid][pDB] );
mysql_function_query(dbhandle, query, false, "", "");
}
return 1;
} -
Dann machst du bei OnPlayerDisconnect:
if(DM[playerid][0] == 1)
{
DM[playerid][0] = 0;
Dm[0]--;
new String1[32];
format(String1,sizeof(String1),"/Deagle: %d",Dm[0]);
TextDrawSetString(Textdraw[6],String1);
}