Von den Kommentaren her sehe ich das nichts mit Haupteingang. Ist das alles an Code dazu?
Falls ja, existiert kein Code vom Haupteingang.
Beiträge von Jeffry
-
-
Deshalb kannst du zusätzlich die Code-Änderung aus Post #8 machen, dann tritt der Fehler nicht mehr im Log auf, sondern du spawnst dann am Standard Spawn, falls eine falsche Fraktion eingetragen wurde.
Eventuell hast du die 12 ja noch von einem vorherigen Stand des Codes, als es die 12 noch gab.Sprich:
12 in deinem Profil ändern.
Code aus Post #8 wie gezeigt anpassen.Dann tritt der Fehler nicht mehr auf.
-
Ohne Schild ist der Zaun die 974.
-
Entferne FraktionsID 17 aus dem Befehl, die gibt es nicht.
Falls das nichts hilft, ändere new frakname[256]; zu new frakname[32];und gibt's eine Funktion wo man sagen kann dass zum beispiel beim Tutorial der nächste Text in 20 Sekunden kommt
https://wiki.sa-mp.com/wiki/SetTimerEx
Beispiel: http://forum.sa-mp.com/showthread.php?t=107390 -
Ändere in der Datenbank den Wert zu der Fraktions ID, in der du eigentlich bist (Doppelklick in das Feld).
Achte dabei aber darauf, dass du nicht im Spiel angemeldet bist. -
Kein Problem.
Schau mal im Konto des Spielers bei dem das Problem aufgetreten ist, ob bei seiner Fraktions ID ein Wert drin steht. Wenn ja, 12? Wenn ja, ändere das auf 11 ab (oder etwas anderes zwischen 1 und 11).
Falls du da nichts findest, kannst du zu dem Array mit den Koordinaten einen weiteren Eintrag hinzufügen.Wenn du das nicht machen willst, dann kannst du es auch so machen:
In case 2:
if(pInfo[playerid][fraktion]==0) SetSpawnInfo(playerid,0,pInfo[playerid][skin], 1760.9659,-1895.8420,13.5616,270.3469, 0,0, 0,0, 0,0);
zu:
if(pInfo[playerid][fraktion]<=0 || pInfo[playerid][fraktion] >= sizeof(FrakSpawns)) SetSpawnInfo(playerid,0,pInfo[playerid][skin], 1760.9659,-1895.8420,13.5616,270.3469, 0,0, 0,0, 0,0);Das hätte dann die Wirkung, dass der Spieler am Standard-Spawn spawnt, wenn es keinen entsprechenden Eintrag für ihn gibt.
-
Der Spieler (du?) bist dann laut pInfo[playerid][fraktion] in Fraktion 12.
Durch diese Zeile new fid=pInfo[playerid][fraktion]-1; wird fid auf 11 gesetzt.Da das Array mit den Spawns genau 11 Positionen hat, sind die Indizes 0 bis 10 gefüllt (das entspricht 11 Einträgen).
Mit fid = 11 darauf zuzugreifen (markierte Zeile) geht somit nicht.Du musst entweder noch einen weiteren Eintrag hinzufügen, oder die FraktionsID des Spielers ändern.
-
Wie hast du FrakSpawns deklariert? (new ...)
Falls das im Array mit 11 deklariert wurde, erhöhe es auf 12.new FrakSpawns[11] ...
Das dann zu 12 ändern.
-
Schreibe es mal in einer Zeile:
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return
SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");
zu:
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");Falls das nicht klappt, versuche es so:
printf("State von %d ist: %d (sollte sein: %d)", playerid, GetPlayerState(playerid), PLAYER_STATE_DRIVER);
if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");
Was steht dann im Server Log, wenn du den Befehl eingibst? -
#0 0011b240 in LoadAccount (playerid=1) at C:\Users\Drai\Desktop\Server\gamemodes\gamemode.pwn:20131
Welches ist denn die Zeile 20131?
Kannst du dein LoadAccount mal posten und die Zeile dort markieren?
-
Zwecks dem Error:
FraktionRangName(sI[playerid][pFraktion]), FraktionRangName(sI[playerid][pFraktion], sI[playerid][pFraktionRang]);
zu:
FraktionRangName(sI[playerid][pFraktion]), FraktionRangName(sI[playerid][pFraktion]), sI[playerid][pFraktionRang]);Zwecks dem Unknown Command:
Wie sieht deine FraktionName Funktion aus, und die Variable in der die Namen stehen (mit enum). -
format(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[GetVehicleModel(vID)-400]);zuformat(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[GetVehicleModel(SuppCarVeh[playerid])-400]);
Oder alternativ, da du ja immer die 560 erstellst: format(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[160]); -
[22:16:02] [debug] Run time error 20: "Invalid index parameter (bad entry point)"
Falls es einmal kommt:
Füge in deinem Gamemode das hinzu:
main() { }Falls es mehrmals kommt:
Aktualisiere dein Crashdetect Plugin auf die neuste Version. -
Dann versuche nach
//printf(">>> Nach dem Autoerstellen!");
das einzufügen:
SaveFactionCars(false); -
Schein irgendwas nicht bei zu klappen. Bekomme nichtmal mehr den Timer angezeigt.
Du hast zuerst den Timer gestartet und dann den Timer eine Zeile drunter wieder beendet, also die beiden Zeilen, die ich dir gegeben habe, vertauscht.
Ich habe dir auch noch das format angepasst, damit du da keine Variablen brauchst, ist etwas geschickter dann:
if(PlayerInfo[playerid][pJailTime])
{
new string[128];
if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d", playerid);
SendClientMessage(playerid,COLOR_BUSBLUE,"Rein mit dir!");
SendClientMessage(playerid,COLOR_BUSBLUE,"Verbrecher gehören in den Knast!");
format(string,sizeof(string),"Du bist noch für %d Minuten und %d Sekunden im Knast!",PlayerInfo[playerid][pJailTime]/60,PlayerInfo[playerid][pJailTime]%60);
SendClientMessage(playerid,COLOR_BUSBLUE,string);
SetPlayerPos(playerid,265.9037,77.2875,1001.0391);
SetPlayerInterior(playerid,6);
}/60 gibt die Minuten an
und %60 ist Modulo 60, da gibt den Rest an, der bei einer Teilung durch 60 übrig bleibt, was in dem Fall den Sekunden entspricht.
Kleiner Trick am Rande
-
Wann sollte es speichern? Direkt wenn du den Dialog ausgeführt hast?
Dann musst du dort das Public aufrufen.
Falls nicht dort, wo dann? -
Das klappt so nicht wirklich, nur für ID 0.
Mache es so:
Unter den Includes:
new jailTimer[MAX_PLAYERS] = {-1,...}; //Das ... setzt alle Indizes auf -1Dann den Timer so starten:
SetTimer("SetPlayerUnjail", 1000, 1);
ändern zu:
if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d", playerid);Und das Public so:
forward SetPlayerUnjail(playerid);
public SetPlayerUnjail(playerid)
{
PlayerInfo[playerid][pJailTime]--;
if(PlayerInfo[playerid][pJailTime]>0)
{
new string[128];
new Time = PlayerInfo[playerid][pJailTime], Min = Time/60, Sek = Time - Min*60;
format(string,sizeof(string),"%d Minuten %d Sekunden",Min,Sek);
GameTextForPlayer(playerid,string,2000,3);
}
else
{
SetTimerEx("SpawnTimer",2000,false,"i",playerid);
GameTextForPlayer(playerid,"Versuche ein besserer Mensch zusein",10000,3);
if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
jailTimer[playerid] = -1;
}
return 1;
}Bei OnPlayerDisconnect:
if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
jailTimer[playerid] = -1; -
Wie startest du den Timer?
Siehst du den GameText? -
-
Habe ich gemacht, doch sie stehen nicht in der log..
Dann wird der Befehl gar nicht aufgerufen.
Hast du vor die strcmp-Abfrage einen print gesetzt? Also die erste Zeile.