PDA

Просмотр полной версии : [Мануал] Система для прокачки стиля боя (Без сохранения)



lonin
27.04.2016, 19:54
Доброго времени суток ув. пользователи форума!

Итак думаю по названию все становится ясно. Данная система предназначена для прокачки стиля боя персонажа.

Автор: lonin (Я).

Как это работает?

Мы приходим в зал который находится в Los Santose (стандартное место из сингла), заходим в него, после чего становимся на чекпоинт ну и собственно говоря происходит обучение (как именно можно увидеть на скриншотах.

Распишем код по частям:



Добавим ко всем new следующие переменные:


new PlayerText:SPORT[13][MAX_PLAYERS];
new sportzal[2];
new bool:CP_FIGHT[MAX_PLAYERS];
new boxeract;
new sporttimer;


PlayerText:SPORT[13][MAX_PLAYERS] - Переменная отвечающая за создание Textdraw (Включает в себе 13 ячеек. От 0 до 12).
sportzal[2] - Переменная для пикапов входа/выхода.
bool:CP_FIGHT[MAX_PLAYERS] - Персональная переменная для каждого игрока (В дальнейшем поможет нам создать чекпоинт для начала тренировки).
boxeract - Переменная которая нужна для создание статического игрового бота (SetPlayerActor).
sporttimer - Переменная которая нужна что бы задать таймер для нашего будущего коллбэка.



Далее в public OnPlayerConnect(playerid) добавим наши TextDraw'ы:



SPORT[0][playerid] = CreatePlayerTextDraw(playerid, 180.849182, 202.416656, "LD_OTB2:butnA");
PlayerTextDrawTextSize(playerid, SPORT[0][playerid], 94.172760, 105.583343);
PlayerTextDrawAlignment(playerid, SPORT[0][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[0][playerid], -1061109505);
PlayerTextDrawUseBox(playerid, SPORT[0][playerid], true);
PlayerTextDrawBoxColor(playerid, SPORT[0][playerid], -5570816);
PlayerTextDrawSetShadow(playerid, SPORT[0][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[0][playerid], 0);
PlayerTextDrawBackgroundColor(playerid, SPORT[0][playerid], -5570816);
PlayerTextDrawFont(playerid, SPORT[0][playerid], 5);
PlayerTextDrawSetSelectable(playerid, SPORT[0][playerid], true);
PlayerTextDrawSetPreviewModel(playerid, SPORT[0][playerid], 19134);
PlayerTextDrawSetPreviewRot(playerid, SPORT[0][playerid], 0.000000, -90.000000, 90.000000, 1.000000);

SPORT[1][playerid] = CreatePlayerTextDraw(playerid, 368.790588, 200.499954, "LD_OTB2:butnA");
PlayerTextDrawTextSize(playerid, SPORT[1][playerid], 94.172760, 105.583343);
PlayerTextDrawAlignment(playerid, SPORT[1][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[1][playerid], -1061109505);
PlayerTextDrawUseBox(playerid, SPORT[1][playerid], true);
PlayerTextDrawBoxColor(playerid, SPORT[1][playerid], -5570816);
PlayerTextDrawSetShadow(playerid, SPORT[1][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[1][playerid], 0);
PlayerTextDrawBackgroundColor(playerid, SPORT[1][playerid], -5570816);
PlayerTextDrawFont(playerid, SPORT[1][playerid], 5);
PlayerTextDrawSetSelectable(playerid, SPORT[1][playerid], true);
PlayerTextDrawSetPreviewModel(playerid, SPORT[1][playerid], 19134);
PlayerTextDrawSetPreviewRot(playerid, SPORT[1][playerid], 0.000000, 90.000000, 90.000000, 1.000000);

SPORT[2][playerid] = CreatePlayerTextDraw(playerid, 292.357238, 102.666664, "LD_OTB2:butnA");
PlayerTextDrawTextSize(playerid, SPORT[2][playerid], 57.159606, 70.000007);
PlayerTextDrawAlignment(playerid, SPORT[2][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[2][playerid], -1061109505);
PlayerTextDrawUseBox(playerid, SPORT[2][playerid], true);
PlayerTextDrawBoxColor(playerid, SPORT[2][playerid], -5570816);
PlayerTextDrawSetShadow(playerid, SPORT[2][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[2][playerid], 0);
PlayerTextDrawBackgroundColor(playerid, SPORT[2][playerid], -5570816);
PlayerTextDrawFont(playerid, SPORT[2][playerid], 5);
PlayerTextDrawSetSelectable(playerid, SPORT[2][playerid], true);
PlayerTextDrawSetPreviewModel(playerid, SPORT[2][playerid], 19134);
PlayerTextDrawSetPreviewRot(playerid, SPORT[2][playerid], 0.000000, 0.000000, 90.000000, 1.000000);

SPORT[3][playerid] = CreatePlayerTextDraw(playerid, 294.762756, 331.166687, "LD_OTB2:butnA");
PlayerTextDrawTextSize(playerid, SPORT[3][playerid], 57.159606, 70.000007);
PlayerTextDrawAlignment(playerid, SPORT[3][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[3][playerid], -1061109505);
PlayerTextDrawUseBox(playerid, SPORT[3][playerid], true);
PlayerTextDrawBoxColor(playerid, SPORT[3][playerid], -5570816);
PlayerTextDrawSetShadow(playerid, SPORT[3][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[3][playerid], 0);
PlayerTextDrawBackgroundColor(playerid, SPORT[3][playerid], -5570816);
PlayerTextDrawFont(playerid, SPORT[3][playerid], 5);
PlayerTextDrawSetSelectable(playerid, SPORT[3][playerid], true);
PlayerTextDrawSetPreviewModel(playerid, SPORT[3][playerid], 19134);
PlayerTextDrawSetPreviewRot(playerid, SPORT[3][playerid], 180.000000, 0.000000, 90.000000, 1.000000);

SPORT[4][playerid] = CreatePlayerTextDraw(playerid, 203.932647, 243.583343, "LD_CHAT:thumbdn");
PlayerTextDrawFont(playerid,SPORT[4][playerid], 4);
PlayerTextDrawColor(playerid,SPORT[4][playerid], 0xFFFFFFFF);
PlayerTextDrawTextSize(playerid,SPORT[4][playerid], 21.0,21.0);

SPORT[5][playerid] = CreatePlayerTextDraw(playerid, 449.500274, 223.000045, "LD_CHAT:thumbdn");
PlayerTextDrawFont(playerid,SPORT[5][playerid], 4);
PlayerTextDrawColor(playerid,SPORT[5][playerid], 0xFFFFFFFF);
PlayerTextDrawTextSize(playerid,SPORT[5][playerid], 21.0,21.0);

SPORT[6][playerid] = CreatePlayerTextDraw(playerid, 326.342071, 93.916687, "LD_CHAT:thumbdn");
PlayerTextDrawFont(playerid,SPORT[6][playerid], 4);
PlayerTextDrawColor(playerid,SPORT[6][playerid], 0xFFFFFFFF);
PlayerTextDrawTextSize(playerid,SPORT[6][playerid], 21.0,21.0);

SPORT[7][playerid] = CreatePlayerTextDraw(playerid, 324.530639, 364.999664, "LD_CHAT:thumbdn");
PlayerTextDrawFont(playerid,SPORT[7][playerid], 4);
PlayerTextDrawColor(playerid,SPORT[7][playerid], 0xFFFFFFFF);
PlayerTextDrawTextSize(playerid,SPORT[7][playerid], 21.0,21.0);

SPORT[8][playerid] = CreatePlayerTextDraw(playerid, 388.221160, 343.583221, "TRUE KICK:");
PlayerTextDrawLetterSize(playerid, SPORT[8][playerid], 0.468272, 1.354999);
PlayerTextDrawAlignment(playerid, SPORT[8][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[8][playerid], 8388863);
PlayerTextDrawSetShadow(playerid, SPORT[8][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[8][playerid], -1);
PlayerTextDrawBackgroundColor(playerid, SPORT[8][playerid], -1);
PlayerTextDrawFont(playerid, SPORT[8][playerid], 2);
PlayerTextDrawSetProportional(playerid, SPORT[8][playerid], 1);

SPORT[9][playerid] = CreatePlayerTextDraw(playerid, 124.506652, 344.583190, "FAIL KICK:");
PlayerTextDrawLetterSize(playerid, SPORT[9][playerid], 0.468272, 1.354999);
PlayerTextDrawAlignment(playerid, SPORT[9][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[9][playerid], -16776961);
PlayerTextDrawSetShadow(playerid, SPORT[9][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[9][playerid], -1);
PlayerTextDrawBackgroundColor(playerid, SPORT[9][playerid], -1);
PlayerTextDrawFont(playerid, SPORT[9][playerid], 2);
PlayerTextDrawSetProportional(playerid, SPORT[9][playerid], 1);

SPORT[10][playerid] = CreatePlayerTextDraw(playerid, 488.667755, 338.916564, "1000");
PlayerTextDrawLetterSize(playerid, SPORT[10][playerid], 0.471083, 2.241667);
PlayerTextDrawAlignment(playerid, SPORT[10][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[10][playerid], -1);
PlayerTextDrawSetShadow(playerid, SPORT[10][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[10][playerid], 1);
PlayerTextDrawBackgroundColor(playerid, SPORT[10][playerid], 51);
PlayerTextDrawFont(playerid, SPORT[10][playerid], 2);
PlayerTextDrawSetProportional(playerid, SPORT[10][playerid], 1);

SPORT[11][playerid] = CreatePlayerTextDraw(playerid, 217.925430, 339.916595, "1000");
PlayerTextDrawLetterSize(playerid, SPORT[11][playerid], 0.471083, 2.241667);
PlayerTextDrawAlignment(playerid, SPORT[11][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[11][playerid], -1);
PlayerTextDrawSetShadow(playerid, SPORT[11][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[11][playerid], 1);
PlayerTextDrawBackgroundColor(playerid, SPORT[11][playerid], 51);
PlayerTextDrawFont(playerid, SPORT[11][playerid], 2);
PlayerTextDrawSetProportional(playerid, SPORT[11][playerid], 1);

SPORT[12][playerid] = CreatePlayerTextDraw(playerid, 293.762939, 406.000122, "Exit");
PlayerTextDrawLetterSize(playerid, SPORT[12][playerid], 0.895563, 3.332499);
PlayerTextDrawAlignment(playerid, SPORT[12][playerid], 1);
PlayerTextDrawColor(playerid, SPORT[12][playerid], -16776961);
PlayerTextDrawUseBox(playerid, SPORT[12][playerid], true);
PlayerTextDrawBoxColor(playerid, SPORT[12][playerid], 0);
PlayerTextDrawSetShadow(playerid, SPORT[12][playerid], 0);
PlayerTextDrawSetOutline(playerid, SPORT[12][playerid], 1);
PlayerTextDrawBackgroundColor(playerid, SPORT[12][playerid], -1);
PlayerTextDrawFont(playerid, SPORT[12][playerid], 0);
PlayerTextDrawSetProportional(playerid, SPORT[12][playerid], 1);
PlayerTextDrawSetSelectable(playerid, SPORT[12][playerid], true);




Далее в public OnGameModeInit добавим следующие строки:



sporttimer = SetTimer("STimer", 1000,1);
boxeract = CreateActor(80, 761.7173,10.1372,1001.1639,39.4434);
ApplyActorAnimation(boxeract, "PED", "FIGHTIDLE", 4.1, 1, 0, 0, 0, 0);
sportzal[0] = CreatePickup(1318,23,2229.7566,-1721.5988,13.5646);
sportzal[1] = CreatePickup(1318,23,772.4290,-5.0806,1000.7289);


SetTimer - приводим в действие наш таймер. Он нам понадобится для обновления коллбэка "STimer" каждую секунду.
CreateActor - Добавляем в интерьер спортзала статического бота со скином 80 (боксер).
ApplyActorAnimation - ставим нашего бота боксера в "боевую" стойку.
CreatePickup создаём пикапы входа/выхода в наш спортзал.




Добавим в public OnPlayerPickUpPickup(playerid, pickupid) следующие:


if(pickupid == sportzal[0])
{
SetPlayerInterior(playerid,5);
SetPlayerPos(playerid,771.4412,-2.7885,1000.7279);
SetPlayerFacingAngle(playerid, 21.2131);
SetPlayerCheckpoint(playerid, 766.7979,11.3237,1000.7061, 0.5);
CP_FIGHT[playerid] = true;
}
else if(pickupid == sportzal[1])
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,2227.1162,-1723.1353,13.5533);
SetPlayerFacingAngle(playerid, 130.5909);
SetPlayerFightingStyle (playerid, FIGHT_STYLE_NORMAL);
DisablePlayerCheckpoint(playerid);
CP_FIGHT[playerid] = false;
}

SetPlayerInterior - меняет id интерьера для игрока который стал на пикап.
SetPlayerPos - меняет позицию игрока, который стал на пикап.
SetPlayerFacingAngle - меняет угол поворота камеры игрока, который стал на пикап.
SetPlayerCheckpoint - создаём чекпоинт для начала тренировки.
CP_FIGHT[playerid] = true; - присваиваем значение "1"(true) игроку. Для того что бы коллбэк OnPlayerEnterCheckpoint понял на какой чекпоинт мы стали.
DisablePlayerCheckpoint - удаляем созданный чекпоинт при выходе из интерьера.



Добавим в public OnPlayerEnterCheckpoint(playerid) следующие:



if(CP_FIGHT[playerid])
{
TogglePlayerControllable(playerid,0);
SetPlayerCameraPos(playerid, 758.8285,12.9258,1002.1639);
SetPlayerCameraLookAt(playerid, 761.7173,10.1372,1002.1639);
SetPVarInt(playerid, "FIGHT", 1); //
SetPVarInt(playerid, "TRUE_F", 0);
SetPVarInt(playerid, "FAIL_F", 0);
for(new t; t != 4; t++) PlayerTextDrawShow(playerid, SPORT[t][playerid]);
for(new n = 8; n != 13; n++) PlayerTextDrawShow(playerid, SPORT[n][playerid]);
SelectTextDraw(playerid, 0xFF4040AA);
DisablePlayerCheckpoint(playerid);
RandomText(playerid);
}

TogglePlayerControllable - при использовании значения "0" замораживает игрока на месте.
SetPlayerCameraPos - Меняем позицию нашей камеры.
SetPlayerCameraLookAt - Делаем так что бы камера смотрела на бота боксера.
SetPVarInt - Создадим несколько свободных переменных, которые понадобятся нам в дальнейшем и присвоим им стартовые значения.
for(new t; t != 4; t++) & for(new n = 8; n != 13; n++) - Циклы которые помогут нам отобразить наши уже созданные ранее текстдравы.
SelectTextDraw - Сделаем наши текстдравы кликабельными(что бы мы могли на них нажать).
DisablePlayerCheckpoint - Удалим наш чекпоинт.
RandomText - Запустим коллбэк отображения рандомного текстдрава ( данный текстдрав будет указывать игроку куда нужно кликать для прокачки скилла).



Добавим наш коллбэк "STime" где-то в конец мода:


forward STimer(playerid);
public STimer(playerid)
{
if(GetPVarInt(playerid, "FIGHT") == 1) // Проверка на то, что бой начат
{
switch(GetPVarInt(playerid, "FIGHT_1"))
{
case 3:
{
SetPVarInt(playerid, "FIGHT_1", GetPVarInt(playerid, "FIGHT_1")-1);
}
case 2:
{
SetPVarInt(playerid, "FIGHT_1", GetPVarInt(playerid, "FIGHT_1")-1);
}
case 1:
{
SetPVarInt(playerid, "FIGHT_1", GetPVarInt(playerid, "FIGHT_1")-1);
PlayerTextDrawHide(playerid, SPORT[4][playerid]);
DeletePVar(playerid, "FIGHT_1");
RandomText(playerid);
}
}
switch(GetPVarInt(playerid, "FIGHT_2"))
{
case 3:
{
SetPVarInt(playerid, "FIGHT_2", GetPVarInt(playerid, "FIGHT_2")-1);
}
case 2:
{
SetPVarInt(playerid, "FIGHT_2", GetPVarInt(playerid, "FIGHT_2")-1);
}
case 1:
{
SetPVarInt(playerid, "FIGHT_2", GetPVarInt(playerid, "FIGHT_2")-1);
PlayerTextDrawHide(playerid, SPORT[5][playerid]);
DeletePVar(playerid, "FIGHT_2");
RandomText(playerid);
}
}
switch(GetPVarInt(playerid, "FIGHT_3"))
{
case 3:
{
SetPVarInt(playerid, "FIGHT_3", GetPVarInt(playerid, "FIGHT_3")-1);
}
case 2:
{
SetPVarInt(playerid, "FIGHT_3", GetPVarInt(playerid, "FIGHT_3")-1);
}
case 1:
{
SetPVarInt(playerid, "FIGHT_3", GetPVarInt(playerid, "FIGHT_3")-1);
PlayerTextDrawHide(playerid, SPORT[6][playerid]);
DeletePVar(playerid, "FIGHT_3");
RandomText(playerid);
}
}
switch(GetPVarInt(playerid, "FIGHT_4"))
{
case 3:
{
SetPVarInt(playerid, "FIGHT_4", GetPVarInt(playerid, "FIGHT_4")-1);
}
case 2:
{
SetPVarInt(playerid, "FIGHT_4", GetPVarInt(playerid, "FIGHT_4")-1);
}
case 1:
{
SetPVarInt(playerid, "FIGHT_4", GetPVarInt(playerid, "FIGHT_4")-1);
PlayerTextDrawHide(playerid, SPORT[7][playerid]);
DeletePVar(playerid, "FIGHT_4");
RandomText(playerid);
}
}
}
}

GetPVarInt - используется что бы вытянуть значение из нашего PVara.
SetPVarInt - здесь мы с помощью него отнимаем у переменной "1" единицу.
PlayerTextDrawHide - скрываем наш текстдрав (делается это, когда значение наших PVar'ов достигает "0").
DeletePVar - удаляем наш PVar для определённого игрока (делается это, когда значение наших PVar'ов достигает "0").
RandomText - Перезапуск нашего рандомного текстдрава (делается это, когда значение наших PVar'ов достигает "0").



Добавим наш коллбэк рандомного текста:


stock RandomText(playerid)
{
switch(random(4))
{
case 0:
{
PlayerTextDrawShow(playerid, SPORT[4][playerid]);
SetPVarInt(playerid, "FIGHT_1", 3);
}
case 1:
{
PlayerTextDrawShow(playerid, SPORT[5][playerid]);
SetPVarInt(playerid, "FIGHT_2", 3);
}
case 2:
{
PlayerTextDrawShow(playerid, SPORT[6][playerid]);
SetPVarInt(playerid, "FIGHT_3", 3);
}
case 3:
{
PlayerTextDrawShow(playerid, SPORT[7][playerid]);
SetPVarInt(playerid, "FIGHT_4", 3);
}
}
}

random(4) - функция рандома из 4-ёх значений.
PlayerTextDrawShow - Отображаем текстдрав.
SetPVarInt - устанавливаем значение для наших PVar'ов на "3". (3 в этом случае - секунды).



Добавим функцию подсчёта кликов:


if(playertextid == SPORT[0][playerid]) // Left
{
if(GetPVarInt(playerid, "FIGHT_1")) SetPVarInt(playerid, "TRUE_F", GetPVarInt(playerid, "TRUE_F")+1), GameTextForPlayer(playerid, "~g~True", 100, 6);// Подсчёт верных кликов и вывод сообщения на экран в виде "True"
else
{
GameTextForPlayer(playerid, "~r~FAIL", 100, 6); // Вывод сообщения при неверном клике "Fail"
PlayerTextDrawHide(playerid, SPORT[4][playerid]); // Удаление текстдрава
SetPVarInt(playerid, "FAIL_F", GetPVarInt(playerid, "FAIL_F")+1); // Добавляем к неверным ударам +1
DeletePVar(playerid, "FIGHT_1"); // Удаляем PVar
RandomText(playerid); // Запускаем наш коллбэк рандомного отображения текстдравов
}
new str[7]; // выделяем память для отображения ударов в текстдраве
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "TRUE_F")); // форматируем текст для отображения в текстдраве
PlayerTextDrawSetString(playerid, SPORT[10][playerid], str); // Отображаем текст в текстдраве.
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "FAIL_F"));
PlayerTextDrawSetString(playerid, SPORT[11][playerid], str);
}
else if(playertextid == SPORT[1][playerid]) // Right
{
if(GetPVarInt(playerid, "FIGHT_2")) SetPVarInt(playerid, "TRUE_F", GetPVarInt(playerid, "TRUE_F")+1), GameTextForPlayer(playerid, "~g~True", 100, 6);
else
{
GameTextForPlayer(playerid, "~r~FAIL", 100, 6);
PlayerTextDrawHide(playerid, SPORT[5][playerid]);
SetPVarInt(playerid, "FAIL_F", GetPVarInt(playerid, "FAIL_F")+1);
DeletePVar(playerid, "FIGHT_2");
RandomText(playerid);
}
new str[7];
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "TRUE_F"));
PlayerTextDrawSetString(playerid, SPORT[10][playerid], str);
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "FAIL_F"));
PlayerTextDrawSetString(playerid, SPORT[11][playerid], str);
}
else if(playertextid == SPORT[2][playerid]) // Up
{
if(GetPVarInt(playerid, "FIGHT_3")) SetPVarInt(playerid, "TRUE_F", GetPVarInt(playerid, "TRUE_F")+1), GameTextForPlayer(playerid, "~g~True", 100, 6);
else
{
GameTextForPlayer(playerid, "~r~FAIL", 100, 6);
PlayerTextDrawHide(playerid, SPORT[6][playerid]);
SetPVarInt(playerid, "FAIL_F", GetPVarInt(playerid, "FAIL_F")+1);
DeletePVar(playerid, "FIGHT_3");
RandomText(playerid);
}
new str[7];
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "TRUE_F"));
PlayerTextDrawSetString(playerid, SPORT[10][playerid], str);
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "FAIL_F"));
PlayerTextDrawSetString(playerid, SPORT[11][playerid], str);
}
else if(playertextid == SPORT[3][playerid]) // Down
{
if(GetPVarInt(playerid, "FIGHT_4")) SetPVarInt(playerid, "TRUE_F", GetPVarInt(playerid, "TRUE_F")+1), GameTextForPlayer(playerid, "~g~True", 100, 6);
else
{
GameTextForPlayer(playerid, "~r~FAIL", 100, 6);
PlayerTextDrawHide(playerid, SPORT[5][playerid]);
SetPVarInt(playerid, "FAIL_F", GetPVarInt(playerid, "FAIL_F")+1);
DeletePVar(playerid, "FIGHT_2");
RandomText(playerid);
}
new str[7];
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "TRUE_F"));
PlayerTextDrawSetString(playerid, SPORT[10][playerid], str);
format(str, sizeof(str), "~g~%d", GetPVarInt(playerid, "FAIL_F"));
PlayerTextDrawSetString(playerid, SPORT[11][playerid], str);
}
else if(playertextid == SPORT[12][playerid])
{
if(GetPVarInt(playerid, "FIGHT") != 0)
{
DeletePVar(playerid, "FIGHT"); // Удаляем PVar
DeletePVar(playerid, "FIGHT_1"); // Удаляем PVar
DeletePVar(playerid, "FIGHT_2"); // Удаляем PVar
DeletePVar(playerid, "FIGHT_3"); // Удаляем PVar
DeletePVar(playerid, "FIGHT_4"); // Удаляем PVar
SetPlayerPos(playerid,771.4412,-2.7885,1000.7279); // Устанавливаем позицию игрока при выходе с тренировки
SetPlayerFacingAngle(playerid, 21.2131); // Поворот камеры.
TogglePlayerControllable(playerid, 1); // Размораживаем игрока
for(new x; x != 13; x++) PlayerTextDrawHide(playerid, SPORT[x][playerid]); // Удаляем все текстдравы
SetCameraBehindPlayer(playerid); // Возвращаем камеру игроку
CancelSelectTextDraw(playerid); // Удаляем кликабельность (убираем курсор).
}
}




В public OnPlayerDisconnect(playerid)


for(new x; x != 13; x++) PlayerTextDrawHide(playerid, SPORT[x][playerid]); // Удаляем все текстдравы для playerid (если он вылетел/вышел с игры).




В public OnGameModeExit()


KillTimer(sporttimer);




Ну вот и всё, наша система готова. Вам осталось добавить функционал прокачки боя и сохранение стиля боя в Вашу базу данных.


http://i.imgur.com/rdeyDbX.jpg
http://i.imgur.com/BEXixNm.jpg
http://i.imgur.com/br2rUOF.jpg
http://i.imgur.com/wSZrCw7.jpg
http://i.imgur.com/7hpUnBa.jpg

Иван Бубнов
27.04.2016, 21:59
Код не ахти

arzumanov
08.06.2016, 05:25
Код не ахти

Ну так объясни ему, что именно тебе не нравится