Poste bitte die Zeile 10990 aus deinem AccountSpeichern, gegebenenfalls wieder ein paar Zeilen drum herum.
Beiträge von Jeffry
-
-
for(new x = -1; x < MAX_HAEUSER; x++)
zu:
for(new x = 0; x < MAX_HAEUSER; x++) -
Poste bitte die Zeile 11188 aus dem HaeuserBizzLaden-public, und gegebenenfalls das ganze Public dazu.
-
Dann dürfte es so eigentlich klappen:
CMD:giftlist(playerid,params[])
{
new str[MaxGifts*20];
for(new i=0; i<MaxGifts; i++)
{
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
format(str, sizeof(str), "%sGiftbox (ID: %i)\n", str, i);
}
if(strlen(str)) ShowPlayerDialog(playerid, DIALOG_GIFTLIST, DIALOG_STYLE_LIST, "Gift List", str, "Ok", "");
else SendClientMessage(playerid, 0xFF0000FF, "Error: Es wurde kein Geschenk erstellt.");
return 1;
} -
Welchen Wert hat denn dein MaxGifts?
Wie wäre es, wenn du statt einer MSGBOX eine LIST nimmst, das wäre sicher angenehmer zu bedienen, oder? -
CMD:giftlist(playerid,params[])
{
new str[512];
for(new i=0; i<MaxGifts; i++)
{
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
format(str, sizeof(str), "%sGiftbox (ID: %i)\n", str, i);
}
if(strlen(str)) ShowPlayerDialog(playerid, DIALOG_GIFTLIST, DIALOG_STYLE_MSGBOX, "Gift List", str, "Ok", "");
else SendClientMessage(playerid, 0xFF0000FF, "Error: Es wurde kein Geschenk erstellt.");
return 1;
} -
Wie respawnst du das Fahrzeug denn? (Code)
-
Die Funktion ist falsch (id muss returnt werden), sie muss so aussehen:
stock getClosestGift(playerid)
{
new id = -1, Float:tmp, Float:dist=15.0;
for(new i = 0; i<MaxGifts; i++)
{
tmp = GetPlayerDistanceFromPoint(playerid, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]);
if(tmp < dist)
{
dist = tmp;
id = i;
}
}
return id;
}
Ich habe das "max" mit "dist" ersetzt, da du es bereits definiert hattest.Und der Befehl müsste so aussehen:
CMD:dclosestgift(playerid,params[])
{
new string[100];
new i;
if(sscanf(params, "i", i))
{
i = getClosestGift(playerid);
if(i == -1) return SendClientMessage(playerid,-1,"Kein Geschenk in deiner Nähe!");
}
if(i < 0 || i >= sizeof(GiftBox)) return SendClientMessage(playerid,WHITE, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) return SendClientMessage(playerid,WHITE, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");DestroyDynamicObject(GiftBox[i][e_oID]);
DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
format(string, sizeof(string), "{00FFFF}Giftbox {FFFF00}(%i) {FF0000}deleted.",i);
SendClientMessage(playerid,WHITE, string);
GiftBox[i][e_oID] = -1;new path[64];
format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
if(fexist(path)) fremove(path);GiftBox[i][e_x] = 0.0;
GiftBox[i][e_y] = 0.0;
GiftBox[i][e_z] = 0.0;
return 1;
}
Dann wird, wenn du keine ID eingibst, die nächste ID genommen. -
Möglicherweise klappt das bei OnVehicleSpawn nicht direkt.
Hast du mal versucht, es bei http://wiki.sa-mp.com/wiki/OnVehicleStreamIn einzufügen?[wiki]OnVehicleStreamIn[/wiki]
-
Du meinst das hier?
GiftBox[i][e_GiftID] = CreateDynamic3DTextLabel("ID: %i.",0xFF0000FF, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+1.10,8.0);
Das zu:
new str[16];
format(str, sizeof(str), "ID: %i.", i);
GiftBox[i][e_GiftID] = CreateDynamic3DTextLabel(str,0xFF0000FF, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]+1.10,8.0);Außerdem müsstest du die Labels natürlich auch beim Delete-Befehl löschen, das darfst du nicht vergessen.
-
Das alleine reicht allerdings für die korrekte Funktionalität nicht aus.
Der Befehl muss so aussehen:
CMD:deletegift(playerid,params[])
{
new i;
if(sscanf(params, "i", i)) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} /deletegift [ID]");
if(i < 0 || i >= sizeof(GiftBox)) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) return SendClientMessage(playerid, 0xFF0000FF, "{FF1717}ERROR:{FFFFFF} Dieses Geschenk existiert nicht.");
DestroyDynamicObject(GiftBox[i][e_oID]);
GiftBox[i][e_oID] = -1;
new path[64];
format(path, sizeof(path), "/GiftBoxs/%d.ini", i);
if(fexist(path)) fremove(path);
GiftBox[i][e_x] = 0.0;
GiftBox[i][e_y] = 0.0;
GiftBox[i][e_z] = 0.0;
return 1;
}Ansonsten können einige Fehler auftreten.
-
Poste bitte den entsprechenden Code, ohne den lässt sich nichts sagen.
-
Dann könntest du die Geschwindigkeit abfragen und überprüfen was LÄNGER gedrückt wurde.
Das ist keine sichere Methode, denn man könnte ohne eine Taste gedrückt zu haben einen Berg herunter rollen, bzw man rollt auch noch weiter, wenn man hin und wieder den Pfeil zurück drückt.
-
Was macht die Funktion DmSpawn? Möglicherweise startet die einen Timer, die SPAWN aufruft?
-
[02:00:49] Error-ID: 1146 | Error: Table 'samp5604_LoR.cp_cronjob' doesn't exist
Die Tabelle cp_cronjob existiert in deiner Datenbank nicht. Die musst du anlegen.
-
Ok, und wo hast du definiert, ob es eine Interior ID geben darf oder nicht?
Oder ist es einfach nur: Es darf nur Interiors zwischen 1 und 20 geben?
Das wäre dann:
if(interior < 1 || interior > 20) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nur Interiors zwischen 1 und 20 möglich."); -
Hier findest du die entsprechende Funktion dazu:
http://forum.sa-mp.com/showthread.php?t=140183stock bool:IsVehicleDrivingBackwards(vehicleid)
{
new Float:Float[3];
if(GetVehicleVelocity(vehicleid, Float[1], Float[2], Float[0])) {
GetVehicleZAngle(vehicleid, Float[0]);
if(Float[0] < 90) {
if(Float[1] > 0 && Float[2] < 0) return true;
} else if(Float[0] < 180) {
if(Float[1] > 0 && Float[2] > 0) return true;
} else if(Float[0] < 270) {
if(Float[1] < 0 && Float[2] > 0) return true;
} else if(Float[1] < 0 && Float[2] < 0) return true;
}
return false;
}Wenn das false ist, fährt er vorwärts, ansonsten rückwärts.
-
Das "_:" entfernt den Tag von hausEnum, in dem die Länge des enums steht.
Einfügen musst du bei dem Unterstrich nichts. Das heißt nur, dass eine getaggte Variable ohne Tag ausgegeben wird.
Kannst du dir vorstellen wie:
new Text3D:label;
label = Create3DTextLabel(...);
printf("ID des Labels: %d", _:label)In deiner andere Funktion geht es vermeintlich, weil dein sizeof Wert kleiner oder gleich ist, als die Länge des enums. Wenn er kleiner ist, setzt es allerdings nicht alle Werte auf -1.
In diesem Fall war er größer, so hat er das Array gesprengt. -
Das hört sich sehr nach Lag an, denn normalerweise wird das sofort aufgerufen.
Wie ist es denn, wenn du außerhalb der Arena stirbst und neu spawnst? Also im ganz normalen Umfeld? Ist es da auch so?
Ansonsten poste mal dein OnPlayerSpawn. -
for(new i=0;i<sizeof(hInfo);i++)
Zu
for(new i=0;i<_:hausEnum;i++)