- 1,788
- 2,141
Привет-привет, читатели данной темы.
Сегодня мне бы хотелось показать простенькую систему стадий для RP сервера.
В конце у нас получится что-то на подобии этого:
Давайте начинать. Предупреждаю, что система может конфликтовать с системой больницы.
• Ко всем переменным в начале кода нужно добавить:Сегодня мне бы хотелось показать простенькую систему стадий для RP сервера.
В конце у нас получится что-то на подобии этого:
PHP:
new Text3D:stadia_text[MAX_PLAYERS];
new stadia_timer[MAX_PLAYERS];
• Ко всем DEFINE:
PHP:
#define COLOR_GREY 0xD0D0D0FF
• Теперь в public OnPlayerUpdate добавляем:
PHP:
if (GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
{
new Float:php;
GetPlayerHealth(playerid, php);
if (php > 0.0 && php < 10.0 && GetPVarInt(playerid, "nokaut") == 0) // можете ещё сделать проверку на больницу, если она у Вас есть
{
SendClientMessage(playerid, COLOR_GREY, "Ваш персонаж ранен и находится без сознания.");
SendClientMessage(playerid, COLOR_GREY, "Вы можете прописать команду /acceptdeath, если согласны принять смерть.");
TogglePlayerControllable(playerid, 0);
ApplyAnimation(playerid,"PED","FLOOR_hit_f",4.1,0,1,1,1,0);
stadia_timer[playerid] = SetTimerEx("StadiaTimer", 1500, true, "d", playerid);
stadia_text[playerid] = Create3DTextLabel("(( ДАННЫЙ ПЕРСОНАЖ БЕЗ СОЗНАНИЯ ))", COLOR_GREY, pX, pY, pZ, 25.0, GetPlayerVirtualWorld(playerid), 1);
Attach3DTextLabelToPlayer(stadia_text[playerid], playerid, 0.0, 0.0, 0.7);
SetPVarInt(playerid, "nokaut", 1);
}
}
• В конце мода создаём forward и public для таймера:
PHP:
forward StadiaTimer(playerid);
public StadiaTimer(playerid)
{
new Float:php;
GetPlayerHealth(playerid, php);
if (php > 9.0) //если персонажа вылечили или админ выдал HP
{
TogglePlayerControllable(playerid, 1);
ApplyAnimation(playerid,"CARRY","crry_prtial",4.0,0,0,0,0,0,0); //сбиваем анимку
Delete3DTextLabel(stadia_text[playerid]);
SetPVarInt(playerid, "nokaut", 0);
return KillTimer(stadia_timer[playerid]);
}
return 1;
}
• Теперь идём в public OnPlayerDeath и прописываем в конец:
PHP:
if (GetPVarInt(playerid, "nokaut") == 1)
{
TogglePlayerControllable(playerid, 1);
ApplyAnimation(playerid,"CARRY","crry_prtial",4.0,0,0,0,0,0,0); //сбиваем анимку
Delete3DTextLabel(stadia_text[playerid]);
SetPVarInt(playerid, "nokaut", 0);
KillTimer(stadia_timer[playerid]);
}
• Ну и под конец идём в public OnPlayerDisconnect и пишем:
PHP:
if (GetPVarInt(playerid, "nokaut") == 1)
{
Delete3DTextLabel(stadia_text[playerid]);
SetPVarInt(playerid, "nokaut", 0);
KillTimer(stadia_timer[playerid]);
}
Надеюсь такое решение Вам подойдет и Вы будете использовать его в своих модах.
Возможно есть какие-то недостатки, т.к. сам недавно начал писать на PAWN.
Возможно есть какие-то недостатки, т.к. сам недавно начал писать на PAWN.
Последнее редактирование: