|
Проблема с вводными данными команды (/test x x)
|
|
| Крендель | Дата: Суббота, 08.10.2011, 13:42 | Сообщение # 1 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| Есть код: Code if(strcmp(cmdtext, "/test", true) == 0) {
if(IsPlayerConnected(playerid)) { tmp = strtok(cmdtext, idx); // ПОЛУЧАЕМ ПЕРВЫЕ ДАННЫЕ ПОСЛЕ ПЕРВОГО ПРОБЕЛА
if(!strlen(tmp)) // ЕСЛИ ПЕРВЫЕ ДАННЫЕ НЕ ВВЕДЕНЫ, ВЫПОЛНЯЕТСЯ УСЛОВИЕ { SendClientMessage(playerid, COLOR_WHITE, "* Данные 1 не введены"); return 1; }
tmp = strtok(cmdtext, idx); // ПОЛУЧАЕМ ВТОРЫЕ ДАННЫЕ ПОСЛЕ ВТОРОГО ПРОБЕЛА
if(!strlen(tmp)) // ЕСЛИ ВТОРЫЕ ДАННЫЕ НЕ ВВЕДЕНЫ, ВЫПОЛНЯЕТСЯ УСЛОВИЕ { SendClientMessage(playerid, COLOR_WHITE, "* Данные 2 не введены"); return 1; } } }
По сути должно быть так что если я не ввел первые данные, то выполняется первое условие и выводится сообщение "* Данные 1 не введены", если я ввожу только первые данные, то выполняется условие "* Данные 2 не введены
Проблема в том что если я не ввел первые данные, то выполняется второе условие (* Данные 2 не введены), если я ввожу только первые данные, то условия вообще не выполняются. В чем ошибка? Что я нетак делаю? Спасибо за внимание и ответы
生き死に
Сообщение отредактировал Крендель - Суббота, 08.10.2011, 13:43 |
| |
|
|
| Vagrant | Дата: Воскресенье, 09.10.2011, 07:24 | Сообщение # 2 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Крендель, Когда используешь strtok пиши в начале паблика cmd = strtok(cmdtext,idx); А в команде: if(strcmp(cmd, "/test", true) == 0) Code if(strcmp(cmd, "/test", true) == 0) { /* Нахрина тут IsPlayerConnected(playerid)?! Если игрок подключен то команда в любом случае выполнится это лишняя проверка на которую уходит драгоценное время */ tmp = strtok(cmdtext, idx); // Получаем данные 1 if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "* Данные 1 не введены"); /*... Если данные 1 введены, присваиваем их к переменной нужного типа*/ tmp = strtok(cmdtext, idx); // Получаем данные 2 if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "* Данные 2 не введены"); /*... Если данные 2 введены, присваиваем их к переменной нужного типа*/ }
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
Сообщение отредактировал Vagrant - Воскресенье, 09.10.2011, 07:27 |
| |
|
|
| Крендель | Дата: Воскресенье, 09.10.2011, 08:10 | Сообщение # 3 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 216
Награды: 0
Город: :дороГ
Репутация: -8
Замечания: 20%
Статус: 
| возник еще вопрос: мне придется во всех командах "cmdtext" заменять на "cmd"?
生き死に
|
| |
|
|
| Vagrant | Дата: Понедельник, 10.10.2011, 06:35 | Сообщение # 4 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Крендель, Да, иначе они работать не будут. Если ты не понимаешь как устроено это я тебе объясню. cmd = strtok(cmdtext,idx); В переменную cmd запысывается первое слово до пробела. То есть ввёл команду /test 5 20. В cmd записалось /test. tmp = strtok(cmdtext, idx); // Сюда записалос 5 tmp = strtok(cmdtext, idx); // Сюда записалось 20 И изначально команда у тебя проверяет: if(strcmp(cmdtext, "/test", true) == 0) /* Если написано cmdtext то при сравнении получается так: /test 5 20 равно ли /test. */ А так как в начале паблика OnPlayerCommand у тебя написано cmd = strtok(cmdtext,idx); // То есть из переменной cmdtext берётся первое слово до пробела. И в переменную cmd записывается первое слово это /test. if(strcmp(cmd, "/test", true) == 0) /* Если написано cmd то при сравнении получается так: /test равно ли /test. */ Так что знай. Если ты будишь делать команду без ввода данных то можно оставить и cmdtext. Если же с данными то по любому должно быть cmd. А вообще советую заменить везде на cmd.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
|
| |
|
|