Map Manager: Scheduler ошибка

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
195
Реакции
43
Помог
4 раз(а)
Ошибка
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// map_manager_scheduler.sma
//
// C:\Users\SaHTuK\Desktop\compile 1.9.0 5249\map_manager_scheduler.sma(76) : warning 203: symbol is never used: "g_bOneMapMode"
// Header size: 2316 bytes
// Code size: 16224 bytes
// Data size: 7920 bytes
// Stack/heap size: 16384 bytes
// Total requirements: 42844 bytes
//
// 1 Warning.
// Done.
//
// Compilation Time: 0,25 sec
// ----------------------------------------

Press enter to exit ...
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <amxmisc>
#include <map_manager>
#include <map_manager_nomination>

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define PLUGIN "Map Manager: Scheduler"
#define VERSION "0.1.3"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#if !defined client_disconnected
#define client_disconnected client_disconnect
#endif

#define get_num(%0) get_pcvar_num(g_pCvars[%0])
#define set_num(%0,%1) set_pcvar_num(g_pCvars[%0],%1)
#define get_float(%0) get_pcvar_float(g_pCvars[%0])
#define set_float(%0,%1) set_pcvar_float(g_pCvars[%0],%1)
#define get_string(%0,%1,%2) get_pcvar_string(g_pCvars[%0],%1,%2)

#define EVENT_SVC_INTERMISSION "30"

enum (+=100) {
    TASK_CHECKTIME,
    TASK_DELAYED_CHANGE,
    TASK_CHANGE_TO_DEFAULT
};

enum {
    CHANGE_AFTER_VOTE,
    CHANGE_NEXT_ROUND,
    CHANGE_MAP_END
};

enum Cvars {
    CHANGE_TYPE,
    TIMELEFT_TO_VOTE,
    ROUNDS_TO_VOTE,
    FRAGS_TO_VOTE,
    VOTE_IN_NEW_ROUND,
    LAST_ROUND,
    SECOND_VOTE,
    SECOND_VOTE_PERCENT,
    CHANGE_TO_DEFAULT,
    DEFAULT_MAP,
    EXTENDED_TYPE,
    EXTENDED_MAX,
    EXTENDED_TIME,
    EXTENDED_ROUNDS,
    MAXROUNDS,
    WINLIMIT,
    TIMELIMIT,
    CHATTIME,
    FRAGLIMIT,
    FRAGSLEFT,
    NEXTMAP
};

new g_pCvars[Cvars];

new bool:g_bVoteInNewRound;
new g_iTeamScore[2];
new Float:g_fOldTimeLimit;
new g_iExtendedNum;
new g_iVoteType;

new g_sSecondVoteMaps[2][MAPNAME_LENGTH];

new bool:g_bChangeMapNextRound;

new bool:g_bOneMapMode;

new g_sPrefix[32];
new g_sCurMap[MAPNAME_LENGTH];

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    g_pCvars[CHANGE_TYPE] = register_cvar("mapm_change_type", "1"); // 0 - after end vote, 1 - in round end, 2 - after end map
    g_pCvars[TIMELEFT_TO_VOTE] = register_cvar("mapm_timeleft_to_vote", "2"); // minutes
    g_pCvars[ROUNDS_TO_VOTE] = register_cvar("mapm_rounds_to_vote", "2"); // rounds
    g_pCvars[FRAGS_TO_VOTE] = register_cvar("mapm_frags_to_vote", "5"); // frags
    g_pCvars[VOTE_IN_NEW_ROUND] = register_cvar("mapm_vote_in_new_round", "0"); // 0 - disable, 1 - enable
    g_pCvars[LAST_ROUND] = register_cvar("mapm_last_round", "0"); // 0 - disable, 1 - enable

    g_pCvars[SECOND_VOTE] = register_cvar("mapm_second_vote", "0"); // 0 - disable, 1 - enable
    g_pCvars[SECOND_VOTE_PERCENT] = register_cvar("mapm_second_vote_percent", "50");

    g_pCvars[CHANGE_TO_DEFAULT] = register_cvar("mapm_change_to_default_map", "0"); // minutes, 0 - disable
    g_pCvars[DEFAULT_MAP] = register_cvar("mapm_default_map", "de_dust2");

    g_pCvars[EXTENDED_TYPE] = register_cvar("mapm_extended_type", "0"); // 0 - minutes, 1 - rounds
    g_pCvars[EXTENDED_MAX] = register_cvar("mapm_extended_map_max", "3");
    g_pCvars[EXTENDED_TIME] = register_cvar("mapm_extended_time", "15"); // minutes
    g_pCvars[EXTENDED_ROUNDS] = register_cvar("mapm_extended_rounds", "3"); // rounds

    g_pCvars[MAXROUNDS] = get_cvar_pointer("mp_maxrounds");
    g_pCvars[WINLIMIT] = get_cvar_pointer("mp_winlimit");
    g_pCvars[TIMELIMIT] = get_cvar_pointer("mp_timelimit");
    g_pCvars[CHATTIME] = get_cvar_pointer("mp_chattime");
    g_pCvars[FRAGLIMIT] = get_cvar_pointer("mp_fraglimit");
    g_pCvars[FRAGSLEFT] = get_cvar_pointer("mp_fragsleft");


    g_pCvars[NEXTMAP] = register_cvar("amx_nextmap", "", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY);

    register_concmd("mapm_start_vote", "concmd_startvote", ADMIN_MAP);
    register_concmd("mapm_stop_vote", "concmd_stopvote", ADMIN_MAP);

    register_clcmd("votemap", "clcmd_votemap");

    if(g_pCvars[FRAGLIMIT]) {
        register_event("DeathMsg", "event_deathmsg", "a");
    }
    register_event("TeamScore", "event_teamscore", "a");
    register_event("HLTV", "event_newround", "a", "1=0", "2=0");
    // register_event("TextMsg", "event_restart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in");
    register_event(EVENT_SVC_INTERMISSION, "event_intermission", "a");

    set_task(10.0, "task_checktime", TASK_CHECKTIME, .flags = "b");
}
public plugin_cfg()
{
    get_mapname(g_sCurMap, charsmax(g_sCurMap));
    mapm_get_prefix(g_sPrefix, charsmax(g_sPrefix));
}
public plugin_natives()
{
    register_library("map_manager_scheduler");

    set_module_filter("module_filter_handler");
    set_native_filter("native_filter_handler");

    register_native("map_scheduler_start_vote", "native_start_vote");
    register_native("is_vote_will_in_next_round", "native_vote_will_in_next_round");
    register_native("is_last_round", "native_is_last_round");
}
public module_filter_handler(const library[], LibType:type)
{
    if(equal(library, "map_manager_nomination")) {
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
public native_filter_handler(const native_func[], index, trap)
{
    if(equal(native_func, "map_nomination_set_ignore")) {
        return PLUGIN_HANDLED;
    }
    return PLUGIN_CONTINUE;
}
public native_start_vote(plugin, params)
{
    if(g_bVoteInNewRound) {
        return 0;
    }

    enum { arg_type = 1 };
    planning_vote(get_param(arg_type));

    return 1;
}
public native_vote_will_in_next_round(plugin, params)
{
    return g_bVoteInNewRound;
}
public native_is_last_round(plugin, params)
{
    return g_bChangeMapNextRound;
}
public plugin_end()
{
    if(g_fOldTimeLimit > 0.0) {
        set_float(TIMELIMIT, g_fOldTimeLimit);
    }
    restore_limits();
}
restore_limits()
{
    if(g_iExtendedNum) {
        if(get_num(EXTENDED_TYPE) == EXTEND_ROUNDS) {
            new win_limit = get_num(WINLIMIT);
            if(win_limit) {
                set_pcvar_num(g_pCvars[WINLIMIT], win_limit - g_iExtendedNum * get_num(EXTENDED_ROUNDS));
            }
            new max_rounds = get_num(MAXROUNDS);
            if(max_rounds) {
                set_pcvar_num(g_pCvars[MAXROUNDS], max_rounds - g_iExtendedNum * get_num(EXTENDED_ROUNDS));
            }
        } else {
            new Float:timelimit = get_float(TIMELIMIT);
            if(timelimit) {
                new Float:restored_value = timelimit - float(g_iExtendedNum * get_num(EXTENDED_TIME));
                set_float(TIMELIMIT, restored_value);
            }
        }
        g_iExtendedNum = 0;
    }
}
public concmd_startvote(id, level, cid)
{
    if(!cmd_access(id, level, cid, 1)) {
        return PLUGIN_HANDLED;
    }

    new name[32]; get_user_name(id, name, charsmax(name));
    log_amx("%s started vote", id ? name : "Server");
    
    planning_vote(VOTE_BY_CMD);

    return PLUGIN_HANDLED;
}
public concmd_stopvote(id, level, cid)
{
    if(!cmd_access(id, level, cid, 1)) {
        return PLUGIN_HANDLED;
    }

    new name[32]; get_user_name(id, name, charsmax(name));
    log_amx("%s stopped vote", id ? name : "Server");
    
    mapm_stop_vote();

    if(mapm_get_vote_type() == VOTE_BY_SCHEDULER_SECOND) {
        map_nomination_set_ignore(false);
    }

    if(g_bVoteInNewRound) {
        g_bVoteInNewRound = false;

        if(g_fOldTimeLimit > 0.0) {
            set_float(TIMELIMIT, g_fOldTimeLimit);
        }
    }

    return PLUGIN_HANDLED;
}
public clcmd_votemap()
{
    // Block default vote
    return PLUGIN_HANDLED;
}
public client_putinserver(id)
{
    if(!is_user_bot(id) && !is_user_hltv(id)) {
        remove_task(TASK_CHANGE_TO_DEFAULT);
    }
}
public client_disconnected(id)
{
    new Float:change_time = get_float(CHANGE_TO_DEFAULT);
    if(change_time > 0.0 && !get_players_num(id)) {
        set_task(change_time * 60, "task_change_to_default", TASK_CHANGE_TO_DEFAULT);
    }
}
public task_change_to_default()
{
    if(get_players_num()) {
        return;
    }

    new default_map[MAPNAME_LENGTH]; get_string(DEFAULT_MAP, default_map, charsmax(default_map));

    if(!is_map_valid(default_map)) {
        return;
    }

    log_amx("map changed to default[%s]", default_map);
    set_pcvar_string(g_pCvars[NEXTMAP], default_map);
    intermission();
}
public task_checktime()
{
    if(is_vote_started() || is_vote_finished() || get_float(TIMELIMIT) <= 0.0) {
        return 0;
    }

    new Float:time_to_vote = get_float(TIMELEFT_TO_VOTE);
    
    new timeleft = get_timeleft();
    if(timeleft <= floatround(time_to_vote * 60.0) && get_players_num()) {
        log_amx("[checktime]: start vote, timeleft %d", timeleft);
        
        planning_vote(VOTE_BY_SCHEDULER);
    }
    
    return 0;
}
public event_deathmsg()
{
    if(get_num(FRAGLIMIT)) {
        if(get_num(FRAGSLEFT) <= get_num(FRAGS_TO_VOTE)) {
            log_amx("[deathmsg]: start vote, fragsleft %d", get_num(FRAGSLEFT));
            mapm_start_vote(VOTE_BY_SCHEDULER);
        }
    }
}
public event_teamscore()
{
    new team[2]; read_data(1, team, charsmax(team));
    g_iTeamScore[(team[0] == 'C') ? 0 : 1] = read_data(2);
}
public event_newround()
{
    new max_rounds = get_num(MAXROUNDS);
    if(!is_vote_finished() && max_rounds && (g_iTeamScore[0] + g_iTeamScore[1]) >= max_rounds - get_num(ROUNDS_TO_VOTE)) {
        log_amx("[newround]: start vote, maxrounds %d [%d]", max_rounds, g_iTeamScore[0] + g_iTeamScore[1]);
        mapm_start_vote(VOTE_BY_SCHEDULER);
    }
    
    new win_limit = get_num(WINLIMIT) - get_num(ROUNDS_TO_VOTE);
    if(!is_vote_finished() && win_limit > 0 && (g_iTeamScore[0] >= win_limit || g_iTeamScore[1] >= win_limit)) {
        log_amx("[newround]: start vote, winlimit %d [CT: %d, T: %d]", win_limit, g_iTeamScore[0], g_iTeamScore[1]);
        mapm_start_vote(VOTE_BY_SCHEDULER);
    }

    if(g_bVoteInNewRound && !is_vote_started()) {
        log_amx("[newround]: start vote, timeleft %d, new round", get_timeleft());
        mapm_start_vote(g_iVoteType);
    }

    if(is_vote_finished() && g_bChangeMapNextRound) {
        new nextmap[MAPNAME_LENGTH]; get_string(NEXTMAP, nextmap, charsmax(nextmap));
        client_print_color(0, print_team_default, "%s^1 %L^3 %s^1.", g_sPrefix, LANG_PLAYER, "MAPM_NEXTMAP", nextmap);
        intermission();
    }
}
/*
public event_restart()
{
    if(get_num(RESTORE_MAP_LIMITS)) {
        restore_limits();
    }
}
*/
public event_intermission()
{
    if(task_exists(TASK_DELAYED_CHANGE)) {
        log_amx("double intermission, how?");
        return;
    }
    new Float:chattime = get_float(CHATTIME);
    set_float(CHATTIME, chattime + 1.0);
    set_task(chattime, "delayed_change", TASK_DELAYED_CHANGE);
}
public delayed_change()
{
    new nextmap[MAPNAME_LENGTH]; get_string(NEXTMAP, nextmap, charsmax(nextmap));
    set_float(CHATTIME, get_float(CHATTIME) - 1.0);
    server_cmd("changelevel %s", nextmap);
}
planning_vote(type)
{
    g_iVoteType = type;
    if(get_num(VOTE_IN_NEW_ROUND)) {
        g_bVoteInNewRound = true;

        g_fOldTimeLimit = get_float(TIMELIMIT);
        if(g_fOldTimeLimit > 0.0) {
            set_float(TIMELIMIT, 0.0);
        }

        client_print_color(0, print_team_default, "%s^1 %L", g_sPrefix, LANG_PLAYER, "MAPM_VOTE_WILL_BEGIN");
        log_amx("[planning_vote]: vote in new round.");
    } else {
        mapm_start_vote(type);
    }
}
public mapm_can_be_extended(type)
{
    if(type == VOTE_BY_SCHEDULER_SECOND) {
        return EXTEND_BLOCKED;
    }
    if(g_iExtendedNum >= get_num(EXTENDED_MAX)) {
        return EXTEND_BLOCKED;
    }
    return EXTEND_ALLOWED;
}
public mapm_prepare_votelist(type)
{
    if(type != VOTE_BY_SCHEDULER_SECOND) {
        return;
    }
    
    for(new i; i < sizeof(g_sSecondVoteMaps); i++) {
        mapm_push_map_to_votelist(g_sSecondVoteMaps[i], PUSH_BY_SECOND_VOTE, CHECK_IGNORE_MAP_ALLOWED);
    }
    mapm_set_votelist_max_items(2);
}
public mapm_analysis_of_results(type, total_votes)
{
    if(type == VOTE_BY_SCHEDULER_SECOND || !get_num(SECOND_VOTE)) {
        return ALLOW_VOTE;
    }

    new max_items = mapm_get_count_maps_in_vote();

    if(max_items <= 2) {
        return ALLOW_VOTE;
    }

    new first, second, max_votes_first, max_votes_second;
    new map[MAPNAME_LENGTH], votes;

    for(new i, temp_votes, temp_index; i < max_items; i++) {
        votes = mapm_get_voteitem_info(i, map, charsmax(map));
        if(votes >= max_votes_first) {
            temp_votes = max_votes_first;
            temp_index = first;
            max_votes_first = votes;
            first = i;

            if(temp_votes > max_votes_second) {
                max_votes_second = temp_votes;
                second = temp_index;
            }
        } else if(votes >= max_votes_second) {
            max_votes_second = votes;
            second = i;
        }
    }

    new percent = total_votes ? floatround(max_votes_first * 100.0 / total_votes) : 0;

    if(percent >= get_num(SECOND_VOTE_PERCENT)) {
        return ALLOW_VOTE;
    }

    mapm_get_voteitem_info(first, g_sSecondVoteMaps[0], charsmax(g_sSecondVoteMaps[]));
    mapm_get_voteitem_info(second, g_sSecondVoteMaps[1], charsmax(g_sSecondVoteMaps[]));

    log_amx("[analysis]: second vote started. (%s, %s)", g_sSecondVoteMaps[0], g_sSecondVoteMaps[1]);

    client_print_color(0, print_team_default, "%s^1 %L", g_sPrefix, LANG_PLAYER, "MAPM_SECOND_VOTE");
    map_nomination_set_ignore(true);
    mapm_start_vote(VOTE_BY_SCHEDULER_SECOND);

    return ABORT_VOTE;
}
public mapm_vote_finished(const map[], type, total_votes)
{
    if(type == VOTE_BY_SCHEDULER_SECOND) {
        map_nomination_set_ignore(false);
    }
    if(g_fOldTimeLimit > 0.0) {
        set_float(TIMELIMIT, g_fOldTimeLimit);
        g_fOldTimeLimit = 0.0;
    }
    g_bVoteInNewRound = false;

    // map extended
    if(equali(map, g_sCurMap)) {
        g_iExtendedNum++;

        new win_limit = get_num(WINLIMIT);
        new max_rounds = get_num(MAXROUNDS);

        if(get_num(EXTENDED_TYPE) == EXTEND_ROUNDS && (win_limit || max_rounds)) {
            new rounds = get_num(EXTENDED_ROUNDS);
            
            if(win_limit > 0) {
                set_num(WINLIMIT, win_limit + rounds);
            }
            if(max_rounds > 0) {
                set_num(MAXROUNDS, max_rounds + rounds);
            }
            
            client_print_color(0, print_team_default, "%s^1 %L %L.", g_sPrefix, LANG_PLAYER, "MAPM_MAP_EXTEND", rounds, LANG_PLAYER, "MAPM_ROUNDS");
        } else {
            new min = get_num(EXTENDED_TIME);
            
            client_print_color(0, print_team_default, "%s^1 %L %L.", g_sPrefix, LANG_PLAYER, "MAPM_MAP_EXTEND", min, LANG_PLAYER, "MAPM_MINUTES");
            set_float(TIMELIMIT, get_float(TIMELIMIT) + float(min));
        }
        
        mapm_set_vote_finished(false);

        log_amx("[vote_finished]: map extended[%d].", g_iExtendedNum);
        return 0;
    }

    // change map
    if(!total_votes) {
        client_print_color(0, print_team_default, "%s^1 %L", g_sPrefix, LANG_PLAYER, "MAPM_NOBODY_VOTE", map);
    } else {
        client_print_color(0, print_team_default, "%s^1 %L^3 %s^1.", g_sPrefix, LANG_PLAYER, "MAPM_NEXTMAP", map);
    }

    set_pcvar_string(g_pCvars[NEXTMAP], map);

    log_amx("[vote_finished]: nextmap is %s.", map);

    if(get_num(LAST_ROUND)) {
        // What if timelimit 0?
        g_fOldTimeLimit = get_float(TIMELIMIT);
        set_float(TIMELIMIT, 0.0);
        g_bChangeMapNextRound = true;

        client_print_color(0, print_team_default, "%s^1 %L", g_sPrefix, LANG_PLAYER, "MAPM_LASTROUND");
        
        log_amx("[vote_finished]: last round - saved timelimit is %f", g_fOldTimeLimit);
    } else if(get_num(CHANGE_TYPE) == CHANGE_AFTER_VOTE) {
        client_print_color(0, print_team_default, "%s^1 %L^1 %L.", g_sPrefix, LANG_PLAYER, "MAPM_MAP_CHANGE", get_num(CHATTIME), LANG_PLAYER, "MAPM_SECONDS");
        intermission();
    } else if(get_num(CHANGE_TYPE) == CHANGE_NEXT_ROUND || type == VOTE_BY_RTV) {
        g_bChangeMapNextRound = true;
        client_print_color(0, print_team_default, "%s^1 %L", g_sPrefix, LANG_PLAYER, "MAPM_MAP_CHANGE_NEXTROUND");
    }

    return 0;
}
C++
Уважаемые пользователи dev-cs, прошу помочь.
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
511
Реакции
111
Помог
16 раз(а)
Код:
//new bool:g_bOneMapMode;
C++
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
345
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
А где ошибка то? Я тут вижу только предупреждение, которое на работу никак не влияет.
 

wellasgood

Кидала, мошенник, вымогатель
Сообщения
1,409
Реакции
182
Помог
2 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
SaHTuK, достаточно было перевести это в переводчике:

// C:\Users\SaHTuK\Desktop\compile 1.9.0 5249\map_manager_scheduler.sma(76) : warning 203: symbol is never used: "g_bOneMapMode"

// C: \ Users \ SaHTuK \ Desktop \ compile 1.9.0 5249 \ map_manager_scheduler.sma (76): предупреждение 203: символ никогда не используется: "g_bOneMapMode"

Т.е нужно его использовать далее по коду) или вообще удалить
 
Статус
В этой теме нельзя размещать новые ответы.

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

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