Map Manager by Mistrick 3.0.7

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
49
Реакции
7
Помог
1 раз(а)
Ошибка
Ошибок в консоли нету
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5271 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Jun 24 2020 13:53:30
Built from: https://github.com/alliedmodders/amxmodx/commit/5eea3e5
Build ID: 5271:5eea3e5
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
Exe build: 13:12:29 Aug 29 2013 (6153)
ReGamedll
ReGameDLL version: 5.18.0.470-dev
Build date: 16:42:40 Jun 17 2020
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/3878f46
Версия Metamod
Metamod v1.21p38  2018/02/11 (5:13)
by Will Day
http://www.metamod.org/
Patch: Metamod-P (mm-p) v38
by Jussi Kivilinna
http://metamod-p.sourceforge.net/
compiled: Feb 11 2018, 11:05:06 EET (optimized)
Список метамодулей
[ 1] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.9.0.5  ini   Start ANY  
[ 2] dproto_EF RUN - dproto.so v0.9.582 ini Start Never
[ 3] LocalizeBug Fix RUN - localizebugfix.s v2.4 ini Start Never
[ 4] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl1 ANY
[ 5] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl1 ANY
[ 6] CSX RUN - csx_amxx_i386.so v1.9.0.5 pl1 ANY
[ 7] CStrike RUN - cstrike_amxx_i38 v1.9.0.5 pl1 ANY
[ 8] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl1 ANY
[ 9] Engine RUN - engine_amxx_i386 v1.9.0.5 pl1 ANY
[10] Fun RUN - fun_amxx_i386.so v1.9.0.5 pl1 ANY ANY
Список плагинов
[  1] FreshBans               v1.4.2b      kanagava          fresh_bans.amxx  running  
[ 2] Admin Loader v3.5 neygomon admin_loader.am running
[ 3] StatsX (MastaMan Editi v1.8.0.3660 AMXX Dev Team statsx_shell.am running
[ 4] Admin Chat v1.9.0.5271 AMXX Dev Team adminchat.amxx running
[ 5] Admin Commands v1.9.0.5271 AMXX Dev Team admincmd.amxx running
[ 6] Admin Votes v1.9.0.5271 AMXX Dev Team adminvote.amxx running
[ 7] Menus Front-End v1.9.0.5271 AMXX Dev Team menufront.amxx running
[ 8] Commands Menu v1.9.0.5271 AMXX Dev Team cmdmenu.amxx running
[ 9] Players Menu v1.9.0.5271 AMXX Dev Team plmenu.amxx running
[ 10] Map Manager: Core v3.0.7 Mistrick map_manager.amx running
[ 11] Maps Menu v1.9.0.5271 AMXX Dev Team mapsmenu.amxx running
[ 12] Plugin Menu v1.9.0.5271 AMXX Dev Team pluginmenu.amxx running
[ 13] Scrolling Message v1.9.0.5271 AMXX Dev Team scrollmsg.amxx running
[ 14] Info. Messages v1.9.0.5271 AMXX Dev Team imessage.amxx running
[ 15] Nextmap Chooser v1.9.0.5271 AMXX Dev Team mapchooser.amxx running
[ 16] Stats Configuration v1.9.0.5271 AMXX Dev Team statscfg.amxx running
[ 17] CS Misc. Stats v1.9.0.5271 AMXX Dev Team miscstats.amxx running
[ 18] CS Stats Logging v1.9.0.5271 AMXX Dev Team stats_logging.a running
[ 19] GunGame AMXX v2.13(BETA4 Avalanche gungame.amxx running
[ 20] Autoresponder/Advertis v0.5 MaximusBrood ad_manager.amxx running
[ 21] Damager v1.0 Prayer damager.amxx running
[ 22] Blue Fade v0.1 Stimul Blue_Fade.amxx running
[ 23] GunGame AMMO v2.2 Prayer gg_ammo.amxx running
[ 24] MultiJump v1.1 twistedeuphoria multijump1.amxx running
[ 25] Vampire v1.0c Shalfey vampire.amxx running
[ 26] Semiclip v1.31 skyjur semiclip.amxx running
[ 27] Auto recording demo v2.0 IzI | Bonaqua (R amx_autodemorec running
[ 28] Lite VoteBan v1.4 neygomon lite_voteban.am running
[ 29] Admin Gag v1.0 AndrewZ admin_gag.amxx running
[ 30] mute v1.0 Aziz mute.amxx running
[ 31] Change Team v1.1 neygomon changeteam.amxx running
[ 32] [GG] Balance v0.3b ServerBy905 Team GGBalance.amxx running
[ 33] FM ResetScore v0.1 neygomon fm_rs.amxx running
[ 34] Round Non-Stop v0.3.6 Simon Logic round_nonstop.a running
[ 35] AFK Manager vv1.4d Leon McVeran afk_manager.amx running
[ 36] PLUGIN vVERSION AUTHOR hidetimer.amxx running
[ 37] Steаm Models v0.1b+mod.l Freedo.m steam_models.am running
[ 38] [PUB] Hide Slash v1.0 Bonaqua hide_slash.amxx running
[ 39] Map Manager: Core v3.0.7 Mistrick map_manager_cor running
[ 40] Map Manager: Scheduler v0.1.5 Mistrick map_manager_sch running
[ 41] Map Manager: Rtv v0.1.1 Mistrick map_manager_rtv running
[ 42] Map Manager: Nominatio v0.1.2 Mistrick map_manager_nom running
[ 43] Map Manager: BlockList v0.0.3 Mistrick map_manager_blo running
[ 44] Map Manager: Online so v0.0.2 Mistrick map_manager_onl running
[ 45] Map Manager: Effects v0.0.9 Mistrick map_manager_eff running
[ 46] Map Manager: Informer v0.0.5 Mistrick map_manager_inf running
Автор плагина
Mistrick
Версия плагина
3.0.7
Исходный код
#include <amxmodx>
#include <map_manager_consts>
#include <map_manager_stocks>

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

#define PLUGIN "Map Manager: Core"
#define VERSION "3.0.7"
#define AUTHOR "Mistrick"

#pragma semicolon 1

//-----------------------------------------------------//
// Consts
//-----------------------------------------------------//
#define MAX_VOTELIST_SIZE 9
new const FILE_MAPS[] = "maps.ini";
//-----------------------------------------------------//

#define get_num(%0) get_pcvar_num(g_pCvars[%0])

const NOT_VOTED = -1;

enum (+=100) {
TASK_PREPARE_VOTE = 100,
TASK_VOTE_TIME
};

enum Forwards {
MAPLIST_LOADED,
MAPLIST_UNLOADED,
CAN_BE_IN_VOTELIST,
CAN_BE_EXTENDED,
PREPARE_VOTELIST,
VOTE_STARTED,
VOTE_CANCELED,
ANALYSIS_OF_RESULTS,
VOTE_FINISHED,
COUNTDOWN
};

enum Cvars {
PREFIX,
VOTELIST_SIZE,
SHOW_RESULT_TYPE,
SHOW_SELECTS,
SHOW_PERCENT,
RANDOM_NUMS,
PREPARE_TIME,
VOTE_TIME,
VOTE_ITEM_OFFSET
};

new g_pCvars[Cvars];

new g_iOffset;
new g_iVoteItems;
new g_sVoteList[MAX_VOTELIST_SIZE + 1][MAPNAME_LENGTH];
new g_iVotes[MAX_VOTELIST_SIZE + 1];
new g_iTotalVotes;
new g_iVoted[33];

new g_hForwards[Forwards];

new Array:g_aMapsList = Invalid_Array;

new bool:g_bBlockLoad = false;
new g_iShowType;
new g_iShowPercent;
new g_bShowSelects;
new g_iTimer;
new g_bCanExtend;
new g_iMaxItems;
new g_iCurMap;

new g_iRandomNums[MAX_VOTELIST_SIZE + 1];

new bool:g_bBlockShowVote = false;
new g_iVoteType;
new bool:g_bVoteStarted;
new bool:g_bVoteFinished;

new g_sCurMap[MAPNAME_LENGTH];
new g_sPrefix[48];

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

register_cvar("mapm_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY);

g_pCvars[PREFIX] = register_cvar("mapm_prefix", "^4[MapManager]");
g_pCvars[VOTELIST_SIZE] = register_cvar("mapm_votelist_size", "5");
g_pCvars[SHOW_RESULT_TYPE] = register_cvar("mapm_show_result_type", "1"); //0 - disable, 1 - menu, 2 - hud
g_pCvars[SHOW_SELECTS] = register_cvar("mapm_show_selects", "1"); // 0 - disable, 1 - all
g_pCvars[SHOW_PERCENT] = register_cvar("mapm_show_percent", "1"); // 0 - disable, 1 - always, 2 - after vote
g_pCvars[RANDOM_NUMS] = register_cvar("mapm_random_nums", "0"); // 0 - disable, 1 - enable
g_pCvars[PREPARE_TIME] = register_cvar("mapm_prepare_time", "5"); // seconds
g_pCvars[VOTE_TIME] = register_cvar("mapm_vote_time", "10"); // seconds
g_pCvars[VOTE_ITEM_OFFSET] = register_cvar("mapm_vote_item_offset", "0");

g_hForwards[MAPLIST_LOADED] = CreateMultiForward("mapm_maplist_loaded", ET_IGNORE, FP_CELL, FP_STRING);
g_hForwards[MAPLIST_UNLOADED] = CreateMultiForward("mapm_maplist_unloaded", ET_IGNORE);
g_hForwards[PREPARE_VOTELIST] = CreateMultiForward("mapm_prepare_votelist", ET_IGNORE, FP_CELL);
g_hForwards[VOTE_STARTED] = CreateMultiForward("mapm_vote_started", ET_IGNORE, FP_CELL);
g_hForwards[VOTE_CANCELED] = CreateMultiForward("mapm_vote_canceled", ET_IGNORE, FP_CELL);
g_hForwards[ANALYSIS_OF_RESULTS] = CreateMultiForward("mapm_analysis_of_results", ET_CONTINUE, FP_CELL, FP_CELL);
g_hForwards[VOTE_FINISHED] = CreateMultiForward("mapm_vote_finished", ET_IGNORE, FP_STRING, FP_CELL, FP_CELL);
g_hForwards[CAN_BE_IN_VOTELIST] = CreateMultiForward("mapm_can_be_in_votelist", ET_CONTINUE, FP_STRING, FP_CELL, FP_CELL);
g_hForwards[CAN_BE_EXTENDED] = CreateMultiForward("mapm_can_be_extended", ET_CONTINUE, FP_CELL);
g_hForwards[COUNTDOWN] = CreateMultiForward("mapm_countdown", ET_IGNORE, FP_CELL, FP_CELL);

register_menucmd(register_menuid("VoteMenu"), 1023, "votemenu_handler");

register_dictionary("mapmanager.txt");
}

public plugin_natives()
{
register_library("map_manager_core");

g_aMapsList = ArrayCreate(MapStruct, 1);
get_mapname(g_sCurMap, charsmax(g_sCurMap));

register_native("mapm_load_maplist", "native_load_maplist");
register_native("mapm_load_maplist_to_array", "native_load_maplist_to_array");
register_native("mapm_block_load_maplist", "native_block_load_maplist");
register_native("mapm_add_map_to_list", "native_add_map_to_list");
register_native("mapm_get_map_index", "native_get_map_index");
register_native("mapm_get_prefix", "native_get_prefix");
register_native("mapm_set_vote_finished", "native_set_vote_finished");
register_native("mapm_start_vote", "native_start_vote");
register_native("mapm_stop_vote", "native_stop_vote");
register_native("mapm_block_show_vote", "native_block_show_vote");
register_native("mapm_get_votelist_size", "native_get_votelist_size");
register_native("mapm_set_votelist_max_items", "native_set_votelist_max_items");
register_native("mapm_push_map_to_votelist", "native_push_map_to_votelist");
register_native("mapm_get_count_maps_in_vote", "native_get_count_maps_in_vote");
register_native("mapm_get_voteitem_info", "native_get_voteitem_info");
register_native("mapm_get_vote_type", "native_get_vote_type");
register_native("mapm_add_vote_to_item", "native_add_vote_to_item");
register_native("is_vote_started", "native_is_vote_started");
register_native("is_vote_finished", "native_is_vote_finished");
}
public native_load_maplist(plugin, params)
{
enum {
arg_filename = 1,
arg_clearlist,
arg_silent
};

if(get_param(arg_clearlist)) {
if(g_aMapsList == Invalid_Array) {
set_fail_state("Clear empty Array. Don't use this navite before core load maplist.");
return;
}
ArrayClear(g_aMapsList);
new ret;
ExecuteForward(g_hForwards[MAPLIST_UNLOADED], ret);
}

new filename[256];
get_string(arg_filename, filename, charsmax(filename));
load_maplist(g_aMapsList, filename, bool:get_param(arg_silent));
}
public native_load_maplist_to_array(plugin, params)
{
enum {
arg_array = 1,
arg_filename
};

new filename[256];
get_string(arg_filename, filename, charsmax(filename));

return load_maplist(Array:get_param(arg_array), filename, true);
}
public native_block_load_maplist(plugin, params)
{
g_bBlockLoad = true;
}
public native_add_map_to_list(plugin, params)
{
enum {
arg_name = 1,
arg_minplayers,
arg_maxplayers
};

new map_info[MapStruct];
get_string(arg_name, map_info[Map], charsmax(map_info[Map]));

if(!valid_map(map_info[Map]) || get_map_index(g_aMapsList, map_info[Map]) != INVALID_MAP_INDEX) {
return 0;
}

map_info[MinPlayers] = get_param(arg_minplayers);
map_info[MaxPlayers] = get_param(arg_maxplayers);
ArrayPushArray(g_aMapsList, map_info);

return 1;
}
public native_get_map_index(plugin, params)
{
enum { arg_map = 1 };
new map[MAPNAME_LENGTH]; get_string(arg_map, map, charsmax(map));
return get_map_index(g_aMapsList, map);
}
public native_get_prefix(plugin, params)
{
enum {
arg_prefix = 1,
arg_len
};
set_string(arg_prefix, g_sPrefix, get_param(arg_len));
}
public native_set_vote_finished(plugin, params)
{
enum { arg_value = 1 };
g_bVoteFinished = bool:get_param(arg_value);
}
public native_start_vote(plugin, params)
{
enum { arg_type = 1 };
return prepare_vote(get_param(arg_type));
}
public native_stop_vote(plugin, params)
{
stop_vote();
}
public native_block_show_vote(plugin, params)
{
g_bBlockShowVote = true;
}
public native_get_votelist_size(plugin, params)
{
if(g_iMaxItems) {
return g_iMaxItems;
}
return min(min(get_num(VOTELIST_SIZE), MAX_VOTELIST_SIZE), ArraySize(g_aMapsList));
}
public native_set_votelist_max_items(plugin, params)
{
enum { arg_value = 1 };
g_iMaxItems = get_param(arg_value);
}
public native_push_map_to_votelist(plugin, params)
{
enum {
arg_map = 1,
arg_type,
arg_ignore_check
};

if(g_iMaxItems && g_iVoteItems >= g_iMaxItems) {
return PUSH_CANCELED;
}

if(g_iVoteItems >= min(min(get_num(VOTELIST_SIZE), MAX_VOTELIST_SIZE), ArraySize(g_aMapsList))) {
return PUSH_CANCELED;
}

new map[MAPNAME_LENGTH]; get_string(arg_map, map, charsmax(map));

new ignore_checks = get_param(arg_ignore_check);

if(!(ignore_checks & CHECK_IGNORE_VALID_MAP) && !is_map_valid(map)) {
return PUSH_CANCELED;
}

if(is_map_in_vote(map)) {
return PUSH_BLOCKED;
}

if(!(ignore_checks & CHECK_IGNORE_MAP_ALLOWED) && !is_map_allowed(map, get_param(arg_type), get_map_index(g_aMapsList, map))) {
return PUSH_BLOCKED;
}

copy(g_sVoteList[g_iVoteItems], charsmax(g_sVoteList[]), map);
g_iVoteItems++;

return PUSH_SUCCESS;
}
public native_get_count_maps_in_vote(plugin, params)
{
return g_iVoteItems + g_bCanExtend;
}
public native_get_voteitem_info(plugin, params)
{
enum {
arg_item = 1,
arg_map,
arg_len
};

new item = get_param(arg_item);
if(item < 0 || item >= g_iVoteItems + g_bCanExtend) {
return 0;
}

set_string(arg_map, g_sVoteList[item], get_param(arg_len));

return g_iVotes[item];
}
public native_get_vote_type(plugin, params)
{
return g_iVoteType;
}
public native_add_vote_to_item(plugin, params)
{
enum {
arg_item = 1,
arg_value
};

new item = get_param(arg_item);
if(item < 0 || item >= g_iVoteItems + g_bCanExtend) {
return 0;
}

new value = get_param(arg_value);
g_iVotes[item] += value;
g_iTotalVotes += value;

return 1;
}
public native_is_vote_started(plugin, params)
{
return g_bVoteStarted;
}
public native_is_vote_finished(plugin, params)
{
return g_bVoteFinished;
}
//-----------------------------------------------------//
// Maplist stuff
//-----------------------------------------------------//
public plugin_cfg()
{
new configsdir[256]; get_localinfo("amxx_configsdir", configsdir, charsmax(configsdir));
server_cmd("exec %s/map_manager.cfg", configsdir);
server_exec();

get_pcvar_string(g_pCvars[PREFIX], g_sPrefix, charsmax(g_sPrefix));
replace_color_tag(g_sPrefix, charsmax(g_sPrefix));

// add forward for change file?
if(!g_bBlockLoad) {
load_maplist(g_aMapsList, FILE_MAPS);
}
}
load_maplist(Array:array, const file[], bool:silent = false)
{
new file_path[256]; get_localinfo("amxx_configsdir", file_path, charsmax(file_path));
format(file_path, charsmax(file_path), "%s/%s", file_path, file);

if(!file_exists(file_path)) {
if(!silent) {
new error[192]; formatex(error, charsmax(error), "File doesn't exist ^"%s^".", file_path);
set_fail_state(error);
}
return 0;
}

new f = fopen(file_path, "rt");

if(!f) {
if(!silent) {
set_fail_state("Can't read maps file.");
}
return 0;
}

new map_info[MapStruct], text[48], map[MAPNAME_LENGTH], next_map[MAPNAME_LENGTH], min[3], max[3], bool:found_nextmap;

while(!feof(f)) {
fgets(f, text, charsmax(text));
parse(text, map, charsmax(map), min, charsmax(min), max, charsmax(max));

if(!map[0] || map[0] == ';' || !valid_map(map) || get_map_index(array, map) != INVALID_MAP_INDEX) continue;

if(!next_map[0]) {
copy(next_map, charsmax(next_map), map);
}
if(equali(map, g_sCurMap)) {
found_nextmap = true;
continue;
}
if(found_nextmap) {
found_nextmap = false;
copy(next_map, charsmax(next_map), map);
}

map_info[Map] = map;
map_info[MinPlayers] = str_to_num(min);
map_info[MaxPlayers] = str_to_num(max) == 0 ? 32 : str_to_num(max);

ArrayPushArray(array, map_info);
min = ""; max = "";
}
fclose(f);

if(!ArraySize(array)) {
if(!silent) {
new error[192]; formatex(error, charsmax(error), "Nothing loaded from ^"%s^".", file_path);
set_fail_state(error);
}
return 0;
}

if(!silent) {
new ret;
ExecuteForward(g_hForwards[MAPLIST_LOADED], ret, array, next_map);
}

return 1;
}
//-----------------------------------------------------//
// Vote stuff
//-----------------------------------------------------//
prepare_vote(type)
{
if(g_bVoteStarted) {
return 0;
}

g_bVoteStarted = true;
g_bVoteFinished = false;

g_iVoteType = type;

g_iVoteItems = 0;
g_iTotalVotes = 0;
arrayset(g_iVoted, NOT_VOTED, sizeof(g_iVoted));
arrayset(g_iVotes, 0, sizeof(g_iVotes));

new array_size = ArraySize(g_aMapsList);
new vote_max_items = min(min(get_num(VOTELIST_SIZE), MAX_VOTELIST_SIZE), array_size);

new ret;
ExecuteForward(g_hForwards[PREPARE_VOTELIST], ret, type);

if(g_iMaxItems) {
vote_max_items = g_iMaxItems;
g_iMaxItems = 0;
}

if(g_iVoteItems < vote_max_items) {
new map_info[MapStruct];
for(new random_map; g_iVoteItems < vote_max_items; g_iVoteItems++) {
do {
random_map = random_num(0, array_size - 1);
ArrayGetArray(g_aMapsList, random_map, map_info);
} while(is_map_in_vote(map_info[Map]) || !is_map_allowed(map_info[Map], PUSH_BY_CORE, random_map));

copy(g_sVoteList[g_iVoteItems], charsmax(g_sVoteList[]), map_info[Map]);
}
}

ExecuteForward(g_hForwards[CAN_BE_EXTENDED], ret, type);
g_bCanExtend = !ret;

if(g_bCanExtend) {
copy(g_sVoteList[g_iVoteItems], charsmax(g_sVoteList[]), g_sCurMap);
}

g_iCurMap = -1;
for(new i; i < g_iVoteItems + g_bCanExtend; i++) {
if(equali(g_sCurMap, g_sVoteList[i])) {
g_iCurMap = i;
break;
}
}

if(get_num(RANDOM_NUMS)) {
arrayset(g_iRandomNums, -1, sizeof(g_iRandomNums));
for(new i; i < g_iVoteItems + g_bCanExtend; i++) {
do {
g_iRandomNums[i] = random_num(0, g_iVoteItems + g_bCanExtend - 1);
} while(in_array(i, g_iRandomNums[i]));
}
} else {
for(new i; i < g_iVoteItems + g_bCanExtend; i++) {
g_iRandomNums[i] = i;
}
}

g_iOffset = get_num(VOTE_ITEM_OFFSET);

if(g_iOffset + g_iVoteItems + g_bCanExtend >= MAX_VOTELIST_SIZE + 1) {
g_iOffset = MAX_VOTELIST_SIZE + 1 - g_iVoteItems - g_bCanExtend;
}

g_iTimer = get_num(PREPARE_TIME) + 1;
countdown(TASK_PREPARE_VOTE);

return 1;
}
is_map_allowed(map[], type, index)
{
new ret;
ExecuteForward(g_hForwards[CAN_BE_IN_VOTELIST], ret, map, type, index);
return ret == MAP_ALLOWED;
}
in_array(index, num)
{
for(new i; i < index; i++) {
if(num == g_iRandomNums[i]) {
return true;
}
}
return false;
}
get_original_num(num)
{
for(new i; i < g_iVoteItems + g_bCanExtend; i++) {
if(g_iRandomNums[i] == num) {
return i;
}
}
return 0;
}
public countdown(taskid)
{
if(--g_iTimer > 0) {
if(taskid == TASK_VOTE_TIME && !g_bBlockShowVote) {
new dont_show_result = get_num(SHOW_RESULT_TYPE) == SHOW_DISABLED;
g_iShowType = get_num(SHOW_RESULT_TYPE);
g_iShowPercent = get_num(SHOW_PERCENT);
g_bShowSelects = get_num(SHOW_SELECTS);

new players[32], pnum; get_players(players, pnum, "ch");
for(new i, id; i < pnum; i++) {
id = players[i];
if(!dont_show_result || g_iVoted[id] == NOT_VOTED) {
show_votemenu(id);
}
}
}

new type = COUNTDOWN_UNKNOWN;
switch(taskid) {
case TASK_PREPARE_VOTE: type = COUNTDOWN_PREPARE;
case TASK_VOTE_TIME: type = COUNTDOWN_VOTETIME;
}
new ret;
ExecuteForward(g_hForwards[COUNTDOWN], ret, type, g_iTimer);

set_task(1.0, "countdown", taskid);
} else {
if(taskid == TASK_PREPARE_VOTE) {
start_vote();
} else if(taskid == TASK_VOTE_TIME) {
show_menu(0, 0, "^n", 1);
finish_vote();
}
}
}
start_vote()
{
// server_print("--start vote--");

new ret;
ExecuteForward(g_hForwards[VOTE_STARTED], ret, g_iVoteType);

// TODO: add preview for N seconds

g_iTimer = get_num(VOTE_TIME) + 1;
countdown(TASK_VOTE_TIME);
}
public show_votemenu(id)
{
static menu[512];
new len, keys, percent, item;

len = formatex(menu, charsmax(menu), "\y%L:^n^n", id, g_iVoted[id] != NOT_VOTED ? "MAPM_MENU_VOTE_RESULTS" : "MAPM_MENU_CHOOSE_MAP");

for(item = 0; item < g_iVoteItems + g_bCanExtend; item++) {
len += formatex(menu[len], charsmax(menu) - len, "%s", (item == g_iVoteItems) ? "^n" : "");

if(g_iVoted[id] == NOT_VOTED) {
len += formatex(menu[len], charsmax(menu) - len, "\r%d.\w %s", (g_iRandomNums[item] + 1 + g_iOffset == 10 ? 0 : g_iRandomNums[item] + 1 + g_iOffset), g_sVoteList[item]);
keys |= (1 << (g_iRandomNums[item] + g_iOffset));
} else {
len += formatex(menu[len], charsmax(menu) - len, "%s%s", (g_iRandomNums[item] + g_iOffset == g_iVoted[id]) ? "\r" : "\d", g_sVoteList[item]);
}

if(g_iShowPercent == PERCENT_ALWAYS || g_iVoted[id] != NOT_VOTED && g_iShowPercent == PERCENT_AFTER_VOTE) {
percent = g_iTotalVotes ? floatround(g_iVotes[item] * 100.0 / g_iTotalVotes) : 0;
len += formatex(menu[len], charsmax(menu) - len, "\d[\r%d%%\d]", percent);
}

if(item == g_iCurMap) {
len += formatex(menu[len], charsmax(menu) - len, "\y[%L]", id, "MAPM_MENU_EXTEND");
}

len += formatex(menu[len], charsmax(menu) - len, "^n");
}

len += formatex(menu[len], charsmax(menu) - len, "^n\d%L \r%d\d %L", id, "MAPM_MENU_LEFT", g_iTimer, id, "MAPM_SECONDS");

if(!keys) keys = (1 << 9);

if(g_iVoted[id] != NOT_VOTED && g_iShowType == SHOW_HUD) {
while(replace(menu, charsmax(menu), "\r", "")){}
while(replace(menu, charsmax(menu), "\d", "")){}
while(replace(menu, charsmax(menu), "\w", "")){}
while(replace(menu, charsmax(menu), "\y", "")){}

set_hudmessage(0, 55, 255, 0.02, -1.0, 0, 6.0, 1.0, 0.1, 0.2, 4);
show_hudmessage(id, "%s", menu);
} else {
show_menu(id, keys, menu, -1, "VoteMenu");
}
}
public votemenu_handler(id, key)
{
if(g_iVoted[id] != NOT_VOTED) {
show_votemenu(id);
return PLUGIN_HANDLED;
}

new original = get_original_num(key - g_iOffset);
g_iVotes[original]++;
g_iTotalVotes++;
g_iVoted[id] = key;

// TODO: add forward if someone want add more votes for admin, etc.

if(g_bShowSelects) {
new name[32]; get_user_name(id, name, charsmax(name));
if(original == g_iCurMap) {
client_print_color(0, id, "%s^3 %L", g_sPrefix, LANG_PLAYER, "MAPM_CHOSE_EXTEND", name);
} else {
client_print_color(0, id, "%s^3 %L", g_sPrefix, LANG_PLAYER, "MAPM_CHOSE_MAP", name, g_sVoteList[original]);
}
}

if(g_iShowType != SHOW_DISABLED) {
show_votemenu(id);
}

return PLUGIN_HANDLED;
}
finish_vote()
{
g_bVoteStarted = false;
g_bBlockShowVote = false;

// vote results

// pre forward
new ret;
ExecuteForward(g_hForwards[ANALYSIS_OF_RESULTS], ret, g_iVoteType, g_iTotalVotes);

if(ret) {
if(ret == ABORT_VOTE_WITH_FORWARD) {
ExecuteForward(g_hForwards[VOTE_CANCELED], ret, g_iVoteType);
}
return;
}

g_bVoteFinished = true;

new max_vote = 0;
if(g_iTotalVotes) {
for(new i = 1; i < g_iVoteItems + 1; i++) {
if(g_iVotes[max_vote] < g_iVotes[i]) max_vote = i;
}
}
else {
max_vote = random_num(0, g_iVoteItems - 1);
}

// post forward
// add blocking?
ExecuteForward(g_hForwards[VOTE_FINISHED], ret, g_sVoteList[max_vote], g_iVoteType, g_iTotalVotes);
}

stop_vote()
{
if(task_exists(TASK_VOTE_TIME)) {
show_menu(0, 0, "^n", 1);
}

remove_task(TASK_PREPARE_VOTE);
remove_task(TASK_VOTE_TIME);

g_bVoteStarted = false;
g_bVoteFinished = false;

new ret;
ExecuteForward(g_hForwards[VOTE_CANCELED], ret, g_iVoteType);
}

//-----------------------------------------------------//
// Usefull func
//-----------------------------------------------------//
get_map_index(Array:array, map[])
{
for(new i = 0, map_info[MapStruct], size = ArraySize(array); i < size; i++) {
ArrayGetArray(array, i, map_info);
if(equali(map, map_info[Map])) return i;
}
return INVALID_MAP_INDEX;
}
bool:is_map_in_vote(map[])
{
for(new i; i < g_iVoteItems; i++) {
if(equali(map, g_sVoteList[i])) {
return true;
}
}
return false;
}
У меня сервер GunGame. Когда игрок доходит до гранаты, выпадает номинация с рандомными картами, а не с теми, что номинирует игрок через команду maps. Но если игрок после номинации через maps напишет rtv, то в списке номинации эти карты есть. Мне кажется, проблема в плагине mapchooser.amxx . Но если его отключить, то тогда вообще никакого голосования на уровне с гранатой за номинацию карт не будет. Будет работать только номинация через rtv.
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
49
Реакции
7
Помог
1 раз(а)
present, Исправила. Проблема осталась.

[ 1] FreshBans v1.4.2b kanagava fresh_bans.amxx running
[ 2] Admin Loader v3.5 neygomon admin_loader.am running
[ 3] StatsX (MastaMan Editi v1.8.0.3660 AMXX Dev Team statsx_shell.am running
[ 4] Admin Chat v1.9.0.5271 AMXX Dev Team adminchat.amxx running
[ 5] Admin Commands v1.9.0.5271 AMXX Dev Team admincmd.amxx running
[ 6] Admin Votes v1.9.0.5271 AMXX Dev Team adminvote.amxx running
[ 7] Menus Front-End v1.9.0.5271 AMXX Dev Team menufront.amxx running
[ 8] Commands Menu v1.9.0.5271 AMXX Dev Team cmdmenu.amxx running
[ 9] Players Menu v1.9.0.5271 AMXX Dev Team plmenu.amxx running
[ 10] Maps Menu v1.9.0.5271 AMXX Dev Team mapsmenu.amxx running
[ 11] Plugin Menu v1.9.0.5271 AMXX Dev Team pluginmenu.amxx running
[ 12] Scrolling Message v1.9.0.5271 AMXX Dev Team scrollmsg.amxx running
[ 13] Info. Messages v1.9.0.5271 AMXX Dev Team imessage.amxx running
[ 14] Nextmap Chooser v1.9.0.5271 AMXX Dev Team mapchooser.amxx running
[ 15] Stats Configuration v1.9.0.5271 AMXX Dev Team statscfg.amxx running
[ 16] CS Misc. Stats v1.9.0.5271 AMXX Dev Team miscstats.amxx running
[ 17] CS Stats Logging v1.9.0.5271 AMXX Dev Team stats_logging.a running
[ 18] GunGame AMXX v2.13(BETA4 Avalanche gungame.amxx running
[ 19] Autoresponder/Advertis v0.5 MaximusBrood ad_manager.amxx running
[ 20] Damager v1.0 Prayer damager.amxx running
[ 21] Blue Fade v0.1 Stimul Blue_Fade.amxx running
[ 22] GunGame AMMO v2.2 Prayer gg_ammo.amxx running
[ 23] MultiJump v1.1 twistedeuphoria multijump1.amxx running
[ 24] Vampire v1.0c Shalfey vampire.amxx running
[ 25] Semiclip v1.31 skyjur semiclip.amxx running
[ 26] Auto recording demo v2.0 IzI | Bonaqua (R amx_autodemorec running
[ 27] Lite VoteBan v1.4 neygomon lite_voteban.am running
[ 28] Admin Gag v1.0 AndrewZ admin_gag.amxx running
[ 29] mute v1.0 Aziz mute.amxx running
[ 30] Change Team v1.1 neygomon changeteam.amxx running
[ 31] [GG] Balance v0.3b ServerBy905 Team GGBalance.amxx running
[ 32] FM ResetScore v0.1 neygomon fm_rs.amxx running
[ 33] Round Non-Stop v0.3.6 Simon Logic round_nonstop.a running
[ 34] AFK Manager vv1.4d Leon McVeran afk_manager.amx running
[ 35] PLUGIN vVERSION AUTHOR hidetimer.amxx running
[ 36] Steаm Models v0.1b+mod.l Freedo.m steam_models.am running
[ 37] [PUB] Hide Slash v1.0 Bonaqua hide_slash.amxx running
[ 38] Map Manager: Core v3.0.7 Mistrick map_manager_cor running
[ 39] Map Manager: Scheduler v0.1.5 Mistrick map_manager_sch running
[ 40] Map Manager: Rtv v0.1.1 Mistrick map_manager_rtv running
[ 41] Map Manager: Nominatio v0.1.2 Mistrick map_manager_nom running
[ 42] Map Manager: BlockList v0.0.3 Mistrick map_manager_blo running
[ 43] Map Manager: Online so v0.0.2 Mistrick map_manager_onl running
[ 44] Map Manager: Effects v0.0.9 Mistrick map_manager_eff running
[ 45] Map Manager: Informer v0.0.5 Mistrick map_manager_inf running
45 plugins, 45 running
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Helga, хоть 100 одинаковых плагинов, "ядер" убрать, проблема останется.
present, Helga использует мод от Avalanche, я использую свой ReGG. У обоих плагин ММ, и одна и та же проблема с левыми (не из списка, который работает на данное время) картами при голосовании.
По итогу проблема - вызов голосования из какого-то списка с картами, вместо того списка, который используется в данное время. Проблема только при GG режиме.
----------------------------------
А вообще интересно, как плагин ММ взаимодействует с GG от Avalanche? Исходный код от Avalanche можете найти в нете.
Но т.к. плагин ММ не учтен в коде GG от Avalanche, по идеи должно быть так...
Могу ошибаться, т.к. лишь набросал мысли.
Может Mistrick что подскажет?
9721 строк в моде Avalanche :wacko:
 

Download all Attachments

Сообщения
576
Реакции
1,003
Помог
18 раз(а)
А вообще интересно, как плагин ММ взаимодействует с GG от Avalanche? Исходный код от Avalanche можете найти в нете.
Никак.
Нет номинаций, потому что вам выводит голосование стокового амхх чузера. ММ у вас работает как ртв, не более.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Mistrick, но в своем ReGG я связываю ваш MM через костыль. У меня то почему-то та же ошибка, что по итогу в голосовании другие карты:dntknw:
С GG отAvalanche все ясно, его допиливать надо.
 
Сообщения
49
Реакции
7
Помог
1 раз(а)
SNauPeR, Можно конкретнее? :) Что нужно мне допилить?
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Helga,
ММ у вас работает как ртв, не более.
=> вам нужно доделать плагин GG от Avalanche (2.13 версии) с точки зрения смены карты. В вашем плагине ВООБЩЕ нет связи с плагином ММ.
В своем комменте выше я показал где нужно поправлять код.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Алексеич, я вообще не заметил его в списке плагинов с самого начала :sad:
Helga, зачем, кстати, Mapchooser вам нужен, если вы используете MM? Хотя, если вы уберете mapchooser.amxx, тогда GG не будет менять карту, в теории (проверить по логам и при игре можно).
В любом случае, вам либо GG дописывать под MM, либо MM под GG. Но 2 системы смены карт - лишние, оставьте какую-то одну.
 
Сообщения
49
Реакции
7
Помог
1 раз(а)
SNauPeR, когда отключаем mapchooser, то голосование вообще не появляется :dntknw: Просто после победного ножа автоматическая смена карты на рандомную карту.
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Helga, в коде вашего GG учтен mapchooser. Если его отключить - и не будет голосования. MM, как сказал Mistrick, работает у вас только в качестве RTV функции.
Вам нужно доделать исходный код GG или MM (лучше и нужнее GG) плагинов...
Алексеич, в принципе тему можно закрывать, в чем проблема выяснили, решение проблемы - в заказы скриптерам. Разве что кто-то по доброте допишет устаревший код GG от Avalanche:smile3:
 
Сообщения
49
Реакции
7
Помог
1 раз(а)
SNauPeR, в gungame.cfg есть 2 значения, может сюдой нужно свзяать с ММ? На другом форуме находили, как сюдой связывали super_mapchooser, UMM, galileo


gg_vote_custom ""
gg_changelevel_custom ""
 
Сообщения
315
Реакции
104
Помог
2 раз(а)
Helga, да дело не в этом. Они находили ЭТО ПОТОМУ, что в КОДЕ УЧТЕНЫ эти плагины смены карт) Не верите? Смотрите скриншот кода ниже. Галилео, Некстмапчоузер, deagsmapmanager и другие - учтены.
Но там не учтен плагин ММ. В то время его еще не было)))) Поэтому связать плагин ММ с вашим GG - нет возможности, пока вы не допишите код.
Поэтому вам и надо дописывать плагин, чтоб избавить от mapchooser.amxx.
Есть еще 1 вариант, как избавиться от mapchooserа, но тут нужен переход от GG от Avalanche к ReGG. Там можно использовать плагин ММ. Если заинтересует - напишите по контактам в моем профиле, объясню и помогу.
 

Вложения

Сообщения
3,256
Реакции
1,436
Помог
121 раз(а)
gg_changelevel_custom "mapm_start_vote"
 
Сообщения
49
Реакции
7
Помог
1 раз(а)
Проблема решилась:smile3:
1. Установка Map Manager by Mistrick версии 2.5.61 (скачать можно тут: [2.5.61] Map Manager)
2. В настройках Gungame.cfg (готовые настройки в прикрепленных файлах) находим gg_vote_custom"" и меняем на gg_vote_custom "mapm_startvote"
3. В plugins.ini:
а) Отключаем mapchooser.amxx;
б) Оставляем включенными mapsmenu.amxx; nextmap.amxx; timeleft.amxx;
в) Добавляем mapmanager.amxx и mapmanager_subplugin.amxx

4. В mapmanager.sma комментируем строку //#define FUNCTION_NEXTMAP (готовые настройки в прикрепленных файлах)
5. В mapmanager.cfg ставим значение 0 в mapm_start_vote_in_new_round "0" (готовые настройки в прикрепленных файлах)
 

Download all Attachments

Статус
В этой теме нельзя размещать новые ответы.

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

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