Folgendes kommt raus.. Wundere mich, warum...
[21:00:39] Polizist lolcooper versucht pID: 419 einzusperren! Wanted-Level: 0
LG lolcooper
Folgendes kommt raus.. Wundere mich, warum...
[21:00:39] Polizist lolcooper versucht pID: 419 einzusperren! Wanted-Level: 0
LG lolcooper
Ersetze das
if(sscanf(params,"u",pID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
mal damit:
if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
if(!IsNumeric(params)) pID = ReturnPlayerID(params);
else pID = strval(params);
Und füge das unten im GM ein:
Funktioniert es dann?
Wenn ja, sscanf
Wenn nein, was gibst du ein?
Ich gebe ganz normal /arrest lolcooper ein, oder einfach /arrest 0 <--- 0 ist meine ID
Aber es klappt nicht.. Dein Post von vorhin hat in meinem Script nur Errors drinnen
Der code von mir sollte eigentlich keine Errors geben, außer du hast die Funktionen schon deklariert.
Hast du sscanf auf dem aktuellen Stand?
Wenn ja, poste mal die Errors und den Code dazu.
(1423) : error 022: must be lvalue (non-constant)
(1423) : error 017: undefined symbol "ReturnPlayerID"
(1424) : error 029: invalid expression, assumed zero
(1424) : error 022: must be lvalue (non-constant)
if(!IsNumeric(params)) pID = ReturnPlayerID(params); <-- 1423
else pID = strval(params); <-- 1424
Da steht "ReturnPlayerID" ist nicht definiert.
Hast du die zwei Funktionen die im Expander sind überhaupt eingefügt?
Wenn ja, poste den ganzen Command, nicht nur die zwei Zeilen.
Ich habe alles drinnen.. Sogar gerade ersetzt, aber es kommen immer wieder folgende Errors:
(1423) : error 022: must be lvalue (non-constant)
(1424) : error 029: invalid expression, assumed zero
(1424) : error 022: must be lvalue (non-constant)
(6062) : error 012: invalid function call, not a valid addressn
(6062) : warning 215: expression has no effect
(6062) : error 001: expected token: ";", but found ")"
(6062) : error 029: invalid expression, assumed zero
(6062) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
7 Errors.
Code:
ocmd:arrest(playerid,params[])
{
new pID;
if(IsPlayerConnected(playerid))
{
if(SpielerInfo[playerid][sMember] == 1 SpielerInfo[playerid][sMember] == 2)
{
if(!strlen(params)) return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
if(!IsNumeric(params)) pID = ReturnPlayerID(params);
else pID = strval(params);
new name[MAX_PLAYER_NAME];
GetPlayerName(pID, name, sizeof(name));
new pstring[512];
printf("Polizist %s versucht pID: %d einzusperren! Wanted-Level: %d", GetName(playerid), pID, SpielerInfo[pID][pWanted]);
new string[512];
if(SpielerInfo[pID][pWanted] > 0)
{
new time;
time = SpielerInfo[pID][pWanted]*ServerSettings[ArrestTime];
SpielerInfo[pID][pJailTime]=time;
SpielerInfo[pID][pJailed]=1;
SetPlayerPos(pID,198.4943,162.0886,1003.0300);
SetPlayerInterior(pID,3);
format(string, sizeof(string), "Du wurdest von %s eingesperrt!", GetName(playerid));
SendClientMessage(pID, COLOR_DARKRED, string);
SetTimerEx("JailTime", 1000, 0, "d", pID);
SpielerInfo[pID][pWanted]=0;
}
else {
SendClientMessage(playerid, COLOR_RED, "Der ausgewählte Spieler hat keinen Wanted Level!");
return 1;
}
if(SpielerInfo[playerid][sMember] == 1)
{
format(string, sizeof(string), "> LS-Polizeibeamter %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
SendClientMessageToAll(COLOR_DARKRED, string);
}
else if(SpielerInfo[playerid][sMember] == 2)
{
format(string, sizeof(string), "> SEK-Agent %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
SendClientMessageToAll(COLOR_DARKRED, string);
}
return 1;
}
else {
SendClientMessage(playerid, COLOR_RED, "Du bist kein LSPD/SEK Beamter!");
return 1;
}
}
return 1;
}
forward JailTime(playerid);
public JailTime(playerid)
{
if(IsPlayerConnected(playerid))
{
if(SpielerInfo[playerid][pJailed] == 1)
{
if(SpielerInfo[playerid][pJailTime] > 0)
{
SpielerInfo[playerid][pJailTime]=SpielerInfo[playerid][pJailTime]-1;
SetTimerEx("JailTime", 1000, 0, "d", playerid);
SpielerInfo[playerid][pWanted]=0;
return 1;
}
else {
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 1555.2781, -1675.5569, 16.1953);
SetPlayerFacingAngle(playerid, 90.6666);
SetCameraBehindPlayer(playerid);
SpielerInfo[playerid][pJailed]=0;
SpielerInfo[playerid][pJailTime]=0;
new string[512];
format(string, sizeof(string), "~g~Freiheit!~n~~g~Benimm dich das nächste Mal");
GameTextForPlayer(playerid, string, 2500, 1);
return 1;
}
}
}
return 1;
}
Sofern es nicht an sscanf liegt.. habe mal den Befehl neu angeordnet möglicherweise funktioniert es damit... ( die returns rausgenommmen und umgestellt den Code )
ocmd:arrest(playerid,params[])
{
new pID;
if(IsPlayerConnected(playerid))
{
if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
{
if(sscanf(params,"u",pID)) return SendClientMessage(playerid,COLOR_WHITE,"{19FF00}Verwende: {0041FF}/Arrest [SpielerID/Name]");
new name[MAX_PLAYER_NAME];
GetPlayerName(pID, name, sizeof(name));
new pstring[512];
printf("Polizist %s versucht pID: %d einzusperren! Wanted-Level: %d", GetName(playerid), pID, SpielerInfo[pID][pWanted]);
new string[512];
if(SpielerInfo[pID][pWanted] > 0)
{
new time;
time = SpielerInfo[pID][pWanted]*ServerSettings[ArrestTime];
SpielerInfo[pID][pJailTime]=time;
SpielerInfo[pID][pJailed]=1;
SetPlayerPos(pID,198.4943,162.0886,1003.0300);
SetPlayerInterior(pID,3);
format(string, sizeof(string), "Du wurdest von %s eingesperrt!", GetName(playerid));
SendClientMessage(pID, COLOR_DARKRED, string);
SetTimerEx("JailTime", 1000, 0, "d", pID);
SpielerInfo[pID][pWanted]=0;
if(SpielerInfo[playerid][sMember] == 1)
{
format(string, sizeof(string), "> LS-Polizeibeamter %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
SendClientMessageToAll(COLOR_DARKRED, string);
}
else if(SpielerInfo[playerid][sMember] == 2)
{
format(string, sizeof(string), "> SEK-Agent %s hat den Verbrecher %s eingesperrt <", GetName(playerid), name);
SendClientMessageToAll(COLOR_DARKRED, string);
}
}
else {
SendClientMessage(playerid, COLOR_RED, "Der ausgewählte Spieler hat keinen Wanted Level!");
}
}
else {
SendClientMessage(playerid, COLOR_RED, "Du bist kein LSPD/SEK Beamter!");
}
}
return 1;
}
forward JailTime(playerid);
public JailTime(playerid)
{
if(IsPlayerConnected(playerid))
{
if(SpielerInfo[playerid][pJailed] == 1)
{
if(SpielerInfo[playerid][pJailTime] > 0)
{
SpielerInfo[playerid][pJailTime]=SpielerInfo[playerid][pJailTime]-1;
SetTimerEx("JailTime", 1000, 0, "d", playerid);
SpielerInfo[playerid][pWanted]=0;
return 1;
}
else {
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 1555.2781, -1675.5569, 16.1953);
SetPlayerFacingAngle(playerid, 90.6666);
SetCameraBehindPlayer(playerid);
SpielerInfo[playerid][pJailed]=0;
SpielerInfo[playerid][pJailTime]=0;
new string[512];
format(string, sizeof(string), "~g~Freiheit!~n~~g~Benimm dich das nächste Mal");
GameTextForPlayer(playerid, string, 2500, 1);
return 1;
}
}
}
return 1;
}
Nee.. Schade.. Es ist immer die gleiche Fehlermeldung da..
LG lolcooper
EDIT: Ich selber mache die Befehle hauptsächlich über ocmd + sscanf
Wie würde dies allerdings mit strcmp gehen? Vielleicht geht das? Hat jemand eine Ahnung, wie der Befehl dann aussehen müsste?
So wären deine Beiträge ein wenig übersichtlicher:
Beitrag bitte bearbeiten > Code löschen > Über dem Textfeld über der grauen Leiste von "Editor" zu "Quellcode" wechseln > drücken den Code zwischen die Klammern ] & [ kopieren und erneut absenden.
So ist er eingerückt und deutlich besser lesbar...
Bitte Merken, danke...
lolcooper: Ich habe mir den Code nochmal angeschaut, kann es sein, dass du die "pName" Funktion nicht hast, die ich in ReturnPlayerID genutzt habe? Falls das der Fall ist:
stock pName(playerid)
{
new _name[MAX_PLAYER_NAME];
GetPlayerName(playerid, _name, MAX_PLAYER_NAME);
return _name;
}
Kommen die Fehler dann noch immer wenn du meinen Teil vom Code einfügst?
Wenn ja, poste doch bitte den Befehl nochmal, aber diesmal in den [.pwn] [./pwn] Klammern (ohne die .)
Was mir gerade beim Debugging aller Warnings auffällt ist: Ich brauche kein new pID; machen, da es angeblich schon definiert ist.
Obwwoooohl sie nicht definiert ist?! Jedenfalls nicht im Script.
LG lolcooper
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.
Nein habe ich nicht
Jetzt wurde mein Problem anders..... Wenn ich einen Befehl wie /<command> <Spieler> ausführe, dann wird er zwar ausgeführt, aber nicht am jeweiligen Spieler, sondern an mich selber.
LG lolcooper
Hier mein /verhaften Befehl als Beispiel:
ocmd:verhaften(playerid,params[])
{
if(SpielerInfo[playerid][sMember] == 1 || SpielerInfo[playerid][sMember] == 2)
{
new ppID;
if(sscanf(params,"u",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
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;
}
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;
}
}
Weil du den eigentlichen Player nicht definiert hast, wie z.b Stock ReturnUser.
Ausserdem solltest du den Param in String definieren
newppID[32];
if(sscanf(params,"s",ppID))return SendClientMessage(playerid, COLOR_WHITE, "{19FF00}Verwende: {0041FF}/Verhaften [Spielername]");
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:
Dann bekomme ich in der Konsole folgende Ausgabe:
[17:13:11] 1->playerid=0 ppID=D params=
[17:13:11] 2->playerid=0 ppID=D params=
Und InGame kann ich immer noch nur mich verhaften.
Die playerid stimmt. Da ich die ID 0 getragen habe.
LG lolcooper
Muss ein kleiner "d" sein, kein großes "D", da hab ich mich vertippt.
Aber das ist egal, params war ja leer.
Wie willst du es nun? /arrest [Spieler] oder /arrest und er sucht sich den nächsten Spieler?
Bzw, was willst du eingeben?
Möchte eig. /arrest [Spieler]
Und /verhaften [Spieler]
LG lolcooper
Ok. Da bei params nichts steht gibt es zwei Möglichkeiten.
1) Du hast nichts eingegeben
2) ocmd tut nicht gescheit.
Was gibst du genau ein?
Lade dir die neuste Version von ocmd nochmal runter und kompiliere das ganze nochmal durch.
Füg bei OnPlayerCommandText ganz oben noch dazu:
printf("%d typed: %s", playerid, cmdtext);
Dann poste was du eingibst und was im server_log steht.