Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

плагин прятки для jail break mod

Статус пользователя BaHeK
сообщение 21.6.2011, 16:32
Сообщение #1


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

исходник
Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>

#define PLUGIN "Hide Day"
#define VERSION "1.0"
#define AUTHOR "Bizz"

#pragma semicolon 1

new msgScreenFade, maxplayers, bool:is_hide, bool:is_hide_after, Float:user_speed[33], MsgSync;

const left_time = 35; // Second

const OFFSET_CSTEAMS = 114;
const OFFSET_LINUX = 5;

enum (+= 100)
{
    LIMIT_ID = 3000
}

enum
{
    FM_CS_TEAM_UNASSIGNED = 0,
    FM_CS_TEAM_T,
    FM_CS_TEAM_CT,
    FM_CS_TEAM_SPECTATOR
}

new const race_go[] = "jb/race_go.mp3";

public plugin_precache()
{
    engfunc(EngFunc_PrecacheSound, race_go);
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);
    register_dictionary("hide_day.txt");
    
    register_clcmd("say /hide", "clcmd_hide", ADMIN_BAN, "Start hide day");
    
    register_event("HLTV", "event_round_start", "a", "1=0", "2=0");
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1);
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
    register_message(get_user_msgid("CurWeapon"), "message_cur_weapon");
    
    msgScreenFade = get_user_msgid("ScreenFade");
    maxplayers = get_maxplayers();
    MsgSync = CreateHudSyncObj();
}

public event_round_start()
{
    remove_task(LIMIT_ID);
    RemoveLimit();
    is_hide_after = false;
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
    if (!is_hide || !is_user_alive(msg_entity) || fm_cs_get_user_team(msg_entity) != FM_CS_TEAM_CT) return;
    
    set_pev(msg_entity, pev_maxspeed, 1.0);
}

public fw_PlayerSpawn_Post(id)
{
    if (!is_hide || !is_user_alive(id) || fm_cs_get_user_team(id) != FM_CS_TEAM_CT) return;
    
    SetLimit(id);
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
    if (victim == attacker || !is_user_connected(attacker)) return HAM_IGNORED;
    
    if (is_hide && fm_cs_get_user_team(attacker) == FM_CS_TEAM_CT) return HAM_SUPERCEDE;
    if ((is_hide_after || is_hide) && fm_cs_get_user_team(attacker) == FM_CS_TEAM_T && GetCountAliveT() > 1) return HAM_SUPERCEDE;
    
    return HAM_IGNORED;
}

public clcmd_hide(id, level, cid)
{
    if (is_hide || !cmd_access(id, level, cid, 1)) return PLUGIN_HANDLED;
    
    client_cmd(id, "jbe_open"); // Open jail doors
    client_cmd(0, "mp3 play ^"sound/%s^"", race_go); // Sound
    
    static i;
    
    for (i = 1; i <= maxplayers; i++)
    {
        if (!is_user_alive(i) || fm_cs_get_user_team(i) != FM_CS_TEAM_CT) continue;
        
        SetLimit(i);
    }
    
    set_task(float(left_time), "RemoveLimit", LIMIT_ID);
    is_hide = true;
    HudLeft();
    
    return PLUGIN_HANDLED;
}

SetLimit(id)
{
    message_begin(MSG_ONE, msgScreenFade, _, id);
    write_short(1<<12);
    write_short(1<<8);
    write_short(1<<0);
    write_byte(0);
    write_byte(0);
    write_byte(0);
    write_byte(255);
    message_end();
    
    pev(id, pev_maxspeed, user_speed[id]);
    set_pev(id, pev_maxspeed, 1.0);
    set_task(0.8, "DelayFade", id);
}

RemoveFade(id)
{
    message_begin(MSG_ONE, msgScreenFade, _, id);
    write_short(1<<12);
    write_short(1<<8);
    write_short(1<<1);
    write_byte(0);
    write_byte(0);
    write_byte(0);
    write_byte(255);
    message_end();

    set_pev(id, pev_maxspeed, user_speed[id]);
}

public DelayFade(id)
{
    message_begin(MSG_ONE, msgScreenFade, _, id);
    write_short(1<<0);
    write_short(1<<0);
    write_short(1<<2);
    write_byte(0);
    write_byte(0);
    write_byte(0);
    write_byte(255);
    message_end();
}

public RemoveLimit()
{
    static i;
    
    for (i = 1; i <= maxplayers; i++)
    {
        if (!is_user_alive(i) || fm_cs_get_user_team(i) != FM_CS_TEAM_CT) continue;
        
        RemoveFade(i);
    }
    
    is_hide = false;
    is_hide_after = true;
}

public HudLeft()
{
    static show_time;
    
    if (!is_hide)
    {
        if (is_hide_after)
        {
            set_hudmessage(0, 255, 0, 0.35, 0.20, 0, 6.0, 5.0, 0.0, 0.0, -1);
            show_hudmessage(0, "%L", LANG_PLAYER, "HUD_GO");
        }
        
        show_time = 0;
        return;
    }
    
    if (!show_time) show_time = left_time;
    
    set_hudmessage(0, 255, 0, 0.31, 0.10, 0, 6.0, 1.1, 0.0, 0.0, -1);
    ShowSyncHudMsg(0, MsgSync, "%L", LANG_PLAYER, "HUD_LEFT", show_time--);
    
    set_task(1.0, "HudLeft");
}

stock fm_cs_get_user_team(id)
{
    return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
}

stock GetCountAliveT()
{
    static i, count;
    
    for (i = 1, count = 0; i <= maxplayers; i++)
        if (is_user_alive(i) && fm_cs_get_user_team(i) == FM_CS_TEAM_T) count++;
    
    return count;
}

Только админ с фрагом d-бан вводит в чате /hide и начинаются прятки, а как сделать так чтобы прятки мог вводить Simon?


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Rejiser
сообщение 21.6.2011, 17:24
Сообщение #2


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

В плагине jbextreme, или что там у тебя, взять функцию проверки на Саймона, вынести её через натив в отдельный инклуд, либо в квар, и уже в плагине пряток проверять Саймон игрок или нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 22.6.2011, 7:44
Сообщение #3


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

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


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 22.6.2011, 12:22
Сообщение #4


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Ванчо, не сложно, за бесплатно врятли.
Какой еще библиотеке?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 22.6.2011, 12:48
Сообщение #5


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

иклуд это же и есть библиотека
вот что туда записать?


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 22.6.2011, 12:57
Сообщение #6


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

plugin_natives
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 22.6.2011, 13:51
Сообщение #7


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

в jbextreme
Код
public plugin_natives()
{
    register_native("jb_get_user_simon", "native_get_user_simon", 1)
}

public native_get_user_simon(id)
{
    id==g_Simon
}

в hide_day
Код
native jb_get_user_simon();
...
if (is_hide || (!cmd_access(id, level, cid, 1) && !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;
    
is_hide = true;
if(jb_get_user_simon(id))
    client_cmd(id, "say /open");
else
    client_cmd(id, "jbe_open"); // Open jail doors

все равно не работаетsad.gif
PS: hide_day - для того чтобы "/hide" можно было прописать только 1 раз за раунд,это уже я добавил

Отредактировал: Ванчо, - 22.6.2011, 13:53


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 22.6.2011, 14:02
Сообщение #8


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

в hide_day это
Код
native jb_get_user_simon();

не нужно.
Это ты должен вынести в отдельный инклуд.

А в hide_day уже проверять:
Код
if (is_hide || (!cmd_access(id, level, cid, 1) || !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;


Отредактировал: Rejiser, - 22.6.2011, 14:02
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 22.6.2011, 14:27
Сообщение #9


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

[quote name='Rejiser' date='22.6.2011, 16:02' post='234917']
в hide_day это
Код
native jb_get_user_simon();

не нужно.
Это ты должен вынести в отдельный инклуд.

нет разницы,в отдельный инклюд это запихну или в сам плагин,для одной строчки создавать инклуд это бред
и я компилирую в онлайн компиляторе,там нет других иклудов
можно вместо include <amxmodx>,внести все содержимое из того инклуда,работать будет,просто строчек намного больше будет
Код
if (is_hide || (!cmd_access(id, level, cid, 1) || !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;

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

в зомби моде массив стоит
Код
public native_get_user_zombie(id)
{
    return g_zombie[id];
}

как
Код
id==g_Simon

запихнуть в массив,например
Код
Simon[id]




все разобрался сам,пропустил слово "return" из-за которого вся проблема

Отредактировал: Ванчо, - 22.6.2011, 14:32


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Rejiser
сообщение 22.6.2011, 14:52
Сообщение #10


Стаж: 15 лет

Сообщений: 2261
Благодарностей: 1068
Полезность: 870

Цитата(Ванчо @ 22.6.2011, 16:27) *
Код
if (is_hide || (!cmd_access(id, level, cid, 1) || !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;

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

При таком условие как раз либо админ, либо саймон.
Цитата
&& используется для выражения "и"
|| испольузется для выражения "или"
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BaHeK
сообщение 22.6.2011, 18:41
Сообщение #11


Стаж: 17 лет

Сообщений: 571
Благодарностей: 505
Полезность: 651

нет тут ты не прав
при таком условии
Код
if (is_hide || (!cmd_access(id, level, cid, 1) || !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;

если игрок не админ или не саймон то пряток не будет
то есть игрок должен быть и тем и тем что бы начались прятки
а при таком условии
Код
if (is_hide || (!cmd_access(id, level, cid, 1) && !jb_get_user_simon(id)) || hide_day) return PLUGIN_HANDLED;

если игрок одновременно не является ни админом и ни саймоном то пряток не будет
в остальных случаях когда ввел админ или саймон,прятки будут

Отредактировал: Ванчо, - 22.6.2011, 18:44


Чуть-чуть нарушаю
http://img-host.su/aoN1.png
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: