if(GZ[i][erstellt] != 1)continue;
Zu
if(GZ[i][erstellt] != 1)return 1;
Hab ich übersehen.
if(GZ[i][erstellt] != 1)continue;
Zu
if(GZ[i][erstellt] != 1)return 1;
Hab ich übersehen.
Gibst du die Nachricht in einem Filterscript aus, oder wo wird die globale Nachricht ausgegeben?
Klappt es denn beim Report? Oder wird die globale Nachricht da auch angezeigt?
Da fehlt doch alles. Schau dir doch mal meinen Code und deinen Code an. Der Unterschied ist ja wohl nicht zu übersehen.
stock LoadGZ_(i)
{
new string[500], str[64];
mysql_query("SELECT * FROM gangwar");
mysql_store_result();
new counter = 0;
mysql_fetch_row(string);
strins(string, "|", strlen(string));
new oldx=0;
new count=0;
for(new x=0; x<strlen(string); x++)
{
if(string[x]=='|')
{
count++;
new tmpstring[sizeof(string)]; tmpstring=string;
strdel(tmpstring, x, strlen(tmpstring));
strdel(tmpstring, 0, oldx+1);
switch(count)
{
case 2: GZ[i][owner] = strval(tmpstring);
case 3: GZ[i][max_x] = floatstr(tmpstring);
case 4: GZ[i][max_y] = floatstr(tmpstring);
case 5: GZ[i][min_x] = floatstr(tmpstring);
case 6: GZ[i][min_y] = floatstr(tmpstring);
case 7: GZ[i][flagge_x] = floatstr(tmpstring);
case 8: GZ[i][flagge_y] = floatstr(tmpstring);
case 9: GZ[i][flagge_z] = floatstr(tmpstring);
case 10: GZ[i][erstellt] = strval(tmpstring);
}
oldx=x;
}
}
GZ[i][zid] = i;
if(GZ[i][erstellt] != 1)return 1;
format(str,64,"%d |Besitzer: '%s'",i,FrakName(GZ[i][owner]));
M_CreateZone(GZ[i][min_x],GZ[i][min_y],GZ[i][max_x],GZ[i][max_y],FrakColor(GZ[i][owner]),str,FrakColor(GZ[i][owner]));
GZ[i][pickup] = CreatePickup(1314,1,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],0);
GZ[i][label] = Create3DTextLabel("Tippe '/angriff', um das Gebiet anzugreifen.\nTippe '/flagge', um die Flagge zu erobern.",Rot,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],20,0);
counter ++;
return printf(" '%d' Gangzone(n) wurde(n) erfolgreich erstellt und geladen.",counter);
}
Das i mit zoneid zu ersetzen kannst du machen, musst du aber nicht.
stock CheckBadWords(playerid, text[])
{
new BadWords[][] = {
"schlampe"
};
for(new i = 0; i < sizeof(BadWords); i++)
{
if(strfind(text, BadWords[i], true) != -1)
{
new KMessage[128];
format(KMessage, sizeof(KMessage), "System: (%d)%s wurde 5 Minuten vom System gemutet. Grund: Beleidigung", playerid,GetName(playerid));
SendClientMessage(playerid, RED, KMessage);
SpielerInfo[playerid][Mute] = 5;
SendClientMessage(playerid,RED,"System: Bitte unterlasse das Benutzen von Schimpfwörtern.");
return 1;
}
}
return 0;
}
Mit
if(CheckBadWords(playerid,text))return 0;
Ja, nur ohne die while Schleife und mit:
format(string, sizeof(string), "SELECT * FROM gangwar WHERE id = %d", zoneid);
stock LoadGZ()
{
new string[500], str[64];
mysql_query("SELECT * FROM gangwar");
mysql_store_result();
new i = -1, counter = 0;
while(mysql_fetch_row(string))
{
i++;
strins(string, "|", strlen(string));
new oldx=0;
new count=0;
for(new x=0; x<strlen(string); x++)
{
if(string[x]=='|')
{
count++;
new tmpstring[sizeof(string)]; tmpstring=string;
strdel(tmpstring, x, strlen(tmpstring));
strdel(tmpstring, 0, oldx+1);
switch(count)
{
case 2: GZ[i][owner] = strval(tmpstring);
case 3: GZ[i][max_x] = floatstr(tmpstring);
case 4: GZ[i][max_y] = floatstr(tmpstring);
case 5: GZ[i][min_x] = floatstr(tmpstring);
case 6: GZ[i][min_y] = floatstr(tmpstring);
case 7: GZ[i][flagge_x] = floatstr(tmpstring);
case 8: GZ[i][flagge_y] = floatstr(tmpstring);
case 9: GZ[i][flagge_z] = floatstr(tmpstring);
case 10: GZ[i][erstellt] = strval(tmpstring);
}
oldx=x;
}
}
GZ[i][zid] = i;
if(GZ[i][erstellt] != 1)continue;
format(str,64,"%d |Besitzer: '%s'",i,FrakName(GZ[i][owner]));
M_CreateZone(GZ[i][min_x],GZ[i][min_y],GZ[i][max_x],GZ[i][max_y],FrakColor(GZ[i][owner]),str,FrakColor(GZ[i][owner]));
GZ[i][pickup] = CreatePickup(1314,1,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],0);
GZ[i][label] = Create3DTextLabel("Tippe '/angriff', um das Gebiet anzugreifen.\nTippe '/flagge', um die Flagge zu erobern.",Rot,GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],20,0);
counter ++;
}
return printf(" '%d' Gangzone(n) wurde(n) erfolgreich erstellt und geladen.",counter);
}
Der Teil der "for(new x=0; x<strlen(string); x++)" Schleife kann auch mir sscanf ersetzt werden. Da ich aber kein sscanf nutze, gebe ich es dir so. Zudem finde ich es persönlich besser das so zu schreiben.
Aber eigendlich müsste doch das Compilen länger dauern, da er die Includes erst auslesen muss und replacen muss.
Das ist, wenn überhaupt, unwesentlich, außer du hast eine Million Includes.
Includes werden beim kompilieren vom Compiler gelesen und praktisch an die Stelle im Code geschrieben, an der das "include" steht.
Beispiel:
test.inc
-------------
Hallo
ich
gamemode.pwn
--------------------
#include <test>
bin
Jeffry.
In der AMX steht anschaulich (natürlich steht es da nicht so, da es ja umgewandelt wird):
Hallo
ich
bin
Jeffry.
Es hat keine Auswirkung auf deinen Server ob und wie viele Includes du verwendest, oder ob du alles in den Gamemode schreibst.
Schau dir mal hier die "LoadVehicles" Funktion an:
http://forum.sa-mp.com/showthread.php?t=186495
So musst du das auch machen.
UPDATE = Speichern
SELECT = Auslesen (das brauchst du!)
Sag das doch gleich.
stock SaveGZ()
{
for(new i,string[500]; i<MAX_GZ; i++)
{
if(GZ[i][max_x] == 0.0 && GZ[i][min_x] == 0.0) continue;
format(string,sizeof(string),"INSERT INTO gangwar (id,owner,maxX,maxY,minX,minY,flaggeX,flaggeY,flaggeZ,erstellt) VALUES (%d,'%s','%f','%f','%f','%f','%f','%f','%f','%s')",
i,GZ[i][owner],GZ[i][max_x],GZ[i][max_y],GZ[i][min_x],GZ[i][min_y],GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],GZ[i][erstellt]);
format(string,sizeof(string),"%s ON DUPLICATE KEY UPDATE `owner`='%s',`maxX`=%f,`maxY`=%f,`minX`=%f,`minY`=%f,`flaggeX`=%f,`flaggeY`=%f,`flaggeZ`=%f,`erstellt`='%s';",
string, GZ[i][owner],GZ[i][max_x],GZ[i][max_y],GZ[i][min_x],GZ[i][min_y],GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],GZ[i][erstellt]);
mysql_query(string);
}
return 1;
}
Dann sollte es nur eine Zeile erstellen.
Lösche natürlich vorher die Daten in der Datenbank, die jetzt noch drin sind.
Die muss gedrückt gehalten werden.
W, nicht Space.
W = Im Fahrzeug
Space = Zu Fuß
In Hydra = Im Fahrzeug.
woran liegt das eigentlich jetzt das der diese eine position (ZAngle) nicht greift? vielleicht kann man sich dazu noch was einfallen lassen.
SA-MP eben, mit einem Programmierer der sich nicht um Bugs kümmert, auch wenn sie schon 5 Jahre existieren.
Kannst es ja mit einem Timer versuchen, aber da ist es besser wenn du die einzelnen Funktionen einfach nimmst um das Auto zu reparieren.
Gut wenn das Gedächtnis doch noch etwas funktioniert.
Dann lasse das SetVehicleToRespawn für die Fraktionsfahrzeuge weg und nutze
http://wiki.sa-mp.com/wiki/RepairVehicle
und
http://wiki.sa-mp.com/wiki/SetVehicleHealth
http://forum.sa-mp.de/gta-mult…hnelligkeit-2#post1694731
Ich hab da vor einer Weile etwas geschrieben. Es funktioniert, ist aber nicht perfekt. Allerdings ist es meines Wissens nach das beste was es dazu gibt, da es bis jetzt noch niemand erweitert hat.
Nach dem gleichen Prinzip wie du das Auto erstellst/löschst, nur eben mit CreateObject.
Zudem dann AttachObjectToVehicle nutzen.
EDIT:
Kaliber: Ohja, die Klammer war an der falschen Stelle.
EDIT2:
Kaliber: Hab's schon gesehen
Also genau das was auch mit dem Query übergeben wird, dann stimmt das doch.
Ich verstehe dein Problem nicht ganz.
Deine Variablen im Server haben (bis auf die ID 0) alle keine Werte, daher werden auch an die Datenbank nur die Werte von ID 0 übergeben. Du siehst ja selbst, dass im Log alle Zeilen, bis auf die erste, auf 0 stehen.
Da solltest du dir mal den Code anschauen, mit dem du die Variablen
GZ[i][owner],GZ[i][max_x],GZ[i][max_y],GZ[i][min_x],GZ[i][min_y],GZ[i][flagge_x],GZ[i][flagge_y],GZ[i][flagge_z],GZ[i][erstellt]
befüllst.
Nur mal testweise:
Wenn du
SetVehicleToRespawn(v);
auskommentierst, schauen deine Fraktionsfahrzeuge dann in die richtige Richtung (mal davon abgesehen, dass Sie nicht repariert etc sind)?
Ich erinnere mich, vor einigen Jahren das selbe Problem gehabt zu haben, es lag damals daran, dass die ZAngle nicht direkt nach SetVehicleToRespawn funktioniert hat.
Das Query wird doch korrekt ausgeführt.
Wie sieht denn deine Datenbank aus? Es müssen doch Daten dort drin sein, in der "gangwar" Tabelle.
Ich kenne keines, aber du könntest dir das Haus-System als Beispiel nehmen. Ob du jetzt einen Checkpoint setzt, oder ein Fahrzeug nimmt sich ja nicht viel, vom Aufbau ist es das selbe:
[ SCRIPTING ] Dynamisches Checkpoint-Haussystem mit 3DText | Streamer & MySQL R7 (Cached)
Dann muss jetzt aber etwas im Log stehen.
Poste bitte den Log und den Code wie du ihn jetzt hast.