| kRiSyo | Дата: Понедельник, 04.11.2013, 23:58 | Сообщение # 1 |
|
Новенький
Группа:
Продвинутые
Сообщений: 71
Награды: 2
Город: Дублин
Репутация: 5
Замечания: 0%
Статус: 
| Здравствуйте у меня возникла проблема не знаю как ее решить Написал 2 команды /pm и /give Все работает но 1 но, если вместо ID игрока написать буквы то отправляются пустые сообщения.
Переменные Код
// создадим необходимые переменные new cmd[128], idx = 0; // переменной cmd присвоим значение, вычлененное из cmdtext[] с нулевой позиции до первого пробела или окончания строки. cmd = strcharsplit(cmdtext,idx,' ');
/pm Код
if(strcmp(cmd, "/pm", true) == 0 || strcmp(cmd, "/лс", true) == 0) { // создадим новую переменную, для хранения следующего значения new tmp[128]; // то-же самое что и в первом случае, но теперь вычлениваем с позиции idx tmp = strcharsplit(cmdtext,idx,' '); // преобразуем введённый параметр в число new id = strval(tmp); // проверим, ввёл ли игрок параметр if (strlen(tmp) == 0) return SendClientMessage(id,-1, "Применение: /pm(лс) [ id игрока ] [ текст ]"); // если игрок введёт ID игрока, которого нет в онлайне, то сообщим ему об ошибке if (!IsPlayerConnected(id)) return SendClientMessage(id,COLOR_RED, "Ошибка [/pm(лс)]: Неверный ID игрока"); // ну и наконец, если всё хорошо, то выводим сообщение new msg[100]; msg = strrest(cmdtext, idx); new pm[128]; new spm[128]; new name[MAX_PLAYER_NAME+1]; new sendername[MAX_PLAYER_NAME+1]; GetPlayerName(playerid,name, MAX_PLAYER_NAME+1); GetPlayerName(id,sendername, MAX_PLAYER_NAME+1); format(pm, sizeof(pm), "для %s(%d): {FFFFFF}%s",sendername,id,msg); SendClientMessage(playerid,0xFFFF00AA,pm); format(spm, sizeof(spm), "от %s(%d): {FFFFFF}%s",name,playerid,msg); SendClientMessage(id,0xFFFF00AA,spm); new apm[128]; format(apm, sizeof(apm), "{FF0000}ПМ для {FFFFFF}%s {FF0000}: {FFFF00}%s",sendername,msg); SendMessageToAdmins(playerid,0xFFFFFFAA,apm); return 1; }
/give Код
// проверим на идентичность содержимого cmd и "/givemoney" if(strcmp(cmd, "/give", true) == 0 || strcmp(cmd, "/дать", true) == 0) { // создадим новую переменную, для хранения следующего значения new tmp[128]; // то-же самое что и в первом случае, но теперь вычлениваем с позиции idx tmp = strcharsplit(cmdtext,idx,' '); // преобразуем введённый параметр в число new id = strval(tmp); // проверим, ввёл ли игрок параметр if (strlen(tmp) == 0) return SendClientMessage(playerid,-1, "Применение: /give(дать) [ id игрока ] [ сумма ]"); // если игрок введёт ID игрока, которого нет в онлайне, то сообщим ему об ошибке if (!IsPlayerConnected(id)) return SendClientMessage(playerid,COLOR_RED, "Ошибка [/give(дать)]: Неверный ID игрока"); // то-же самое что и в предыдущем случае tmp = strcharsplit(cmdtext,idx,' '); // проверим, ввёл ли игрок параметр if (strlen(tmp) == 0) return SendClientMessage(playerid,-1, "Применение: /give(дать) [ id игрока ] [ сумма ]"); // преобразуем введённый параметр в число new money = strval(tmp); // т.к. функция GivePlayerPCash может принимать и отрицательные значения, то сделаем такую проверку // чтобы игрок не мог забрать деньги у другого игрока if(money > GetPlayerCash(playerid)) return SendClientMessage(playerid,COLOR_RED, "Ошибка [/give(дать)]: У вас не хватает денег!"); if (money <= 0) return SendClientMessage(playerid,COLOR_RED, "Ошибка [/give(дать)]: Неверное количество денег"); // ну и передаём игроку id количество денег, равное money new give[128]; new gname[MAX_PLAYER_NAME+1]; new name[MAX_PLAYER_NAME+1]; GetPlayerName(id,gname, MAX_PLAYER_NAME+1); GetPlayerName(playerid,name, MAX_PLAYER_NAME+1); format(give, sizeof(give), "Вы получили {FFFFFF}%d$ {9ACD32}от {FFFFFF}%s(%d)",money,name,playerid); SendClientMessage(id,COLOR_LIGHTGREEN,give); format(give, sizeof(give), "Вы передали {FFFFFF}%d$ {9ACD32}игроку {FFFFFF}%s(%d)",money,gname,id); SendClientMessage(playerid,COLOR_LIGHTGREEN,give); GivePlayerCash(id,money); GivePlayerCash(playerid,-money); return 1; }
Стоки которые использую:
strcharsplit Код
stock strcharsplit(const string[], &index, seperator=' ') { new result[20], i = 0; if (index != 0 && string[index] != '\0') index++; while (string[index] && string[index] != seperator && string[index] != '\r' && string[index] != '\n') { result[i++] = string[index++]; } return result; }
strrest Код
strrest(const string[], &index) { new length = strlen(string); while((index < length) && (string[index] <= ' ')) ++index; new offset = index; new result[100]; while((index < length) && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; ++index; } result[index - offset] = EOS; return result; }
Сообщение отредактировал kRiSyo - Вторник, 05.11.2013, 00:00 |
| |
|
|
| Weddew | Дата: Вторник, 05.11.2013, 00:28 | Сообщение # 2 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Цитата kRiSyo (  ) Все работает но 1 но, если вместо ID игрока написать буквы то отправляются пустые сообщения. Объясните конкретно, что вы хотите сделать?
www.weddew-shop.ru
|
| |
|
|
| Geryy | Дата: Вторник, 05.11.2013, 02:59 | Сообщение # 3 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Цитата kRiSyo (  ) Здравствуйте у меня возникла проблема не знаю как ее решить Написал 2 команды /pm и /give Все работает но 1 но, если вместо ID игрока написать буквы то отправляются пустые сообщения.
Добавь проверку на ID, чтобы писали цифры:
Код if(IsNumeric(tmp)) { id = strval(tmp); } else { SendClientMessage(playerid, COLOR_LIGHTRED, " Введите id игрока!"); return 1; }
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
Сообщение отредактировал Geryy - Вторник, 05.11.2013, 03:00 |
| |
|
|