Проблема со сменой ранга в диалоге -
Stepan23 - 04.05.2012
У меня такая проблема:
Когда я пытаюсь сменить определенному рангу - название у меня записывает и ид и ранг....
Я пишу в диалоге например: 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(playerid, COLOR_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 l = 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(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'",RankName);
SendClientMessage(playerid, COLOR_RED,string);
return 1;
}
return 1;
}
Вот скрины:
[SPOILER=Жми]
[/SPOILER]
Re: Проблема со сменой ранга в диалоге -
TRPG - 04.05.2012
Попробуйте так:
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;
}
Re: Проблема со сменой ранга в диалоге -
Stepan23 - 04.05.2012
Неа....
Re: Проблема со сменой ранга в диалоге -
Stepashka - 04.05.2012
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))
Re: Проблема со сменой ранга в диалоге -
Stepan23 - 04.05.2012
Спасибо, помог...