• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
Урок №? Создание команд с переменными игрока.
[MTA]MaPeR5518Дата: Среда, 21.09.2011, 07:20:32 | Сообщение # 1

Группа: Пользователи
Сообщений: 181
Итак, в этом уроке вы научитесь создавать команды типа Убить игрока по id или дать здоровье игроку по id.
Для начала вставляем функцию, для считывания переменных из команд.
Code
strtok(const string[], &index)
{
   new length = strlen(string);
   while ((index < length) && (string[index] <= " ");)
   {
    index++;
   }

   new offset = index;
   new result[20];
   while ((index < length) && (string[index] > " "); && ((index - offset) < (sizeof(result) - 1)))
   {
    result[index - offset] = string[index];
    index++;
   }
   result[index - offset] = EOS;
   return result;
}

Итак после этого, ищем паблик OnPlayerCommandText, для создания комманды.
Попробуем создать команду для убийства игрока.
Сделаем так:
Code
if(strcmp("/killman", cmdtext, true, 10) == 0)

Этим, мы обозначили команду.
Затем открываем скобочку. Вводим новую переменную,
которая будет содержать переменную игрока; переменную, которая будет содержать номер
переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить:
Code
new tmp[256];
new idx;
new killid;

В нашей команде будет
одна переменная - это ID игрока, которого нужно убить. Считываем её через strtok и записываем в переменную tmp:
Code
tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!

Конечно, не обойтись без проверки на существование переменной игрока. Если она не
существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду:
Code
if(!strlen(tmp))   
{
      SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]");
      return 1;
}

Если же переменная будет существовать, то нам нужно ввести её в переменную:
Code

killid = strval(tmp);

Затем делаем проверку, есть ли игрок с данным ID на сервере:
Code
if (IsPlayerConnected(killid))

После этого, создаем само действие команды:
Code

SetPlayerHealth(killid, 0.0);

Теперь, сделаем отпротивное условие(Если игрок подключен):
Code
else{
new string[64];
format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
SendClientMessage(playerid, 0xFFFF00AA, string);
}

Итак, как должна выглядеть команда?
Code
if(strcmp("/killman", cmdtext, true, 10) == 0)
   {
       new tmp[256];
       new idx;
       new killid;

    killid = strval(tmp);

    tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!
    if(!strlen(tmp))
        {
         SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]");
         return 1;
        }
       if (IsPlayerConnected(killid))
     {
         SetPlayerHealth(killid, 0.0);
         }else{
         new string[64];
         format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
         SendClientMessage(playerid, 0xFFFF00AA, string);
         }
       return 1;
       }

Урок by ARHI[V]IRUS([MTA]MaPeR5518)


Ничто не останавливает полет мысли программиста , как компилятор!
+ не помешает


Сообщение отредактировал [MTA]MaPeR5518 - Среда, 21.09.2011, 07:23:25
 
СообщениеИтак, в этом уроке вы научитесь создавать команды типа Убить игрока по id или дать здоровье игроку по id.
Для начала вставляем функцию, для считывания переменных из команд.
Code
strtok(const string[], &index)
{
   new length = strlen(string);
   while ((index < length) && (string[index] <= " ");)
   {
    index++;
   }

   new offset = index;
   new result[20];
   while ((index < length) && (string[index] > " "); && ((index - offset) < (sizeof(result) - 1)))
   {
    result[index - offset] = string[index];
    index++;
   }
   result[index - offset] = EOS;
   return result;
}

Итак после этого, ищем паблик OnPlayerCommandText, для создания комманды.
Попробуем создать команду для убийства игрока.
Сделаем так:
Code
if(strcmp("/killman", cmdtext, true, 10) == 0)

Этим, мы обозначили команду.
Затем открываем скобочку. Вводим новую переменную,
которая будет содержать переменную игрока; переменную, которая будет содержать номер
переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить:
Code
new tmp[256];
new idx;
new killid;

В нашей команде будет
одна переменная - это ID игрока, которого нужно убить. Считываем её через strtok и записываем в переменную tmp:
Code
tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!

Конечно, не обойтись без проверки на существование переменной игрока. Если она не
существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду:
Code
if(!strlen(tmp))   
{
      SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]");
      return 1;
}

Если же переменная будет существовать, то нам нужно ввести её в переменную:
Code

killid = strval(tmp);

Затем делаем проверку, есть ли игрок с данным ID на сервере:
Code
if (IsPlayerConnected(killid))

После этого, создаем само действие команды:
Code

SetPlayerHealth(killid, 0.0);

Теперь, сделаем отпротивное условие(Если игрок подключен):
Code
else{
new string[64];
format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
SendClientMessage(playerid, 0xFFFF00AA, string);
}

Итак, как должна выглядеть команда?
Code
if(strcmp("/killman", cmdtext, true, 10) == 0)
   {
       new tmp[256];
       new idx;
       new killid;

    killid = strval(tmp);

    tmp = strtok(cmdtext, idx);//Стандартная функция! Не изменять!
    if(!strlen(tmp))
        {
         SendClientMessage(playerid, 0xFFFFFFAA, "Используй: /killman [ID игрока]");
         return 1;
        }
       if (IsPlayerConnected(killid))
     {
         SetPlayerHealth(killid, 0.0);
         }else{
         new string[64];
         format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
         SendClientMessage(playerid, 0xFFFF00AA, string);
         }
       return 1;
       }

Урок by ARHI[V]IRUS([MTA]MaPeR5518)

Автор - [MTA]MaPeR5518
Дата добавления - 21.09.2011 в 07:20:32
[east_side]_traneДата: Среда, 21.09.2011, 16:08:46 | Сообщение # 2

Группа: Пользователи
Сообщений: 443
tmp[256];

Зачем так много ОЗУ выделять ? Лучше будет так:
Code
tmp[120];


А так урок нормальный лови +


Pawn скриптер
Мои услуги по оптимизации
 
Сообщениеtmp[256];

Зачем так много ОЗУ выделять ? Лучше будет так:
Code
tmp[120];


А так урок нормальный лови +

Автор - [east_side]_trane
Дата добавления - 21.09.2011 в 16:08:46
[MTA]MaPeR5518Дата: Пятница, 23.09.2011, 04:40:44 | Сообщение # 3

Группа: Пользователи
Сообщений: 181
Ну темп я поправил, а сам урок полезный, так как это основа для написания любой комманды с id'ом игрока

Ничто не останавливает полет мысли программиста , как компилятор!
+ не помешает
 
СообщениеНу темп я поправил, а сам урок полезный, так как это основа для написания любой комманды с id'ом игрока

Автор - [MTA]MaPeR5518
Дата добавления - 23.09.2011 в 04:40:44
TWiXДата: Пятница, 23.09.2011, 05:38:49 | Сообщение # 4

Группа: Пользователи
Сообщений: 316
а как можно сделать чтоб выдавало оружие игроку?
SetPlayerHealth - это дать хп, а как пишется функция чтоб выдавать оружие и куда вписывать список оружия?
Или где можно найти список всех функций как SetPlayerHealth для игрока?


Хоронят олигарха. Гроб стоит. Собрались друзья.
Подходит к покойному Гусинский, достает портмоне,
извлекает 200 долларов, кладет в гроб и скорбно отходит.
За Гусинским к гробу подходит Потанин, тоже достает портмоне,
отсчитывает 200 долларов, кладет, отходит.
Наконец, подбегает Березовский. Достает чековую книжку,
выписывает чек на 600 долларов, кладе, забирает 400 баксов
наличными, отходит.
 
Сообщениеа как можно сделать чтоб выдавало оружие игроку?
SetPlayerHealth - это дать хп, а как пишется функция чтоб выдавать оружие и куда вписывать список оружия?
Или где можно найти список всех функций как SetPlayerHealth для игрока?

Автор - TWiX
Дата добавления - 23.09.2011 в 05:38:49
[MTA]MaPeR5518Дата: Пятница, 23.09.2011, 06:45:37 | Сообщение # 5

Группа: Пользователи
Сообщений: 181
Про оружие надо просто переменные задать по оружке вот пример
Code
if (strcmp("/giveweapon", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3)
  {
   new giveplayerid, giveweapon, giveammo;
   tmp = strtok(cmdtext, idx);
   giveplayerid = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   giveweapon = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   giveammo = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   if(!IsPlayerConnected(giveplayerid))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline");
    return 1;
   }
   if(giveweapon < 1 || giveweapon > 46)
   {
    SendClientMessage(playerid, 0xFF0000AA, "Используйте ид оружия от 1 до 46");
    return 1;
   }
   GivePlayerWeapon(giveplayerid, giveweapon, giveammo);
   return 1;
  }

А по здоровью:
Code
if (strcmp("/sethealth", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3)
  {
   new giveplayerid, sethealth;
      new string[128];
   tmp = strtok(cmdtext, idx);
   giveplayerid = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   sethealth = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]");
    return 1;
   }
   if(!IsPlayerConnected(giveplayerid))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline");
    return 1;
   }
   SetPlayerHealth(giveplayerid,sethealth);
   format(string,128,"Вы установили игроку %s %d hp",GetPlayerNameEx(giveplayerid),sethealth);
   SendClientMessage(playerid,0xFFFF00AA,string);
   return 1;
  }


Ничто не останавливает полет мысли программиста , как компилятор!
+ не помешает
 
СообщениеПро оружие надо просто переменные задать по оружке вот пример
Code
if (strcmp("/giveweapon", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3)
  {
   new giveplayerid, giveweapon, giveammo;
   tmp = strtok(cmdtext, idx);
   giveplayerid = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   giveweapon = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   giveammo = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /giveweapon [id] [weapid] [ammo]");
    return 1;
   }
   if(!IsPlayerConnected(giveplayerid))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline");
    return 1;
   }
   if(giveweapon < 1 || giveweapon > 46)
   {
    SendClientMessage(playerid, 0xFF0000AA, "Используйте ид оружия от 1 до 46");
    return 1;
   }
   GivePlayerWeapon(giveplayerid, giveweapon, giveammo);
   return 1;
  }

А по здоровью:
Code
if (strcmp("/sethealth", cmd, true) == 0 && PlayerInfo[playerid][pAdmin] >= 3)
  {
   new giveplayerid, sethealth;
      new string[128];
   tmp = strtok(cmdtext, idx);
   giveplayerid = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]");
    return 1;
   }
   tmp = strtok(cmdtext, idx);
   sethealth = strval(tmp);
   if(!strlen(tmp))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: /sethealth [id] [количетво]");
    return 1;
   }
   if(!IsPlayerConnected(giveplayerid))
   {
    SendClientMessage(playerid, 0xFF0000AA, "Ошибка: Игрок Offline");
    return 1;
   }
   SetPlayerHealth(giveplayerid,sethealth);
   format(string,128,"Вы установили игроку %s %d hp",GetPlayerNameEx(giveplayerid),sethealth);
   SendClientMessage(playerid,0xFFFF00AA,string);
   return 1;
  }

Автор - [MTA]MaPeR5518
Дата добавления - 23.09.2011 в 06:45:37
  • Страница 1 из 1
  • 1
Поиск:
Загрузка страницы, займет меньше минуты...
Загрузка...

Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
Система телефонов поломалась
Не в себе
фильм скалайн
Трансформеры 3
форсаж 6
Ищу [FS]Для админок на сервер
нужны координаты карты для отметки зон...
Помогите найти мод
pawno урок автоматические ворота
обращение к скриптерам.
Вопросы по скриптингу
Ваши ошибки при компиляции GM/FS

Вопросы по скриптингу

(1081)

Считаем до 1000

(274)

Ваши ошибки при компиляция gm

(260)

Набор в команду

(80)

Ваши ошибки при компиляции GM/FS

(71)

вопроосы по скриптингу от 22.04.2013

(64)

Баннеробмен

(64)

несколько команд на samp 0.3 c

(64)

Оценки сайта samp-pawno.ru

(55)

Заказ хостинга

(51)

Набор в команду(форум)

(45)

Урок №61 по созданию системы авто для GodFather

(45)

admin

(3869)

[east_side]_trane

(443)

TWiX

(316)

valych

(501)

drifter-dron

(477)

danik_rok

(317)

Dimka_71rus

(360)

Drifter96

(300)

MaNb9K

(220)

[MTA]MaPeR5518

(181)

Dima_Tkach

(107)

Nik_Ull

(184)

system32xzxz

(Четверг 09:25:24)

torbin169

(Суббота 23:09:29)

kuchuk_00

(Суббота 17:10:14)

artem_boyko_3

(Суббота 15:57:37)

greggelbak

(Среда 18:29:37)

vladisvlavs

(Среда 13:51:57)

add02102002

(Понедельник 22:37:15)

Диман221

(Понедельник 18:12:45)

almas051004

(Воскресенье 11:05:32)

megasuccessms

(Суббота 14:15:36)

nawe

(Пятница 22:25:23)

swoysb

(Пятница 14:55:29)

Вверх
03:17:58
ОбновитьСмайлыУправление мини-чатом
ЧАТ-PAWNO
2010-2025

vkontakte :samp-pawno.ru: