Der Fehler scheint mir in einem anderen Bereich zu sein. Poste mal was drüber steht und markiere die Zeile mit dem Fehler.
Beiträge von Jeffry
-
-
Soweit ich weiß nicht. Du bist halt an die 144 (+1 EOS) Zeichen gebunden, dzau zählen auch die jeweils 8 Zeichen des Embeddings der Farbe.
-
drop[i][wd_ID] = CreatePickup(384,1,x,y,z,0);
zu:
drop[i][wd_ID] = CreatePickup(384,1,x,y,z,0);
break;Sonst erstellt es dir alle Pickups am gleichen Platz auf einmal.
-
In dem Code oben Zeile 8 bis 10 löschen.
-
Das ist soweit richtig, sofern die Rückgabewerte passend sind.
-
Wie gesagt, poste den Code in einem separaten Thread. Raten bringt ja nichts.
-
Laut dem Wiki können im Text nicht mehr als 4096 Zeichen angezeigt werden, daher brauchst du das auch nicht höher machen.
Versuche es, indem du das ShowPlayerDialog aus der Schleife nimmst, das darf nicht da drin sein:
if(strcmp(cmd, "/häuser", true) == 0)
{
new str[4096];
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pAdmin] >= 9)
{
if(AdminDuty[playerid] == 1)
{
for(new i = 0; i < sizeof(HouseInfo); i++)
{
format(str, sizeof(str), "%s{00FF00}%s {FFFF00}Hausnummer: {00FF00}%d {FFFF00}Besitzer: {00FF00}%s {FFFF00}Level: {00FF00}%d\n",str,HouseInfo[i][hDiscription],i,HouseInfo[i][hOwner],HouseInfo[i][hLevel]);
}
ShowPlayerDialog(playerid, INFODIALOG, DIALOG_STYLE_MSGBOX, "{FFFF00}Alle Häuser", str, "{FFFF00}Ok ","");
}
else
{
SendClientMessage(playerid, TEAM_BLUE_COLOR,"Du bist nicht im Admindienst");
}
}
}
return 1;
}Allerdings musst du bedenken, dass der MSGBOX Dialog keine 200 Zeilen haben kann (kann er schon, wird dann aber oben und unten über den Bildschirm raus gehen). Da musst du gegebenenfalls mit einer zweiten Seite arbeiten, oder mit einer LIST.
-
Erstelle dazu bitte einen neuen Thread und poste dort, wie du die Pickups erstellst, und den Code von OnPlayerPickUpPickup.
-
Nein, damit erstellt man MapIcons die als Checkpoints dargestellt werden.
Was verstehst du unter einem nicht "normalen Checkpoint"?
-
Der Checkpoint dort ist standardmäßig da und kann auch nicht entfernt oder erkannt werden. Wenn du aber Checkpoints dieser Art erstellen willst, dann schau dir mal diese Include an:
http://forum.sa-mp.com/showthread.php?t=250174 -
Versuche es so:
new IDName[MAX_PLAYER_NAME];
format(IDName, MAX_PLAYER_NAME, "%d", PlayerInfo[playerid][pUserID]);
SetPlayerName(playerid,IDName); -
Du musst format nutzen.
new str[145];
format(str, sizeof(str), "Du musst $%i Strafe sofort zahlen!", Endspeed);
SCM(playerid,COLOR_RED,str); -
Wieso hast du bei dem ersten case 0: nicht case 0..3: gemacht? Weil es ja von 0 bis 3 geht so wie unten auch, oder nicht?
Nein, denn 10% sind eine Zahl aus 10 (random) Zahlen. Daher nur 0. Und unten die 90% sind 1 bis 9 = 9 Zahlen aus 10 = 90%.
Zwecks dem playerid: Lass das dran, du musst ja bei den case's noch etwas einfügen, was die playerid betrifft (Geld geben oder so).
@JohnsonC
if(SpielerInfo[playerid][Deaths] > 0) KD[playerid] = floatdiv(SpielerInfo[playerid][Kills],SpielerInfo[playerid][Deaths]);
else KD[playerid] = 0.0; -
new randomgift = random(3) + 1;
Das kannst du entfernen, das brauchst du dann nicht mehr. Ich habe das random ja direkt in den switch gepackt.Die Schreibweise 1..9 heißt im switch: Alles von 1 bis 9. Also 1,2,3,4,5,6,7,8&9.
-
Das würde ich so machen:
switch(random(10))
{
case 0:
{
//10%
switch(random(3))
{
case 0:
{
//A
}
case 1:
{
//B
}
case 3:
{
//C
}
}
}
case 1..9:
{
//90%
switch(random(2))
{
case 0:
{
//D
}
case 1:
{
//E
}
}
}
} -
Die Chance dass genau ein Event zutrifft ist immer 100 / die Zahl im random.
In dem Fall also 100 / 3 = 33.3%Das +1 heißt, dass nicht zwischen 0,1,2 ausgesucht wird, sondern zwischen 1,2,3, wie du es bei deinem switch angegeben hattest.
-
Könntest du, aber das wird wie gesagt, mit ziemlicher Sicherheit kein Problem verursachen, solange du den Server nicht auf einem Rechner von 1995 laufen hast.

-
Ah, verstehe. Das liegt daran, dass OnVehicleSpawn beim Erstellen nicht aufgerufen wird. Du müsstest es beim Erstellen so machen:
forward OnPlayerVehiclesLoad(playerid);
public OnPlayerVehiclesLoad(playerid)
{
new num_fields, num_rows, engine, lights, alarm, doors, bonnet, boot, objective;
cache_get_data(num_rows, num_fields, handle);
if(!num_rows)return 1;
for(new i=0; i < num_rows; i++)
{
VehicleInfo[i][v_Besitzer] = cache_get_field_content_int(i, "besitzer", handle);
VehicleInfo[i][v_Model] = cache_get_field_content_int(i, "model", handle);
VehicleInfo[i][v_Color1] = cache_get_field_content_int(i, "color1", handle);
VehicleInfo[i][v_Color2] = cache_get_field_content_int(i, "color2", handle);
VehicleInfo[i][v_X] = cache_get_field_content_float(i, "x", handle);
VehicleInfo[i][v_Y] = cache_get_field_content_float(i, "y", handle);
VehicleInfo[i][v_Z] = cache_get_field_content_float(i, "z", handle);
VehicleInfo[i][v_R] = cache_get_field_content_float(i, "r", handle);
VehicleInfo[i][v_Schloss] = bool:cache_get_field_content_int(i, "schloss", handle);
VehicleInfo[i][v_ID] = cache_get_field_content_int(i, "id", handle);
printf("Schloss: %d", VehicleInfo[i][v_Schloss]);
if(VehicleInfo[i][v_Model] >= 400 && VehicleInfo[i][v_Model] <= 611)
{
VehicleInfo[i][v_DLID] = CreateVehicle(VehicleInfo[i][v_Model], VehicleInfo[i][v_X], VehicleInfo [i][v_Y], VehicleInfo[i][v_Z], VehicleInfo[i][v_R], VehicleInfo[i][v_Color1], VehicleInfo[i][v_Color2], -1, 0);
GetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
doors = 1; // Türen werden geschlossen
SetVehicleParamsEx(VehicleInfo[i][v_DLID], engine, lights, alarm, doors, bonnet, boot, objective);
}
else
{
printf("[FEHLER] Fahrzeug-Model %d existiert nicht (DB-ID: %d).", VehicleInfo[i][v_Model], i);
}
}
return 1;
} -
Wie schaut es mit der Performance aus wenn sagen wir mal 50 Leute zur selben Zeit ein Geschenk aufheben. Heißt doch es werden 50 Timer gestartet oder?
Das stimmt, aber das wird mit ziemlicher Sicherheit kein Problem darstellen.
Das Objekt wird gelöscht und später wieder erstellt, aber man erhält immer noch ein Geschenk wenn man an der selben Position den Befehl zum aufheben eingibt.
Stimmt! Im Befehl muss noch eine Abfrage hinzugefügt werden, also so:
CMD:takegift(playerid)
{
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;
if(GiftBox[i][e_oID] == -1) continue;
if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
{
RandomGift(playerid);
DestroyDynamicObject(GiftBox[i][e_oID]);
DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
GiftBox[i][e_oID] = -1;
return 1;
}
}
return 1;
} -
Das wird nicht möglich sein, da keiner weiß, was in der Datenbank steht. Außer es findet sich jemand, der den gleichen Code nutzt.
Am besten du kontaktierst den Ersteller des Codes, der kann dir sicher sagen, wie die Tabelle aufgebaut sein muss, und welche Daten sie beinhalten muss.Gegebenenfalls befindet sie sich auch im Download Paket.