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

 



 
          





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





Последние Файлы 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  
/pm и /give
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
  • Страница 1 из 1
  • 1
Поиск:





 


 


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