Ich hatte dir den Code doch gegeben, mit den PlayerTextDraws. Wenn du es mit normalen Textdraws machst, und diese auch noch bei OnPlayerConnect MAX_PLAYERS mal erstellst, dann sprengst du das Limit.
Mache es mit den PlayerTextDraws, wie ich es dir gegeben habe (Textdraw Design musst du da eventuell anpassen, das habe ich nur von dir übernommen).
Beiträge von Jeffry
-
-
Debugge es so und poste dann was im Server Log steht, wenn du die Funktion aufrufst:
public SaveFactionCars(bool:destroy)
{
printf("SaveFactionCars aufgerufen.");
if(fexist(FACTION_CAR_FILE)) fremove(FACTION_CAR_FILE);
new File:fFile=fopen(FACTION_CAR_FILE,io_append),Content[1024];
for(new fc;fc<sizeof(FactionCars);fc++)
{
printf("fc: %d | fVehid: %d", fc, FactionCars[fc][fVehid]);
if(FactionCars[fc][fVehid] >= 400 && FactionCars[fc][fVehid] <= 611)
{
for(new i=0; i<13; i++) FactionCars[fc][fTuning][i] = GetVehicleComponentInSlot(FactionCars[fc][fCarid], i);
format(Content,sizeof(Content),"%d %.3f %.3f %.3f %.3f %03d %03d %02d %02d %02d %02d %02d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\r\n",
FactionCars[fc][fVehid],
FactionCars[fc][fPos][0],
FactionCars[fc][fPos][1],
FactionCars[fc][fPos][2],
FactionCars[fc][fPos][3],
FactionCars[fc][fCol][0],
FactionCars[fc][fCol][1],
FactionCars[fc][fFaction][0],
FactionCars[fc][fFaction][1],
FactionCars[fc][fFaction][2],
FactionCars[fc][fFaction][3],
FactionCars[fc][fFaction][4],
FactionCars[fc][fTuning][0],
FactionCars[fc][fTuning][1],
FactionCars[fc][fTuning][2],
FactionCars[fc][fTuning][3],
FactionCars[fc][fTuning][4],
FactionCars[fc][fTuning][5],
FactionCars[fc][fTuning][6],
FactionCars[fc][fTuning][7],
FactionCars[fc][fTuning][8],
FactionCars[fc][fTuning][9],
FactionCars[fc][fTuning][10],
FactionCars[fc][fTuning][11],
FactionCars[fc][fTuning][12],
FactionCars[fc][fTuning][13],
FactionCars[fc][fPrice]);
printf("Content: %s", Content);
fwrite(fFile,Content);
if(destroy == true)
{
if(DestroyVehicle(FactionCars[fc][fCarid]))
FactionCars[fc][fCarid] = -255;
}
}
}
printf("Ende.");
fclose(fFile);
return true;
} -
1.)
new holzID[MAX_PLAYERS][5];
Der zweite Index ist dann die Anzahl der abgelieferten Hölzer. Beachte, dass du bei 0 anfangen musst (0 bis 4).2.)
Die Kettensäge ist weg? Kann ich dir nicht sagen warum, gib sie ihm einfach wieder.3.)
Wenn du ihm eine Kettensäge gibst, dann kann er die ganz normal weg-switchen, mit Q und E. -
Die sind aber sehr groß
Wenn du SetPlayerAttachedObject verwendest, dann kannst du es mit dem fScale kleiner machen, das passiert in dem Video auch.leuchtet dieses Object auch ?
Probiere es einfach mal bei Nacht (?) aus. -
in OnplayerConnect reingeschoben und nun geht es

Das liegt daran, dass es da nichts bringt. Du kannst es auch einfach entfernen, in beiden Callbacks, das kommt auf's gleiche raus.
SetSpawnInfo darfst du natürlich nicht vergessen. -
Genau. Erst kleines X und kleines Y, dann großes X und großes Y.
EDIT: (Post unten)
tayson87: Da dein Problem behoben ist, wäre es gut, wenn du den Thread auf erledigt setzt. Danke!
-
Kann es sein, dass du MAX_PLAYERS mit Klammern deklariert hast?
#define MAX_PLAYERS (500)
Zum Beispiel?Ersetze in deinem Code das MAX_PLAYERS mal mit der gewünschten Zahl.
-
Die Koordinaten der Zone sind wahrscheinlich falsch. In der letzten Zeile zum Beispiel:
1497.0000,2216.0000,1243.0000,2057.00001497 ist nicht kleiner als 1243 und
2216 ist nicht kleiner als 2057.
Jeweils müssen beide vertauscht werden.Prüfe das bei allen, dass jeweils Wert 1 kleiner als Wert 3 ist, und Wert 2 kleiner als Wert 4.
Pass bei den negativen Werten auf. -10 ist kleiner als -5!
-
Na dann bist du in keinem Gebiet.
Poste ansonsten mal die GetPlayerFightzone Funktion und das was dazu gehört. -
In Zeile 29
if(IsPlayerConnected(i))
Zu
if(TempZone != -1 && IsPlayerConnected(i))Oder die ganze ForEachPlayer Schleife in Zeile 40 setzen, das wäre besser.
-
if(!IsPlayerInAnyVehicle(playerid))return 1;
new vehicleid=GetPlayerVehicleID(playerid);zu:
new vehicleid = -1, Float:x, Float:y, Float:z;
if(!IsPlayerInAnyVehicle(playerid))
{
for(new i=0; i<sizeof(FraktAuto); i++)
{
if(FraktAuto[i][id_x])
{
GetVehiclePos(FraktAuto[i][id_x], x, y, z);
if(IsPlayerInRangeOfPoint(playerid, 5.0, x, y, z))
{
vehicleid = i;
break;
}
}
}
}
else vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid == -1) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du bist nicht in oder nahe einem Fraktionsfahrzeug."); -
Doch, die bekommst du mit GetObjectPos, von Holzblock[playerid].
new Float:x, Float:y, Float:z;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
GetObjectPos(Holzblock[i], x, y, z);
//...
} -
Doch, dann ist es sogar gut so wie du es machst.
Du machst dort dann eine Schleife durch alle Spieler und fragst ab, oder der Spieler in der Nähe eines Balken-Objektes ist (GetObjectPos & IsPlayerInRangeOfPoint). Falls ja, dann fragst du ab ob i == playerid ist. Falls nein ist es nicht sein Balken, falls ja kann er ihn aufnehmen. Ist er in keiner Nähe eines Balkens, dann schickst du die entsprechende Meldung, oder machst gar nichts.
-
Das kannst du so machen, ja. Ob es besser geht kann ich dir so nicht direkt sagen, da ich nicht weiß was du alles damit vor hast.
Aber mache es einfach mal so und schaue ob es klappt, was du vor hast. Besser machen kann man es noch immer, wenn es nicht geht. -
-
Zum Respawn der Bäume:
Dort wo du:
DestroyObject(BaumID[i]);
machst, fügst du danach das ein:
BaumID[i] = -1;Und dann in dem Timer, der die Bäume wieder erstellt:
for(new i = 0; i < sizeof(Baeume); i++)
{
if(BaumID[i] == -1) BaumID[i] = CreateObject(615, Baeume[i][BX], Baeume[i][BY], Baeume[i][BZ], Baeume[i][BRx], Baeume[i][BRy], Baeume[i][BRz]);
}Was meinst du mit dem Punkt und den reifen Bäumen? Wie definierst du einen reifen Baum? Fällbare Bäume?
Das wäre dann:
for(new i = 0; i < sizeof(Baeume); i++)
{
if(BaumID[i] != -1) reifeBaeume++;
} -
Das Problem ist, dass viele glauben, sowas hier wäre gut, ist es aber nicht:
enum
{
dEventManager,
dEventManager2,
dEWaffe,
dESchuss,
dEFahrzeug,
dELeben,
dEArmour,
dECP,
dEDCP
};Ändere das zu:
const
dEventManager = 5001,
dEventManager2 = 5002,
dEWaffe = 5003,
dESchuss = 5004,
dEFahrzeug = 5005,
dELeben = 5006,
dEArmour = 5007,
dECP = 5008,
dEDCP = 5009;
Oder eben zu IDs die du noch nicht verwendest.EDIT:
Calaze_Carrey: Ich hatte nicht darauf geschaut, dass du es im switch verwendest. Da musst du dann const anstatt new verwenden.
-
tayson87:
Das sieht mir stark danach aus, dass du ein Array sprengst.
Lade dir das Crashdetect Plugin herunter und füge es in deinen Server ein: http://forum.sa-mp.com/showthread.php?t=262796
Dann erstelle in dem /pawno/ Ordner neben der pawno.exe eine "pawn.cfg" Datei und schreibe dort "-d3" rein (ohne die Anführungszeichen). Anschließend öffne die pawno.exe und wähle deinen Code aus, dann kompiliere ihn neu. Wenn du dann den Server neu startest und den Befehl eingibst und Unknown Command kommt, dann bekommst du im Server Log die Fehlermeldung plus die Zeile in der der Fehler ist ausgegeben.
Poste das dann gegebenenfalls in einem neuen Thread, sofern du mit der Meldung nicht klar kommst. -
Hast du in deinen ganzen PWN Codes und INC Includes mal nach
ZitatYou are not an admin
gesucht? -
Mir wäre
Was mir so einfällt, gibt es eventuell irgendeinen Effekt oder Partikel oder so mit dem man eine kürzere Sichtweite simulieren kann?
Mir wäre nichts bekannt. Ich habe auch mal gesucht, aber nichts gefunden, das hatte so wohl noch niemand vor. Im schlimmsten Fall befürchte ich, dass dein Vorhaben leider nicht möglich ist. Außer es weiß hier noch jemand wie man das anders realisieren könnte.