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

 



 
        
[SA-MP] Hosted Tab (128)
JasonGordon 21.10.2017 10:43
[MAP+FS] Тюрьма (15)
SubjectKalcor 09.10.2017 07:59
 





Рекомендуем:
Добавить IP: 95.172.59.51:7777





Последние Файлы 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
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
Скачать GTA SAMP 0.3.7 - Кл... 20.07.2015
Страница 1 из 11
Модератор форума: AXE, Weddew 
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » /pm и /give (1 неучет)
/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
Группа: Ангел Хранитель
Сообщений: 1242
Награды: 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
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » Вопросы и Проблемы » /pm и /give (1 неучет)
Страница 1 из 11
Поиск:





 


 


 
Хостинг от uCoz SAMP-RUS.COM