Проблема со сменой ранга в диалоге
#1

У меня такая проблема:
Когда я пытаюсь сменить определенному рангу - название у меня записывает и ид и ранг....
Я пишу в диалоге например: 5 директор, где 5 это номер ранга, а "директор" название...
Вроде бы все хорошо, но проблема лишь в том что в файл, ранг сохраняет "5 директор", а надо просто "директор"...
Вот сам код:
PHP Code:
case DIALOG_SETRANK:
    {
        if(
response)
        {
            if(!
strlen(inputtext))
             {
                
format(string,sizeof(string),"Введите номер ранга и через пробел название.\n(Пример: 5 Директор)");
                
ShowPlayerDialog(playerid,DIALOG_SETRANK,DIALOG_STYLE_INPUT,"Изменить название",string,"Принять","Скрыть");
            }
            new 
rank strval(inputtext);
            if (
strval(inputtext) > 10 || strval(inputtext) < 0)
            {
                
SendClientMessage(playeridCOLOR_GRAD2"Можно изменить только с 1го по 10ый ранг");
                return 
1;
            }
            new 
length strlen(inputtext);
            while ((
idx length) && (inputtext[idx] <= ' '))idx++;
            new 
offset idx;
            new 
RankName[128];
            while ((
idx length) && ((idx offset) < (sizeof(RankName) - 1)))
            {
                
RankName[idx offset] = inputtext[idx];
                
idx++;
            }
            
RankName[idx offset] = EOS;
            if (!
strlen(RankName))
            {
                
format(string,sizeof(string),"Введите номер ранга и через пробел название.\n(Пример: 5 Директор)");
                
ShowPlayerDialog(playerid,DIALOG_SETRANK,DIALOG_STYLE_INPUT,"Изменить название",string,"Принять","Скрыть");
            }
            new 
Player[playerid][pLeader];
            if(
rank==0)strcpy(RankInfo[l][rank0], RankName);
            else if(
rank==1)strcpy(RankInfo[l][rank1], RankName);
            else if(
rank==2)strcpy(RankInfo[l][rank2], RankName);
            else if(
rank==3)strcpy(RankInfo[l][rank3], RankName);
            else if(
rank==4)strcpy(RankInfo[l][rank4], RankName);
            else if(
rank==5)strcpy(RankInfo[l][rank5], RankName);
            else if(
rank==6)strcpy(RankInfo[l][rank6], RankName);
            else if(
rank==7)strcpy(RankInfo[l][rank7], RankName);
            else if(
rank==8)strcpy(RankInfo[l][rank8], RankName);
            else if(
rank==9)strcpy(RankInfo[l][rank9], RankName);
            else if(
rank==10)strcpy(RankInfo[l][rank10], RankName);
            
//сохранение ранга в файл
            
new file ini_openFile("/mod/ranks.ini");
            if(
file<0)
            {
                
SendClientMessage(playeridCOLOR_RED,"Ошибка сохранения ранга");
                return 
1;
            }
            for(new 
i=1;i<6;i++)
            {
            
format(stringsizeof(string), "Ранг 0 фракции %d",i);ini_setString (filestringRankInfo[i][rank0]);
            
format(stringsizeof(string), "Ранг 1 фракции %d",i);ini_setString (filestringRankInfo[i][rank1]);
            
format(stringsizeof(string), "Ранг 2 фракции %d",i);ini_setString (filestringRankInfo[i][rank2]);
            
format(stringsizeof(string), "Ранг 3 фракции %d",i);ini_setString (filestringRankInfo[i][rank3]);
            
format(stringsizeof(string), "Ранг 4 фракции %d",i);ini_setString (filestringRankInfo[i][rank4]);
            
format(stringsizeof(string), "Ранг 5 фракции %d",i);ini_setString (filestringRankInfo[i][rank5]);
            
format(stringsizeof(string), "Ранг 6 фракции %d",i);ini_setString (filestringRankInfo[i][rank6]);
            
format(stringsizeof(string), "Ранг 7 фракции %d",i);ini_setString (filestringRankInfo[i][rank7]);
            
format(stringsizeof(string), "Ранг 8 фракции %d",i);ini_setString (filestringRankInfo[i][rank8]);
            
format(stringsizeof(string), "Ранг 9 фракции %d",i);ini_setString (filestringRankInfo[i][rank9]);
            
format(stringsizeof(string), "Ранг 10 фракции %d",i);ini_setString (filestringRankInfo[i][rank10]);
            }
            
ini_closeFile (file);
            
format(stringsizeof(string), "Ранг успешно сохранен: '%s'",RankName);
            
SendClientMessage(playeridCOLOR_RED,string);
            return 
1;
        }
        return 
1;
    } 
Вот скрины:
[SPOILER=Жми]
[/SPOILER]
Reply
#2

Попробуйте так:
Code:
 

case DIALOG_SETRANK: 
    { 
        if(!response) return 1;
		if(!strlen(inputtext)) 
		{ 
			format(string,sizeof(string),"Введите номер ранга и через пробел название.\n(Пример: 5 Директор)"); 
			ShowPlayerDialog(playerid,DIALOG_SETRANK,DIALOG_STYLE_INPUT,"Изменить название",string,"Принять","Скрыть"); 
			return 1;
		} 
		new tmp[24],idx;//Может ругаться на размер массива tmp, в этом случае увеличте его
		tmp = strtok(inputtext,idx);
		if(!strlen(tmp))
		{
			format(string,sizeof(string),"Введите номер ранга и через пробел название.\n(Пример: 5 Директор)"); 
			ShowPlayerDialog(playerid,DIALOG_SETRANK,DIALOG_STYLE_INPUT,"Изменить название",string,"Принять","Скрыть"); 
			return 1;			
		}
		new rank = strval(tmp); 
		if(rank > 10 || rank < 0) return SendClientMessage(playerid, COLOR_GRAD2, "Можно изменить только с 1го по 10ый ранг"); 
		tmp = strrest(inputtext,idx);
		if(!strlen(tmp)) 
		{ 
			format(string,sizeof(string),"Введите номер ранга и через пробел название.\n(Пример: 5 Директор)"); 
			ShowPlayerDialog(playerid,DIALOG_SETRANK,DIALOG_STYLE_INPUT,"Изменить название",string,"Принять","Скрыть"); 
			return 1;
		} 
		new l = Player[playerid][pLeader]; 
		if(rank==0)strcpy(RankInfo[l][rank0], tmp); 
		else if(rank==1)strcpy(RankInfo[l][rank1], tmp); 
		else if(rank==2)strcpy(RankInfo[l][rank2], tmp); 
		else if(rank==3)strcpy(RankInfo[l][rank3], tmp); 
		else if(rank==4)strcpy(RankInfo[l][rank4], tmp); 
		else if(rank==5)strcpy(RankInfo[l][rank5], tmp); 
		else if(rank==6)strcpy(RankInfo[l][rank6], tmp); 
		else if(rank==7)strcpy(RankInfo[l][rank7], tmp); 
		else if(rank==8)strcpy(RankInfo[l][rank8], tmp); 
		else if(rank==9)strcpy(RankInfo[l][rank9], tmp); 
		else if(rank==10)strcpy(RankInfo[l][rank10], tmp); 
		//сохранение ранга в файл 
		new file = ini_openFile("/mod/ranks.ini"); 
		if(file<0) 
		{ 
			SendClientMessage(playerid, COLOR_RED,"Ошибка сохранения ранга"); 
			return 1; 
		} 
		for(new i=1;i<6;i++) 
		{ 
			format(string, sizeof(string), "Ранг 0 фракции %d",i);ini_setString (file, string, RankInfo[i][rank0]); 
			format(string, sizeof(string), "Ранг 1 фракции %d",i);ini_setString (file, string, RankInfo[i][rank1]); 
			format(string, sizeof(string), "Ранг 2 фракции %d",i);ini_setString (file, string, RankInfo[i][rank2]); 
			format(string, sizeof(string), "Ранг 3 фракции %d",i);ini_setString (file, string, RankInfo[i][rank3]); 
			format(string, sizeof(string), "Ранг 4 фракции %d",i);ini_setString (file, string, RankInfo[i][rank4]); 
			format(string, sizeof(string), "Ранг 5 фракции %d",i);ini_setString (file, string, RankInfo[i][rank5]); 
			format(string, sizeof(string), "Ранг 6 фракции %d",i);ini_setString (file, string, RankInfo[i][rank6]); 
			format(string, sizeof(string), "Ранг 7 фракции %d",i);ini_setString (file, string, RankInfo[i][rank7]); 
			format(string, sizeof(string), "Ранг 8 фракции %d",i);ini_setString (file, string, RankInfo[i][rank8]); 
			format(string, sizeof(string), "Ранг 9 фракции %d",i);ini_setString (file, string, RankInfo[i][rank9]); 
			format(string, sizeof(string), "Ранг 10 фракции %d",i);ini_setString (file, string, RankInfo[i][rank10]); 
		} 
		ini_closeFile (file); 
		format(string, sizeof(string), "Ранг успешно сохранен: '%s'",tmp); 
		SendClientMessage(playerid, COLOR_RED,string); 
        return 1; 
    }
Reply
#3

Неа....
Reply
#4

pawn Code:
new length = strlen(inputtext);
while ((idx < length) && (inputtext[idx] <= ' '))idx++;
new offset = idx;
new RankName[128];
while ((idx < length) && ((idx - offset) < (sizeof(RankName) - 1)))
{
    RankName[idx - offset] = inputtext[idx];
    idx++;
}
RankName[idx - offset] = EOS;
меняем на:
pawn Code:
new RankName[128];
strmid(RankName, inputtext, strfind(inputtext, " ") + 1, strlen(inputtext), sizeof(RankName))
Reply
#5

Спасибо, помог...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)