- Окт
- 3
- 0
Пользователь
2.6. Весь код необходимо брать под тег "Код".
Pawn:
#include <a_samp>
#define CMD_MEFEDRON "/mefedron"
#define MEFEDRON_TIME 30
#define MEFEDRON_COOLDOWN 5
#define MEFEDRON_SPEED 1.5
#define COLOR_MEFEDRON 0xFF00FFAA
new bool:MefedronActive[MAX_PLAYERS];
new MefedronTimer[MAX_PLAYERS];
new MefedronCooldown[MAX_PLAYERS];
new MefedronText[MAX_PLAYERS];
new Float:MefedronBaseSpeed[MAX_PLAYERS];
public OnPlayerSpawn(playerid) {
MefedronActive[playerid] = false;
MefedronCooldown[playerid] = 0;
MefedronText[playerid] = 0;
MefedronBaseSpeed[playerid] = 0.0;
return 1;
}
public OnPlayerDisconnect(playerid, reason) {
if (MefedronTimer[playerid]) KillTimer(MefedronTimer[playerid]);
if (MefedronText[playerid]) {
TextDrawDestroy(MefedronText[playerid]);
MefedronText[playerid] = 0;
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[]) {
if (strcmp(cmdtext, CMD_MEFEDRON, true) == 0) {
if (MefedronActive[playerid]) {
SendClientMessage(playerid, COLOR_MEFEDRON, "[Мефедрон] Уже активен.");
return 1;
}
if (GetTickCount() - MefedronCooldown[playerid] < MEFEDRON_TIME * 1000) {
SendClientMessage(playerid, COLOR_MEFEDRON, "[Мефедрон] Кулдаун.");
return 1;
}
UseMefedron(playerid);
return 1;
}
return 0;
}
stock UseMefedron(playerid) {
MefedronActive[playerid] = true;
MefedronCooldown[playerid] = GetTickCount();
MefedronBaseSpeed[playerid] = GetPlayerSpeed(playerid);
SetPlayerSpeed(playerid, MefedronBaseSpeed[playerid] * MEFEDRON_SPEED);
SetPlayerColor(playerid, COLOR_MEFEDRON);
AttachParticles(playerid);
MefedronText[playerid] = CreatePlayerTextDraw(playerid, 320.0, 50.0, "~p~МЕФЕДРОН~n~~w~Эффект активен");
TextDrawFont(MefedronText[playerid], 2);
TextDrawLetterSize(MefedronText[playerid], 0.4, 1.2);
TextDrawColor(MefedronText[playerid], 0xFF00FFFF);
TextDrawSetOutline(MefedronText[playerid], 1);
TextDrawSetShadow(MefedronText[playerid], 0);
TextDrawSetProportional(MefedronText[playerid], 1);
TextDrawShowForPlayer(playerid, MefedronText[playerid]);
SendClientMessage(playerid, COLOR_MEFEDRON, "[Мефедрон] Принят. 30 секунд.");
MefedronTimer[playerid] = SetTimerEx("MefedronEnd", MEFEDRON_TIME * 1000, false, "i", playerid);
return 1;
}
stock AttachParticles(playerid) {
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for (new i = 0; i < 5; i++) {
CreateExplosion(x + floatrandom(-2.0, 2.0), y + floatrandom(-2.0, 2.0), z + floatrandom(0.0, 2.0), 0, 0.5);
}
SetTimerEx("MefedronPulse", 1000, true, "i", playerid);
}
forward MefedronPulse(playerid);
public MefedronPulse(playerid) {
if (!MefedronActive[playerid]) return 0;
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
static bool:colorFlip = false;
SetPlayerColor(playerid, colorFlip ? 0xFF00FFAA : 0xFF66FFAA);
colorFlip = !colorFlip;
for (new i = 0; i < 3; i++) {
CreateExplosion(x + floatrandom(-1.5, 1.5), y + floatrandom(-1.5, 1.5), z + 0.5, 0, 0.3);
}
return 1;
}
forward MefedronEnd(playerid);
public MefedronEnd(playerid) {
if (!MefedronActive[playerid]) return 0;
MefedronActive[playerid] = false;
SetPlayerSpeed(playerid, MefedronBaseSpeed[playerid]);
SetPlayerColor(playerid, 0xFFFFFFFF);
if (MefedronText[playerid]) {
TextDrawDestroy(MefedronText[playerid]);
MefedronText[playerid] = 0;
}
SendClientMessage(playerid, COLOR_MEFEDRON, "[Мефедрон] Закончился.");
return 1;
}
stock Float:GetPlayerSpeed(playerid) {
new Float:speed;
GetPlayerVelocity(playerid, speed, speed, speed);
return speed;
}
stock SetPlayerSpeed(playerid, Float:speed) {
new Float:vx, Float:vy, Float:vz;
GetPlayerVelocity(playerid, vx, vy, vz);
SetPlayerVelocity(playerid, vx * speed, vy * speed, vz * speed);
}
stock Float:floatrandom(Float:min, Float:max) {
return min + (max - min) * frandom();
}
stock frandom() {
return float(random(10000)) / 10000.0;
}
public OnPlayerDeath(playerid, killerid, reason) {
if (MefedronActive[playerid]) {
KillTimer(MefedronTimer[playerid]);
MefedronActive[playerid] = false;
if (MefedronText[playerid]) {
TextDrawDestroy(MefedronText[playerid]);
MefedronText[playerid] = 0;
}
}
return 1;
}
Последнее редактирование модератором: