Иконка ресурса

Block Change Team 1.0.0

Нет прав для скачивания
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
Последнее редактирование модератором:
Сообщения
5
Реакции
0
Is it possible to block only if the player is alive? In other words, if you are dead you can switch teams.
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
onixs,
Код:
#include <amxmodx>
#include <reapi>

public plugin_init() {
    register_plugin("Block Change Team for Alive Players", "1.0.0", "F@nt0M");
    RegisterHookChain(RG_ShowVGUIMenu, "ShowVGUIMenu_Pre", false);
    RegisterHookChain(RG_HandleMenu_ChooseTeam, "HandleMenu_ChooseTeam_Pre", false);
}

public ShowVGUIMenu_Pre(const id, const VGUIMenu:menuType) {
    if (menuType != VGUI_Menu_Team || get_member(id, m_bJustConnected) || !is_user_alive(id)) {
        return HC_CONTINUE;
    }
    set_member(id, m_iMenu, 0);
    return HC_SUPERCEDE;
}

public HandleMenu_ChooseTeam_Pre(const id) {
    if (get_member(id, m_bJustConnected) || !is_user_alive(id)) {
        return HC_CONTINUE;
    }
    SetHookChainReturn(ATYPE_INTEGER, false);
    return HC_SUPERCEDE;
}
 
Последнее редактирование:
Сообщения
1,015
Реакции
818
Помог
10 раз(а)
Ayk, fantom а случайно внутри is_user_alive нету проверка на коннект игрока? Или все же стоит чекать m_bJustConnected ?
 

Ayk

Сообщения
763
Реакции
476
Помог
19 раз(а)
Javekson, да, в is_user_alive() есть проверка на коннект.
m_bJustConnected не проверяется как доказательство коннекта, а как этап подключения игрока.
Пока у игрока m_bJustConnected == true, то у него и команды по сути то нет. Он не валиден для спавна.

ЛЕ: сам вызов хуков и есть проверка на коннект, т.к. они не вызываются для невалидных игроков.
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
Javekson, m_bJustConnected момент, когда игрок толбко подключается. В этот момент разрешаем ему выбор. Смену позже, посреди игры, суперсидим.
 
Сообщения
1,177
Реакции
2,144
Помог
57 раз(а)
fantom, но в данном случае, разве is_user_alive() не покрывает собой m_bJustConnected в том плане, что при входе на сервер игрок не жив? Думаю Javekson как раз это имел ввиду.
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
BlackSignature, если брать пример от Ayk, то выгляд так, что одной проверки на is alive достаьочно, но бы сделал именно так как он.
 
Сообщения
5
Реакции
0
I found a code in AM and made some changes using ocixcrom's colorchat and it worked well for me, this is the code that solved my problem:

C:
#include <amxmodx>
#include <cstrike>
#include <cromchat>

#define PLUGIN "Block Team Change Alive"
#define VERSION "3.0"
#define AUTHOR "onixs | CAMEL"

new blockteam

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    blockteam = register_cvar("amxx_blockteams","1")
    register_clcmd("chooseteam", "cmdChooseTeam")

    CC_SetPrefix("[^4AMXX^1]")
}

public cmdChooseTeam(id)
{
    if (is_user_alive(id) && get_pcvar_num(blockteam))
    {
        CC_SendMatched(id, CC_COLOR_RED, "&x07You cannot change teams while you are alive&x01!");
        return PLUGIN_HANDLED;
    }

    if (!is_user_alive(id))
        return PLUGIN_CONTINUE;

    if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
        return PLUGIN_CONTINUE;

    return PLUGIN_HANDLED;
}
Thank you all!
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
onixs, put command into your console jointeam 1; joinclass 5 and plugin doesn't block it
 
Сообщения
5
Реакции
0
fantom Oh .. you're right, fixed thanks!

C:
#include <amxmodx>
#include <cstrike>
#include <cromchat>

#define PLUGIN "Block Team Change Alive"
#define VERSION "3.0"
#define AUTHOR "onixs | CAMEL"

new blockteam

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
    blockteam = register_cvar("amxx_blockteams","1")
    register_clcmd("chooseteam", "cmdChooseTeam")
    register_clcmd("jointeam", "cmdChooseTeam")

    CC_SetPrefix("[^4AMXX^1]")
}

public cmdChooseTeam(id)
{
    if (is_user_alive(id) && get_pcvar_num(blockteam))
    {
        CC_SendMatched(id, CC_COLOR_RED, "&x07You cannot change teams while you are alive&x01!");
        return PLUGIN_HANDLED;
    }

    if (!is_user_alive(id))
        return PLUGIN_CONTINUE;

    if (cs_get_user_team(id) == CS_TEAM_SPECTATOR)
        return PLUGIN_CONTINUE;

    return PLUGIN_HANDLED;
}
 
Сообщения
322
Реакции
6
Помог
1 раз(а)
Код:
#pragma semicolon 1

#pragma ctrlchar '\'



#include <amxmisc>

#include <amxmodx>

#include <cstrike>

#include <fakemeta>



#define OFFSET_MENU 205



public plugin_init()

{

    register_plugin("Anti ChooseTeam Crash", "0.1", "Cruzer //");

  

    register_clcmd("joinclass", "join_class");

    register_clcmd("menuselect", "menu_select");

}



public plugin_modules()

{

    require_module("amxmisc");

    require_module("amxmodx");

    require_module("cstrike");

    require_module("fakemeta");

}



public join_class(id)

{

    new CsTeams:teamId=cs_get_user_team(id);

  

    if(teamId!=CS_TEAM_T&&teamId!=CS_TEAM_CT)

  

    return PLUGIN_HANDLED;

    return PLUGIN_CONTINUE;

}



public menu_select(id)

{

    new iMenu=get_pdata_int(id, OFFSET_MENU);

  

    if(iMenu==3)

    {

    new CsTeams:teamId=cs_get_user_team(id);

  

    if(teamId!=CS_TEAM_T&&teamId!=CS_TEAM_CT)

    {

    set_pdata_int(id, OFFSET_MENU, 0);

  

    return PLUGIN_HANDLED;

        }

    }

    return PLUGIN_CONTINUE;

}

/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE

*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }

*/
 
Сообщения
2,491
Реакции
2,791
Помог
61 раз(а)
Se_IaQe, и что вы хотите сказать? в чем суть вашего поста?
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу