• Страница 1 из 1
  • 1
Модератор форума: [east_side]_trane, drifter-dron, valych, admin  
Урок №55 (Созданию команды с переменными игрока)
MaNb9KДата: Среда, 15.12.2010, 12:53:17 | Сообщение # 1

Группа: Пользователи
Сообщений: 220
Для начала вам нужно вставить в свой скрипт необходимый для этой задачи команду-паблик,
который будет считывать переменные из команды, которую вводит игрок (если вы используете
инклуд
Code
Dini
, то вам не нужно вставлять этот паблик в ваш мод, т. к. он уже содержится в этом
инклуде):
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. Для тренировки мы попытаемся
сделать простую команду, чтобы игрок мог убить игрока, ID которого он ввёл в команде. Для
начала каждую команду нужно назначить (в нашем случае пусть будет /killplayer):

Code

if (strcmp("/killplayer", cmdtext, true, 10) == 0)

Затем открываем новый поток, который будет содержать действия команды. Вводим новую переменную,
которая будет содержать переменную игрока; переменную, которая будет содержать номер
переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить:

Code

new tmp[256];
new idx;
new killid;

Эту переменную можно будет постоянно переписывать для следующих переменных игрока. Так что
нет необходимости вводить новую переменную для каждой переменной игрока. В нашей команде будет
одна переменная - это ID игрока, которого нужно убить. Считываем её и записываем в переменную tmp:

Code

tmp = strtok(cmdtext, idx);

Нам затем не обойтись без проверки на существование переменной игрока. Пусть, если она не
существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду:

Code

if(!strlen(tmp))  
{
     SendClientMessage(playerid, 0xFFFFFFAA, "USAGE: /killplayer [ID игрока]");
     return 1;
}

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

Code

killid = strval(tmp);

Затем делаем проверку, есть ли игрок с данным ID на сервере:

Code

if (IsPlayerConnected(killid))

Теперь открываем новый поток и пишем действия команды (наконец =) ). В нашем случае нам нужно
отобрать все хелсы у игрока под ID, который содержится в переменной killid:

Code

SetPlayerHealth(killid, 0.0);

Закрываем поток, затем пишем else и открываем новый поток. В нём мы будем писать команды, которые
будут выполняться, если игрока с данным ID нет на сервере. Приведу свой вариант:
Code

new string[256];
format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
SendClientMessage(playerid, 0xFFFF00AA, string);

Закрываем поток проверки соединения игрока с данным ID. Затем ещё раз закрываем поток команды
в общем.

Вот и всё. Только что вы научились создавать команды, в которых игрок может вводить свои
переменные.
Урок by RussianCJ


[img]http://sa-mp-fail.at.ua/premium.gif[/img]
 
СообщениеДля начала вам нужно вставить в свой скрипт необходимый для этой задачи команду-паблик,
который будет считывать переменные из команды, которую вводит игрок (если вы используете
инклуд
Code
Dini
, то вам не нужно вставлять этот паблик в ваш мод, т. к. он уже содержится в этом
инклуде):
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. Для тренировки мы попытаемся
сделать простую команду, чтобы игрок мог убить игрока, ID которого он ввёл в команде. Для
начала каждую команду нужно назначить (в нашем случае пусть будет /killplayer):

Code

if (strcmp("/killplayer", cmdtext, true, 10) == 0)

Затем открываем новый поток, который будет содержать действия команды. Вводим новую переменную,
которая будет содержать переменную игрока; переменную, которая будет содержать номер
переменной игрока и переменную, которая будет содержать ID игрока, которого надо убить:

Code

new tmp[256];
new idx;
new killid;

Эту переменную можно будет постоянно переписывать для следующих переменных игрока. Так что
нет необходимости вводить новую переменную для каждой переменной игрока. В нашей команде будет
одна переменная - это ID игрока, которого нужно убить. Считываем её и записываем в переменную tmp:

Code

tmp = strtok(cmdtext, idx);

Нам затем не обойтись без проверки на существование переменной игрока. Пусть, если она не
существует, будет высвечиваться сообщение белого цвета о том, как нужно вводить команду:

Code

if(!strlen(tmp))  
{
     SendClientMessage(playerid, 0xFFFFFFAA, "USAGE: /killplayer [ID игрока]");
     return 1;
}

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

Code

killid = strval(tmp);

Затем делаем проверку, есть ли игрок с данным ID на сервере:

Code

if (IsPlayerConnected(killid))

Теперь открываем новый поток и пишем действия команды (наконец =) ). В нашем случае нам нужно
отобрать все хелсы у игрока под ID, который содержится в переменной killid:

Code

SetPlayerHealth(killid, 0.0);

Закрываем поток, затем пишем else и открываем новый поток. В нём мы будем писать команды, которые
будут выполняться, если игрока с данным ID нет на сервере. Приведу свой вариант:
Code

new string[256];
format(string, sizeof(string), "*На сервере нет игрока с ID %d.", killid);
SendClientMessage(playerid, 0xFFFF00AA, string);

Закрываем поток проверки соединения игрока с данным ID. Затем ещё раз закрываем поток команды
в общем.

Вот и всё. Только что вы научились создавать команды, в которых игрок может вводить свои
переменные.
Урок by RussianCJ


Автор - MaNb9K
Дата добавления - 15.12.2010 в 12:53:17
  • Страница 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)

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

vkontakte :samp-pawno.ru: