06:45
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
Проблема с вводными данными команды (/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%
Статус:
Quote (Vagrant)
Vagrant

возник еще вопрос: мне придется во всех командах "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%

Принимаю заказы на помощь в скриптинге!
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua