Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Mapchoser (Меняет карту) но нет ртв

, Добавить /rtv в плагин
Статус пользователя MrTsar
сообщение 18.2.2015, 16:19
Сообщение #1


Стаж: 13 лет

Сообщений: 206
Благодарностей: 7
Полезность: < 0

Нашел наконец-то тот сменщик карт который так давно искал. Но выявил что нет в нем /rtv, может кто знает как и куда всунуть?
Код:
#include <amxmodx>

new const PLUGIN[] = "Super Mapchooser"
new const VERSION[] = "2.0"
new const AUTHOR[] = "Prayer"

#define FLOAT_TIMELIMIT "mp_timelimit"
#define STRING_NEXTMAP "amx_nextmap"
#define NUM_MAXROUNDS "mp_maxrounds"
#define NUM_WINLIMIT "mp_winlimit"

#define NUM_SM_VOTEMAPS "mapchooser_votemaps"
#define NUM_SM_LANG "mapchooser_lang"
#define NUM_SM_TIME "mapchooser_votetime"

#define NUM_SM_RED "mapchooser_result_red"
#define NUM_SM_GREEN "mapchooser_result_green"
#define NUM_SM_BLUE "mapchooser_result_blue"

#define TASK_PLUGIN_ID 44747477 // +=:D
#define TASK_SCREEN_ID 979699 // +=:D:=+
#define TASK_RESULT_ID 12111 // :o

const HudLen = 512

new Array:g_mapName
new g_mapNums
new g_saveids[10]

new g_voteCount[10]
new g_nextName[10]
new g_lastMap[32]
new g_currentMap[32]
new g_mapVoteNum

new g_votemaps
new g_maxspeed = 320

new bool:hasBlocked = false
new bool:forceBlock = true
new bool:voteStarted = true
new bool:hasExtend = false
new timeleft

new bool:hasBlind[33] = { false, ... }
new g_msgScreenFade

new PlayersVoted = 0
new PlayersNum = 0

new
g_result_red,
g_result_green,
g_result_blue

new MenuName[96]

enum ChatColor
{
CHATCOLOR_NORMAL = 1, // Normal
CHATCOLOR_GREEN, // Green Color
CHATCOLOR_TEAM_COLOR, // Red, grey, blue
CHATCOLOR_GREY, // grey
CHATCOLOR_RED, // Red
CHATCOLOR_BLUE, // Blue
}

new g_TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
}

new g_msgSayText
new g_msgTeamInfo

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

register_cvar("amx_extendmap_max", "90.0")//Максимальное количество минут. Когда несколько раз продлевается карта - это значение будет максимальным в timelimit'е
register_cvar("amx_extendmap_step", "15.0")//На сколько минут продлевать карту, если проголосовали за ее продление.

register_cvar(NUM_SM_LANG, "0")//0-Русский, 1-English
register_cvar(NUM_SM_TIME, "15")//Сколько времени в секундах должно идти голосование
register_cvar(NUM_SM_VOTEMAPS, "5")//Сколько карт выводить на голосование не считая карты, которую продливают в голосовании

// Каким цветом показывать результаты голосования. Формат RGB
register_cvar(NUM_SM_RED, "255")//Красный
register_cvar(NUM_SM_GREEN, "255")//Зеленый
register_cvar(NUM_SM_BLUE, "255")//Синий

register_event("ScreenFade", "EVENT_ScreenFade", "be")
register_event("TextMsg", "EVENT_RestartRound", "a", "2&#Game_C","2&#Game_w")

g_msgSayText = get_user_msgid("SayText")
g_msgTeamInfo = get_user_msgid("TeamInfo")
g_msgScreenFade = get_user_msgid("ScreenFade")
}

public plugin_cfg()
{
g_votemaps = get_cvar_num(NUM_SM_VOTEMAPS)

if(g_votemaps > 8)
set_cvar_num(NUM_SM_VOTEMAPS, 8)
else if(g_votemaps < 1)
set_cvar_num(NUM_SM_VOTEMAPS, 1)

g_votemaps = get_cvar_num(NUM_SM_VOTEMAPS)

register_menucmd(register_menuid("superMapChooserMenu"), (-1^(-1<<(g_votemaps + 1))), "countVote")

g_mapName = ArrayCreate(32)

get_localinfo("lastMap", g_lastMap, sizeof g_lastMap -1)
set_localinfo("lastMap", "")

new maps_ini_file[64]
get_localinfo("amxx_configsdir", maps_ini_file, sizeof maps_ini_file -1)

format(maps_ini_file, sizeof maps_ini_file -1, "%s/maps.ini", maps_ini_file)

if(!file_exists(maps_ini_file))
get_cvar_string("mapcyclefile", maps_ini_file, sizeof maps_ini_file -1)

if(loadSettings(maps_ini_file))
cmdReloadTimer()

g_maxspeed = get_cvar_num("sv_maxspeed")

// bugfix: need for timeleft (cs time == amxx time): !(!(remaining == left)) || !(remaining != left) :o
server_cmd("sv_restart 1")

get_mapname(g_currentMap, sizeof g_currentMap -1)
}

public client_disconnect(id)
{
remove_task(id+TASK_SCREEN_ID)
remove_task(id+TASK_RESULT_ID)

hasBlind[id] = false
}

public EVENT_RestartRound()
cmdReloadTimer()

public cmdReloadTimer()
{
if(voteStarted)
{
PlayersVoted = 0
PlayersNum = 0

forceBlock = true
hasBlocked = false
voteStarted = false

new players[32], num, pid
get_players(players, num)
for(new i=0;i<num;i++)
{
pid = players[i]

hasBlind[pid] = false

remove_task(pid+TASK_SCREEN_ID)
remove_task(pid+TASK_RESULT_ID)

message_begin(MSG_ONE, g_msgScreenFade, _, pid)
write_short(1<<0)
write_short(1<<0)
write_short(1<<0)
write_byte(0)
write_byte(0)
write_byte(0)
write_byte(0)
message_end()
}

if(!hasExtend)
{
switch(get_cvar_num(NUM_SM_LANG))
{
//Голосование прервано !
case 0: colorChat(0, CHATCOLOR_RED, "Голосование прервано !")
case 1: colorChat(0, CHATCOLOR_RED, "Voting is interrupted!")
}
}

set_cvar_num("sv_maxspeed", g_maxspeed)

remove_task(TASK_PLUGIN_ID)

set_task(8.0, "taskListening", TASK_PLUGIN_ID, "", 0, "b")
taskListening()
}
}

public taskListening()
{
timeleft = get_timeleft()

if(!hasBlocked && (timeleft <= (get_cvar_num(NUM_SM_TIME) + 14)))
{
change_task(TASK_PLUGIN_ID, 1.0)

hasBlocked = true
}
else if(timeleft <= (5 + get_cvar_num(NUM_SM_TIME)))//5 sekynd - skoka ostaetsia do smeni karti posle okon4ania golosovania
{
remove_task(TASK_PLUGIN_ID)

forceBlock = false
hasBlocked = false
hasExtend = false

g_result_red = get_cvar_num(NUM_SM_RED)
g_result_green = get_cvar_num(NUM_SM_GREEN)
g_result_blue = get_cvar_num(NUM_SM_BLUE)

set_cvar_num("sv_maxspeed", 0)

switch(get_cvar_num(NUM_SM_LANG))
{
//Проголосуйте за следующую карту
case 0: format(MenuName, sizeof MenuName -1, "Проголосуйте за следующую карту")
case 1: format(MenuName, sizeof MenuName -1, "Vote for the next map")
}

cmdVoteNextmap()
}
}

public cmdVoteNextmap()
{
new
winlimit,
maxrounds

winlimit = get_cvar_num(NUM_WINLIMIT)
maxrounds = get_cvar_num(NUM_MAXROUNDS)

new
mkeys = ((1<<g_votemaps) + 1),
menu[HudLen],
a

new pos = format(menu, HudLen -1, " \r%s:^n^n", MenuName)
new dmax = (g_mapNums > g_votemaps) ? g_votemaps : g_mapNums

new unki = 0

for(g_mapVoteNum = 0; g_mapVoteNum < dmax; g_mapVoteNum++)
{
a = random_num(0, g_mapNums -1)

while(isInMenu(a))
{
if(++a >= g_mapNums)
{
a = 0
}
}

g_nextName[g_mapVoteNum] = a

pos += format(menu[pos], HudLen -1, " \y%d.\w %a^n", g_mapVoteNum + 1, ArrayGetStringHandle(g_mapName, a))

g_saveids[unki] = a
unki++

mkeys |= (1<<g_mapVoteNum)

g_voteCount[g_mapVoteNum] = 0
}

g_voteCount[g_votemaps] = 0
g_voteCount[g_votemaps + 1] = 0

new language = get_cvar_num(NUM_SM_LANG)

if(((winlimit + maxrounds) == 0) && (get_cvar_float(FLOAT_TIMELIMIT) < get_cvar_float("amx_extendmap_max")))
{
switch(language)
{
//продлить
case 0: pos += format(menu[pos], HudLen -1, " \y%d.\w %s \y[продлить]", g_votemaps + 1, g_currentMap)
case 1: pos += format(menu[pos], HudLen -1, " \y%d.\w %s \y[prolong]", g_votemaps + 1, g_currentMap)
}

mkeys |= (1<<g_votemaps)
}

set_task(get_cvar_float(NUM_SM_TIME), "checkVotes", TASK_PLUGIN_ID)

new players[32], pid
get_players(players, PlayersNum)
for(new i=0;i<PlayersNum;i++)
{
pid = players[i]

hasBlind[pid] = true

show_menu(pid, mkeys, menu, get_cvar_num(NUM_SM_TIME), "superMapChooserMenu")

switch(language)
{
//Голосование начато !
case 0: colorChat(pid, CHATCOLOR_GREEN, "Голосование начато !")
case 1: colorChat(pid, CHATCOLOR_GREEN, "Voting started")
}

client_cmd(pid, "spk gman/gman_choose1")

message_begin(MSG_ONE, g_msgScreenFade, _, pid)
write_short(1<<12) // Duration
write_short(1<<9) // Hold time
write_short(1<<0) // Fade type
write_byte(0) // Red
write_byte(0) // Green
write_byte(0) // Blue
write_byte(255) // Alpha
message_end()

set_task(1.0, "cmdFadeScreen", pid+TASK_SCREEN_ID, "", 0, "b")
}

voteStarted = true

log_amx("Super Vote: Voting for the nextmap started")
}

public checkVotes()
{
new bolt = 0

for(new a = 0; a < g_mapVoteNum; a++)
{
if(g_voteCount[bolt] < g_voteCount[a])
{
bolt = a
}
}

//clear removed channel #2 :/
set_hudmessage(_,_,_,_,_,_,_,_,_,_,2)
show_hudmessage(0, " ")

new players[32], num, pid
get_players(players, num)

if((g_voteCount[g_votemaps] > g_voteCount[bolt]) && (g_voteCount[g_votemaps] > g_voteCount[g_votemaps + 1]))
{
new Float:steptime = get_cvar_float("amx_extendmap_step")

set_cvar_float(FLOAT_TIMELIMIT, get_cvar_float(FLOAT_TIMELIMIT) + steptime)

set_hudmessage(255, 127, 0, -1.0, 0.25, 2, 0.1, 10.0, 0.05, 1.0, 1)

for(new i=0;i<num;i++)
{
pid = players[i]

switch(get_cvar_num(NUM_SM_LANG))
{
case 0:
{
//Голосование завершено. Эта карта продлена на %.0f мин
colorChat(pid, CHATCOLOR_GREEN, "Голосование завершено.^x01 Эта карта продлена на %.0f мин", steptime)

//Эта карта продлена на %.0f мин
show_hudmessage(pid, "Эта карта продлена на %.0f мин", steptime)
}
case 1:
{
colorChat(pid, CHATCOLOR_GREEN, "Voting is finished. This map is prolonged on %.0f minutes", steptime)
show_hudmessage(pid, "This map is prolonged on %.0f minutes", steptime)
}
}
}

log_amx("Super Vote: Voting for the nextmap finished. Map %s will be extended to next %.0f minutes", g_currentMap, steptime)

hasExtend = true

cmdReloadTimer()

return
}

new smap[32]

if(g_voteCount[bolt] && (g_voteCount[g_votemaps + 1] <= g_voteCount[bolt]))
{
ArrayGetString(g_mapName, g_nextName[bolt], smap, sizeof smap -1)
set_cvar_string(STRING_NEXTMAP, smap)
}

get_cvar_string(STRING_NEXTMAP, smap, sizeof smap -1)

set_hudmessage(255, 127, 0, -1.0, 0.42, 2, 0.1, 10.0, 0.05, 1.0, 1)

for(new i=0;i<num;i++)
{
pid = players[i]

remove_task(pid+TASK_RESULT_ID)

switch(get_cvar_num(NUM_SM_LANG))
{
case 0:
{
//Голосование завершено.^x01 Следующая карта:^x04 %s
colorChat(pid, CHATCOLOR_GREEN, "Голосование завершено.^x01 Следующая карта:^x04 %s", smap)

//Следующая карта %s
show_hudmessage(pid, "Следующая карта %s", smap)
}
case 1:
{
colorChat(pid, CHATCOLOR_GREEN, "Voting is finished.^x01 Nextmap:^x04 %s", smap)
show_hudmessage(pid, "Nextmap will be %s", smap)
}
}
}

log_amx("Super Vote: Voting for the nextmap finished. The nextmap will be %s", smap)
}

public countVote(id, key)
{
if(!voteStarted && forceBlock)
return PLUGIN_HANDLED

if(get_cvar_float("amx_vote_answers"))
{
new name[32]
get_user_name(id, name, sizeof name -1)

if(key == g_votemaps)
{
switch(get_cvar_num(NUM_SM_LANG))
{
//%s^x01 проголосовал за^x04 продление карты
case 0: colorChat(0, CHATCOLOR_GREEN, "%s^x01 проголосовал за^x04 продление карты", name)
case 1: colorChat(0, CHATCOLOR_GREEN, "%s^x01 chose^x04 map extending", name)
}
}
else if(key < g_votemaps)
{
new map[32]
ArrayGetString(g_mapName, g_nextName[key], map, sizeof map -1)

switch(get_cvar_num(NUM_SM_LANG))
{
//%s проголосовал за %s
case 0: colorChat(0, CHATCOLOR_GREEN, "%s^x01 проголосовал за^x04 %s", name, map)
case 1: colorChat(0, CHATCOLOR_GREEN, "%s^x01 chose^x04 %s", name, map)
}
}

cmdShowResults(id+TASK_RESULT_ID)
set_task(0.8, "cmdShowResults", id+TASK_RESULT_ID, "", 0, "b")
}

client_cmd(id, "spk UI/buttonclickrelease")

g_voteCount[key]++
PlayersVoted++

return PLUGIN_HANDLED
}

public cmdShowResults(pid)
{
static id
id = pid-TASK_RESULT_ID

if(is_user_connected(id))
{
static i, len, language, message[HudLen]

language = get_cvar_num(NUM_SM_LANG)

switch(language)
{
//Результаты голосования
case 0: len = format(message, sizeof message -1, "Результаты голосования^n^n")
case 1: len = format(message, sizeof message -1, "Results of voting^n^n")
}

for(i=0;i<g_votemaps;i++)
{
len += format(message[len], HudLen -1, "[%d] | %a^n", g_voteCount[i], ArrayGetStringHandle(g_mapName, g_saveids[i]))
}

switch(language)
{
case 0:
{
//продливаемая
len += format(message[len], HudLen -1, "[%d] | %s [продливаемая]^n^n", g_voteCount[i], g_currentMap)
//Всего проголосовало: %d из %d
len += format(message[len], HudLen -1, "Всего проголосовало: %d из %d", PlayersVoted, PlayersNum)
}
case 1:
{
len += format(message[len], HudLen -1, "[%d] | %s [prolonged]^n^n", g_voteCount[i], g_currentMap)
len += format(message[len], HudLen -1, "In total has voted: %d from %d", PlayersVoted, PlayersNum)
}
}

set_hudmessage(g_result_red, g_result_green, g_result_blue, 0.36, 0.3, 0, 1.0, 4.0, 0.1, 0.2, 2)
show_hudmessage(id, "%s", message)
}
}

public EVENT_ScreenFade(id)
{
if(hasBlind[id])
{
set_task(0.6, "cmdFadeScreen", id+TASK_SCREEN_ID)
}
}

public cmdFadeScreen(pid)
{
new id = pid-TASK_SCREEN_ID

if(is_user_connected(id))
{
message_begin(MSG_ONE, g_msgScreenFade, _, id)
write_short(1<<0) // Duration
write_short(1<<0) // Hold time
write_short(1<<2) // Fade type
write_byte(0) // Red
write_byte(0) // Green
write_byte(0) // Blue
write_byte(255) // Alpha
message_end()
}
}

public plugin_end()
{
new current_map[32]

set_cvar_num("sv_maxspeed", g_maxspeed)

get_mapname(current_map, sizeof current_map -1)
set_localinfo("lastMap", current_map)
}

stock bool:ValidMap(mapname[])
{
if(is_map_valid(mapname))
{
return true
}

new len = strlen(mapname) -4

if(len < 0)
{
return false
}

if(equali(mapname[len], ".bsp"))
{
mapname[len] = '^0'

if(is_map_valid(mapname))
{
return true
}
}

return false
}

loadSettings(filename[])
{
if(!file_exists(filename))
return 0

new
currentMap[32],
szText[32],
buff[256]

get_mapname(currentMap, sizeof currentMap -1)

new fp = fopen(filename, "r")

while(!feof(fp))
{
buff[0] = '^0'

fgets(fp, buff, sizeof buff -1)

parse(buff, szText, sizeof szText -1)

if((szText[0] != ';') && ValidMap(szText) && !equali(szText, g_lastMap) && !equali(szText, currentMap))
{
ArrayPushString(g_mapName, szText)

g_mapNums++
}
}

fclose(fp)

return g_mapNums
}

bool:isInMenu(id)
{
for(new a = 0; a < g_mapVoteNum; a++)
{
if(id == g_nextName[a])
{
return true
}
}

return false
}

colorChat(id, ChatColor:color, const msg[], {Float,Sql,Result,_}:...)
{
new team, index, MSG_Type
new bool:teamChanged = false
static message[192]

switch(color)
{
case CHATCOLOR_NORMAL: // Normal
{
message[0] = 0x01;
}
case CHATCOLOR_GREEN: // Green
{
message[0] = 0x04;
}
default: // Grey, Red, Blue
{
message[0] = 0x03;
}
}

vformat(message[1], 190, msg, 4);

if(id == 0)
{
index = findAnyPlayer();
MSG_Type = MSG_ALL;
}
else
{
index = id;
MSG_Type = MSG_ONE;
}
if(index != 0)
{
team = get_user_team(index);
if(color == CHATCOLOR_RED && team != 1)
{
messageTeamInfo(index, MSG_Type, g_TeamName[1])
teamChanged = true
}
else
if(color == CHATCOLOR_BLUE && team != 2)
{
messageTeamInfo(index, MSG_Type, g_TeamName[2])
teamChanged = true
}
else
if(color == CHATCOLOR_GREY && team != 0)
{
messageTeamInfo(index, MSG_Type, g_TeamName[0])
teamChanged = true
}
messageSayText(index, MSG_Type, message);
if(teamChanged)
{
messageTeamInfo(index, MSG_Type, g_TeamName[team])
}
}
}

messageSayText(id, type, message[])
{
message_begin(type, g_msgSayText, _, id)
write_byte(id)
write_string(message)
message_end()
}

messageTeamInfo(id, type, team[])
{
message_begin(type, g_msgTeamInfo, _, id)
write_byte(id)
write_string(team)
message_end()
}

findAnyPlayer()
{
static players[32], inum, pid

get_players(players, inum, "ch")

for (new a = 0; a < inum; a++)
{
pid = players[a]
if(is_user_connected(pid))
return pid
}

return 0
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Han1baL
сообщение 18.2.2015, 18:24
Сообщение #2


Стаж: 11 лет

Сообщений: 233
Благодарностей: 50
Полезность: 30

Rock_thevote_custom плагин есть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MrTsar
сообщение 19.2.2015, 12:15
Сообщение #3


Стаж: 13 лет

Сообщений: 206
Благодарностей: 7
Полезность: < 0

Цитата(Han1baL @ 18.2.2015, 19:24) *
Rock_thevote_custom плагин есть

Есть но у него насколько мне известно сама система смены карты.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
OverGame
сообщение 19.2.2015, 13:29
Сообщение #4
Стаж: 11 лет

Сообщений: 384
Благодарностей: 217
Полезность: 348

Разве этот плагин не делает голосование, когда остается n времени?
Скорее всего, потребуется вшить свой алгорит смены карты за счет /rtv

P.S : Код не смотрел, лень стало.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя MrTsar
сообщение 19.2.2015, 13:32
Сообщение #5


Стаж: 13 лет

Сообщений: 206
Благодарностей: 7
Полезность: < 0

Цитата(OverGame @ 19.2.2015, 15:29) *
Разве этот плагин не делает голосование, когда остается n времени?
Скорее всего, потребуется вшить свой алгорит смены карты за счет /rtv

P.S : Код не смотрел, лень стало.

Плагин делает голосование за карту тогда когда подходит к концу таймлимит (точно не помню, около 3 минут до конца лимита). Но отсутствует функция /rtv, тоесть мне нужно что бы в любой момент можно было вызвать голосование за смену карты посредством /rtv, ксожалению мои познания в скриптинге очень малы(
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: