Wie sieht der Code aus?
Beiträge von Jeffry
-
-
Ah, dann musst du
new dest[256];
mysql_fetch_row(dest);
nutzen, vor "new val...". -
if(mysql_num_rows() != 0)
zu:
while(mysql_retrieve_row())Bzw vor "new val...":
mysql_retrieve_row();Kommt auf's gleiche raus.
-
Mache es so:
public LoadFraktionDutyPoints()
{
mysql_function_query(dbhandle, "SELECT * FROM dutypoints", true, "OnFraktionDutyPointsLoad", "");
return 1;
}
public OnFraktionDutyPointsLoad()
{
new num_rows, num_fields;
cache_get_data(num_rows, num_fields, dbhandle);
for(new i = 0; i < num_rows; i++)
{
DutyInfo[i][Duty_X] = cache_get_field_content_float(i, "DutyX", dbhandle);
DutyInfo[i][Duty_Y] = cache_get_field_content_float(i, "DutyY", dbhandle);
DutyInfo[i][Duty_Z] = cache_get_field_content_float(i, "DutyZ", dbhandle);
CreatePickup(1247, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
}
return 1;
}Das hier löschen:
//Dutypoints laden
for(new i=0; i<sizeof(DutyInfo); i++)
{
CreatePickup(1247, 1, DutyInfo[i+1][Duty_X], DutyInfo[i+1][Duty_Y], DutyInfo[i+1][Duty_Z], 0);
/*if(i < 4)
{
//Cop-Duty-Points
CreatePickup(1247, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
Create3DTextLabel("/duty - In den Dienst gehen\n\
/equip - Ausrüstung entnehmen\n\
/clothes - Kleidung ändern", COLOR_RED, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 10, i, 1);
}
else
{
//Medic- & Ordnungsamt-Duty-Points
CreatePickup(1239, 1, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 0);
Create3DTextLabel("/duty - In den Dienst gehen\n\
/clothes - Kleidung ändern", COLOR_RED, DutyInfo[i][Duty_X], DutyInfo[i][Duty_Y], DutyInfo[i][Duty_Z], 10, i, 1);
}*/
} -
gibt es eine Funktion womit man die TextDraws auf jede Resolution gleich anzeigen lassen kann?
Nein, sowas gibt es nicht, da die Auflösung des Spielers nicht abgefragt werden kann.
Was du maximal machen könntest (ziemlicher Aufwand), wäre, für jede Auflösung die Textdraws anzulegen und dem Spieler einen Befehl zu geben, mit dem er seine Auflösung festlegen kann.
Anhand dessen bekommt er dann das der Auflösung entsprechende Textdraw angezeigt. -
Nimm das
new idx;
aus dem Befehl raus und schreibe es direkt unter OnPlayerCommandText hin, also direkt in der Zeile nach der ersten Klammer auf ({).Dazu dann noch direkt drunter
new cmd[256];
cmd = strtok(cmdtext, idx);Dann sieht dein Befehl so aus:
if(strcmp(cmd, "/veh", true) == 0) -
Poste bitte den Code mit Zeilenangaben wie in Punkt 2.3 beschrieben:
Tipps: Scripting-Probleme richtig erklären -
new gOOC[MAX_PLAYERS] = {1, ...};
Das hinter dem Gleichzeichen steht für alle Indizes. Die drei Punkte sind hier korrekt, das bedeutet, dass es auf alle Indizes angewendet wird.
-
Wie hast du g00C deklariert?
-
Dann versuche es mal so:
if(sscanf(params, "s", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");Das wäre dann, wenn du die Funktion anstatt dem Plugin nutzt.
-
if(!sscanf(params, "s[96]", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");
zu:
if(sscanf(params, "s[96]", entry))return SendClientMessage(playerid, COLOR_GREY, "{247BA6}* Benutze {009933}/gov [Nachricht]");format(string, sizeof(string), "%s: %s", PlayerInfo[playerid][pRank], GetName(playerid), entry);
zu:
format(string, sizeof(string), "[%s] %s: %s", PlayerInfo[playerid][pRank], GetName(playerid), entry);
Sofern pRank ein String ist, ansonsten [%d]. -
Versuche anstatt "localhost" im Server "127.0.0.1" zu nutzen, bzw. andersrum.
-
Schreiben von Daten per INSERT oder UPDATE. Das Erstellen der Tabelle mit CREATE TABLE.
Wenn du ein ausführliches Tutorial zu MySQL möchtest:
[jTuT] MySQL R41 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)Dort findest du auch, wie du Daten speicherst und die Tabelle erstellst.
-
Hast du dich neu registriert?
-
Da reicht sogar eine Tabelle:
FahrzeugID Name Preis 411 Porsche 18000 560 Audi 60000 Zum auslesen:
SELECT * FROM fahrzeuge WHERE FahrzeugID = 411;Beim enum, wenn du alle auslesen willst, dann ohne die where Bedingung, und per Schleife in das enum schreiben. So wie gewohnt, wie immer.
-
Hat er nicht deutlich gesagt, dass er keine 150 Spalten will? (was absolut verständlich ist, korrekt ist und auch immer so gemacht werden sollte, denn Spaltenbezeichner mit Nummern dabei sind völliger Humbug [Normalisierung!])
-------------------------
Was du vor hast kann über zwei Tabellen gelöst werden. Das Vorgehen findet über die Normalisierung statt.
Was willst du denn genau in der Tabelle für Werte speichern? Kannst du da mal ein zwei Beispiele machen, was du speichern willst?Anbei noch eine gut Erklärung zum Prinzip der Normalisierung von Datenbanken:
https://hosting.1und1.de/digit…ql-lernen-leicht-gemacht/
(siehe Punkt Normalisierung)Als Beispiel mal mit Alben und Liedern darauf:
Anstatt eine Tabelle zu machen mit Albumname und Song1, Song2, etc macht es mehr Sinn, zwei Tabellen zu machen, Tabelle 1 enthält die AlbumID und den Name dazu. Tabelle 2 enthält als Primärschlüssel sowohl die AlbumID als auch die SongID und den Name des Songs.So sieht dann ein Eintrag aus:
Tab1:
5 / Mein AlbumTab2:
5 / 1 / Mein Song
5 / 2 / Mein anderer SongDies wären dann zwei Songs aus dem Album 5. Da der Primärschlüssel aus Album und Song ID besteht, kann kein doppelter Eintrag vorkommen.
-
25 Zeichen sind zu wenig, du benötigst mindestens 32 Zeichen, im Code eventuell 33 wegen dem EOS Zeichen.
-
new name[MAX_PLAYER_NAME], plate[32];
GetPlayerName(playerid, name, MAX_PLAYER_NAME);
format(plate, sizeof(plate), "%c%c %d", name[0], name[1], random(500000)+1);Dann das Kennzeichen zu plate setzen.
-
Sobald ich jemanden als pLeader 1 mit Onduty tötet und dieser Wanteds hat, wird dieser in den knast teleportiert. Kurze Zeit später, 1-2 Sek. Stirbt die Person erneut im Knast.
Das liegt daran, dass du den Spieler bei OnPlayerDeath in den Knast setzt, das darf aber erst beim Spawn passieren.
Setze daher an der Stelle wo du aktuell das Setzen in den Knast hast (in OnPlayerDeath) eine Spielervariable auf 1 für den Spieler:
PlayerInfo[playerid][SpawnInKnast] = 1;Und frage diese bei OnPlayerSpawn ab, wenn diese 1 ist, setzt du ihn dort in den Knast.
-
Alles anzeigen
[17:46:06] [DEBUG] mysql_pquery(1, "INSERT INTO `timeban` (`Spieler`, `Grund`, `Admin`, `Dauer`) VALUES ('Don_Query', 'darum', 'Don_Query', '1487350086)", "", "")
[17:46:06] [DEBUG] CCallback::Create(amx=0x9919388, name='', format='', params=0xb5107334, param_offset=5)
[17:46:06] [DEBUG] CHandle::Execute(this=0x9919400, type=2, query=0x9981424)
[17:46:06] [DEBUG] CConnectionPool::Queue(query=0x9981424, this=0x97e4928)
[17:46:06] [DEBUG] CHandle::Execute - return value: true
[17:46:06] [DEBUG] mysql_pquery: return value: '1'
[17:46:06] [DEBUG] CConnection::Execute(query=0x9981424, this=0xb3924008, connection=0x9973c18)
[17:46:06] [DEBUG] CQuery::Execute(this=0x9981424, connection=0x9973c18)
[17:46:06] [ERROR]
[17:46:06] [DEBUG] CConnection::GetError(this=0xb3924008, connection=0x9973c18)
[17:46:06] [DEBUG] CCallback::Create(amx=0x9919388, name='OnQueryError', format='dsssd)Hier geht was schief.
Das Problem liegt hier:
mysql_format(handle, query, 200, "INSERT INTO `timeban` (`Spieler`, `Grund`, `Admin`, `Dauer`) VALUES ('%e', '%e', '%e', '%d)", name, reason, admin, dauer);
zu:
mysql_format(handle, query, 200, "INSERT INTO `timeban` (`Spieler`, `Grund`, `Admin`, `Dauer`) VALUES ('%e', '%e', '%e', '%d')", name, reason, admin, dauer);
(Ganz hinten nach %d ein ' eingefügt)