Русское сообщество по скриптингу

CheckPoints_by_BlackSmoke: поменять флаг доступа

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение Печенька » 08 май 2017, 10:34

Всем доброе утро. Ребят подскажите как поменять флаг доступа правильно.

Код: Выделить всё
/**================================================================================
 * (\ ============= Версии ============= /)
 * 
 * 0.1 - Релиз.
 * 0.2 - Добавлены новые модели.
 * 0.3 - Добавлен финишных чекпоинт.
 * 0.4 - Добавлено меню.
 * 0.5 - Теперь пишет в чат время за которое игрок достигнул финиш. 
 * 0.6 - Добавлены еффекты.
 * 0.7 - Добавлено сохранение по файлу.
===================================================================================*/

/**================================================================================
    Инклуды
===================================================================================*/
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <cstrike>

/**================================================================================
    Информация плагина
===================================================================================*/
#define P "CheckPoints_by_BlackSmoke"
#define V "0.7"
#define A "BlackSmoke"

/**================================================================================
    Данные плагина
===================================================================================*/
#define ClassName "info_checkpoint" // Имя класса чекпоинтов
#define stn(%1) str_to_num(%1)
#define MaxCheckOnTheMap 15 // Максимальное кол-во чекпоинтов на карте
#define MoneyOneCheck 100 // Деньги за первый чекпоинт
#define MoneyNextCheck 200 // Деньги за последующий чекпоинт
#define MoneyFinishCheck 5000 // Деньги за финишных чекпоинт

/**================================================================================
    Константы
===================================================================================*/
new bool:bTouchPlayerCheck[33][512]
new iNumCheckRoundPl[33], bool:LastCheck, bool:bOffCheck
new BeaconSprite
new Float
:fTimeStartRound[33]

new szFile[127], OriginFile[MaxCheckOnTheMap][512]

new const szSoundCheck[3][] = 
{
    "CheckPoints_by_BlackSmoke/Cp_Take_1.wav",
    "CheckPoints_by_BlackSmoke/Cp_Take_2.wav",
    "CheckPoints_by_BlackSmoke/Cp_Take_3.wav"
}

new const szModelCheck[6][] = 
{
    "models/CheckPoints_by_BlackSmoke/Blue.mdl",
    "models/CheckPoints_by_BlackSmoke/Gray.mdl",
    "models/CheckPoints_by_BlackSmoke/Green.mdl",
    "models/CheckPoints_by_BlackSmoke/Red.mdl",
    "models/CheckPoints_by_BlackSmoke/Yellow.mdl",
    "models/CheckPoints_by_BlackSmoke/Purple.mdl"
}
new const szColorCheck[6][] = {/*Синий*/"0 0 255",/*Серый*/"100 100 100",/*Зелёный*/"0 255 0",/*Красный*/"255 0 0",/*Жёлтый*/"255 255 0",/*Пурпурный*/"255 0 255"}

/**================================================================================
    Инициализация
===================================================================================*/
public plugin_init()
{
    register_plugin(P,V,A)
    register_touch(ClassName, "player", "TouchTarget")
    register_think(ClassName, "FwdThinkCheck")
    register_think("info_checkpoint_finish", "FwdThinkCheck")
    register_touch("info_checkpoint_finish", "player", "TouchTargetFinish")
    register_clcmd("cp_menu", "MenuCheck")
    register_event("HLTV", "logevent_round_start", "a", "1=0", "2=0")
    register_menucmd(register_menuid("MenuCheckPointsAdd"), 1023, "ActionMenuCheckPointsAdd")
}

/**================================================================================
    Меню
===================================================================================*/
public MenuCheck(id)
{
    if(!(get_user_flags(id) & ADMIN_IMMUNITY))
    {
        client_print(id, print_console, "У вас не достаточно прав. ~%s~", P)
        return PLUGIN_HANDLED
    
}
    new szMenu[1024], iLen, ikey = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0
    iLen 
= format(szMenu[iLen], charsmax(szMenu)-iLen, "\yЧекпоинты^n\yКол-во: \r%d \w| \yФинишный: \r%sпоставлен^n^n", GetNumEntity(ClassName), LastCheck ? "" : "Не ")
    iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y1. \wДобавить \d[\yОсталось\d: \r%d\d]^n", (MaxCheckOnTheMap - GetNumEntity(ClassName)))
    iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y2. \wДобавить Финишный \d[\yОсталось\d: \r%d\d]^n", LastCheck ? 0 : 1)
    iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y3. \wУдалить все^n^n")
    iLen += format(szMenu[iLen], charsmax(szMenu)-iLen, "\y4. \wЧекпоинты \d[\y%s\d]^n", bOffCheck ? "Выкл" : "Вкл")
    
    iLen 
+= format(szMenu[iLen], charsmax(szMenu)-iLen, "^n\r0. \wВыход^n")
    
    show_menu
(id, ikey, szMenu, -1, "MenuCheckPointsAdd")
    return PLUGIN_HANDLED
}

/**================================================================================
    Игрок нажал пункт меню
===================================================================================*/
public ActionMenuCheckPointsAdd(id, key)
{
    switch(key)
    {
        case 0: 
        
{
            if(GetNumEntity(ClassName) >= 15)
            {
                Color_Print(id, "!teamВы поставили !gМакс. !teamкол-во !yчекпоинтов.")
                return PLUGIN_CONTINUE
            
}
            new iOrigin[3], Float:fOrigin[3]
            get_user_origin(id, iOrigin, 3)
            IVecFVec(iOrigin, fOrigin)
            fOrigin[2] += 60.0
            AddCheck
(0, fOrigin)
            
            MenuCheck
(id)
        }
        case 1:
        {
            if(LastCheck)
            {
                Color_Print(id, "!teamВы !gуже !teamпоставили !gпоследний !yчекпоинт.")
                return PLUGIN_CONTINUE
            
}
            new iOrigin[3], Float:fOrigin[3]
            get_user_origin(id, iOrigin, 3)
            IVecFVec(iOrigin, fOrigin)
            fOrigin[2] += 60.0
            AddCheck
(1, fOrigin)
            
            MenuCheck
(id)
        }
        case 2:
        {
            remove_entity_name(ClassName)
            remove_entity_name("info_checkpoint_finish")
            LastCheck = false
            delete_file
(szFile)
            MenuCheck(id)
        }
        case 3:
        {
            bOffCheck = bOffCheck ? false : true
            MenuCheck
(id)
        }
    }
    return PLUGIN_HANDLED
}

/**================================================================================
    Новый раунд
===================================================================================*/
public logevent_round_start()
{
    new iPlayers[32], iNum, q[33]
    get_players(iPlayers, iNum)
    for(new i; i < iNum; i++)
    {
        fTimeStartRound[iPlayers[i]] = get_gametime()
        iNumCheckRoundPl[iPlayers[i]] = 0
        while
(q[iPlayers[i]] < 510)
        {
            q[iPlayers[i]]++
            bTouchPlayerCheck[iPlayers[i]][q[iPlayers[i]]] = false
        
}
    }
}

/**================================================================================
    Игрок пересёк чекпоинт
===================================================================================*/
public TouchTarget(ent,id)
{
    if(!is_valid_ent(ent) || !is_user_connected(id))
        return PLUGIN_CONTINUE
        
    if
(bTouchPlayerCheck[id][ent])
        return PLUGIN_CONTINUE
    
    iNumCheckRoundPl
[id]++
    Color_Print(id, "!teamВы пересекли !g%d-ый !teamчекпоинт !yНаграда: !g+ $%d", iNumCheckRoundPl[id], (MoneyOneCheck + (MoneyNextCheck*(iNumCheckRoundPl[id]-1))))
    cs_set_user_money(id, cs_get_user_money(id) + (MoneyOneCheck + (MoneyNextCheck*(iNumCheckRoundPl[id]-1))))
    bTouchPlayerCheck[id][ent] = true
    client_cmd
(id, "spk ^"%s^"", szSoundCheck[random_num(0,sizeof szSoundCheck - 1)])
    
    return PLUGIN_CONTINUE
}

/**================================================================================
    Игрок пересёк финишный чекпоинт
===================================================================================*/
public TouchTargetFinish(ent,id)
{
    if(!is_valid_ent(ent) || !is_user_connected(id))
        return PLUGIN_CONTINUE
        
    if
(bTouchPlayerCheck[id][ent])
        return PLUGIN_CONTINUE
    
    new szName
[32]
    get_user_name(id, szName, charsmax(szName))
    
    Color_Print
(id, "!teamВы пересекли !gпоследний !teamчекпоинт !yНаграда: !g+ $%d", MoneyFinishCheck)
    Color_Print(0, "!teamИгрок !g%s !teamпрошёл карту за !y%d!g:!y%02d", szName, floatround(get_gametime() - fTimeStartRound[id]) / 60, floatround(get_gametime() - fTimeStartRound[id]) % 60)
    cs_set_user_money(id, cs_get_user_money(id) + MoneyFinishCheck)
    bTouchPlayerCheck[id][ent] = true
    client_cmd
(id, "spk ^"%s^"", szSoundCheck[random_num(0,sizeof szSoundCheck - 1)])
    
    return PLUGIN_CONTINUE
}

/**================================================================================
    Загрузки плагина
===================================================================================*/
public plugin_precache()
{
    for(new i; i < sizeof szModelCheck; i++)
        precache_model(szModelCheck[i])
    for(new y; y < sizeof szSoundCheck; y++)
        precache_sound(szSoundCheck[y])
        
    BeaconSprite 
= precache_model("sprites/shockwave.spr")
    
    new CheckFolder
[127]
    format(CheckFolder, charsmax(CheckFolder), "addons/amxmodx/configs/CheckPoints_by_BlackSmoke")
    if(!dir_exists(CheckFolder))
    mkdir(CheckFolder)
    
    new Map
[32]
    get_mapname(Map, 31)
    format(szFile, charsmax(szFile), "%s/%s.ini", CheckFolder,Map)
    new q, Len, iNumString,p[5][32], Float:origin[3]
    if(file_exists(szFile))
    {
        while(< MaxCheckOnTheMap && read_file(szFile, q ,OriginFile[iNumString], 511, Len))
        {
            q++
            if(OriginFile[iNumString][0] == ';' || Len == 0 || !OriginFile[iNumString][0])
            {
                continue
            
}
            parse(OriginFile[iNumString], p[1], 31,p[2], 31,p[3], 31,p[4],31)
            origin[0] = str_to_float(p[1])
            origin[1] = str_to_float(p[2])
            origin[2] = str_to_float(p[3])
            AddCheck(str_to_num(p[4]), origin, 0)
            iNumString++
        }
    }
}
    

/**================================================================================
    Синк
===================================================================================*/
public FwdThinkCheck(ent)
{
    if(!is_valid_ent(ent))
        return;
    
    if
(!bOffCheck)
        UTIL_PlayAnimation(ent, 50)
    else
        set_rendering
(ent)
        
    entity_set_float
(ent, EV_FL_nextthink, get_gametime() + 1.90)
    entity_set_int(ent, EV_INT_solid, bOffCheck ? SOLID_NOT : SOLID_TRIGGER)
}

/**================================================================================
    Функция добавляет чекпоинт.
===================================================================================*/
stock AddCheck(type=0,Float:fOrigin[3]={0.0,0.0,0.0},save = 1)
{
    static iNumber
    if
(save)
    {
        new szSave[512]
        format(szSave, 511, "%f %f %f %d", fOrigin[0], fOrigin[1], fOrigin[2], type)
        write_file(szFile, szSave)
    }
    if(type)
        LastCheck = true
    
    iNumber
++    
    new iEnt
, rnd = random_num(0,sizeof szModelCheck - 1),p[4][32]
    iEnt = create_entity("info_target")
    parse(szColorCheck[rnd], p[1],5,p[2],5,p[3],5)
    if(is_valid_ent(iEnt))
    {
        entity_set_string(iEnt, EV_SZ_classname, type ? "info_checkpoint_finish" : ClassName)
        entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1)
        entity_set_origin(iEnt, fOrigin)
        DispatchSpawn(iEnt)
        entity_set_model(iEnt, szModelCheck[rnd])
        set_rendering(iEnt, kRenderFxGlowShell, stn(p[1]),stn(p[2]),stn(p[3]))
        entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER)
        entity_set_size(iEnt, Float:{ -40.0, -40.0, -40.0 },  Float:{ 40.0, 40.0, 40.0 }) 
    
}
}

/**================================================================================
    Анимация + Еффекты объекта
===================================================================================*/
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate = 1.0 )
{
    entity_set_float(entity, EV_FL_animtime, get_gametime());
    entity_set_float(entity, EV_FL_framerate, framerate);
    entity_set_float(entity, EV_FL_frame, 0.0);
    entity_set_int(entity, EV_INT_sequence, sequence);
    
    new Float
:origin[3], c[4][6], szModel[127]
    entity_get_string(entity, EV_SZ_model, szModel, charsmax(szModel))
    for(new i; i < sizeof szModelCheck; i++)
    {
        if(equal(szModel, szModelCheck[i]))
        {
            parse(szColorCheck[i], c[1],5,c[2],5,c[3],5)
            break;
        }
    }
    set_rendering(entity, kRenderFxGlowShell, stn(c[1]),stn(c[2]),stn(c[3])) 
    entity_get_vector
(entity, EV_VEC_origin, origin)
    origin[2] -= 50.0
    engfunc
(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, origin, 0) 
    write_byte
(TE_BEAMCYLINDER)
    engfunc(EngFunc_WriteCoord, origin[0]) //start x
    engfunc(EngFunc_WriteCoord, origin[1]) //start y
    engfunc(EngFunc_WriteCoord, origin[2]) //start z
    engfunc(EngFunc_WriteCoord, origin[0]+50) //end x
    engfunc(EngFunc_WriteCoord, origin[1]) //end y
    engfunc(EngFunc_WriteCoord, origin[2]+135) //end z
    write_short(BeaconSprite)
    write_byte(0)
    write_byte(1)
    write_byte(6)
    write_byte(1)  //hight
    write_byte(1) 
    write_byte
(stn(c[1])) //red
    write_byte(stn(c[2])) //green
    write_byte(stn(c[3])) //blue
    write_byte(255)
    write_byte(0)
    message_end()
}

/**================================================================================
    Цветной чат
===================================================================================*/
stock Color_Print(const id, const input[], any:...)
{
    new count = 1, players[32]
    static msg[191]
    new pr[32]
    format(pr,31,P), pr[11] = '^0'
    vformat(msg, 190, input, 3)
    format(msg, sizeof(msg), "^1[^4%s^1] %s", pr,msg)
    replace_all(msg, 190, "!g", "^4") // Green Color
    replace_all(msg, 190, "!y", "^1") // Default Color
    replace_all(msg, 190, "!team", "^3") // Team Color
    
    if 
(id) players[0] = id; else get_players(players, count, "ch")
    {
        for (new i = 0; i < count; i++)
        {
            if (is_user_connected(players[i]))
            {
                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                write_byte(players[i]);
                write_string(msg); 
                message_end
();
            }
        }
    }
}

/**================================================================================
    Функция подсчитывает кол-во объектов
===================================================================================*/
stock GetNumEntity(const class[])
{
    new iEnt, iNum
    while
((iEnt = find_ent_by_class(iEnt, class)))
        iNum++
    
    return iNum

Поставил на флаг L а доступ все равно есть, если есть флаг А у админа
Где то еще надо поменять, подскажите пожалуйста. :-)

Код: Выделить всё
if(!(get_user_flags(id) & ADMIN_RCON))

С другим плагином такая же беда

Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <hamsandwich>
#include <dhudmessage>
#include <WPMGPrintChatColor>

#define PLUGIN "Checkpoints"
#define VERSION "0.7"
#define AUTHOR "Psycrow"

#define MODEL_CP        "models/n21_deathrun/checkpoints/cp.mdl"
#define SOUND_CP        "n21_deathrun/checkpoint2.wav"

#define CLASSNAME_CP        "checkpoint"

#define DHUD_POSITION         0, 255, 0, -1.0, 0.8, 2, 1.05, 1.05, 0.05, 3.0

#if cellbits == 32
    #define OFFSET_CSMONEY 115
#else
    #define OFFSET_CSMONEY 140
#endif

new
    g_msgMoney,
    g_infoTarget,
    g_maxPlayers,
    bool: g_save_cpl,                //Изменения в расположении чекпоинтов
    bool: g_registration,                //Ничего не регистрировать если чекпоинтов нет
    bool: is_round_end,                //Блокирует сбор чекпоинтов после окончания раунда
    cp_count,                    //Кол-во чекпоинтов
    g_cp_pass[33],                    //Последний пройденный чекпоинт игроком
    g_finished[33],                    //Кто на каком месте пришел к финишу.
    g_fin_pos,                    //Последнее занятое место

    Array:g_cp_id,                    //Индексы чекпоинтов
    Array:g_cp_origin_x,
    Array:g_cp_origin_y,
    Array:g_cp_origin_z

public plugin_precache
()
{
    precache_model(MODEL_CP)
    precache_sound(SOUND_CP)
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)
        
    register_cvar
("cv_checkpoint_money","1") // Выдавать ли деньги?
    register_cvar("cv_checkpoint_teleport","1") // Возрождать ли у чекпоинта?
    register_cvar("cv_checkpoint_money_give","300") // Сколько выдавать денег на прохождение обычных чекпоинтов
    register_cvar("cv_checkpoint_money_koef","1") // Умножать ли награду за пройденный чекпоинт на номер чекпоинта?
    register_cvar("cv_checkpoint_money_last_first","6000") // Сколько выдавать денег за пройденный последний чекпоинт на первом месте
    register_cvar("cv_checkpoint_money_last_second","4000") // На втором месте
    register_cvar("cv_checkpoint_money_last_third","3500") // На третьем месте
    register_cvar("cv_checkpoint_money_max","16000") // Лимит денег
        
                register_concmd
("say /checkpoint", "checkpoint_menu")
                register_concmd("say_team /checkpoint", "checkpoint_menu")  
            
    g_infoTarget 
= engfunc(EngFunc_AllocString, "info_target")
}

public plugin_cfg()
{
    new map[32]
    get_mapname(map, charsmax(map))
    formatex(map, charsmax(map),"%s.ini",map)
    
    new cfgDir
[64], iDir, iFile[128]
    get_configsdir(cfgDir, charsmax(cfgDir))
    formatex(cfgDir, charsmax(cfgDir), "%s/next21_checkpoints", cfgDir)
    
    iDir 
= open_dir(cfgDir, iFile, charsmax(iFile))
    
    if
(iDir)
    {
        while(next_file(iDir, iFile, charsmax(iFile)))
        {
            if (iFile[0] == '.')
                continue
                
            if
(equal(map, iFile))
            {
                format(iFile, 128, "%s/%s", cfgDir, iFile)
                get_checkpoints(iFile)
                break
            
}
        }
    }
    else server_print("[%s] Checkpoints was not loaded", PLUGIN)    
}

public fw_PlayerSpawn(id)
    teleport(id)

public fw_RoundStart()
{
    is_round_end = false
    g_fin_pos 
= 0
    
    static i
    for
(= 1; i <= g_maxPlayers; i++)
    {
        g_finished[i] = 0
        g_cp_pass
[i] = -1
    
}
}

public fw_RoundEnd()
{
    
    
//Тут можно вставить тройку победителей, используя g_finished[id]
    
    is_round_end 
= true
}

public fw_TouchCheckpoint(ent, id)
{
    
    if
(is_round_end || !is_user_alive(id) || !pev_valid(ent))
        return
                    
    if
(g_cp_pass[id] == cp_count-1)
        return
        
    static className
[32]
    pev(ent, pev_classname, className, 31)
    if(!equal(className, CLASSNAME_CP))
        return
 
    static i
    for
(= g_cp_pass[id] + 1; i < cp_count; i++)
    {
        if(ent == ArrayGetCell(g_cp_id, i))    
        
{        
            client_cmd
(id, "spk %s", SOUND_CP)
            g_cp_pass[id] = i
            
            set_dhudmessage
(DHUD_POSITION)
            static reward
            
            if
(== cp_count - 1)
            {
                g_fin_pos++
                show_dhudmessage(id, "Р’С‹ РїСЂРѕС€Р»Рё С‡РµСЂРµР· РїРѕСЃР»РµРґРЅРёР№ С‡РµРєРїРѕРёРЅС‚ Рё С„инишировали РЅР°^n %d РјРµСЃС‚Рµ", g_fin_pos)
                static player_name[32] 
                get_user_name
(id, player_name, 31)     
                PrintChatColor
(0, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tИгрок !g%s !tпришел Рє С„инишу РЅР° !g%d !tместе", PLUGIN, player_name, g_fin_pos) 
                
                switch
(g_fin_pos)
                {
                    case 1: reward = get_cvar_num("cv_checkpoint_money_last_first")
                    case 2: reward = get_cvar_num("cv_checkpoint_money_last_second")
                    case 3: reward = get_cvar_num("cv_checkpoint_money_last_third")
                    default: 
                    
{
                        reward = get_cvar_num("cv_checkpoint_money_give")
                        if(get_cvar_num("cv_checkpoint_money_koef"))
                            reward *= i + 1
                    
}
                }
                
                g_finished
[id] = g_fin_pos
            
}
            else
            
{
                reward = get_cvar_num("cv_checkpoint_money_give")
                if(get_cvar_num("cv_checkpoint_money_koef"))
                    reward *= i + 1
                show_dhudmessage
(id, "Р’С‹ РїСЂРѕС€Р»Рё С‡РµСЂРµР· С‡РµРєРїРѕРёРЅС‚ %d",+ 1)
            }
            
            if
(get_cvar_num("cv_checkpoint_money"))
            {
                static curr_money, max_money
                curr_money 
= get_pdata_int(id, OFFSET_CSMONEY)
                max_money = get_cvar_num("cv_checkpoint_money_max")
    
                if
(curr_money + reward > max_money)
                    reward = max_money - curr_money
            
                set_pdata_int
(id, OFFSET_CSMONEY, curr_money + reward)
            
                message_begin
(MSG_ONE, g_msgMoney, _, id)
                write_long(curr_money + reward)
                write_byte(1)
                message_end()
            
                PrintChatColor
(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tР’С‹ РїРѕР»СѓС‡Р°РµС‚Рµ !g%d$", PLUGIN, reward) 
            
}
        }
    }
}

public checkpoint_menu(id)
{
                if(!is_user_alive(id) && !(get_user_flags(id) & ADMIN_RCON)) 
                return PLUGIN_HANDLED
    new menu_name
[80]
    format(menu_name, 79, "\rРасстановка С‡РµРєРїРѕРёРЅС‚РѕРІ^n\dТекущий С‡РµРєРїРѕРёРЅС‚: %d", cp_count + 1)

    new i_menu = menu_create(menu_name, "menu_handler")
    
    menu_additem
(i_menu, "\wУстановить Р§РµРєРїРѕРёРЅС‚", "1", 0)
    
    if
(!cp_count)
    {
        menu_additem(i_menu, "\dУдалить РїСЂРµРґС‹РґСѓС‰РёР№ Р§РµРєРїРѕРёРЅС‚", "2", 0)
        menu_additem(i_menu, "\dУдалить РІСЃРµ Р§РµРєРїРѕРёРЅС‚С‹", "3", 0)
    }
    else 
    
{
        menu_additem(i_menu, "\wУдалить РїСЂРµРґС‹РґСѓС‰РёР№ Р§РµРєРїРѕРёРЅС‚", "2", 0)
        menu_additem(i_menu, "\wУдалить РІСЃРµ Р§РµРєРїРѕРёРЅС‚С‹", "3", 0)
    }
    
    if
(!g_save_cpl)
        menu_additem(i_menu, "\dСохранить РёР·РјРµРЅРµРЅРёСЏ", "4", 0)
    else menu_additem(i_menu, "\wСохранить РёР·РјРµРЅРµРЅРёСЏ", "4", 0)

    menu_setprop(i_menu, MPROP_EXIT, MEXIT_ALL)
    menu_setprop(i_menu, MPROP_EXITNAME, "\yВыход")
    menu_display(id, i_menu, 0)
        
    return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
    if(item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    
    switch
(item)
    {
        case 0:
        {        
            new Float
:fOrigin[3]
            fm_get_aim_origin(id, fOrigin)
            fOrigin[2] += 60.0
            
            if
(create_checkpoint(fOrigin))
                g_save_cpl = true
                
            menu_destroy
(menu)
            checkpoint_menu(id)
        }
        case 1:
        {
            if(!cp_count)
            {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tРќР° РєР°СЂС‚Рµ РЅРµС‚ Р§РµРєРїРѕРёРЅС‚РѕРІ", PLUGIN) 
                
                menu_destroy
(menu)
                checkpoint_menu(id)
                
                return PLUGIN_HANDLED
            
}
            
            g_save_cpl 
= true
            PrintChatColor
(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tЧекпоинт СѓРґР°Р»РµРЅ", PLUGIN)
            
            cp_count
--
            engfunc(EngFunc_RemoveEntity, ArrayGetCell(g_cp_id, cp_count))
            ArrayDeleteItem(g_cp_id, cp_count)
            ArrayDeleteItem(g_cp_origin_x, cp_count)
            ArrayDeleteItem(g_cp_origin_y, cp_count)
            ArrayDeleteItem(g_cp_origin_z, cp_count)
            
            if
(cp_count)
            {
                set_pev(ArrayGetCell(g_cp_id, cp_count - 1), pev_body, 1)
                set_pev(ArrayGetCell(g_cp_id, cp_count - 1), pev_skin, 0)
            }
            
            menu_destroy
(menu)
            checkpoint_menu(id)
        }
        case 2:
        {
            if(!cp_count)
            {
                PrintChatColor(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tРќР° РєР°СЂС‚Рµ РЅРµС‚ Р§РµРєРїРѕРёРЅС‚РѕРІ", PLUGIN) 
                
                menu_destroy
(menu)
                checkpoint_menu(id)
                
                return PLUGIN_HANDLED
            
}
            
            g_save_cpl 
= true
            PrintChatColor
(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !tБыло СѓРґР°Р»РµРЅРѕ !g%d !tЧекпоинтов", PLUGIN, cp_count)
            
            static i
            for
(= 0; i < cp_count; i++)
                engfunc(EngFunc_RemoveEntity, ArrayGetCell(g_cp_id, i))
                
            cp_count 
= 0
            
            ArrayClear
(g_cp_id) 
            ArrayClear
(g_cp_origin_x) 
            ArrayClear
(g_cp_origin_y) 
            ArrayClear
(g_cp_origin_z) 
            
            menu_destroy
(menu)
            checkpoint_menu(id)
        }
        case 3:
        {
            if(!g_save_cpl)
            {
                menu_destroy(menu)
                checkpoint_menu(id)
                
                return PLUGIN_HANDLED
            
}
            
            g_save_cpl 
= false
            
            PrintChatColor
(id, PRINT_COLOR_PLAYERTEAM, "!g[%s] !t%s", PLUGIN, set_checkpoints() ? "Сохранено" : "РќРµ СЃРѕС…ранено")
            
            menu_destroy
(menu)
            checkpoint_menu(id)
        }
    }
    return PLUGIN_HANDLED
}

bool: set_checkpoints()
{
    new map[32]
    get_mapname(map, charsmax(map))
    formatex(map, charsmax(map), "%s.ini", map)
    
    new cfgDir
[64], iFile[128]
    get_configsdir(cfgDir, charsmax(cfgDir))
    formatex(cfgDir, charsmax(cfgDir), "%s/next21_checkpoints", cfgDir)
    formatex(iFile, charsmax(iFile), "%s/%s", cfgDir, map)
    
    if
(!dir_exists(cfgDir))
        if(!mkdir(cfgDir))
            return false
    
    delete_file
(iFile)
    
    if
(!cp_count)
        return true
    
    static i
    for
(= 0; i < cp_count; i++)
    {
        new text[128], Float:fOrigin[3], ent = ArrayGetCell(g_cp_id, i)
        pev(ent, pev_origin, fOrigin)
        format(text, charsmax(text),"^"%f^" ^"%f^" ^"%f^"",fOrigin[0], fOrigin[1], fOrigin[2])
        write_file(iFile, text, i) 
    
}
    
    return true
}

get_checkpoints(const iFile[128])
{
    
    new file 
= fopen(iFile, "rt")
    
    if
(!file)
    {
        server_print("[%s] Checkpoints was not loaded", PLUGIN)
        return
    
}
        
    while
(file && !feof(file))
    {
        new sfLineData[512]
        fgets(file, sfLineData, charsmax(sfLineData))
            
        if
(sfLineData[0] == ';')
            continue
            
        if
(equal(sfLineData, ""))
            continue    
            
        new origins
[3][32], Float: fOrigin[3]        
        parse
(sfLineData, origins[0], 31, origins[1], 31, origins[2], 31)
        
        fOrigin
[0] = str_to_float(origins[0])
        fOrigin[1] = str_to_float(origins[1])
        fOrigin[2] = str_to_float(origins[2])
        
        create_checkpoint
(fOrigin)
    }
    
    fclose
(file)
    
    if
(!cp_count)
        server_print("[%s] Checkpoints was not loaded", PLUGIN)
    else if(cp_count == 1)
        server_print("[%s] Loaded one checkpoint", PLUGIN)
    else
        server_print
("[%s] Loaded %d checkpoints", PLUGIN, cp_count)
}

bool: create_checkpoint(const Float: fOrigin[3])
{
    new ent = engfunc(EngFunc_CreateNamedEntity, g_infoTarget)
    if(!pev_valid(ent)) return false
    
    if
(!g_registration)
    {
        if(get_cvar_num("cv_checkpoint_teleport"))
            RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
            
        register_event
("HLTV", "fw_RoundStart", "a", "1=0", "2=0")
        register_event("SendAudio", "fw_RoundEnd", "a", "2&%!MRAD_rounddraw")
        register_event("SendAudio", "fw_RoundEnd", "a", "2&%!MRAD_terwin")
        register_event("SendAudio", "fw_RoundEnd", "a", "2&%!MRAD_ctwin")
        
        RegisterHamFromEntity
(Ham_Touch, ent, "fw_TouchCheckpoint")
        
        fw_RoundStart
()
        
        g_cp_id 
= ArrayCreate()
        g_cp_origin_x = ArrayCreate()
        g_cp_origin_y = ArrayCreate()
        g_cp_origin_z = ArrayCreate()
        
        g_maxPlayers 
= get_maxplayers()
        g_msgMoney = get_user_msgid("Money")
        
        g_registration 
= true
    
}
        
    ArrayPushCell
(g_cp_id, ent)
        
    ArrayPushCell
(g_cp_origin_x, fOrigin[0])
    ArrayPushCell(g_cp_origin_y, fOrigin[1])
    ArrayPushCell(g_cp_origin_z, fOrigin[2])
    
    engfunc
(EngFunc_SetModel, ent, MODEL_CP)
    set_pev(ent, pev_origin, fOrigin)
    set_pev(ent, pev_solid, SOLID_TRIGGER)
    set_pev(ent, pev_movetype, MOVETYPE_NONE)
    set_pev(ent, pev_sequence, 0)
    set_pev(ent, pev_framerate, 1.0)
    set_pev(ent, pev_classname, CLASSNAME_CP)
    set_pev(ent, pev_effects, 8)
    set_pev(ent, pev_body, 1)
    engfunc(EngFunc_SetSize, ent, Float: {-45.0, -45.0, -45.0}, Float:{45.0, 45.0, 45.0})
    
    cp_count
++

    if(cp_count > 1)
    {
        set_pev(ArrayGetCell(g_cp_id, cp_count - 2), pev_body, 0)
        set_pev(ArrayGetCell(g_cp_id, cp_count - 2), pev_skin, random_num(0, 4))
    }
    
    return true
}

teleport(const id)
{
    if(g_cp_pass[id] == -1)
        return
            
    new Float
: fOrigin[3]
    fOrigin[0] = ArrayGetCell(g_cp_origin_x, g_cp_pass[id])
    fOrigin[1] = ArrayGetCell(g_cp_origin_y, g_cp_pass[id])
    fOrigin[2] = ArrayGetCell(g_cp_origin_z, g_cp_pass[id])
    
    set_pev
(id, pev_origin, fOrigin)
Аватара пользователя
Печенька
 
Сообщения: 51
Зарегистрирован: 09 фев 2016, 16:13
Благодарил (а): 15 раз.
Поблагодарили: 2 раз.

Re: CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение Lethargy » 08 май 2017, 23:03

Может дело в инклудах? Ты с офф сайта качал компилятор?
Lawful evil ]:->

Были бы в языке pawn объекты, было бы круто. Почему нет объектов в павне?
Аватара пользователя
Lethargy
 
Сообщения: 179
Зарегистрирован: 12 мар 2017, 17:25
Благодарил (а): 34 раз.
Поблагодарили: 15 раз.
Языки программирования: За 3-4 часа любой язык

Re: CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение Печенька » 09 май 2017, 09:28

Lethargy писал(а):Может дело в инклудах? Ты с офф сайта качал компилятор?
С кодом который ниже, разобрался, там нужен был инклюд все скомпилировалось, но вот что делать с первым плагином не знаю.
Аватара пользователя
Печенька
 
Сообщения: 51
Зарегистрирован: 09 фев 2016, 16:13
Благодарил (а): 15 раз.
Поблагодарили: 2 раз.

Re: CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение RevCrew » 09 май 2017, 21:47

Код: Выделить всё
    if(!(get_user_flags(id) & ADMIN_IMMUNITY))
    {
        
client_print(idprint_console"У вас не достаточно прав. ~%s~"P)
        return 
PLUGIN_HANDLED
    


пройтись по коду с поиском get_user_flags и заменить на свой флаг
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown

Re: CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение Печенька » 10 май 2017, 19:14

RevCrew писал(а):
Код: Выделить всё
    if(!(get_user_flags(id) & ADMIN_IMMUNITY))
    {
        client_print(id, print_console, "У вас не достаточно прав. ~%s~", P)
        return PLUGIN_HANDLED
    


пройтись по коду с поиском get_user_flags и заменить на свой флаг


Я собственно так и сделал, заменил на свой флаг как Вы и сказали.  
Код: Выделить всё
if(!(get_user_flags(id) & ADMIN_RCON)) 

Все равно, не работает и еще странно, что перестало выдавать денежное вознаграждение после прохождения того или иного чекпоинта. Во как... :yahoo: просто супер. Это называется немножко подправил :thumbs_up наверно что то делаю не так.
Аватара пользователя
Печенька
 
Сообщения: 51
Зарегистрирован: 09 фев 2016, 16:13
Благодарил (а): 15 раз.
Поблагодарили: 2 раз.

Re: CheckPoints_by_BlackSmoke: поменять флаг доступа

Сообщение RevCrew » 11 май 2017, 18:27

Печенька, ну там продебажить нужно в функции меню чекпоинтов
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6