#include < amxmodx >
#include < amxmisc >
#include < cstrike >
#include < colorchat >
#include < fun >
#include < hamsandwich >
#include < fakemeta >
#include < engine >
#include < fakemeta_util >
// Defines
///////////
#define CELL_RADIUS Float:200.0
// Enumerations
////////////////
enum
{
DAY_FREE,
DAY_CAGE,
DAY_RIOT,
DAY_ZOMBIE,
DAY_DODGEBALL,
DAY_USP_NINJA,
DAY_LAVA,
DAY_NIGHTCRAWLER,
DAY_SPACE,
DAY_SHARK,
DAY_KNIFE,
DAY_HNS,
MAX_DAYS
}
enum
{
UNRESTRICTED,
RESTRICTED
}
enum
{
CT,
T
}
enum
{
MAVERICK,
AK,
AUG,
SCOUT,
AWP,
MP5
}
enum ( += 100 )
{
TASK_HEGRENADE = 100,
TASK_DODGEBALL,
TASK_MAINDAYMENU,
TASK_ZOMBIEMENU,
TASK_HIDENSEEK,
TASK_SHARKMENU,
TASK_NCMENU,
TASK_FREEMENU
}
// Integers
////////////
new g_iTimeLeft;
new g_iRoundStartTime;
new g_iCurrentDay;
new g_iDayCount;
new g_iFreedayType;
new g_iNightcrawlerType;
new g_iZombieType;
new g_iSharkType;
new g_iTimesVoted;
// PCVars
//////////
new g_pVoteTime;
new g_pTerroristDays;
new g_pVoteOften;
new g_pOpenCells;
// Arrays
//////////
new g_iMainDayVotes[MAX_DAYS];
new g_iFreedayVotes[2];
new g_iNightcrawlerVotes[2];
new g_iZombieVotes[2];
new g_iSharkVotes[2];
new g_iCurrentPage[33];
new g_iButtons[10];
new bool:g_bHasVoted[33] = { false, ... };
new Float:g_fWallOrigin[33][3];
// Messages
////////////
new g_msgNVGToggle;
// Booleans
////////////
new bool:g_bTerroristVote;
// Constants
/////////////
new const g_szDaymenuOptions[MAX_DAYS][] =
{
"Szabad Nap",
"Ketrec Nap",
"Lazadas Nap",
"Zombi Nap",
"Kidobos Nap",
"Ninja Nap (usp-vel)",
"Lava Nap",
"Arnyek Nap",
"Ur Nap",
"Capa Nap",
"Kes Nap",
"Bujocska Nap"
}
new const g_szDaymenuObjectives[MAX_DAYS][] =
{
"A rabok barhova mehetnek. Kiveve GR-t!",
"A raboknak be kell menni a nagyketrecbe es kovetni az orok utasitasait.",
"Egy rab kap fegyvert. Az orok feladata megtalalni kinel van.",
"Old meg a masik csapatot. A zombik 2000 hp val indulnak.",
"Old meg a masik csapatot granatokkal!",
"Mindket csapat kap usp-t. A gravitacio lecsokkent.",
"",
"Old meg a masik csapatot. Lathatatlanok vagytok es nem trappoltok",
"Kis gravitacio.A raboknak scout az oroknek awp jar.",
"A rabok at tudnak menni mindenen. Az orok awp vel lovik oket",
"Az oroknek 150 hp, a raboknak 35 oljetek meg egymast!",
"A raboknak 60 masodpercuk van elbujni. Utana az orok megkeresik es lelovik oket!"
}
new const g_szPrefix[] = "[JailBreak] [Napmenu]";
new const g_szZombieModel[ ] = "models/player/zombie/zombie.mdl";
new const g_szZombieHands[ ] = "models/jailbreak/zombie_hands.mdl";
new const g_szVersion[ ] = "1.2";
public plugin_precache()
{
precache_model( g_szZombieModel );
precache_model( g_szZombieHands );
}
////////////////////////////////////
//--------- Plugin Init ----------//
////////////////////////////////////
public plugin_init()
{
register_plugin( "Jailbreak Napmenu", g_szVersion, "H3avY Ra1n" );
register_logevent( "LogEvent_RoundStart", 2, "1=Round_Start" );
register_logevent( "LogEvent_RoundEnd", 2, "1=Round_End" );
register_event( "DeathMsg", "Event_DeathMsg", "a" );
RegisterHam( Ham_Spawn, "player", "Ham_PlayerSpawn_Post", 1 );
RegisterHam( Ham_TakeDamage, "player", "Ham_TakeDamage_Pre", 0 );
RegisterHam( Ham_Weapon_SecondaryAttack, "weapon_usp", "Ham_USP_SecondaryAttack_Post", 1 );
RegisterHam( Ham_Touch, "armoury_entity", "Ham_Touch_Weapon_Pre" );
RegisterHam( Ham_Touch, "weaponbox", "Ham_Touch_Weapon_Pre" );
RegisterHam( Ham_Touch, "worldspawn", "Ham_Touch_Wall_Pre" );
RegisterHam( Ham_Touch, "func_wall", "Ham_Touch_Wall_Pre" );
RegisterHam( Ham_Touch, "func_breakable", "Ham_Touch_Wall_Pre" );
register_forward( FM_AddToFullPack, "Forward_AddToFullPack_Post", 1 );
register_forward( FM_PlayerPreThink, "Forward_PreThink", 0 );
register_menu( "Main Menu", 1023, "MainMenu_Handler" );
register_menu( "Shark Menu", MENU_KEY_1 | MENU_KEY_2, "SharkMenu_Handler" );
register_menu( "Zombie Menu", MENU_KEY_1 | MENU_KEY_2, "ZombieMenu_Handler" );
register_menu( "Freeday Menu", MENU_KEY_1 | MENU_KEY_2, "FreedayMenu_Handler" );
register_menu( "Nightcrawler Menu", MENU_KEY_1 | MENU_KEY_2, "NightcrawlerMenu_Handler" );
server_cmd( "mp_roundtime 9" );
server_cmd( "mp_freezetime 0" );
g_pVoteOften = register_cvar( "jb_vote_often", "8" );
g_pVoteTime = register_cvar( "jb_votetime", "15" );
g_pTerroristDays = register_cvar( "jb_terroristvote", "1" ); // Prisoners vote every X days
g_pOpenCells = register_cvar( "jb_opencells", "1" );
register_cvar( "daymenu_version_novote", g_szVersion, FCVAR_SPONLY|FCVAR_SERVER );
g_msgNVGToggle = get_user_msgid( "NVGToggle" );
setup_buttons();
}
////////////////////////////////////
// Player Dies //
////////////////////////////////////
public Event_DeathMsg()
{
new players[32], num;
get_players( players, num, "ae", "TERRORIST" );
if( num == 1 )
{
if( g_iCurrentDay == DAY_ZOMBIE )
{
engfunc( EngFunc_LightStyle, 0, "m" );
if( get_user_weapon( players[ 0 ] ) == CSW_KNIFE )
set_pev( players[ 0 ], pev_viewmodel2, "models/v_knife.mdl" );
}
g_iCurrentDay = -1;
set_user_footsteps( players[0], 0 );
set_user_rendering( players[0] );
}
}
////////////////////////////////////
// Player Takes Damage PRE //
////////////////////////////////////
public Ham_TakeDamage_Pre( victim, inflictor, attacker, Float:damage, dmgbits )
{
switch( g_iCurrentDay )
{
case DAY_HNS:
{
if( task_exists( TASK_HIDENSEEK ) )
return HAM_SUPERCEDE;
}
case DAY_DODGEBALL:
{
if( task_exists( TASK_DODGEBALL ) )
return HAM_SUPERCEDE;
}
}
return HAM_IGNORED;
}
////////////////////////////////////
// Player Spawned POST //
////////////////////////////////////
public Ham_PlayerSpawn_Post( id )
{
if( !is_user_alive( id ) )
{
return HAM_IGNORED;
}
if( get_user_noclip( id ) )
set_user_noclip( id, 0 );
set_user_footsteps( id, 0 );
set_user_rendering( id );
set_user_gravity( id );
if( get_user_weapon( id ) == CSW_KNIFE )
set_pev( id, pev_viewmodel2, "models/v_knife.mdl" );
set_user_gnvision( id, 0 );
StripPlayerWeapons( id );
give_item( id, "weapon_knife" );
return HAM_IGNORED;
}
////////////////////////////////////
// Round Started //
////////////////////////////////////
public LogEvent_RoundStart()
{
engfunc( EngFunc_LightStyle, 0, "m" );
g_iDayCount++;
Reset();
RemoveAllTasks();
g_iRoundStartTime = get_systime();
new iOften = get_pcvar_num( g_pVoteOften );
if( iOften == 0 )
{
if( random_num( 1, 10 ) == 10 )
{
g_iTimesVoted++;
StartDayVote();
}
}
else
{
if( g_iDayCount % iOften == 0 )
{
g_iTimesVoted++;
if( g_iTimesVoted % get_pcvar_num( g_pTerroristDays ) == 0 )
{
g_bTerroristVote = true;
}
else g_bTerroristVote = false;
StartDayVote();
}
}
}
////////////////////////////////////
// Round Ended //
////////////////////////////////////
public LogEvent_RoundEnd()
{
Reset();
RemoveAllTasks();
new players[32], num;
get_players( players, num, "a" );
for( new i = 0; i < num; i++ )
{
StripPlayerWeapons( players[i] );
}
show_menu( 0, 0, "^n", 1 );
}
////////////////////////////////////
// Client Connected //
////////////////////////////////////
public client_putinserver( id )
{
g_bHasVoted[id] = false;
g_iCurrentPage[id] = 0;
if( g_iCurrentDay == DAY_ZOMBIE )
{
engfunc( EngFunc_LightStyle, 0, "b" );
}
else engfunc( EngFunc_LightStyle, 0, "m" );
}
////////////////////////////////////
// Main Day Vote //
////////////////////////////////////
public StartDayVote() // This function starts the whole process.
{
g_iTimeLeft = get_pcvar_num( g_pVoteTime );
clamp( g_iTimeLeft, 5, 30 );
ShowDayMenu();
set_task( 1.0, "MainDayCountdown", TASK_MAINDAYMENU, _, _, "a", g_iTimeLeft );
}
public MainDayCountdown()
{
g_iTimeLeft--;
if( g_iTimeLeft > 0 )
{
ShowDayMenu();
}
else
{
DayVoteEnded();
}
}
public ShowDayMenu()
{
if( !( g_iTimeLeft > 0) )
return;
static szMenu[ 2048 ];
static szFormat[ 2048 ];
new iPlayers[ 32 ], iNum;
get_players( iPlayers, iNum, "a" );
new iPlayer;
for( new i = 0; i < iNum; i++ )
{
iPlayer = iPlayers[ i ];
formatex( szMenu, charsmax( szMenu ), "Jailbreak [Napmenu]^n\yValassz egy napot: [%i]", g_iTimeLeft );
if( g_iCurrentPage[ iPlayer ] == 0 )
{
for( new i = 0; i < 7; i++ )
{
formatex( szFormat, charsmax( szFormat ), "^n\r%d. \w%s [Szavazatok: %d]", i + 1, g_szDaymenuOptions[ i ], g_iMainDayVotes[ i ] );
add( szMenu, charsmax( szMenu ), szFormat );
}
add( szMenu, charsmax( szMenu ), "^n^n\r8. \dVissza" );
add( szMenu, charsmax( szMenu ), "^n\r9. \wKovetkezo" );
}
else
{
for( new i = 7; i < MAX_DAYS; i++ )
{
formatex( szFormat, charsmax( szFormat ), "^n\r%d. \w%s [Szavazatok: %d]", i - 6, g_szDaymenuOptions[ i ], g_iMainDayVotes[ i ] );
add( szMenu, charsmax( szMenu ), szFormat );
}
add( szMenu, charsmax( szMenu ), "^n^n\r8. \wVissza" );
add( szMenu, charsmax( szMenu ), "^n\r9. \dKovetkezo" );
}
show_menu( iPlayer, 1023, szMenu, -1, "Main Menu" );
}
}
public MainMenu_Handler( id, iKey )
{
if( !is_user_connected( id ) )
return PLUGIN_HANDLED;
new CsTeams:team = cs_get_user_team( id );
switch( g_iCurrentPage[ id ] )
{
case 0:
{
if( iKey == 8 )
{
g_iCurrentPage[ id ]++;
ShowDayMenu();
return PLUGIN_HANDLED;
}
else
{
if( g_bHasVoted[id] )
{
ColorChat( id, NORMAL, "%s Te mar szavaztal.", g_szPrefix );
ShowDayMenu();
return PLUGIN_HANDLED;
}
else if( ( team == CS_TEAM_T && !g_bTerroristVote ) || ( team == CS_TEAM_CT && g_bTerroristVote ) )
{
ColorChat( id, NORMAL, "%s Te nem szavazhatsz ma!", g_szPrefix );
ShowDayMenu();
return PLUGIN_HANDLED;
}
else
{
g_iMainDayVotes[ iKey ]++;
g_bHasVoted[ id ] = true;
ShowDayMenu();
return PLUGIN_HANDLED;
}
}
}
case 1:
{
if( iKey == 7 )
{
g_iCurrentPage[ id ]--;
ShowDayMenu();
return PLUGIN_HANDLED;
}
else if( iKey == 8 )
{
ShowDayMenu();
return PLUGIN_HANDLED;
}
else if( iKey > MAX_DAYS - 8 )
{
ShowDayMenu();
return PLUGIN_HANDLED;
}
else
{
if( g_bHasVoted[id] )
{
ColorChat( id, NORMAL, "%s Te mar szavaztal.", g_szPrefix );
ShowDayMenu();
return PLUGIN_HANDLED;
}
else if( ( team == CS_TEAM_T && !g_bTerroristVote ) || ( team == CS_TEAM_CT && g_bTerroristVote ) )
{
ColorChat( id, NORMAL, "%s Te nem szavazhatsz ma!", g_szPrefix );
ShowDayMenu();
return PLUGIN_HANDLED;
}
else
{
g_iMainDayVotes[ iKey + 7 ]++;
g_bHasVoted[ id ] = true;
ShowDayMenu();
return PLUGIN_HANDLED;
}
}
}
}
return PLUGIN_HANDLED;
}
public DayVoteEnded()
{
show_menu( 0, 0, "^n", 1 );
TallyDayVotes();
}
public TallyDayVotes()
{
g_iCurrentDay = getHighestVote( g_iMainDayVotes, MAX_DAYS );
if( g_iCurrentDay < 0 )
{
ColorChat( 0, NORMAL, "%s A szavazas sikertelen. Alapertelmezett: Ketrec Nap!", g_szPrefix );
g_iCurrentDay = DAY_CAGE;
}
else
ColorChat( 0, NORMAL, "%s A/Az %s megszavaztak a ^03%s^01-ot.", g_szPrefix, g_bTerroristVote ? "Rabok" : "Orok", g_szDaymenuOptions[g_iCurrentDay] );
startDay();
return PLUGIN_HANDLED;
}
////////////////////////////////////
// Starting Chosen Day //
////////////////////////////////////
public startDay()
{
for( new i = 0; i < sizeof g_bHasVoted; i++ )
{
g_bHasVoted[i] = false;
g_iCurrentPage[i] = 0;
}
switch( g_iCurrentDay )
{
case DAY_CAGE:
{
ShowWeaponMenu();
}
case DAY_FREE:
{
Start_FreedayVote();
return PLUGIN_HANDLED;
}
case DAY_NIGHTCRAWLER:
{
Start_NightcrawlerVote();
return PLUGIN_HANDLED;
}
case DAY_SHARK:
{
Start_SharkVote();
return PLUGIN_HANDLED;
}
case DAY_ZOMBIE:
{
Start_ZombieVote();
return PLUGIN_HANDLED;
}
case DAY_RIOT:
{
new players[32], num;
get_players( players, num, "ae", "TERRORIST" );
if( num == 0 )
{
ColorChat( 0, NORMAL, "%s Jelenleg nincsenek ^03Rabok ^01elve.", g_szPrefix );
return PLUGIN_HANDLED;
}
else if( num == 1 )
{
ColorChat( 0, NORMAL, "%s Nincs eleg ^03Rab ^01eletben ehhez a naphoz.", g_szPrefix );
return PLUGIN_HANDLED;
}
new random = random_num( 1, num );
while( !is_user_alive( players[random] ) )
random = random_num( 1, num );
cs_set_weapon_ammo( give_item( players[random], "weapon_m4a1" ), 90 );
cs_set_weapon_ammo( give_item( players[random], "weapon_deagle" ), 35 );
ShowWeaponMenu();
}
case DAY_DODGEBALL:
{
new Float:roundtime = get_cvar_float( "mp_roundtime" );
roundtime *= 60;
roundtime -= ( get_systime() - g_iRoundStartTime );
set_task( roundtime - 480, "startDodgeballDay", TASK_DODGEBALL );
new iPlayers[ 32 ], iNum;
get_players( iPlayers, iNum, "a" );
for( new i = 0; i < iNum; i++ )
{
strip_user_weapons( iPlayers[ i ] );
give_item( iPlayers[ i ], "weapon_knife" );
}
}
case DAY_USP_NINJA:
{
new players[32], num, player;
get_players( players, num, "a" );
for( new i = 0; i < num; i++ )
{
player = players[i];
set_user_health( player, 100 );
StripPlayerWeapons( player );
give_item( player, "weapon_knife" );
give_item( player, "weapon_usp" );
if( cs_get_user_team( player ) == CS_TEAM_CT )
{
cs_set_user_bpammo( player, CSW_USP, 112 );
}
else
{
cs_set_user_bpammo( player, CSW_USP, 32 );
}
new ent = find_ent_by_owner( 0, "weapon_usp", player );
cs_set_weapon_silen( ent, 1 );
}
server_cmd( "sv_gravity 300" );
}
case DAY_SPACE:
{
new players[32], num, player;
get_players( players, num, "a" );
for( new i = 0; i < num; i++ )
{
player = players[i];
StripPlayerWeapons( player );
set_user_health( player, 100 );
give_item( player, "weapon_knife" );
switch( cs_get_user_team( player ) )
{
case CS_TEAM_CT:
{
give_item( player, "weapon_awp" );
cs_set_user_bpammo( player, CSW_AWP, 30 );
}
case CS_TEAM_T:
{
give_item( player, "weapon_scout" );
cs_set_user_bpammo( player, CSW_SCOUT, 90 );
}
}
}
server_cmd( "sv_gravity 300" );
}
case DAY_KNIFE:
{
new players[32], num, player;
get_players( players, num, "a" );
for( new i = 0; i < num; i++ )
{
player = players[i];
if( !is_user_alive( player ) )
continue;
switch( cs_get_user_team( player ) )
{
case CS_TEAM_CT:
{
set_user_health( player, 150 );
}
case CS_TEAM_T:
{
set_user_health( player, 35 );
}
}
StripPlayerWeapons( player );
give_item( player, "weapon_knife" );
}
}
case DAY_HNS:
{
new players[32], num, player;
get_players( players, num, "ae", "TERRORIST" );
for( new i = 0; i < num; i++ )
{
player = players[i];
if( !is_user_alive( player ) )
continue;
set_user_rendering( player, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 16 );
set_user_footsteps( player, 1 );
}
g_iTimeLeft = 60;
set_task( 1.0, "Hidenseek_Countdown", TASK_HIDENSEEK, _, _, "a", g_iTimeLeft + 1 );
}
case DAY_LAVA: server_cmd( "decalfrequency 10" );
}
ColorChat( 0, NORMAL, "%s ^03Celkituzes: ^01%s", g_szPrefix, g_szDaymenuObjectives[g_iCurrentDay] );
if( get_pcvar_num( g_pOpenCells ) )
Push_Button();
return PLUGIN_HANDLED;
}
////////////////////////////////////
// Hidenseek Day //
////////////////////////////////////
public Hidenseek_Countdown()
{
g_iTimeLeft--;
Banda plugin sma csataltam
return PLUGIN_HANDLED;