Общение

Сообщения
460
Реакции
68
Помог
7 раз(а)
melfyk, понел тогда молчим)
17 Дек 2019
Хотел спросиить администраторов, можно ли както сменить никнейм на форуме. Если да то как? И если на форуме есть такой ник как можно решить это дело.
Просьба не ругатся не знаю как тут всё устроенно. Вроде правила нечо незапрещают.
 
Последнее редактирование:
Сообщения
94
Реакции
13
Помог
2 раз(а)
Последнее редактирование модератором:
Сообщения
2,751
Реакции
3,014
Помог
61 раз(а)
D1m0n41k, я не стал давать баллы за оффтоп, но впредь знай, что не всегда уместно это глумление. Там код был найден в поисковике и предложен в поиске как одно из решений.

Строки авторства добавлены для корректного отображения в amxx list
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Где же, где же @fl0wer, наш борец с присвоением чужого? :derisive:
Тут я, зачет сдавал. Я не видел оригинал кода до этого, поэтому в авторах через слеш можно ещё тебя указать.
 
Сообщения
94
Реакции
13
Помог
2 раз(а)
fl0wer, надеемся что сдал удачно :thank_you:
Не, я не автор данного кода, спасибо.:derisive:
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
https://github.com/s1lentq/ReGameDLL_CS/pull/469/files
Этот коммит ломает мне мозг... :crazy:

Было:
return переменная РАВНО истина
проверка:
return истина РАВНО истина // истина
return ложь РАВНО истина // ложь


Стало:
return переменная НЕ РАВНО ложь
проверка:
return истина НЕ РАВНО ложь // истина
return ложь НЕ РАВНО ложь // ложь


Я чего то не понимаю? :dntknw:
"смотреть понять могут не только лишь все, мало кто может это делать" (с)
 

d3m37r4

111111
Сообщения
1,449
Реакции
1,175
Помог
10 раз(а)
Ayk, прост есть true и TRUE, также и с false)))))0
 

Garey

ninjaCow
Сообщения
421
Реакции
1,056
Помог
10 раз(а)
Ayk, спросил у фантома - там поидее 0 должно быть а не FALSE т.к. там битмаска т.е. значение не только 0 и 1 а 1 2 4 8 и т.д.
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
d3m37r4, ну так капс тру на капс фолс изменили, одинаковый тип(?).
Garey, да не похоже на битсумму: клик
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
d3m37r4, ну так капс тру на капс фолс изменили, одинаковый тип(?).
Alexandr Sabitov, [02.12.19 01:32]
BOOL это int?

s1lent, [02.12.19 01:37]
сишный бул да интовый

s1lent, [02.12.19 01:38]
sizeof(BOOL) == sizeof(int)
sizeof(qboolean) == sizeof(int)
sizeof(bool) != sizeof(int)
19 Дек 2019
Garey, да не похоже на битсумму: клик
https://github.com/s1lentq/ReGameDL...6f7f13e842eaa/regamedll/dlls/gamerules.h#L821
https://github.com/s1lentq/ReGameDL...bd8c7c2a7e/regamedll/game_shared/bitvec.h#L47
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
fl0wer, всё же битсумма, понятно.

По манере использования это выглядит как:
Код:
new bool:Array[MAX_PLAYERS+1][MAX_PLAYERS+1]
Array[listener][sender] = true
Array[listener][sender] = false
// хотя и тут под тегом те же 0 и 1
 
Сообщения
1,698
Реакции
1,510
Помог
26 раз(а)
Ayk, операторы переопределены.
 

Garey

ninjaCow
Сообщения
421
Реакции
1,056
Помог
10 раз(а)
Ayk, это не амэкс, хотя в amxx тоже можно овелодить операторы
 
Сообщения
2,491
Реакции
2,794
Помог
61 раз(а)
Этот коммит ломает мне мозг
Очень много расписывать и я на уловку с переопределения операторов знатно попал, чем и сломал регейм. Конечно можно было просто return m_iCanHearMasks[listener][sender] и оно бы работало. Но тогда было бы неявное приведение типов из инт к бул, чего мне хотелось избежать. Если вкратце, то есть большая разница между BOOL и bool. Первый это инт где 0 false и 1 true. Второй это нормальный и привычный булев тип.
Конкретно при вызове m_iCanHearMasks[listener][sender] будет вызван вот этот участок кода, который возвращает результат битового &.
Пример
И как понятно тут не будет 0 или 1, а 2. Соответственно условие 2 == 1 не будет равно. Тут и крылась моя ошибка, так как я думал что оно вернет либо 0, либо 1. С условием != FALSE все работает наоборот правильно. Так как мы сравниваем что результат битовых операций не равен 0. А под это условие попадают и 1 и 2 и 4 и т.д. В таком случае все работает, как и предполагалось.

P.S. Локально я тестировал с 2-мя одновременно запущенными клиентами. И как назло я тестировал с игроком под индексом 2 (что при -1 будет равно 1). В таком случае все работало, как и положено было, битовая маска возвращала 1, что подїодило под условие == TRUE. На будущее для меня это послужило уроком, что тестировать надо не только 2 клиента, а 3, 4 или даже 5. Особенно когда дело касается войса.
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
И даже никто и не скажет про то, что данный пользователь присваивает авторство dev-cs чужой работе, портя тем самым честь данного ресурса.
Где же, где же fl0wer, наш борец с присвоением чужого? :derisive: (Ничего личного задеть в планах не было, лишь чуточка иронии :thank_you:)
Извини что обидел :c
 
Сообщения
460
Реакции
68
Помог
7 раз(а)
Всем привет помогите найти точное описание кваров к этому плагину.
C++:
#define P_NAME         "ReAPI AWP Limitter"
#define P_VERSION    "2.2"
#define P_AUTHOR    "neygomon"
#define P_CONFIG    "awp_limitter"

#include <amxmodx>
#include <reapi>

#if !defined MAX_PLAYERS
    const MAX_PLAYERS = 32;
#endif
#define is_immunity(%0) (g_iFlagsImmunity && get_user_flags(%0) & g_iFlagsImmunity)

new bool:g_bUseAwp[MAX_PLAYERS + 1];
new g_iAwpOnTeam[any:TEAM_SPECTATOR];

new g_pcvMinPlayers,
    g_pcvAwpCT,
    g_pcvAwpTT,
    g_pcvImmunity;
new g_iMinPlayers,
    g_iMaxAwpCT,
    g_iMaxAwpTT,
    g_iFlagsImmunity;

new g_szMapName[32];
    
public plugin_init()
{
    register_plugin(P_NAME, P_VERSION, P_AUTHOR);
    
    rh_get_mapname(g_szMapName, charsmax(g_szMapName), MNT_TRUE);
    register_srvcmd("awp_lock_map_prefix", "srvCMD_LockPrefix");
    
    RegisterHookChain(RG_CSGameRules_RestartRound,         "RestartRound_Pre",         false);
    RegisterHookChain(RG_CBasePlayer_HasRestrictItem,     "HasRestrictItem_Pre",         false);
    RegisterHookChain(RG_CSGameRules_CanHavePlayerItem,     "CanHavePlayerItem_Pre",     false);
    RegisterHookChain(RG_CBasePlayer_RemovePlayerItem,     "RemovePlayerItem_Post",     true);
    
    g_pcvMinPlayers = register_cvar("awp_min_players", "");
    g_pcvAwpCT = register_cvar("awp_max_ct", "");
    g_pcvAwpTT = register_cvar("awp_max_tt", "");
    g_pcvImmunity = register_cvar("awp_immunity", "");
    
    register_dictionary("awp_limitter.txt");
}
#if AMXX_VERSION_NUM < 183
    #define client_disconnected client_disconnect   
public plugin_cfg()
#else
public OnConfigsExecuted()
#endif   
{
    load_neygomon_config();
    
    new szFlags[32];
    get_pcvar_string(g_pcvImmunity, szFlags, charsmax(szFlags)); trim(szFlags);
    if(szFlags[0] == '0') g_iFlagsImmunity = 0;
    else g_iFlagsImmunity = read_flags(szFlags);
    
    g_iMinPlayers      = get_pcvar_num(g_pcvMinPlayers);
    g_iMaxAwpCT      = get_pcvar_num(g_pcvAwpCT);
    g_iMaxAwpTT      = get_pcvar_num(g_pcvAwpTT);
}

public client_disconnected(id)
{
    if(is_user_connected(id))
    {
        if(g_bUseAwp[id])
        {
            g_iAwpOnTeam[get_member(id, m_iTeam)]--;
            g_bUseAwp[id] = false;
        }
    }
}

public srvCMD_LockPrefix()
{
    new szArg[32];
    read_argv(1, szArg, charsmax(szArg));
    if(containi(g_szMapName, szArg) != -1)
    {
        log_amx("Plugin stopped by mapPrefix '%s'. Current map '%s'", szArg, g_szMapName);
        pause("d");
    }
    return PLUGIN_HANDLED;
}

public RestartRound_Pre()
{
    arrayset(g_iAwpOnTeam, 0, any:TEAM_SPECTATOR);
    arrayset(g_bUseAwp, false, sizeof g_bUseAwp);
    
    new players[MAX_PLAYERS], pnum;
    get_players(players, pnum, "h");
    for(new i; i < pnum; i++)
    {
        if(get_entvar(players[i], var_weapons) & WEAPON_AWP)
        {
            switch(get_member(players[i], m_iTeam))
            {
                case TEAM_TERRORIST:
                    g_iAwpOnTeam[TEAM_TERRORIST]++;
                case TEAM_CT:
                    g_iAwpOnTeam[TEAM_CT]++;
                default: continue;
            }
            g_bUseAwp[players[i]] = true;
        }
    }
    
    new limit;
    
    limit = get_awp_limit(TEAM_TERRORIST);
    if(g_iAwpOnTeam[TEAM_TERRORIST] > limit)
        remove_awp_from_team(TEAM_TERRORIST, limit, "TERRORIST");
    
    limit = get_awp_limit(TEAM_CT);
    if(g_iAwpOnTeam[TEAM_CT] > limit)
        remove_awp_from_team(TEAM_CT, limit, "CT");
}

public HasRestrictItem_Pre(const id, const ItemID:item, ItemRestType:type)
{
    if(item == ITEM_AWP)
    {
        if(!is_allow_use_awp(id))
        {
            SetHookChainReturn(ATYPE_INTEGER, true);
            return HC_SUPERCEDE;
        }
    }
    return HC_CONTINUE;
}

public CanHavePlayerItem_Pre(const id, const pItem)
{
    if(get_member(pItem, m_iId) == WEAPON_AWP)
    {
        if(!is_allow_use_awp(id))
        {
            SetHookChainReturn(ATYPE_INTEGER, false);
            return HC_SUPERCEDE;
        }
    }
    return HC_CONTINUE;
}

public RemovePlayerItem_Post(const id, const pItem)
{
    if(g_bUseAwp[id])
    {
        if(~get_entvar(id, var_weapons) & WEAPON_AWP)
        {
            new team = get_member(id, m_iTeam);
            g_iAwpOnTeam[team]--;
            g_bUseAwp[id] = false;       
        }
    }   
}

bool:is_allow_use_awp(id)
{
    static Float:fGameTime,
        Float:fGameTimeId[MAX_PLAYERS + 1],
        bool:bLastState[MAX_PLAYERS + 1];

    fGameTime = get_gametime();
    if(fGameTimeId[id] > fGameTime)
        return bLastState[id];
    else    fGameTimeId[id] = fGameTime + 1.5;
    
    static TeamName:team; team = get_member(id, m_iTeam);
    
    if(team != TEAM_TERRORIST && team != TEAM_CT)
        return (bLastState[id] = false);
    if(!is_immunity(id))
    {
        static limit; limit = get_awp_limit(team);
        
        if(limit == -2)
            return (bLastState[id] = true);
        if(g_iAwpOnTeam[team] >= limit)
        {
            if(limit == -1)
                client_print(id, print_center, "%L", LANG_PLAYER, "AWP_MIN_PLAYERS", g_iMinPlayers);
            else    client_print(id, print_center, "%L", LANG_PLAYER, "AWP_MAX_IN_TEAM");
            
            return (bLastState[id] = false);
        }
    }
    if(!g_bUseAwp[id])
    {
        g_iAwpOnTeam[team]++;
        g_bUseAwp[id] = true;
    }

    return (bLastState[id] = true);
}

remove_awp_from_team(TeamName:team, limit, teamName[])
{
    new players[MAX_PLAYERS], pnum;
    get_players(players, pnum, "eh", teamName);
    
    new arrPlayersWithAWP[MAX_PLAYERS], num;
    for(new i; i < pnum; ++i)
    {
        if(is_immunity(players[i]))
            g_iAwpOnTeam[team]--;
        else if(get_entvar(players[i], var_weapons) & WEAPON_AWP)
            arrPlayersWithAWP[num++] = players[i];
    }

    if(num > 0 && limit > 0)
    {
        new rand, bool:bExclude[MAX_PLAYERS];
        while(g_iAwpOnTeam[team] > limit)
        {
            rand = random(num);
            
            if(bExclude[arrPlayersWithAWP[rand]])
                continue;
            if(rg_remove_item(arrPlayersWithAWP[rand], "weapon_awp"))
            {
                g_bUseAwp[arrPlayersWithAWP[rand]] = false;
                bExclude[arrPlayersWithAWP[rand]] = true;
                g_iAwpOnTeam[team]--;
            }
        }
    }
}

get_awp_limit(TeamName:team)
{
    new players = get_member_game(m_iNumTerrorist) + get_member_game(m_iNumCT);
    
    if(players < g_iMinPlayers)
        return -1;
    
    new teamLimit = (team == TEAM_CT ? g_iMaxAwpCT : g_iMaxAwpTT);
    if(!teamLimit)
        return -2;
        
    new limit = teamLimit - g_iAwpOnTeam[team];
    return limit < 0 ? 0 : limit;
}

stock load_neygomon_config()
{
    new szConfig[96];
    get_localinfo("amxx_configsdir", szConfig, charsmax(szConfig));
    formatex(szConfig[strlen(szConfig)], charsmax(szConfig), "/neygomon/%s.cfg", P_CONFIG);
    
    if(file_exists(szConfig))
    {
        server_print("Config '%s' loaded for plugin '[%s] %s' by %s", szConfig, P_VERSION, P_NAME, P_AUTHOR);
    
        server_cmd("exec %s", szConfig);
        server_exec();
    }
    else    log_amx("Config '%s' NOT FOUND for plugin '[%s] %s' by %s", szConfig, P_VERSION, P_NAME, P_AUTHOR);
}
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Best777, Что непонятно?
Минимальное количество игроков для взятия авп
Максимальное количество авп на команду ТТ
Максимальное количество авп на команду КТ
Иммунитет от лимита
 

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

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