/*==========================================
0.1: Автор:
-Первая версия DARTHMOON :D
===========================================*/
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <colorchat>
#define PLUGIN "Clan-War Management"
#define VERSION "0.1 beta"
#define AUTHOR "DARTHMOON"
#define ACCESS_LEVEL ADMIN_LEVEL_C
const PASSWORD_SIZE = 4;
const ACCESS = ADMIN_CVAR;
enum _teams {
_terro,
_ct
}
/*==========================================
Всякая хрень
===========================================*/
new g_iScore[_teams]
new c_ff
new cfgdir[128]
new g_SAY, szStag[32]
new g_match_inprogress = 0
new pCvar, iIdentifier;
/*==========================================
Инициализация
===========================================*/
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
//Доступные команды
register_clcmd("say /rr", "RestartRound", ACCESS_LEVEL)
register_clcmd("say /start", "start", ACCESS_LEVEL)
register_clcmd("say /nosay", "cmdSayNosay", ADMIN_CVAR)
register_clcmd("say /maps", "mapchooser", ACCESS_LEVEL)
register_clcmd("say /ff", "ffchooser", ACCESS_LEVEL)
register_clcmd("say /kickt", "KickT", ADMIN_CVAR)
register_clcmd("say /kickct", "KickCT", ADMIN_CVAR)
register_clcmd("say /pw", "pfnClientCommand_Handler")
register_clcmd("say /dpw", "pfnClientCommand_Handler")
register_clcmd("say /stop", "stop", ACCESS_LEVEL)
register_clcmd("say /warmup", "warmup", ACCESS_LEVEL)
register_clcmd("say /knife", "knife", ACCESS_LEVEL)
register_event("TeamScore", "Event_TeamScore", "a")
register_clcmd("say score", "ClientCommand_SayScore")
g_SAY = register_cvar("mm_nosay","0")
c_ff = get_cvar_pointer("mp_friendlyfire")
pCvar = get_cvar_pointer("sv_password")
}
public RestartRound(id) {
if (get_user_flags(id) & ACCESS_LEVEL)
{
set_task(1.0, "restart_round", 0, "1", 1)
}
}
public start(id) {
if (get_user_flags(id) & ACCESS_LEVEL)
{
get_configsdir(cfgdir,63)
format(cfgdir,63,"%s/CwManager",cfgdir)
server_cmd("exec %s/cw.cfg",cfgdir)
}
if (g_match_inprogress != 1) {
set_task(1.0, "restart_round", 0, "1", 1)
set_task(6.0, "restart_round", 0, "3", 1)
set_task(13.0, "start_msg")
g_match_inprogress = 1
}
}
public nosay(id, level, cid) {
if(!cmd_access(id, level, cid, 1))
if(!get_pcvar_num(g_SAY))
return PLUGIN_CONTINUE
if (get_user_flags(id) & ACCESS_LEVEL)
return PLUGIN_CONTINUE
new said[192]
read_args(said,191)
new name[32]
get_user_name(id, name, 31)
if(containi(said,"pausa") != -1 || containi(said,"pause") != -1){
client_print(0,print_chat,"^1Игрок ^3%s^1 просит приостоновить игру.",name)
return PLUGIN_HANDLED
}
ColorChat(id,GREY,"^4%s ^1Общий чат заблокирован!",szStag)
client_print(id,print_chat,"^4%s ^1Для вас доступно ^3командный^1 чат! ^3pause^1, для запроса паузы.",szStag)
return PLUGIN_HANDLED
}
public cmdSayNosay(id, level, cid) {
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new adminname[32]
get_user_name(id, adminname, 31)
if(get_pcvar_num(g_SAY) == 0 && set_pcvar_num(g_SAY,1)) {
ColorChat(0,GREY,"^1Администратор: ^4%s ^1заблокировал общий чат.",adminname)
}
else if(get_pcvar_num(g_SAY) == 1 && set_pcvar_num(g_SAY,0))
ColorChat(0,GREY,"^1Администратор: ^4%s ^1разблокировал общий чат.",adminname)
return PLUGIN_HANDLED
}
public mapchooser(id) {
new menu = menu_create("\rCW Maps Chooser:", "menu_handler");
menu_additem(menu, "\wde_dust2", "1", ACCESS_LEVEL);
menu_additem(menu, "\wde_nuke", "2", ACCESS_LEVEL);
menu_additem(menu, "\wde_inferno", "3", ACCESS_LEVEL);
menu_additem(menu, "\wde_train", "4", ACCESS_LEVEL);
menu_additem(menu, "\wde_mirage", "5", ACCESS_LEVEL);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
public ffchooser(id) {
new menu = menu_create("\rFriendlyfire Settings:", "menu_handler2");
menu_additem(menu, "\wFriendlyfire ON", "1", ACCESS_LEVEL);
menu_additem(menu, "\wFriendlyfire OFF", "2", ACCESS_LEVEL);
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
menu_display(id, menu, 0);
}
public menu_handler(id, menu, item) {
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
server_cmd( "changelevel de_dust2" )
}
case 2:
{
server_cmd( "changelevel de_nuke" )
}
case 3:
{
server_cmd( "changelevel de_inferno" )
}
case 4:
{
server_cmd( "changelevel de_train" )
}
case 5:
{
server_cmd( "changelevel de_mirage" )
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public menu_handler2(id, menu, item) {
if( item == MENU_EXIT )
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], iName[64];
new access, callback;
menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
new key = str_to_num(data);
switch(key)
{
case 1:
{
set_pcvar_string(c_ff, "1" )
client_print(0, print_chat, "FriendlyFire is now enabled !");
}
case 2:
{
set_pcvar_string(c_ff, "0" )
client_print(0, print_chat, "FriendlyFire is now disabled !");
}
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public KickT(id, level, cid) {
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new iPlayers[32], iNum, i
get_players(iPlayers, iNum)
for(i=0; i<iNum; i++)
{
if (cs_get_user_team(iPlayers[i]) == CS_TEAM_T)
server_cmd( "kick #%d ^"Your match has been finished^"", get_user_userid(i))
}
return PLUGIN_HANDLED
}
public KickCT(id, level, cid) {
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new iPlayers[32], iNum, i
get_players(iPlayers, iNum)
for(i=0; i<iNum; i++)
{
if (cs_get_user_team(iPlayers[i]) == CS_TEAM_CT)
server_cmd( "kick #%d ^"Your match has been finished^"", get_user_userid(i))
}
return PLUGIN_HANDLED
}
public Event_TeamScore() {
new szTeamName[2]
read_data(1, szTeamName, 1)
g_iScore[szTeamName[0] == 'T' ? _terro : _ct] = read_data(2)
}
public ClientCommand_SayScore(id)
{
client_print(0,print_chat, "Score : T's %d - %d CT's", g_iScore[_terro], g_iScore[_ct])
return PLUGIN_HANDLED
}
public pfnClientCommand_Handler(this) {
if (~get_user_flags(this) & ACCESS) {
return PLUGIN_CONTINUE;
}
new szCmd[32]; read_argv(1, szCmd, charsmax(szCmd));
if (equal(szCmd, "/pw")) {
if (!iIdentifier) {
new szPassword[PASSWORD_SIZE];
for (new i; i < PASSWORD_SIZE; i++) {
szPassword[i] = random_num('1', '9');
}
iIdentifier = this;
client_print(this, print_chat, "Password installed (%s)", szPassword);
set_pcvar_string(pCvar, szPassword);
}
else {
client_print(this, print_chat, "Password has been previously installed");
}
}
else if (equal(szCmd, "/dpw")) {
if (iIdentifier == this) {
iIdentifier = EOS;
client_print(this, print_chat, "Password deleted");
set_pcvar_string(pCvar, "");
}
else {
client_print(this, print_chat, "The password is not installed, or you are not the one who installed it");
}
}
return PLUGIN_HANDLED;
}
public client_disconnect(this) {
if (this == iIdentifier) {
iIdentifier = EOS;
set_pcvar_string(pCvar, "");
}
}
public restart_round(seconds[]) {
server_cmd("sv_restartround %s", seconds)
return PLUGIN_CONTINUE
}
public knife(id) {
if (get_user_flags(id) & ACCESS_LEVEL)
if (g_match_inprogress != 1) {
g_match_inprogress = 0
set_task(1.0, "restart_round", 0, "1", 1)
set_task(2.0, "strip_weapons")
set_task(3.0, "knife_msg")
}
}
public stop(id) {
if (get_user_flags(id) & ACCESS_LEVEL)
if (g_match_inprogress == 1) {
g_match_inprogress = 0
get_configsdir(cfgdir,63)
format(cfgdir,63,"%s/CwManager",cfgdir)
server_cmd("exec %s/stop.cfg",cfgdir)
set_task(1.0, "restart_round", 0, "1", 1)
set_task(3.0, "stop_msg")
}
}
public warmup(id) {
if (get_user_flags(id) & ACCESS_LEVEL)
if (g_match_inprogress == 1) {
g_match_inprogress = 0
get_configsdir(cfgdir,63)
format(cfgdir,63,"%s/CwManager",cfgdir)
server_cmd("exec %s/stop.cfg",cfgdir)
set_task(1.0, "restart_round", 0, "1", 1)
client_print(0,print_chat,"Warmup.cfg initiated")
}
}
public strip_weapons() {
new players[32],weapname[32],num_players,i
get_weaponname(29,weapname,31)
get_players(players,num_players,"e", "CT")
for(i=0;i<num_players;i++){
strip_user_weapons(players[i])
give_item(players[i], weapname)
}
get_players(players,num_players,"e", "TERRORIST")
for(i=0;i<num_players;i++){
strip_user_weapons(players[i])
give_item(players[i], weapname)
}
return PLUGIN_CONTINUE
}
public start_msg() {
set_hudmessage(0, 255, 0, -1.0, 0.30, 1, 6.0, 5.0, 0.1, 0.2, -1)
show_hudmessage(0, "LIVE! LIVE! LIVE!^nGood Luck & Have Fun")
return PLUGIN_CONTINUE
}
public stop_msg() {
set_hudmessage(255, 0, 0, -1.0, 0.30, 1, 6.0, 5.0, 0.1, 0.2, -1)
show_hudmessage(0, "MATCH STOPED!")
return PLUGIN_CONTINUE
}
public knife_msg() {
set_hudmessage(255, 255, 255, -1.0, 0.30, 0, 6.0, 5.0, 0.1, 0.2, -1)
show_hudmessage(0, "KNIFE! KNIFE! KNIFE!")
client_print(0, print_chat, "KNIFE! KNIFE! KNIFE!")
client_print(0, print_chat, "KNIFE! KNIFE! KNIFE!")
client_print(0, print_chat, "KNIFE! KNIFE! KNIFE!")
return PLUGIN_CONTINUE
}