Kailo
Участник
- Сообщения
- 194
- Реакции
- 896
Это задание предназначено для начинающих программистов на SourcePawn.
Главной его целью, я вижу развитие навыка самостоятельного изучения новых функций и осмысления путей их применения.
От вас требуется дописать 4 функции согласно ТЗ. Задания требуется выполнять в порядке: пункт 1, пункт 2, пункт 3. Подпункты можно выполнять в любом порядке.
Это так же поможет попрактиковаться в редактировании уже готового кода. Использовать вы можете только те функции, описание которых дано в задании,
или те что вы допишите сами. Они вымышленны мною специально для этого задания, и при этом некоторые подобны существующим в SP или даже копируют их.
Доступные функции:
Задание:
Шаблоны функций, которые надо написать.
Публикуйте своё решение в комментариях, другим будет интересно сравнить результаты или подсмотреть ответ.
Для удобства всю информацию прикрепляю в файле.
Главной его целью, я вижу развитие навыка самостоятельного изучения новых функций и осмысления путей их применения.
От вас требуется дописать 4 функции согласно ТЗ. Задания требуется выполнять в порядке: пункт 1, пункт 2, пункт 3. Подпункты можно выполнять в любом порядке.
Это так же поможет попрактиковаться в редактировании уже готового кода. Использовать вы можете только те функции, описание которых дано в задании,
или те что вы допишите сами. Они вымышленны мною специально для этого задания, и при этом некоторые подобны существующим в SP или даже копируют их.
Доступные функции:
PHP:
enum ClipType
{
ClipPraimary, // Основные патроны
ClipSecondary // Запасные патроны
};
// Индексы слотов оружия
#define CS_SLOT_PRIMARY 0 /**< Слот основного оружия. */
#define CS_SLOT_SECONDARY 1 /**< Слот вспомогательного оружия. */
#define CS_SLOT_KNIFE 2 /**< Слот с ножом. */
#define CS_SLOT_GRENADE 3 /**< Слот с гранатами. */
// Возвращает id оружия или -1 если слот пуст
int GetPlayerWeapon(int client, int slot);
// Максимальное кол-во патронов в обойме оружия
int GetAmmoClipMaxSize(int weapon, ClipType type);
// Кол-во патронов в обойме оружия
int GetAmmoClipSize(int weapon, ClipType type);
// Устанавливает игроку кол-во патронов в обойме
void SetAmmoClipSize(int weapon, ClipType type, int count);
// Выдает оружие игроку (к примеру, чтобы дать АК, надо указать "weapon_ak47")
// Возвращает id выданного оружия
// Оружие выдается с полными обоймами
int GivePlayerWeapon(int client, const char[] classname);
// Забирает оружие из слота если оно есть, иначе ничего не делает
void ClearWeaponSlot(int client, int slot);
// Возвращает индекс команды игрока:
#define CS_TEAM_T 2 /**< Terrorists. */
#define CS_TEAM_CT 3 /**< Counter-Terrorists. */
int GetClientTeam(int client);
// Cookie - функционал, позволяющий запоминать и воспроизводить информацию
// Функции для работы с cookie
// Доступны везде и в любой момент, после подключения игрока на сервер
// name - ключевое имя параметра для сохранения/записи
// Сохраняет значение
void SaveCookie(int client, const char[] name, any value);
void SaveCookie(int client, const char[] name, const char[] buffer);
// Получает значение
// Возвращает true, если значение было ранее сохранено и успешно получено
// false, если ни какое значение ранее не сохранялось, значение value/buffer при этом остается неизменным
bool LoadCookie(int client, const char[] name, any &value);
bool LoadCookie(int client, const char[] name, char[] buffer, int maxlength);
// Получает слот для которого предназначено оружие по имени класса, или -1 если имя оружие некорректное
int GetWeaponSlot(const char[] classname);
// Возвращает индекс клиента по его UserID
int GetClientOfUserID(int userid);
// Возвращает кол-во аргументов при вызове команды
int GetCmdArgs();
// Получает в буфер аргумент вызова команды, нумерация начинается с 1
void GetCmdArg(int num, char[] buffer, int maxlength);
PHP:
// *** Задание ***
// 1) При возрождении игрока:
// 1.1) Если у него нет основного оружия, выдать ему AK , если он террорист, или M4, если он контр-террорист
// 1.2) Если у него нет вспомогательного оружия, выдать ему glock, если он террорист, или usp, если он контр-террорист (с одной не заряженной обоймой!)
// 1.3) Если у него есть основное оружие, то дополнить запас (только запасные патроны) патронов до максимума
// 1.4) Если у него есть вспомогательное оружие, то дополнить и основную и запасные обоймы до максимума
// 1.5) Забрать все гранаты
// 2) Добавить возможность отключения автоматической обработки оружия при возрождении, запоминая значение в cookie:
// 2.1) Реализовать обработчик команды Cmd_AutoWeapon, для команды "sm_autoweapon <1|0>"
// 2.2) При этом реализовать функцию IsAutoWeaponEnabled() и использовать в OnPlayerSpawn
// 3) Значение, полученное при использовании команды, запоминается в cookie (cookie для Т и КТ разные) и позже используется при выдаче нового основного оружия игрока
// 3.1) Реализовать обработчик команды Cmd_SetAutoWeapon, для команды "sm_setautoweapon <weaponclass> <t/ct>"
// 3.2) Дополнить обработку оружия игрока при возрождении, если нет сохранённого в cookie значение дает стандартное оружие - AK/M4
Шаблоны функций, которые надо написать.
PHP:
// Событие возрождения игрока
// При возрождении как мы привыкли автоматическая до закупка патронов не производится
// userid - UserID возродившегося игрока
public void OnPlayerSpawn(int userid)
{
}
// Обработчик команды sm_autoweapon
// sm_autoweapon <1|0>
// userid - UserID игрока вызвавшего команду
public void Cmd_AutoWeapon(int userid)
{
}
// Проверяет включена ли автоматическая обработка оружия при возрождении
// client - индекс клиента
// Возвращает true, если требуется обработка оружия при возрождении
// Возвращает false, если НЕ требуется обработка оружия при возрождении
bool IsAutoWeaponEnabled(int client)
{
}
// Обработчик команды sm_setautoweapon
// sm_setautoweapon <weaponclass> <t/ct>
// userid - UserID игрока вызвавшего команду
public void Cmd_SetAutoWeapon(int userid)
{
}
Публикуйте своё решение в комментариях, другим будет интересно сравнить результаты или подсмотреть ответ.
Для удобства всю информацию прикрепляю в файле.
Вложения
Последнее редактирование: