Hallo Leute.
Also ich habe mir gestern mal angeguckt wie man Commands mit Parametern erstellt sprich:
/kick [playerid]
/ban [playerid]
usw.
Soo jetzt habe ich das gemacht,
gehe in meinen Server,
und merke, dass egal was ich mache ob ich /ban eingebe, ob ich /warn eingebe,
immer führt das script den /kick befehl aus...
Woran liegt das?
public OnPlayerCommandText(playerid, cmdtext[])
{
//Amdin Befehle
new idx, cmd[128];
cmd=strtok(cmdtext,idx);
if(!strcmp(cmd,"/kick",true,5&& IsPlayerAdmin(playerid))) {
new sID[128], pID;
sID=strtok(cmdtext,idx);
if(!strlen(sID)) {
return SendClientMessage(playerid,COLOR_RED,"Nutze: /kick [playerid]");
}
pID=strval(sID);
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
Kick(pID);
SendClientMessage(playerid, COLOR_RED, "Spieler gekickt.");
}
cmd=strtok(cmdtext,idx);
if(!strcmp(cmd,"/ban",true,5&& IsPlayerAdmin(playerid))) {
new sID[128], pID;
sID=strtok(cmdtext,idx);
if(!strlen(sID)) {
return SendClientMessage(playerid,COLOR_RED,"Nutze: /ban [playerid]");
}
pID=strval(sID);
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
Ban(pID);
SendClientMessage(playerid, COLOR_RED, "Spieler gebant.");
}
if(!strcmp(strget(cmdtext, 0), "/setteam"))
if(IsPlayerAdmin(playerid))
{
strtok(cmdtext,idx);
new id;
new group;
id = strval(strtok(cmdtext,idx));
group = strval(strtok(cmdtext,idx));
gTeam[id] = group;
SetPlayerColor(id,team_color[group]);
return 1;
}
if(!strcmp(strget(cmdtext, 0), "/teams"))
if(IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, COLOR_RED, " COP=0 MEDIC=1 ADAC=2 FW=3");
return 1;
}
//Polizei Befehle
cmd=strtok(cmdtext,idx);
if(!strcmp(cmd,"/warn",true,5&& gTeam[playerid] == TEAM_COP)) {
new sID[128], pID;
sID=strtok(cmdtext,idx);
if(!strlen(sID)) {
return SendClientMessage(playerid,COLOR_RED,"Nutze: /warn [playerid]");
}
pID=strval(sID);
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
GameTextForPlayer(pID,"Halten sie ihr Fahrzeug an!",8000,6);
}
cmd=strtok(cmdtext,idx);
if(!strcmp(cmd,"/jail",true,5&& gTeam[playerid] == TEAM_COP)) {
new sID[128], pID;
sID=strtok(cmdtext,idx);
if(!strlen(sID)) {
return SendClientMessage(playerid,COLOR_RED,"Nutze: /jail [playerid]");
}
pID=strval(sID);
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
//SetPlayerPos(pID, X, Y, Z);
SendClientMessage(playerid,COLOR_YELLOW,"Spieler erfolgreich gejailt!");
}
cmd=strtok(cmdtext,idx);
if(!strcmp(cmd,"/unjail",true,5&& gTeam[playerid] == TEAM_COP)) {
new sID[128], pID;
sID=strtok(cmdtext,idx);
if(!strlen(sID)) {
return SendClientMessage(playerid,COLOR_RED,"Nutze: /unjail [playerid]");
}
pID=strval(sID);
if(!IsPlayerConnected(pID)) {
return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
}
//SetPlayerPos(pID, X, Y, Z);
SendClientMessage(playerid,COLOR_YELLOW,"Spieler erfolgreich unjailt!");
}
//ADAC Befehl
if(strcmp(cmd, "/abschleppen", true)==0&& gTeam[playerid] == TEAM_ADAC){
if(IsPlayerInAnyVehicle(playerid)){
new vehid = GetPlayerVehicleID(playerid);
if(!IsTrailerAttachedToVehicle(vehid)){
new Float:x, Float:y, Float:z;
GetVehiclePos(vehid, x, y, z );
new vehiclet;
GetVehicleWithinDistance(playerid, x, y, z, 100.0, vehiclet);
AttachTrailerToVehicle(vehiclet, vehid);
}
else{
DetachTrailerFromVehicle(vehid);
}
}
return 1;
}
return 1;
}
Hier ist der OnPlayerCommandText() Teil..
Hoffe ihr könnt helfen.
Habe null Warnings und null Errors drinne, und geht trotzdem nihct..
wwas habe ich falsch gemacht bzw was habe ich nichct beachtet??
MfG
Maxx
Problem mit Commands
- Maxx
- Geschlossen
- Erledigt
-
-
mach mal aus dem letzten return 1; ein return 0;
-
Danke für die Hilfe aber..
nope
es hat nicht geklappt er will immer den CMD kick ausführen egal was ich mache....
MfG
Maxx -
versuchs ma mit dcmd und SSCANF ist A. einfacher und B. kürzer
-
da kommen bei mir extrem viele nicht behebbare fehler...
MfG
Maxx
Edit:
Diese Fehler kommen dann:
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(201) : error 017: undefined symbol "dcmd_kick"
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(204) : warning 225: unreachable code
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(204) : error 017: undefined symbol "dcmd_kick"
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(206) : error 017: undefined symbol "params"
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(210) : error 017: undefined symbol "params"
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(219) : warning 225: unreachable code
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(219) : warning 217: loose indentation
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(219) : error 017: undefined symbol "cmd"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase5 Errors.
Kann mir einer Helfen?
MfG
Maxx -
kp wo fehler is aber probier ban mal mit dem meins is bischen länger
if(strcmp(cmd, "/ban", true) == 0)
{
new reason[256],givep[24];
if (PlayerInfo[playerid][pAdminLevel] >= 3 || IsPlayerAdmin(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, ORANGE, "USAGE: /ban [playerid] [reason]");
SendClientMessage(playerid, ORANGE, "FUNCTION: Will BAN the specified player. **PLEASE ENTER THE ID ONLY!**");
return 1;
}
giveplayerid = ReturnUser(tmp);
new adminlevel = PlayerInfo[playerid][pAdminLevel];
GetPlayerName(giveplayerid,givep,24);
if (IsPlayerAdmin(giveplayerid) && Hax[giveplayerid] == 1)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
{
reason[idx - offset] = cmdtext[idx];
idx++;
}
reason[idx - offset] = EOS;
if(!strlen(reason))
{
SendClientMessage(playerid, ORANGE, "USAGE: /ban [SpielerID] [Begründung]");
return 1;
}
else
{
new sstring[256];
new ip[128];
printf("[ADMIN NEWS]: Admin %s banned %s. Reason: %s", sendername, giveplayer, reason);
format(string, sizeof(string), "-| %s wurde von den Admins gebannt [Begründung: %s cYa]|-", sendername,giveplayer,reason);
SendClientMessageToAll(ADMIN_RED, string);
GetPlayerIp(giveplayerid,ip,128);
format(sstring, sizeof(sstring), "-| Banned Player's IP: 24.74.134.42 |-");
SendClientMessageToAdmins(ADMIN_RED, sstring,1);
}
}
else if (PlayerInfo[giveplayerid][pAdminLevel] > adminlevel)
{
format(string, sizeof(string), "-| [%i]%s tried to ban you! |-",playerid,player);
SendClientMessage(giveplayerid, ADMIN_RED,string);
SendClientMessage(playerid, ADMIN_RED, "Du kannst keinen Admin mit höherem Rang Bannen!");
}
else if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
while ((idx < length) && ((idx - offset) < (sizeof(reason) - 1)))
{
reason[idx - offset] = cmdtext[idx];
idx++;
}
reason[idx - offset] = EOS;
if(!strlen(reason))
{
SendClientMessage(playerid, ORANGE, "USAGE: /ban [playerid] [reason]");
return 1;
}
else
{
new sstring[256];
new ip[128];
printf("[ADMIN NEWS]: Admin %s banned %s. Reason: %s", sendername, giveplayer, reason);
format(string, sizeof(string), "-| Administrator %s banned %s. [Reason: %s ]|-", sendername,giveplayer,reason);
SendClientMessageToAll(ADMIN_RED, string);
GetPlayerIp(giveplayerid,ip,128);
format(sstring, sizeof(sstring), "-| Banned Player's IP: %s |-", ip);
SendClientMessageToAdmins(ADMIN_RED, sstring,1);
new vehicleID = GetPlayerVehicleID(giveplayerid);
if (strcmp(VehicleInfo[vehicleID][owner],PlayerInfo[giveplayerid][name],false) == 0)
{
SetVehicleToRespawn(vehicleID);
SetVehicleVirtualWorld(vehicleID,0);
PlayerInfo[giveplayerid][vowned] = 0;
PlayerInfo[giveplayerid][vowner] = 0;
strmid(VehicleInfo[vehicleID][owner], DEFAULT_OWNER, 0, strlen(DEFAULT_OWNER), 255);
VehicleInfo[vehicleID][bought] = 0;
VehicleInfo[vehicleID][secure] = 0;
SavePlayer(giveplayerid);
}
PlayerInfo[giveplayerid][pAdminLevel] = 0;
BanEx(giveplayerid,reason);
BanLog(string);
}
}
else if(giveplayerid == INVALID_PLAYER_ID)
{
format(string, sizeof(string), "%d is not an active player.", giveplayerid);
SendClientMessage(playerid, RED, string);
}
}
else
{
SendClientMessage(playerid, RED, "You are not an admin with the required level.");
}
return 1;
} -
ich hab es mir nochmal angeschaut, und habe es letzten endes mit dcmd gemacht.
ist zwar etwas anders aber wenn mans kann isses echt extrem easy, habe keine Fehler, keine Errors mehr mit dem dcmd.
nur jetzt kommt immer ein Warning mit nem anderen Befehl... :
C:\Dokumente und Einstellungen\...\Desktop\Scripten\gamemodes\Server.pwn(205) : warning 225: unreachable code
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Warning.
Und der dazugehörige Teil:
//adac
if (strcmp("/schleppen", cmdtext, true, 10) == 0){//in dieser line is der Warning....
if(IsPlayerInAnyVehicle(playerid)){
new vehid = GetPlayerVehicleID(playerid);
if(!IsTrailerAttachedToVehicle(vehid)){
new Float:x, Float:y, Float:z;
GetVehiclePos(vehid, x, y, z );
new vehiclet;
GetVehicleWithinDistance(playerid, x, y, z, 100.0, vehiclet);
AttachTrailerToVehicle(vehiclet, vehid);
}
else{
DetachTrailerFromVehicle(vehid);
}
}
}
return 1;
Hoffe ihr könnt mir ein letztes mal helfen.
MfG
Maxx -
if (strcmp("/schleppen", cmdtext, true, 10) == 0)
{
if(IsPlayerInAnyVehicle(playerid))
{
new vehid = GetPlayerVehicleID(playerid);
if(!IsTrailerAttachedToVehicle(vehid))
{
new Float:x, Float:y, Float:z;
GetVehiclePos(vehid, x, y, z );
new vehiclet;
GetVehicleWithinDistance(playerid, x, y, z, 100.0, vehiclet);
AttachTrailerToVehicle(vehiclet, vehid);
}
else
{
DetachTrailerFromVehicle(vehid);
}
}
return 1;
} -
immernoch..
liegt das daran, dass ich nun mit dcmd arbeite?
MfG
Maxx -
Nein. dcmd in Verbindung mit sscanf ist um einiges bugfreier als strtok bzw. strget. Daran liegt es wohl kaum.
-
-
ich find dcmd dumm.......
Aber jedem das seine -
bin ich auch, hatte mit strok usw. noch nie probleme, ob die CPU nun paar Prozente mehr ausgelastet wird, ist egal, Linux teilt sich das schon selber ein meiner Meinung nach, Linux ist ja bekannt als bessere Ressourcen "Übertragung", jeder weiß wovon ich sprechen will, weiß grade net wie ich es am besten aussagen soll
-
bin ich auch, hatte mit strok usw. noch nie probleme, ob die CPU nun paar Prozente mehr ausgelastet wird, ist egal, Linux teilt sich das schon selber ein meiner Meinung nach, Linux ist ja bekannt als bessere Ressourcen "Übertragung", jeder weiß wovon ich sprechen will, weiß grade net wie ich es am besten aussagen soll
Linux llaggt nicht sviel. Für die die es nicht verstehen
-
breadfish.de
Hat das Thema geschlossen.