Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

/mefedron — персонаж принимает мефедрон.Фиолетовый ник, частицы, ускорение, текст на экране.Таймер 30 сек, кулдаун, сброс при смерти.

Окт
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;
}
 
Последнее редактирование модератором:
Сверху