Dann hast du in Zone 1 keine Flagge erstellt, bzw. sie wurde nicht gespeichert.
Wie viele Zonen hast du denn?
Poste ggf. mal bitte die Funktionen M_GetPlayerCurrentZone und M_GetPlayerZone.
Dann hast du in Zone 1 keine Flagge erstellt, bzw. sie wurde nicht gespeichert.
Wie viele Zonen hast du denn?
Poste ggf. mal bitte die Funktionen M_GetPlayerCurrentZone und M_GetPlayerZone.
Hö? ![]()
Möglicherweise in einer Include versteckt, oder über Variablen zusammengebaut.
Naja, du kannst es so blockieren: Erstelle dir einen Filterscript und schreibe bei OnPlayerCommandText das rein:
if(!strcmp(cmdtext, "/deinemutterstincktecht", true)) return 1;
Dann solltest du den Befehl nicht mehr verwenden können.
@[LnD]JustMe.77: Dann wäre es wahrscheinlich gut, wenn du mal bei demjenigen nachfragst, der Zugriff auf den Code hat.
Du hast da jeweils nur ein Gleichzeichen, es müssen aber zwei sein.
=
Zu
==
if(!IsPlayerInRangeOfPoint(playerid, 5, GZ[zone][flagge_x], GZ[zone][flagge_y], GZ[zone][flagge_z])) return SendClientMessage(playerid, COLOR_WHITE, "Du stehst nicht an der Flagge dieser Zone!");
zu:
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
printf("zone: %d / %f / %f / %f", zone, GZ[zone][flagge_x], GZ[zone][flagge_y], GZ[zone][flagge_z]);
printf("Player: %f / %f / %f", x, y, z);
if(!IsPlayerInRangeOfPoint(playerid, 5, GZ[zone][flagge_x], GZ[zone][flagge_y], GZ[zone][flagge_z])) return SendClientMessage(playerid, COLOR_WHITE, "Du stehst nicht an der Flagge dieser Zone!");
Was wird so geprintet?
Also mein Monitor hat 23 Zoll und da ist das nicht der Fall. Wenn ich da ein Textdraw auf X = 1000 erstelle sehe ich es nicht mehr. ![]()
Bitte beachte das manche Monitore andere größe haben da ein 20+ Zoll Monitore eine pixel Anzahl von:
1920*1080 haben
Die Anzahl der tatsächlichen Pixel des Bildschirms hat damit nichts zu tun. Du kannst dir auf deinem Bildschirm ein Koordinatensystem vorstellen, das 640 auf 480 ist. Somit entsprechen die X = 640 den 1920 Pixel bei einem Full HD Bilschirm, und den 3840 Pixeln bei einem 4K Bildschirm.
Man muss aber immer mit der 640 x 480 rechnen. Wenn du für das Textdraw X = 1200 angibst, dann wirst du es nicht mehr sehen. ![]()
Ja, das kannst du so machen.
Fange am besten mal damit an, und wenn es nicht klappt, poste den Code dazu und erkläre, was nicht klappt.
if(GetVehicleModel(GetPlayerVehicleID(playerid) == 416) || GetVehicleModel(GetPlayerVehicleID(playerid) == 417))
{
if(GetVehicleModel(GetPlayerVehicleID(playerid) == 416) || GetVehicleModel(GetPlayerVehicleID(playerid) == 417))
{
zu:
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 416 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
{
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 416 || GetVehicleModel(GetPlayerVehicleID(playerid)) == 417)
{
Warum eigentlich zwei mal? Eins davon kannst du weg machen.
Beim Erstellen:
format(query, sizeof(query), "INSERT INTO gangfight (owner, maxX, maxY, minX, minY, flaggeX, flaggeY, flaggeZ, erstellt) VALUES ('%s', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%d')",
GZ[CZ[playerid][zid]][owner], GZ[CZ[playerid][zid]][max_x], GZ[CZ[playerid][zid]][max_y], GZ[CZ[playerid][zid]][min_x], GZ[CZ[playerid][zid]][min_y], GZ[CZ[playerid][zid]][flagge_x], GZ[CZ[playerid][zid]][flagge_y], GZ[CZ[playerid][zid]][flagge_z], CZ[playerid][zid]);
zu:
format(query, sizeof(query), "INSERT INTO gangfight (zoneid, owner, maxX, maxY, minX, minY, flaggeX, flaggeY, flaggeZ, erstellt) VALUES ('%s', '%f', '%f', '%f', '%f', '%f', '%f', '%f', '%d')",
CZ[playerid][zid], GZ[CZ[playerid][zid]][owner], GZ[CZ[playerid][zid]][max_x], GZ[CZ[playerid][zid]][max_y], GZ[CZ[playerid][zid]][min_x], GZ[CZ[playerid][zid]][min_y], GZ[CZ[playerid][zid]][flagge_x], GZ[CZ[playerid][zid]][flagge_y], GZ[CZ[playerid][zid]][flagge_z], 1);
Außerdem musst du dort "erstellt" auf true setzen.
Das Laden:
public LoadGZ()
{
new rows, fields, string[128], string2[128], Counter = 0, id;
cache_get_data(rows, fields);
for(new i = 0; i < rows; i++)
{
id = cache_get_field_content_int(i, "zoneid", handle);
if(id > -1 && id < sizeof(GZ))
{
GZ[id][zid] = id;
GZ[id][owner] = cache_get_field_content_int(i, "owner", handle);
GZ[id][max_x] = cache_get_field_content_float(i, "maxX", handle);
GZ[id][max_y] = cache_get_field_content_float(i, "maxY", handle);
GZ[id][min_x] = cache_get_field_content_float(i, "minX", handle);
GZ[id][min_y] = cache_get_field_content_float(i, "minY", handle);
GZ[id][flagge_x] = cache_get_field_content_float(i, "flaggeX", handle);
GZ[id][flagge_y] = cache_get_field_content_float(i, "flaggeY", handle);
GZ[id][flagge_z] = cache_get_field_content_float(i, "flaggeZ", handle);
GZ[id][erstellt] = true;
M_CreateZone(GZ[id][min_x], GZ[id][min_y], GZ[id][max_x], GZ[id][max_y], FrakColor(GZ[id][owner]), string, FrakColor(GZ[id][owner]));
GZ[id][pickup] = CreatePickup(1314,1,GZ[id][flagge_x],GZ[id][flagge_y],GZ[id][flagge_z],0);
GZ[id][label] = Create3DTextLabel("{0099FF}[Gangfight]{FFFFFF}\nTippe {0099FF}/angriff{FFFFFF} um das Gebiet anzugreifen.\nTippe {0099FF}/flagge{FFFFFF} um die Flagge zu erobern.", COLOR_WHITE, GZ[id][flagge_x], GZ[id][flagge_y], GZ[id][flagge_z], 20, 0);
format(string2, sizeof(string2), "%i| Besitzer: '%s'", GZ[id][zid], FrakName(GZ[id][owner]));
M_ZoneSetTextDraw(i, string2, FrakColor(GZ[id][owner]));
Counter++;
}
}
return printf("(%d) Gangzone(n) wurde(n) erfolgreich erstellt und geladen.", Counter);
}
Das return 1 fehlt nach den Nachrichten:
SendClientMessage(playerid, COLOR_GREY, " Du kannst keine No - DM Fraktionen als Auftrag geben !");
//hier return 1;
Frage 1:
Setze das Fahreug einfach ganz weit weg.
if (strcmp("/opark", cmd, true, 10) == 0)
{
if(IsPlayerInAnyVehicle(playerid) && GetVehicleModel(GetPlayerVehicleID(playerid)) == 525 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
if(PlayerInfo[playerid][pMember] == 24||PlayerInfo[playerid][pLeader] == 24)
{
if(!IsTrailerAttachedToVehicle(GetPlayerVehicleID(playerid)))
{
SendClientMessage(playerid, COLOR_GREY, " An deinem Abschleppwagen ist kein Auto angehängt!");
return 1;
}
new trailercar = GetVehicleTrailer(GetPlayerVehicleID(playerid));
if(!IsADtCar(trailercar))
{
SendClientMessage(playerid, COLOR_GREY, " Dieses Auto kann hier nicht geparkt werden!!");
return 1;
}
new id = GetPlayerVehicleID(playerid);
DetachTrailerFromVehicle(GetPlayerVehicleID(playerid));
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
SetPlayerPos(playerid, x, y, z);
SetVehiclePos(id, 9999.0, -9999.0, -200.0);
new carowner = GetDtCarOwner(trailercar);
new slot = GetDtCarOwnerSlot(carowner,trailercar);
PlayerCar[carowner][slot][CarPos_x] = 9999.0;
PlayerCar[carowner][slot][CarPos_y] = -9999.0;
PlayerCar[carowner][slot][CarPos_z] = -200.0;
PlayerCar[carowner][slot][CarRotate] = 0.0;
PlayerCar[carowner][slot][Abgeschleppt] = 1; //Nicht vergessen im enum hinzuzufügen!
if(carowner != 555)
{
OnPlayerCarUpdate(carowner,false);
SendClientMessage(carowner, COLOR_WHITE, "[ORDNUNGSAMT] Ihr Fahrzeug wurde abgeschleppt, es steht im Hof des Ordnungsamtes!");
}
SendClientMessage(playerid, COLOR_YELLOW, " Du hast das Fahrzeug erfolgreich abgeschleppt!");
return 1;
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du bist kein Mitglied des Ordnungsamtes!");
return 1;
}
}
else
{
SendClientMessage(playerid, COLOR_GREY, " Du musst einen Abschleppwagen fahren!");
return 1;
}
}
Frage 2:
Du fragst ab, ob das Fahrzeug das er freikaufen will abgeschleppt ist, wenn ja, dann setzt du es an die Position die du haben willst, und setzt Abgeschleppt auf 0.
Frage 3:
Da musst du noch abfragen, ob das Fahrzeug ein Player oder Gang Fahrzeug ist. Falls es ein Gangfahrzeug ist, und der Spieler nicht in der Ordnungsamt-Fraktion ist, dann verbietest du ihm den Befehl.
Ich kann dir da keinen Code geben, da ich dein Gangfahrzeuge-System nicht kenne.
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 TextDrawTextSize-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 TextDrawTextSize-Y = 24.
Poste bitte einen Screenshot deiner Tabellenstruktur, und vielleicht auch ein Bild von den Daten in der Tabelle.
Poste außerdem den Befehl zum löschen einer Zone.
Du kannst die Abfrage auch komplett weg lassen, denn wenn er den State PASSENGER hat, dann kann er nur auf einem der beiden Sitze sein, daher ist die Abfrage nicht notwendig.
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 582 && GetPlayerVehicleSeat(playerid) == 2)
zu:
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 582)
Wo bekomme ich diese Textur für Textdraw's?
Das ist ein Punkt, mit sehr großer X TextDrawLetterSize. Also ein extrem langgezogener Punkt.
Das musst du abschätzen. Die X Größe kannst du mit einer Box bestimmen, das würdest du noch sehen, die Y Größe kannst du so aber nicht bestimmen, da geht nur schätzen. Ich schätze immer beides, das hat man recht schnell raus. Als 100% Wert ist es 640x480 (also das wäre der gesamte Bildschirm).
Könntest du mit strfind machen, aber das ist nicht wirklich ratsam.
Ich würde dir vorschlagen, dort wo du die Liste erstellst, also den Dialog anzeigst:
tmpID[playerid][i] = VehicleInfo[globalId][vId];
Und unter den Includes:
new tmpID[MAX_PLAYERS][MAX_VEHICLES];
MAX_VEHICLES dazu ändern, was bei VehicleInfo als Größe steht.
Dann kannst du im Dialog mit
tmpID[playerid][listitem]
auf die ID zugreifen.
Ja, in dem enum dazu.
Ja, Zeile 8 damit ersetzen.
Hier hat einer einen Mirror gepostet:
http://forum.sa-mp.com/showpost.php?p=3457727&postcount=980