Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Пользователь
Регистрация
9 Сен 2025
Сообщения
24
Ищу систему заморозку от ледяного меча
 
Пользователь
Регистрация
15 Авг 2024
Сообщения
40
Привет! Вот система заморозки ледяным мечем

pawn:
// В начале скрипта, после includes и определений

// Константы
#define ICE_WEAPON_ID 4 // ID оружия (нож)
#define FREEZE_DURATION 5000 // Длительность заморозки в миллисекундах (5 сек)
#define ICE_OBJECT_MODEL 19318 // ID объекта "лёд" (например, модель kbd_beam_rg)

// Переменные
new PlayerFrozenTimer[MAX_PLAYERS] = {-1, ...}; // Таймер для разморозки
new IceObject[MAX_PLAYERS] = {INVALID_OBJECT_ID, ...}; // Объект льда на игроке

// Функция для "заморозки" игрока
FreezePlayer(playerid, by_playerid)
{
    // 1. Останавливаем игрока
    TogglePlayerControllable(playerid, 0); // Блокируем управление
    
    // 2. Применяем анимацию "заморозки" (например, анимация падения)
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.1, 0, 1, 1, 1, 0, 1);
    
    // 3. Создаём визуальный эффект (объект льда) на спине игрока
    new Float:pos[3];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    
    // Удаляем старый объект, если он был
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
    }
    
    // Создаём новый объект льда и прикрепляем его к игроку
    IceObject[playerid] = CreatePlayerObject(playerid, ICE_OBJECT_MODEL, pos[0], pos[1], pos[2], 0.0, 0.0, 0.0);
    AttachPlayerObjectToPlayer(playerid, IceObject[playerid], by_playerid, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0);
    // Примечание: AttachPlayerObjectToPlayer может работать некорректно в некоторых версиях SA-MP.
    // Альтернатива - AttachPlayerObjectToPlayer с вычислением смещения.
    
    // 4. Отправляем сообщения обоим игрокам
    SendClientMessage(playerid, 0x33CCFFAA, "Вас заморозил ледяной меч! Вы обездвижены на несколько секунд.");
    SendClientMessage(by_playerid, 0x33CCFFAA, "Вы заморозили противника своим ледяным мечом!");
    
    // 5. Устанавливаем таймер на разморозку
    // Сначала убиваем старый таймер, если он существует
    if(PlayerFrozenTimer[playerid] != -1) {
        KillTimer(PlayerFrozenTimer[playerid]);
    }
    PlayerFrozenTimer[playerid] = SetTimerEx("UnFreezePlayer", FREEZE_DURATION, false, "i", playerid);
}

// Функция для "разморозки" игрока (вызывается таймером)
forward UnFreezePlayer(playerid);
public UnFreezePlayer(playerid)
{
    // 1. Возвращаем управление
    TogglePlayerControllable(playerid, 1);
    
    // 2. Очищаем анимацию
    ClearAnimations(playerid);
    
    // 3. Удаляем объект льда
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
        IceObject[playerid] = INVALID_OBJECT_ID;
    }
    
    // 4. Сбрасываем таймер
    PlayerFrozenTimer[playerid] = -1;
    
    // 5. Сообщение игроку
    SendClientMessage(playerid, 0x33CCFFAA, "Лёд растаял! Вы снова можете двигаться.");
}

// Обработчик нанесения урона
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
    // Проверяем, что урон нанесён нужным оружием, цель жива и это другой игрок
    if(weaponid == ICE_WEAPON_ID && damagedid != INVALID_PLAYER_ID && IsPlayerConnected(damagedid))
    {
        // Вызываем функцию заморозки
        FreezePlayer(damagedid, playerid);
    }
    return 1;
}

// Важно: очистка при дисконнекте игрока
public OnPlayerDisconnect(playerid, reason)
{
    // Убиваем таймер, если он активен
    if(PlayerFrozenTimer[playerid] != -1) {
        KillTimer(PlayerFrozenTimer[playerid]);
        PlayerFrozenTimer[playerid] = -1;
    }
    
    // Удаляем объект, если он создан
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
        IceObject[playerid] = INVALID_OBJECT_ID;
    }
    return 1;
}
 
Пользователь
Регистрация
9 Сен 2025
Сообщения
24
Привет! Вот система заморозки ледяным мечем

pawn:
// В начале скрипта, после includes и определений

// Константы
#define ICE_WEAPON_ID 4 // ID оружия (нож)
#define FREEZE_DURATION 5000 // Длительность заморозки в миллисекундах (5 сек)
#define ICE_OBJECT_MODEL 19318 // ID объекта "лёд" (например, модель kbd_beam_rg)

// Переменные
new PlayerFrozenTimer[MAX_PLAYERS] = {-1, ...}; // Таймер для разморозки
new IceObject[MAX_PLAYERS] = {INVALID_OBJECT_ID, ...}; // Объект льда на игроке

// Функция для "заморозки" игрока
FreezePlayer(playerid, by_playerid)
{
    // 1. Останавливаем игрока
    TogglePlayerControllable(playerid, 0); // Блокируем управление
   
    // 2. Применяем анимацию "заморозки" (например, анимация падения)
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.1, 0, 1, 1, 1, 0, 1);
   
    // 3. Создаём визуальный эффект (объект льда) на спине игрока
    new Float:pos[3];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
   
    // Удаляем старый объект, если он был
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
    }
   
    // Создаём новый объект льда и прикрепляем его к игроку
    IceObject[playerid] = CreatePlayerObject(playerid, ICE_OBJECT_MODEL, pos[0], pos[1], pos[2], 0.0, 0.0, 0.0);
    AttachPlayerObjectToPlayer(playerid, IceObject[playerid], by_playerid, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0);
    // Примечание: AttachPlayerObjectToPlayer может работать некорректно в некоторых версиях SA-MP.
    // Альтернатива - AttachPlayerObjectToPlayer с вычислением смещения.
   
    // 4. Отправляем сообщения обоим игрокам
    SendClientMessage(playerid, 0x33CCFFAA, "Вас заморозил ледяной меч! Вы обездвижены на несколько секунд.");
    SendClientMessage(by_playerid, 0x33CCFFAA, "Вы заморозили противника своим ледяным мечом!");
   
    // 5. Устанавливаем таймер на разморозку
    // Сначала убиваем старый таймер, если он существует
    if(PlayerFrozenTimer[playerid] != -1) {
        KillTimer(PlayerFrozenTimer[playerid]);
    }
    PlayerFrozenTimer[playerid] = SetTimerEx("UnFreezePlayer", FREEZE_DURATION, false, "i", playerid);
}

// Функция для "разморозки" игрока (вызывается таймером)
forward UnFreezePlayer(playerid);
public UnFreezePlayer(playerid)
{
    // 1. Возвращаем управление
    TogglePlayerControllable(playerid, 1);
   
    // 2. Очищаем анимацию
    ClearAnimations(playerid);
   
    // 3. Удаляем объект льда
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
        IceObject[playerid] = INVALID_OBJECT_ID;
    }
   
    // 4. Сбрасываем таймер
    PlayerFrozenTimer[playerid] = -1;
   
    // 5. Сообщение игроку
    SendClientMessage(playerid, 0x33CCFFAA, "Лёд растаял! Вы снова можете двигаться.");
}

// Обработчик нанесения урона
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart)
{
    // Проверяем, что урон нанесён нужным оружием, цель жива и это другой игрок
    if(weaponid == ICE_WEAPON_ID && damagedid != INVALID_PLAYER_ID && IsPlayerConnected(damagedid))
    {
        // Вызываем функцию заморозки
        FreezePlayer(damagedid, playerid);
    }
    return 1;
}

// Важно: очистка при дисконнекте игрока
public OnPlayerDisconnect(playerid, reason)
{
    // Убиваем таймер, если он активен
    if(PlayerFrozenTimer[playerid] != -1) {
        KillTimer(PlayerFrozenTimer[playerid]);
        PlayerFrozenTimer[playerid] = -1;
    }
   
    // Удаляем объект, если он создан
    if(IceObject[playerid] != INVALID_OBJECT_ID) {
        DestroyPlayerObject(playerid, IceObject[playerid]);
        IceObject[playerid] = INVALID_OBJECT_ID;
    }
    return 1;
}
спасибо чекни личку профиля
 
Пользователь
Регистрация
2 Апр 2025
Сообщения
21
Pawn:
forward ApplyIceObjects(hitid, playerid);
public ApplyIceObjects(hitid, playerid) {
    if(!IsPlayerConnected(hitid)) return;
    
    new Float:attachedPosition[][] = {
        {-0.032000, 0.025000, -0.039999, -94.900017, 8.700002, -61.399879, 1.088999, 0.765999, 1.301999},
        {-0.141999, -0.003999, -0.000999, -9.199993, 5.600007, -89.499947, 0.432000, 0.656000, 0.615999},
        {-0.141999, -0.003999, -0.000999, -9.199993, 5.600007, -89.499947, 0.432000, 0.656000, 0.615999},
        {0.281000, 0.015000, -0.017999, -12.099991, 4.600006, -74.100014, 0.571000, 0.656000, 0.753000},
        {0.262000, 0.023000, 0.013000, -12.099991, 3.400007, -83.099968, 0.571000, 0.656000, 0.753000},
        {0.235000, 0.011000, -0.018999, -8.599989, 3.800008, -77.899956, 0.595000, 0.508000, 0.853999}
    }, attachedBoned[] = {1, 5, 6, 12, 11, 8};
    
    for(new i = 0; i < 6; i++) {
        SetPlayerAttachedObject(hitid, i, 2806, attachedBoned[i],
            attachedPosition[i][0], attachedPosition[i][1], attachedPosition[i][2],
            attachedPosition[i][3], attachedPosition[i][4], attachedPosition[i][5],
            attachedPosition[i][6], attachedPosition[i][7], attachedPosition[i][8],
            0xFF87CEEB, 0);
    }
}
 
Сверху