Also die vier Marker von BSN und Stadthalle werden alle erstellt und auch die Labels dazu. An dem Code liegt es nicht.
Wenn du es unter OnGameModeInit erstellen lässt, dann poste das ganze OnGameModeInit mal und markiere die Zeilen, die nicht erstellt werden.
Beiträge von Jeffry
-
-
Da du mir auch noch eine PM geschrieben hast zwecks deines Debug-Versuches, kannst du mir die Ergebnisse davon und den Code mit deinem Debug Zeugs hier mal posten? Dann kann ich das selbst prüfen.
Also server_log vom Debug und den Code dazu. -
Die GangZone Funktionen sind in der include a_samp.inc mit native's deklariert. Du benötigst keine weiteren Includes um mit den Standard-Funktionen der GangZones zu arbeiten.
Wenn du ein weiteres Include dafür hast, dann sind da vielleicht andere Funktionen dabei. Es wäre gut, falls du noch mehr wissen musst, wenn du dieses Include zeigst, welches du meinst. -
palwal: Das ist so nicht richtig. ppID ist die Spieler-ID, respektive der playerid. Die playerid ist immer ein Integer und kein String. Der Code stimmt eigentlich, ich bin immer noch der Meinung, dass sscanf das Problem ist.
Füge mal das ein:
new ppID;
printf("1->playerid=%d ppID=%d params=%s", playerid, ppID, params);
if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
printf("2->playerid=%d ppID=%d params=%s", playerid, ppID, params);Falls du nicht weißt wie:
Spoiler anzeigen ocmd:verhaften(playerid,params[])
{
if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
{
new ppID;
printf("1->playerid=%d ppID=%d params=%s", playerid, ppID, params);
if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
printf("2->playerid=%d ppID=%d params=%s", playerid, ppID, params);
new string[128];
if(GetDistanceBetweenPlayers(playerid, ppID) < 4)
{
SetPlayerCuffed(ppID, true);
}
else
{
format(string, sizeof(string), "%s befindet sich nicht in deiner Nähe!", GetName(ppID));
return 1;
}Spoiler anzeigen for(new i; i < MAX_PLAYERS; i++)
{
if(GetDistanceBetweenPlayers(playerid, i) < 4)
{
format(string, sizeof(string), "%s wurde von Polizist %s verhaftet!", GetName(ppID), GetName(playerid));
SendClientMessage(ppID, COLOR_DARKRED, string);
}
}
return 1;
}
else
{
SendClientMessage(playerid, COLOR_DARKRED, "Du bist kein LSPD/SEK Mitglied!");
return 1;
}
}
-
Dann poste den gesamten dazugehörigen Code so wie er jetzt ist, und beschreibe was passiert.
Die include hast du hoffentlich rausgenommen.
-
So wie oben.
if(IsPlayerOnDesktop(playerid)) healthstr = "AFK / Desktop";
-
Dann schmeiß die ganze Include raus und nimm das:
new p_AFK[MAX_PLAYERS];
new p_LastUpdate[MAX_PLAYERS];public OnPlayerUpdate(playerid)
{
p_LastUpdate[playerid] = GetTickCount();
p_AFK[playerid] = 0;
return 1;
}forward p_AFK_Check();
public p_AFK_Check()
{
new t = GetTickCount();
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i) && p_AFK[i] == 0 && p_LastUpdate[i] < t-1000)
{
p_AFK[i] = 1;
}
}
return 1;
}OnGameModeInit:
SetTimer("p_AFK_Check", 1000, 1);#define IsPlayerOnDesktop(%0) p_AFK[%0]
-
if(SpielerInfo[playerid][lizens] == 1)
zu:if(lizens == 1)
Du fragst ja hiermit schon ab, ob der Spieler die Lizenz hat, mit der richtigen Variable.
-
Das bedeutet, dass dein OnPlayerUpdate nicht korrekt aufgerufen wird.
Füge das mal bei OnPlayerUpdate in deinem GM ein, und zwar an erster Stelle:printf("Called ID %d", playerid);
und das ganz unten:
printf("Processed ID %d", playerid);Wird das beides schön geprintet?
Wenn nein, hast du Filterscripts am laufen?
-
if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 431) return SendClientMessage(playerid,Rot,"Du sitzt in keinem Bus!");
Die Abfrage gehört aus dem GetVehicleModel raus.
if(GetVehicleModel(GetPlayerVehicleID(playerid)) != 431)
-
Das Include ist extrem schlecht geschrieben und dazu noch fehlerhaft.
Ändere im Include dieses public zu:
public Desk_SecondTimer()
{
for(new i = 0; i < MAX_PLAYERS; i ++)
{
if(!IsPlayerConnected(i)) continue;
if(GetPVarInt(i, "DeskCheck") == 1)
{
SetPVarInt(i, "DeskCheck", 0);
SetPVarInt(i, "AFKTime", 0);
}
else
{
SetPVarInt(i, "AFKTime", GetPVarInt(i, "AFKTime")+1);
}
}
return true;
}Der Timer funktioniert sonst immer nur für den Spieler, der die kleinste ID hat.
Leider kann ich nur raten was der Fehler ist, da du uns ja nicht sagst, was genau falsch ist. Wird AFK immer angezeigt, oder gar nicht, ...
-
Drogensorte,
Zu
Drogensorte[32],Die Sorte der Drogen ist eine Zeichenkette, daher ein Array.
-
Nächstes mal bitte gleich alles wichtige im ersten Post posten, dann brauchen wir nicht paar mal nachfragen.
Da das Speichern ja anscheinend klappt, liegt das Problem möglicherweise bei den lokalen Variablen, da der erste Buchstabe beim Laden verloren geht.
Poste bitte das enum und die dazugehörige Variable bzw. das Array DrugSys. -
Wie stehen die Daten in der Datei?
Und was soll stattdessen ausgelesen werden? Kannst du das anhand einem Beispiel zeigen, mit genauen Daten und dem was in der Datei steht. -
Welches ist die Variable, bzw. das Array dazu, in dem zu für alle Fahrzeug-MODELLE (!) die Daten gespeichert hast? Also nicht für die IDs, sonder für das Modell, das sind genau 211 an der Zahl.
-
An dem Code liegt es nicht.
Wie du siehst, kann ich es ohne Probleme kompilieren:Poste mal den Teil der darüber steht, vor allem Zeile 68 bis 82.
-
Dann hast du es bereits vorher definiert, vielleicht global.
Räume bitte erst mal deine ganzen Warnings auf, die können auch Fehler verursachen. Wenn das Problem dann immer noch besteht, und du keine weitere Definition von sscanf in den includes gefunden hast, dann poste bitte nochmal den Befehl und zwar mit sscanf, so wie du ihn hast und er nicht tut. -
Mit sizeof vom enum-Name funktioniert es nicht.
So kannst du es machen, ohne dass es Fehler gibt:
enum Test {
meinInt,
Float:meinFloat,
meinString[10],
Text3D:meinLabel,
Text:meinTD
}
new Variable[MAX_PLAYERS][Test];public OnFilterScriptInit()
{
new playerid = 0;
format(Variable[playerid][meinString],10,"Hi");
printf("meinString: %s",Variable[playerid][meinString]);
for(new j = 0; j < sizeof(Variable[]); j++)
{
Variable[playerid][Test:j] = 0;
printf("Teil %d gelöscht.", j);
}
printf("meinString: %s",Variable[playerid][meinString]);
print("Passt alles.");
return 1;
}Wie du siehst, stürzt nichts ab:
Zitat[29/05/2014 13:28:56] meinString: Hi
[29/05/2014 13:28:56] Teil 0 gelöscht.
[29/05/2014 13:28:56] Teil 1 gelöscht.
[29/05/2014 13:28:56] Teil 2 gelöscht.
[29/05/2014 13:28:56] Teil 3 gelöscht.
[29/05/2014 13:28:56] Teil 4 gelöscht.
[29/05/2014 13:28:56] Teil 5 gelöscht.
[29/05/2014 13:28:56] Teil 6 gelöscht.
[29/05/2014 13:28:56] Teil 7 gelöscht.
[29/05/2014 13:28:56] Teil 8 gelöscht.
[29/05/2014 13:28:56] Teil 9 gelöscht.
[29/05/2014 13:28:56] Teil 10 gelöscht.
[29/05/2014 13:28:56] Teil 11 gelöscht.
[29/05/2014 13:28:56] Teil 12 gelöscht.
[29/05/2014 13:28:56] Teil 13 gelöscht.
[29/05/2014 13:28:56] meinString:
[29/05/2014 13:28:56] Passt alles.Warum sind das 14 Teile?
Darum:
enum Test {
meinInt, //0
Float:meinFloat, //1
meinString[10], //2,3,4,5,6,7,9,8,10,11
Text3D:meinLabel, //12
Text:meinTD //13
} -
GetDistanceBetweenPlayers muss vor SendPlayerMessage definiert werden. Wie die Warnung schon sagt: "Funktion mit einer Tag-Rückgabe ist vor der Definition benutzt".
Also erst GetDistanceBetweenPlayers im Code stehen haben, dann SendPlayerMessage.
stock Float:GetDistanceBetweenPlayers(...)
{
//Code...
}//...code
stock SendPlayerMessage...
-
Jetzt hast du ja hier nochmal einen Thread auf gemacht wegen sscanf.
Schau doch mal in die includes, ob da in einer "sscanf" als Funktion deklariert ist. Früher war sscanf nich als Plugin gemacht, sondern als ganz normaler Code-Schnipsel. Das könnte der Grund sein, warum immer alles falsch ausgegeben wird, da die zwei sich nicht vertragen.Wenn das auch nicht der Fall ist kann ich dir nur dazu raten sscanf in die Tonne zu treten, kann man eigentlich jedem nur raten.