AMX MOD X
Суббота, 20.04.2024, 07:01:32



Приветствую Вас Гость | RSS
[ Главная ] [ помогите сделать - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » помогите сделать
помогите сделать
Bl0kcДата: Пятница, 15.01.2010, 22:20:05 | Сообщение # 1
Полковник
Группа: Пользователи
Сообщений: 152
Репутация: 1
Статус: Не в сети
плагин чтобы у CT открывалось меню команд (M), а у Т нет. или чтобы контры могли переходить за Т, а Т никуда не могли :)
или может можно как-то переделать плагин Team join
Code

#include <amxmodx>

enum
{
    TEAM_NONE = 0,
    TEAM_T,
    TEAM_CT,
    TEAM_SPEC,
       
    MAX_TEAMS
};
new const g_cTeamChars[MAX_TEAMS] =
{
    'U',
    'T',
    'C',
    'S'
};
new const g_sTeamNums[MAX_TEAMS][] =
{
    "0",
    "1",
    "2",
    "3"
};
new const g_sClassNums[MAX_TEAMS][] =
{
    "1",
    "2",
    "3",
    "4"
};

// Old Style Menus
stock const FIRST_JOIN_MSG[] =  "#Team_Select";
stock const FIRST_JOIN_MSG_SPEC[] =    "#Team_Select_Spect";
stock const INGAME_JOIN_MSG[] =  "#IG_Team_Select";
stock const INGAME_JOIN_MSG_SPEC[] =    "#IG_Team_Select_Spect";
const iMaxLen = sizeof(INGAME_JOIN_MSG_SPEC);

// New VGUI Menus
stock const VGUI_JOIN_TEAM_NUM =  2;

new g_iTeam[33];
new g_iPlayers[MAX_TEAMS];

new tjm_join_team;
new tjm_switch_team;
new tjm_class[MAX_TEAMS];
new tjm_block_change;

public plugin_init()
{
    register_plugin("Team Join Management", "0.3", "Exolent");
    register_event("TeamInfo", "event_TeamInfo", "a");
    register_message(get_user_msgid("ShowMenu"), "message_ShowMenu");
    register_message(get_user_msgid("VGUIMenu"), "message_VGUIMenu");
    tjm_join_team = register_cvar("tjm_join_team", "1");
    tjm_switch_team = register_cvar("tjm_switch_team", "1");
    tjm_class[TEAM_T] = register_cvar("tjm_class_t", "2");
    tjm_class[TEAM_CT] = register_cvar("tjm_class_ct", "4");
    tjm_block_change = register_cvar("tjm_block_change", "1");
}

public plugin_cfg()
{
    set_cvar_num("mp_limitteams", 32);
    set_cvar_num("sv_restart", 1);
}

public client_disconnect(id)
{
    remove_task(id);
}

public event_TeamInfo()
{
    new id = read_data(1);
    new sTeam[32], iTeam;
    read_data(2, sTeam, sizeof(sTeam) - 1);
    for(new i = 0; i < MAX_TEAMS; i++)
    {
     if(g_cTeamChars[i] == sTeam[0])
     {
      iTeam = i;
      break;
     }
    }
       
    if(g_iTeam[id] != iTeam)
    {
     g_iPlayers[g_iTeam[id]]--;
     g_iTeam[id] = iTeam;
     g_iPlayers[iTeam]++;
    }
}

public message_ShowMenu(iMsgid, iDest, id)
{
    static sMenuCode[iMaxLen];
    get_msg_arg_string(4, sMenuCode, sizeof(sMenuCode) - 1);
    if(equal(sMenuCode, FIRST_JOIN_MSG) || equal(sMenuCode, FIRST_JOIN_MSG_SPEC))
    {
     if(should_autojoin(id))
     {
      set_autojoin_task(id, iMsgid);
      return PLUGIN_HANDLED;
     }
    }
    else if(equal(sMenuCode, INGAME_JOIN_MSG) || equal(sMenuCode, INGAME_JOIN_MSG_SPEC))
    {
     if(should_autoswitch(id))
     {
      set_autoswitch_task(id, iMsgid);
      return PLUGIN_HANDLED;
     }
     else if(get_pcvar_num(tjm_block_change))
     {
      return PLUGIN_HANDLED;
     }
    }
    return PLUGIN_CONTINUE;
}

public message_VGUIMenu(iMsgid, iDest, id)
{
    if(get_msg_arg_int(1) != VGUI_JOIN_TEAM_NUM)
    {
     return PLUGIN_CONTINUE;
    }
       
    if(should_autojoin(id))
    {
     set_autojoin_task(id, iMsgid);
     return PLUGIN_HANDLED;
    }
    else if(should_autoswitch(id))
    {
     set_autoswitch_task(id, iMsgid);
     return PLUGIN_HANDLED;
    }
    else if((TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && get_pcvar_num(tjm_block_change))
    {
     return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}

public task_Autojoin(iParam[], id)
{
    new iTeam = get_new_team(get_pcvar_num(tjm_join_team));
    if(iTeam != -1)
    {
     handle_join(id, iParam[0], iTeam);
    }
}

public task_Autoswitch(iParam[], id)
{
    new iTeam = get_switch_team(id);
    if(iTeam != -1)
    {
     handle_join(id, iParam[0], iTeam);
    }
}

stock handle_join(id, iMsgid, iTeam)
{
    new iMsgBlock = get_msg_block(iMsgid);
    set_msg_block(iMsgid, BLOCK_SET);
       
    engclient_cmd(id, "jointeam", g_sTeamNums[iTeam]);
       
    new iClass = get_team_class(iTeam);
    if(1 <= iClass <= 4)
    {
     engclient_cmd(id, "joinclass", g_sClassNums[iClass - 1]);
    }
    set_msg_block(iMsgid, iMsgBlock);
}

stock get_new_team(iCvar)
{
    switch(iCvar)
    {
     case 1:
     {
      return TEAM_T;
     }
     case 2:
     {
      return TEAM_CT;
     }
     case 3:
     {
      return TEAM_SPEC;
     }
     case 4:
     {
      new iTCount = g_iPlayers[TEAM_T];
      new iCTCount = g_iPlayers[TEAM_CT];
      if(iTCount < iCTCount)
      {
       return TEAM_T;
      }
      else if(iTCount > iCTCount)
      {
       return TEAM_CT;
      }
      else
      {
       return random_num(TEAM_T, TEAM_CT);
      }
     }
    }
    return -1;
}

stock get_switch_team(id)
{
    new iTeam;
       
    new iTCount = g_iPlayers[TEAM_T];
    new iCTCount = g_iPlayers[TEAM_CT];
    switch(g_iTeam[id])
    {
     case TEAM_T: iTCount--;
     case TEAM_CT: iCTCount--;
    }
    if(iTCount < iCTCount)
    {
     iTeam = TEAM_T;
    }
    else if(iTCount > iCTCount)
    {
     iTeam = TEAM_CT;
    }
    else
    {
     iTeam = random_num(TEAM_T, TEAM_CT);
    }
       
    if(iTeam != g_iTeam[id])
    {
     return iTeam;
    }
       
    return -1;
}

stock get_team_class(iTeam)
{
    new iClass;
    if(TEAM_NONE < iTeam < TEAM_SPEC)
    {
     iClass = get_pcvar_num(tjm_class[iTeam]);
     if(iClass < 1 || iClass > 4)
     {
      iClass = random_num(1, 4);
     }
    }
    return iClass;
}

stock set_autojoin_task(id, iMsgid)
{
    new iParam[2];
    iParam[0] = iMsgid;
    set_task(0.1, "task_Autojoin", id, iParam, sizeof(iParam));
}

stock set_autoswitch_task(id, iMsgid)
{
    new iParam[2];
    iParam[0] = iMsgid;
    set_task(0.1, "task_Autoswitch", id, iParam, sizeof(iParam));
}

stock bool:should_autojoin(id)
{
    return ((5 > get_pcvar_num(tjm_join_team) > 0) && is_user_connected(id) && !(TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}

stock bool:should_autoswitch(id)
{
    return (get_pcvar_num(tjm_switch_team) && is_user_connected(id) && (TEAM_NONE < g_iTeam[id] < TEAM_SPEC) && !task_exists(id));
}




Сообщение отредактировал Bl0kc - Пятница, 15.01.2010, 22:21:00
 
FreeKILLДата: Суббота, 16.01.2010, 16:48:29 | Сообщение # 2
Подполковник
Группа: Пользователи
Сообщений: 143
Репутация: 4
Статус: Не в сети
вот если бы ты начал делать... тогда тему бы ты назвал норм, а так...одно название
 
Bl0kcДата: Суббота, 16.01.2010, 18:17:56 | Сообщение # 3
Полковник
Группа: Пользователи
Сообщений: 152
Репутация: 1
Статус: Не в сети
всё, сам сделал B)
PS FreeKILL, P


 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » помогите сделать
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024