Wie im Titel oben schon beschrieben, habe ich ein Problem mit SSCANF.
Ich habe diesen Befehl hier:
ocmd:spawn(playerid,params[])
{
if(!isAdmin(playerid,1))return SendClientMessage(playerid,Rot,Aerror);
new pID, string[128], alevel[128];
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Gelb,"Verwendung: /spawn [Playerid]");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Rot,Oerror);
switch(GetPVarInt(playerid,"Adminlevel"))
{
case 1:{alevel="Supporter";}
case 2:{alevel="Moderator";}
case 3:{alevel="Administrator";}
case 4:{alevel="Super Admin";}
case 5:{alevel="Manager";}
case 6:{alevel="Leiter";}
}
format(string,128,"%s %s hat den Spieler %s gespawnt.",alevel,GetName(playerid),GetName(pID));
SendClientMessageToAll(Rot,string);
SpawnPlayer(pID);
return 1;
}
Und den SScanf code:
stock sscanf(string[],format[],{Float,_}:...){if(string[0]==0||(string[0]==1&&string[1]==0)){return format[0];}new formatPos=0,stringPos=0,paramPos=2,paramCount=numargs(),delim=' ';while(string[stringPos]&&string[stringPos]<=' '){stringPos++;}while(paramPos<paramCount&&string[stringPos]){switch(format[formatPos++]){case'\0':{return 0;}case'i','d':{new neg=1,num=0,ch=string[stringPos];if(ch=='-'){neg=-1;ch=string[++stringPos];}do{stringPos++;if('0'<=ch<='9'){num=(num * 10) + (ch - '0');}else{return -1;}}
while((ch=string[stringPos])>' '&&ch!=delim);setarg(paramPos,0,num * neg);}case'h','x':{new num=0,ch=string[stringPos];do{stringPos++;switch(ch){case'x','X':{num=0;continue;}case'0' .. '9':{num=(num << 4) | (ch - '0');}case'a' .. 'f':{num=(num << 4) | (ch - ('a' - 10));}case'A' .. 'F':{num=(num << 4) | (ch - ('A' - 10));}default:{return -1;}}}while((ch=string[stringPos])>' '&&ch!=delim);setarg(paramPos,0,num);}case'c':{setarg(paramPos,0,string[stringPos++]);}
case'f':{new changestr[16],changepos=0,strpos=stringPos;while(changepos<16&&string[strpos]&&string[strpos]!=delim){changestr[changepos++]=string[strpos++];}changestr[changepos]='\0';setarg(paramPos,0,_:floatstr(changestr));}case'p':{delim=format[formatPos++];continue;}case'\'':{new end=formatPos - 1,ch;while((ch=format[++end])&&ch!='\'') {}if(!ch){return -1;}format[end]='\0';if((ch=strfind(string,format[formatPos],false,stringPos))==-1){if(format[end + 1]){
return -1;}return 0;}format[end]='\'';stringPos=ch + (end - formatPos);formatPos=end + 1;}case'u':{new end=stringPos - 1,id=0,bool:num=true,ch;while((ch=string[++end])&&ch!=delim){if(num){if('0'<=ch<='9'){id=(id*10)+(ch-'0');}else{num=false;}}}if(num&&IsPlayerConnected(id)){setarg(paramPos,0,id);}else{
#if!defined foreach
#define foreach(%1,%2) for (new %2=0; %2<MAX_PLAYERS; %2++) if(IsPlayerConnected(%2))
#define __SSCANF_FOREACH__
#endif
string[end]='\0';num=false;new name[MAX_PLAYER_NAME];id=end - stringPos;foreach (Player,playerid){GetPlayerName(playerid,name,sizeof (name));if(!strcmp(name,string[stringPos],true,id)){setarg(paramPos,0,playerid);num=true;break;}}if(!num){setarg(paramPos,0,INVALID_PLAYER_ID);}string[end]=ch;
#if defined __SSCANF_FOREACH__
#endif
}stringPos=end;}case's','z':{new i=0,ch;if(format[formatPos]){while((ch=string[stringPos++])&&ch!=delim){setarg(paramPos,i++,ch);}if(!i){return -1;}}else{while((ch=string[stringPos++])){setarg(paramPos,i++,ch);}}stringPos--;setarg(paramPos,i,'\0');}default:{continue;}}while(string[stringPos]&&string[stringPos]!=delim&&string[stringPos]>' '){stringPos++;}while(string[stringPos]&&(string[stringPos]==delim||string[stringPos]<=' ')){stringPos++;}paramPos++;}do
{if((delim=format[formatPos++])>' '){if(delim=='\''){while((delim=format[formatPos++])&&delim!='\'') {}}else if(delim!='z'){return delim;}}}while(delim>' ');return 0;}
Wenn ich compilen will kommt das:
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(687) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(687) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(687) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(688) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(688) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(689) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(689) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(690) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(690) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(690) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(695) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(695) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(698) : warning 217: loose indentation
C:\Users\Smith Fmily\Desktop\0.3eR2 - MySQL\gamemodes\WOGD.pwn(699) : warning 217: loose indentation
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
19 Warnings.
Warum? Info: Aerror und Oerror sind Texte, die ich oben definiert habe. Wenn ich sie rausnehme, kommt immer noch das selbe.