2018-07-23 14:09:42 +02:00
# include <sourcemod>
# include <sdkhooks>
# include <sdktools>
# include <morecolors.inc>
# include <zombiereloaded>
# include <smlib>
# pragma semicolon 1
# pragma newdecls required
Handle g_hCVar_CollectablesEnabled = INVALID_HANDLE ;
Handle g_hCVar_RandomIntervalMin = INVALID_HANDLE ;
Handle g_hCVar_RandomIntervalMax = INVALID_HANDLE ;
Handle g_hCVar_InfectionEffectEnabled = INVALID_HANDLE ;
Handle g_hCVar_MilestoneInfection = INVALID_HANDLE ;
Handle g_hCVar_MilestoneGrenade = INVALID_HANDLE ;
Handle g_hCVar_MilestoneSkin = INVALID_HANDLE ;
Handle g_hCVar_HighscoreDisplay = INVALID_HANDLE ;
Handle g_hCVar_PlayerRequirement = INVALID_HANDLE ;
Handle g_hCVar_EntityLimit = INVALID_HANDLE ;
bool g_bEnabled = true ;
float g_fPropOrigin [ 3 ] ;
2018-07-23 17:06:03 +02:00
public Plugin myinfo =
2018-07-23 14:09:42 +02:00
{
2018-07-23 17:06:03 +02:00
name = " Unloze Season Event " ,
author = " Neon " ,
2018-07-23 14:09:42 +02:00
description = " Unloze Season Event " ,
2018-07-27 12:57:32 +02:00
version = " 1.2 " ,
2018-07-23 17:06:03 +02:00
url = " https://steamcommunity.com/id/n3ontm "
2018-07-23 14:09:42 +02:00
} ;
public void OnPluginStart ( )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
g_hCVar_CollectablesEnabled = CreateConVar ( " sm_unloze_season_collectables_enabled " , " 1 " , " Spawn Collectables. " , 0 , true , 0.0 , true , 1.0 ) ;
g_hCVar_RandomIntervalMin = CreateConVar ( " sm_unloze_season_random_interval_min " , " 60 " , " Minimum Interval between spawning Collectables. " , 0 , true , 0.0 ) ;
g_hCVar_RandomIntervalMax = CreateConVar ( " sm_unloze_season_random_interval_max " , " 120 " , " Maximum Interval between spawning Collectables. " , 0 , true , 0.0 ) ;
g_hCVar_InfectionEffectEnabled = CreateConVar ( " sm_unloze_season_infection_effect_enabled " , " 1 " , " Spawn Props on Infection. " , 0 , true , 0.0 , true , 1.0 ) ;
g_hCVar_MilestoneInfection = CreateConVar ( " sm_unloze_season_milestone_infection " , " 25 " , " Amount of Collectables you need to unlock the Infection Effect. " , 0 , true , 0.0 ) ;
g_hCVar_MilestoneGrenade = CreateConVar ( " sm_unloze_season_milestone_grenade " , " 75 " , " Amount of Collectables you need to unlock the Grenade Skin. " , 0 , true , 0.0 ) ;
g_hCVar_MilestoneSkin = CreateConVar ( " sm_unloze_season_milestone_skin " , " 150 " , " Amount of Collectables you need to unlock the Skin(s). " , 0 , true , 0.0 ) ;
g_hCVar_HighscoreDisplay = CreateConVar ( " sm_unloze_season_highscore_display " , " 5 " , " Amount of Players to display via sm_highscore " , 0 , true , 0.0 ) ;
g_hCVar_PlayerRequirement = CreateConVar ( " sm_unloze_season_player_requirement " , " 10 " , " Amount of Players needed to spawn Collectables. " , 0 , true , 0.0 ) ;
g_hCVar_EntityLimit = CreateConVar ( " sm_unloze_season_entity_limit " , " 2000 " , " Entity Safety Limit. " , 0 , true , 0.0 ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
for ( int client = 1 ; client < = MaxClients ; client + + )
{
if ( IsClientInGame ( client ) & & ! IsFakeClient ( client ) & & IsClientAuthorized ( client ) )
OnClientPostAdminFilter ( client ) ;
}
2018-07-23 17:06:03 +02:00
HookEvent ( " round_start " , OnRoundStart , EventHookMode_Post ) ;
2018-07-23 14:09:42 +02:00
RegConsoleCmd ( " sm_presents " , Command_Collected , " Shows the total amount of presents you have collected so far " ) ;
RegConsoleCmd ( " sm_highscore " , Command_HighScore , " Shows the HighScore " ) ;
RegAdminCmd ( " sm_reload_season " , Command_ReloadFlags , ADMFLAG_ROOT ) ;
}
public void OnMapStart ( )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.phy " ) ;
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.vvd " ) ;
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.dx90.vtx " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " models/player/stenli/smite/fenrir.mdl " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " materials/models/player/stenli/smite/fenrir/body.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/stenli/smite/fenrir/body.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/stenli/smite/fenrir/body_n.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/stenli/smite/fenrir/body_s.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/stenli/smite/fenrir/lights.vmt " ) ;
PrecacheModel ( " models/player/stenli/smite/fenrir.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.vvd " ) ;
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.mdl " ) ;
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.phy " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " models/player/vad36lollipop/lolli_new.sw.vtx " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_n_cos11.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/hat.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/hat.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/hat_n.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth_n.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_n_cos11.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vmt " ) ;
PrecacheModel ( " models/player/vad36lollipop/lolli_new.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/player/vad36santa/red.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/player/vad36santa/red.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/player/vad36santa/red.mdl " ) ;
AddFileToDownloadsTable ( " models/player/vad36santa/red.phy " ) ;
AddFileToDownloadsTable ( " models/player/vad36santa/red.sw.vtx " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " models/player/vad36santa/red.vvd " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " materials/models/player/vad36santa/Santa_N.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36santa/Santa_D.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36santa/Santa_D.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36santa/Santa_D_B.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/player/vad36santa/Santa_D_B.vtf " ) ;
PrecacheModel ( " models/player/vad36santa/red.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.mdl " ) ;
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.phy " ) ;
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/zombieden/xmas/giftbox.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/zombieden/xmas/gift.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/zombieden/xmas/gift.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/zombieden/xmas/gift_2.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/zombieden/xmas/gift_2.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/zombieden/xmas/gift_lightwarp.vtf " ) ;
PrecacheModel ( " models/zombieden/xmas/giftbox.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.mdl " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.phy " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmastree_mini.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca_skin2.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca_skin2.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_skin2.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_skin2.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_spec.vtf " ) ;
PrecacheModel ( " models/models_kit/xmas/xmastree_mini.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.mdl " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.phy " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/models_kit/xmas/xmas_teddybear.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca_skin2.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_misca_skin2.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_skin2.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_skin2.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/models_kit/xmas/xmastree_miscb_spec.vtf " ) ;
PrecacheModel ( " models/models_kit/xmas/xmas_teddybear.mdl " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.mdl " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.phy " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_revenge_xmas_candy.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/xmas_candy/cane.vmt " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " materials/models/weapons/v_models/xmas_candy/cane.vtf " ) ;
2018-07-23 14:09:42 +02:00
PrecacheModel ( " models/weapons/w_revenge_xmas_candy.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/johny-srka/snowman.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/johny-srka/snowman.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/johny-srka/snowman.mdl " ) ;
AddFileToDownloadsTable ( " models/johny-srka/snowman.phy " ) ;
AddFileToDownloadsTable ( " models/johny-srka/snowman.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/johny-srka/snowman.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/black_felt.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/black_felt.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/fabricpatterns0017_m.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/fabricpatterns0017_m.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/snowfloor002a.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/snowfloor002a.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/wood_old.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/johny-srka/wood_old.vtf " ) ;
2018-07-23 17:06:03 +02:00
PrecacheModel ( " models/johny-srka/snowman.mdl " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.mdl " ) ;
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.phy " ) ;
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.sw.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_snowball_thrown.vvd " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/snooball/s.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/snooball/s.vtf " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " materials/models/weapons/v_models/snooball/s_norm.vtf " ) ;
2018-07-23 14:09:42 +02:00
PrecacheModel ( " models/weapons/w_snowball_thrown.mdl " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.mdl " ) ;
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.phy " ) ;
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.sw.vtx " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " models/weapons/w_ornament_thrown.vvd " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " materials/models/weapons/v_models/ornament/ornament.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/ornament/ornament.vtf " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/ornament/reflect.vtf " ) ;
2018-07-23 17:06:03 +02:00
PrecacheModel ( " models/weapons/w_ornament_thrown.mdl " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.dx80.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.dx90.vtx " ) ;
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.mdl " ) ;
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.phy " ) ;
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.sw.vtx " ) ;
2018-07-23 17:06:03 +02:00
AddFileToDownloadsTable ( " models/weapons/w_santa_hat_thrown.vvd " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " materials/models/weapons/v_models/eq_fraggrenade/bonnet.vmt " ) ;
AddFileToDownloadsTable ( " materials/models/weapons/v_models/eq_fraggrenade/bonnet.vtf " ) ;
2018-07-23 17:06:03 +02:00
PrecacheModel ( " models/weapons/w_santa_hat_thrown.mdl " ) ;
2018-07-23 14:09:42 +02:00
AddFileToDownloadsTable ( " sound/unl1/season/hohohoho.wav " ) ;
2018-07-23 17:06:03 +02:00
PrecacheSound ( " sound/unl1/season/hohohoho.wav " ) ;
2018-07-23 14:09:42 +02:00
float fRandomInterval = GetRandomFloat ( GetConVarFloat ( g_hCVar_RandomIntervalMin ) , GetConVarFloat ( g_hCVar_RandomIntervalMax ) ) ;
CreateTimer ( fRandomInterval , SpawnCollectable , INVALID_HANDLE , TIMER_FLAG_NO_MAPCHANGE ) ;
}
public void OnClientPostAdminFilter ( int client )
{
CheckMYSQL ( client ) ;
}
public void OnRoundStart ( Event hEvent , const char [ ] sEvent , bool bDontBroadcast )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
CreateTimer ( 10.0 , CheckPlayerCount , INVALID_HANDLE , TIMER_FLAG_NO_MAPCHANGE ) ;
}
public Action CheckPlayerCount ( Handle timer )
{
g_bEnabled = true ;
if ( GetClientCount ( true ) < GetConVarInt ( g_hCVar_PlayerRequirement ) )
{
g_bEnabled = false ;
CPrintToChatAll ( " {green}[Unloze XMAS] {white}Minimum Player Requirement to spawn Presents: {green}%d {white} - Currently online: {red}%d{white}. " , GetConVarInt ( g_hCVar_PlayerRequirement ) , GetClientCount ( true ) ) ;
}
}
public Action Command_ReloadFlags ( int client , int args )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
for ( int i = 1 ; i < = MaxClients ; i + + )
{
if ( IsClientInGame ( i ) & & ! IsFakeClient ( i ) & & IsClientAuthorized ( i ) )
OnClientPostAdminFilter ( i ) ;
}
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Flags have been reloaded! " ) ;
return Plugin_Handled ;
}
public Action Command_HighScore ( int client , int args )
{
char error [ 255 ] ;
2018-07-23 17:06:03 +02:00
Database db ;
2018-07-23 14:09:42 +02:00
if ( SQL_CheckConfig ( " season " ) )
{
db = SQL_Connect ( " season " , true , error , sizeof ( error ) ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
if ( db = = null )
{
LogError ( " Could not connect to database: %s " , error ) ;
delete db ;
return Plugin_Handled ;
}
2018-07-23 17:06:03 +02:00
char sName [ MAX_NAME_LENGTH ] ;
2018-07-23 14:09:42 +02:00
char sQuery [ 255 ] ;
char sBuffer [ 2048 ] = " {green}[Unloze XMAS] {white}TOP COLLECTORS: \n " ;
char sTempBuffer [ 1024 ] = " " ;
int iCollected ;
int iField ;
2018-07-23 17:06:03 +02:00
Format ( sQuery , sizeof ( sQuery ) , " SELECT * from season_table order by collected desc limit %d " , GetConVarInt ( g_hCVar_HighscoreDisplay ) ) ;
2018-07-23 14:09:42 +02:00
DBResultSet rs ;
if ( ( rs = SQL_Query ( db , sQuery ) ) = = null )
{
2018-07-23 17:06:03 +02:00
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Error! Could not connect to MYSQL-DB! " ) ;
2018-07-23 14:09:42 +02:00
delete db ;
delete rs ;
2018-07-23 17:06:03 +02:00
return Plugin_Handled ;
2018-07-23 14:09:42 +02:00
}
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
for ( int i = 1 ; i < = GetConVarInt ( g_hCVar_HighscoreDisplay ) ; i + + )
{
rs . FetchRow ( ) ;
rs . FieldNameToNum ( " name " , iField ) ;
rs . FetchString ( iField , sName , sizeof ( sName ) ) ;
rs . FieldNameToNum ( " collected " , iField ) ;
iCollected = rs . FetchInt ( iField ) ;
Format ( sTempBuffer , sizeof ( sTempBuffer ) , " {green}%d: %s - {red}%d \n " , i , sName , iCollected ) ;
2018-07-23 17:06:03 +02:00
StrCat ( sBuffer , sizeof ( sBuffer ) , sTempBuffer ) ;
}
2018-07-23 14:09:42 +02:00
CPrintToChat ( client , sBuffer ) ;
delete db ;
delete rs ;
return Plugin_Handled ;
}
public Action Command_Collected ( int client , int args )
{
int iCollected = CheckMYSQL ( client ) ;
CPrintToChat ( client , " {green}[Unloze XMAS] {white}You have collected {green}%d {white}presents so far. " , iCollected ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
if ( ( iCollected > GetConVarInt ( g_hCVar_MilestoneInfection ) ) & & ( iCollected > GetConVarInt ( g_hCVar_MilestoneSkin ) ) )
2018-07-23 17:06:03 +02:00
CPrintToChat ( client , " {green}[Unloze XMAS] {white}You have unlocked {red}all rewards{white} already. " ) ;
2018-07-23 14:09:42 +02:00
if ( iCollected < GetConVarInt ( g_hCVar_MilestoneInfection ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}INFECTION EFFECTS{white}. " , GetConVarInt ( g_hCVar_MilestoneInfection ) - iCollected ) ;
if ( iCollected < GetConVarInt ( g_hCVar_MilestoneGrenade ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}GRENADE SKINS{white}. " , GetConVarInt ( g_hCVar_MilestoneGrenade ) - iCollected ) ;
if ( iCollected < GetConVarInt ( g_hCVar_MilestoneSkin ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}XMAS PLAYER SKINS{white}. " , GetConVarInt ( g_hCVar_MilestoneSkin ) - iCollected ) ;
return Plugin_Handled ;
}
public int CheckMYSQL ( int client )
{
if ( client = = - 1 )
2018-07-23 17:06:03 +02:00
return - 1 ;
2018-07-23 14:09:42 +02:00
char error [ 255 ] ;
2018-07-23 17:06:03 +02:00
Database db ;
2018-07-23 14:09:42 +02:00
if ( SQL_CheckConfig ( " season " ) )
{
db = SQL_Connect ( " season " , true , error , sizeof ( error ) ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
if ( db = = null )
{
2018-07-23 17:06:03 +02:00
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Error! Could not connect to MYSQL-DB! " ) ;
2018-07-23 14:09:42 +02:00
delete db ;
return - 1 ;
}
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
char sSID [ 64 ] ;
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
char sQuery [ 255 ] ;
2018-07-23 17:06:03 +02:00
Format ( sQuery , sizeof ( sQuery ) , " SELECT collected FROM season_table WHERE steam_auth = '%s' " , sSID ) ;
2018-07-23 14:09:42 +02:00
DBResultSet rs ;
if ( ( rs = SQL_Query ( db , sQuery ) ) = = null )
{
delete db ;
delete rs ;
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
}
int iCollected ;
if ( ! ( rs . RowCount > 0 ) )
{
iCollected = 0 ;
}
else
{
int iField ;
rs . FetchRow ( ) ;
rs . FieldNameToNum ( " collected " , iField ) ;
iCollected = rs . FetchInt ( iField ) ;
}
delete rs ;
delete db ;
CheckAndAddFlag ( client , iCollected ) ;
2018-07-23 17:06:03 +02:00
return iCollected ;
2018-07-23 14:09:42 +02:00
}
public Action SpawnCollectable ( Handle timer )
{
float fRandomInterval = GetRandomFloat ( GetConVarFloat ( g_hCVar_RandomIntervalMin ) , GetConVarFloat ( g_hCVar_RandomIntervalMax ) ) ;
CreateTimer ( fRandomInterval , SpawnCollectable , INVALID_HANDLE , TIMER_FLAG_NO_MAPCHANGE ) ;
if ( ! GetConVarBool ( g_hCVar_CollectablesEnabled ) | | ! ( g_bEnabled ) )
return ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
int target = GetTargetClient ( ) ;
GetClientAbsOrigin ( target , g_fPropOrigin ) ;
int iRotating = SpawnRotating ( ) ;
int iParticle = SpawnParticle ( ) ;
int iProp = SpawnProp ( ) ;
int iHitbox = SpawnHitbox ( iRotating , iParticle ) ;
2018-07-23 17:06:03 +02:00
int iTrigger = SpawnTrigger ( iHitbox ) ;
int iAmbient = SpawnAmbientHohohoho ( ) ;
2018-07-23 14:09:42 +02:00
SetVariantString ( " !activator " ) ;
2018-07-23 17:06:03 +02:00
AcceptEntityInput ( iProp , " SetParent " , iRotating ) ;
2018-07-23 14:09:42 +02:00
SetVariantString ( " !activator " ) ;
AcceptEntityInput ( iHitbox , " SetParent " , iRotating ) ;
SetVariantString ( " !activator " ) ;
AcceptEntityInput ( iTrigger , " SetParent " , iRotating ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
AcceptEntityInput ( iTrigger , " Enable " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
int iEntityLimit = GetConVarInt ( g_hCVar_EntityLimit ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
if ( ( iRotating > iEntityLimit ) | | ( iParticle > iEntityLimit ) | | ( iProp > iEntityLimit ) | | ( iHitbox > iEntityLimit ) | | ( iTrigger > iEntityLimit ) | | ( iAmbient > iEntityLimit ) )
{
AcceptEntityInput ( iHitbox , " FireUser2 " ) ;
CPrintToChatAll ( " {green}[Unloze XMAS] {white}Present removed due to {red}critical amount of entities{white}! " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
}
public int GetTargetClient ( )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
int [ ] iEligibleClients = new int [ MaxClients ] ;
2018-07-23 17:06:03 +02:00
int iClientCount = 0 ;
2018-07-23 14:09:42 +02:00
for ( int i = 1 ; i < = MaxClients ; i + + )
{
if ( IsClientInGame ( i ) & & IsPlayerAlive ( i ) & & ( ZR_IsClientHuman ( i ) ) )
{
iEligibleClients [ iClientCount ] = i ;
iClientCount + = 1 ;
}
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
if ( iClientCount = = 0 )
2018-07-23 17:06:03 +02:00
return - 1 ;
2018-07-23 14:09:42 +02:00
int randomIndex = GetRandomInt ( 0 , iClientCount - 1 ) ;
return iEligibleClients [ randomIndex ] ;
}
public void HookCallbackTrigger ( const char [ ] output , int caller , int activator , float delay )
2018-07-23 17:06:03 +02:00
{
2018-07-23 14:09:42 +02:00
if ( ! ZR_IsClientHuman ( activator ) )
{
UnhookSingleEntityOutput ( caller , " OnStartTouch " , HookCallbackTrigger ) ;
AcceptEntityInput ( caller , " FireUser1 " ) ;
CPrintToChatAll ( " {green}[Unloze XMAS] {white}Zombies {red}destroyed{white} a present! " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
}
}
public void HookCallback ( const char [ ] output , int caller , int activator , float delay )
2018-07-23 17:06:03 +02:00
{
UpdateMYSQL ( ) ;
2018-07-23 14:09:42 +02:00
}
public bool UpdateMYSQL ( )
{
char error [ 255 ] ;
2018-07-23 17:06:03 +02:00
Database db ;
2018-07-23 14:09:42 +02:00
if ( SQL_CheckConfig ( " season " ) )
{
db = SQL_Connect ( " season " , true , error , sizeof ( error ) ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
if ( db = = null )
{
LogError ( " Could not connect to database: %s " , error ) ;
delete db ;
return false ;
}
for ( int client = 1 ; client < = MaxClients ; client + + )
{
if ( Client_IsValid ( client ) & & IsClientInGame ( client ) & & IsPlayerAlive ( client ) & & ! IsFakeClient ( client ) & & ! IsClientSourceTV ( client ) & & ZR_IsClientHuman ( client ) )
{
char sSID [ 64 ] ;
char sName [ MAX_NAME_LENGTH ] ;
GetClientAuthId ( client , AuthId_Steam2 , sSID , sizeof ( sSID ) ) ;
GetClientName ( client , sName , sizeof ( sName ) ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
char sQuery [ 255 ] ;
2018-07-23 17:06:03 +02:00
Format ( sQuery , sizeof ( sQuery ) , " SELECT collected FROM season_table WHERE steam_auth = '%s' " , sSID ) ;
2018-07-23 14:09:42 +02:00
DBResultSet rs ;
if ( ( rs = SQL_Query ( db , sQuery ) ) = = null )
{
delete db ;
delete rs ;
return false ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
}
int iCollected ;
if ( ! ( rs . RowCount > 0 ) )
{
iCollected = 0 ;
Format ( sQuery , sizeof ( sQuery ) , " INSERT INTO season_table (steam_auth, name, collected) VALUES ('%s', '%s', '%d') " , sSID , sName , iCollected ) ;
2018-07-23 17:06:03 +02:00
SQL_FastQuery ( db , sQuery ) ;
2018-07-23 14:09:42 +02:00
}
else
{
int iField ;
rs . FetchRow ( ) ;
rs . FieldNameToNum ( " collected " , iField ) ;
iCollected = rs . FetchInt ( iField ) ;
}
iCollected + = 1 ;
Format ( sQuery , sizeof ( sQuery ) , " UPDATE season_table SET name='%s', collected='%d' WHERE steam_auth='%s' " , sName , iCollected , sSID ) ;
SQL_FastQuery ( db , sQuery ) ;
delete rs ;
CheckAndAddFlag ( client , iCollected ) ;
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Your Team opened a present! You have collected {green}%d {white}presents so far. " , iCollected ) ;
if ( iCollected = = GetConVarInt ( g_hCVar_MilestoneInfection ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Congratulations! You have unlocked {red}INFECTION EFFECTS{white}! " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
if ( iCollected = = GetConVarInt ( g_hCVar_MilestoneGrenade ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Congratulations! You have unlocked {red}GRENADE SKINS{white}! " ) ;
if ( iCollected = = GetConVarInt ( g_hCVar_MilestoneSkin ) )
CPrintToChat ( client , " {green}[Unloze XMAS] {white}Congratulations! You have unlocked {red}XMAS SKINS{white}! " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
}
delete db ;
return true ;
}
public void CheckAndAddFlag ( int client , int iCollected )
{
if ( iCollected > = GetConVarInt ( g_hCVar_MilestoneSkin ) )
{
2018-07-23 17:06:03 +02:00
AddUserFlags ( client , Admin_Custom4 ) ;
2018-07-23 14:09:42 +02:00
}
}
public int SpawnTrigger ( int iHitbox )
{
2018-07-23 17:06:03 +02:00
char StrOutput1 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput1 , sizeof ( StrOutput1 ) , " season_hitbox_%i,FireUser2,,0,1 " , iHitbox ) ;
2018-07-23 17:06:03 +02:00
int Entity ;
2018-07-23 14:09:42 +02:00
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " trigger_multiple " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Generate unique id for the entity
2018-07-23 17:06:03 +02:00
char StrEntityName [ 64 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrEntityName , sizeof ( StrEntityName ) , " trigger_multiple_%i " , Entity ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , StrEntityName ) ;
DispatchKeyValue ( Entity , " spawnflags " , " 1 " ) ;
DispatchKeyValue ( Entity , " startdisabled " , " 1 " ) ;
2018-07-23 17:06:03 +02:00
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
2018-07-23 14:09:42 +02:00
DispatchKeyValue ( Entity , " OnUser1 " , StrOutput1 ) ;
DispatchSpawn ( Entity ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( Entity ) ;
2018-07-23 14:09:42 +02:00
SetEntityModel ( Entity , " models/zombieden/xmas/giftbox.mdl " ) ;
float fMinbounds [ 3 ] = { - 16.0 , - 16.0 , - 1.0 } ;
float fMaxbounds [ 3 ] = { 16.0 , 16.0 , 32.0 } ;
SetEntPropVector ( Entity , Prop_Send , " m_vecMins " , fMinbounds ) ;
SetEntPropVector ( Entity , Prop_Send , " m_vecMaxs " , fMaxbounds ) ;
SetEntProp ( Entity , Prop_Send , " m_nSolidType " , 2 ) ;
int enteffects = GetEntProp ( Entity , Prop_Send , " m_fEffects " ) ;
enteffects | = 32 ;
SetEntProp ( Entity , Prop_Send , " m_fEffects " , enteffects ) ;
HookSingleEntityOutput ( Entity , " OnStartTouch " , HookCallbackTrigger , false ) ;
return Entity ;
}
public int SpawnRotating ( )
{
2018-07-23 17:06:03 +02:00
int Entity ;
2018-07-23 14:09:42 +02:00
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " func_rotating " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Generate unique id for the entity
2018-07-23 17:06:03 +02:00
char StrEntityName [ 64 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrEntityName , sizeof ( StrEntityName ) , " season_rotating_%i " , Entity ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , StrEntityName ) ;
DispatchKeyValue ( Entity , " maxspeed " , " 20 " ) ;
DispatchKeyValue ( Entity , " spawnflags " , " 65 " ) ;
2018-07-23 17:06:03 +02:00
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
2018-07-23 14:09:42 +02:00
DispatchSpawn ( Entity ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( Entity ) ;
2018-07-23 14:09:42 +02:00
SetEntityModel ( Entity , " models/zombieden/xmas/giftbox.mdl " ) ;
float fMinbounds [ 3 ] = { - 1.00 , - 1.00 , - 1.00 } ;
float fMaxbounds [ 3 ] = { 1.00 , 1.00 , 1.00 } ;
SetEntPropVector ( Entity , Prop_Send , " m_vecMins " , fMinbounds ) ;
SetEntPropVector ( Entity , Prop_Send , " m_vecMaxs " , fMaxbounds ) ;
SetEntProp ( Entity , Prop_Send , " m_nSolidType " , 2 ) ;
int enteffects = GetEntProp ( Entity , Prop_Send , " m_fEffects " ) ;
enteffects | = 32 ;
SetEntProp ( Entity , Prop_Send , " m_fEffects " , enteffects ) ;
return Entity ;
}
public int SpawnProp ( )
{
int Entity ;
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " prop_dynamic_override " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , " season_prop " ) ;
DispatchKeyValue ( Entity , " model " , " models/zombieden/xmas/giftbox.mdl " ) ;
DispatchKeyValue ( Entity , " modelscale " , " 0.8 " ) ;
DispatchKeyValue ( Entity , " disableshadows " , " 1 " ) ;
DispatchKeyValue ( Entity , " disablereceiveshadows " , " 1 " ) ;
DispatchKeyValue ( Entity , " DisableBoneFollowers " , " 1 " ) ;
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
DispatchSpawn ( Entity ) ;
ActivateEntity ( Entity ) ;
2018-07-23 17:06:03 +02:00
int iRandomSkin = GetRandomInt ( 0 , 1 ) ;
2018-07-23 14:09:42 +02:00
if ( iRandomSkin = = 0 )
{
SetVariantString ( " 0 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 1 )
{
SetVariantString ( " 1 " ) ;
}
AcceptEntityInput ( Entity , " Skin " ) ;
return Entity ;
}
public int SpawnParticle ( )
{
int Entity ;
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " info_particle_system " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Generate unique id for the entity
2018-07-23 17:06:03 +02:00
char StrEntityName [ 64 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrEntityName , sizeof ( StrEntityName ) , " season_particle_%i " , Entity ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , StrEntityName ) ;
DispatchKeyValue ( Entity , " effect_name " , " achieved " ) ;
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
DispatchSpawn ( Entity ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( Entity ) ;
2018-07-23 14:09:42 +02:00
return Entity ;
}
public int SpawnHitbox ( int iRotatingParent , int iParticleParent )
{
2018-07-23 17:06:03 +02:00
char StrOutput1 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput1 , sizeof ( StrOutput1 ) , " season_rotating_%i,KillHierarchy,,2.5,1 " , iRotatingParent ) ;
2018-07-23 17:06:03 +02:00
char StrOutput2 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput2 , sizeof ( StrOutput2 ) , " season_particle_%i,Start,,0,1 " , iParticleParent ) ;
2018-07-23 17:06:03 +02:00
char StrOutput3 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput3 , sizeof ( StrOutput3 ) , " season_rotating_%i,KillHierarchy,,59.0,1 " , iRotatingParent ) ;
2018-07-23 17:06:03 +02:00
char StrOutput4 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput4 , sizeof ( StrOutput4 ) , " season_sound_hohohoho,Kill,,59.0,1 " ) ;
2018-07-23 17:06:03 +02:00
char StrOutput5 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput5 , sizeof ( StrOutput5 ) , " season_rotating_%i,KillHierarchy,,0,1 " , iRotatingParent ) ;
2018-07-23 17:06:03 +02:00
char StrOutput6 [ 128 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrOutput6 , sizeof ( StrOutput6 ) , " season_sound_hohohoho,Kill,,0,1 " ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
int Entity ;
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " func_physbox_multiplayer " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Generate unique id for the entity
2018-07-23 17:06:03 +02:00
char StrEntityName [ 64 ] ;
2018-07-23 14:09:42 +02:00
Format ( StrEntityName , sizeof ( StrEntityName ) , " season_hitbox_%i " , Entity ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , StrEntityName ) ;
DispatchKeyValue ( Entity , " model " , " models/zombieden/xmas/giftbox.mdl " ) ;
DispatchKeyValue ( Entity , " modelscale " , " 0.8 " ) ;
DispatchKeyValue ( Entity , " disableshadows " , " 1 " ) ;
DispatchKeyValue ( Entity , " disablereceiveshadows " , " 1 " ) ;
DispatchKeyValue ( Entity , " DisableBoneFollowers " , " 1 " ) ;
DispatchKeyValue ( Entity , " rendermode " , " 10 " ) ;
DispatchKeyValue ( Entity , " PerformanceMode " , " 1 " ) ;
DispatchKeyValue ( Entity , " material " , " 3 " ) ;
DispatchKeyValue ( Entity , " health " , " 200 " ) ;
DispatchKeyValue ( Entity , " physdamagescale " , " 1.0 " ) ;
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
DispatchKeyValue ( Entity , " OnBreak " , StrOutput1 ) ;
DispatchKeyValue ( Entity , " OnBreak " , StrOutput2 ) ;
DispatchKeyValue ( Entity , " OnBreak " , " season_sound_hohohoho,PlaySound,,0,1 " ) ;
DispatchKeyValue ( Entity , " OnBreak " , " season_sound_hohohoho,Kill,,2.4,1 " ) ;
DispatchKeyValue ( Entity , " OnUser1 " , StrOutput3 ) ;
DispatchKeyValue ( Entity , " OnUser1 " , StrOutput4 ) ;
DispatchKeyValue ( Entity , " OnUser2 " , StrOutput5 ) ;
DispatchKeyValue ( Entity , " OnUser2 " , StrOutput6 ) ;
DispatchSpawn ( Entity ) ;
ActivateEntity ( Entity ) ;
AcceptEntityInput ( Entity , " FireUser1 " ) ;
HookSingleEntityOutput ( Entity , " OnBreak " , HookCallback , true ) ;
return Entity ;
}
public int SpawnAmbientHohohoho ( )
{
2018-07-23 17:06:03 +02:00
int Entity ;
2018-07-23 14:09:42 +02:00
// Spawn dynamic prop entity
if ( ( Entity = CreateEntityByName ( " ambient_generic " ) ) = = INVALID_ENT_REFERENCE )
return - 1 ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
// Setup entity
DispatchKeyValue ( Entity , " targetname " , " season_sound_hohohoho " ) ;
DispatchKeyValueVector ( Entity , " origin " , g_fPropOrigin ) ;
DispatchKeyValue ( Entity , " spawnflags " , " 49 " ) ;
DispatchKeyValue ( Entity , " radius " , " 2000 " ) ;
DispatchKeyValue ( Entity , " message " , " unl1/season/hohohoho.wav " ) ;
DispatchKeyValue ( Entity , " volume " , " 10 " ) ;
DispatchKeyValue ( Entity , " health " , " 10 " ) ;
DispatchKeyValue ( Entity , " pitch " , " 100 " ) ;
2018-07-23 17:06:03 +02:00
DispatchKeyValue ( Entity , " pitchstart " , " 100 " ) ;
2018-07-23 14:09:42 +02:00
DispatchSpawn ( Entity ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( Entity ) ;
2018-07-23 14:09:42 +02:00
return Entity ;
}
public void ZR_OnClientInfected ( int client , int attacker , bool motherInfect , bool respawnOverride , bool respawn )
{
if ( GetConVarBool ( g_hCVar_InfectionEffectEnabled ) & & ( ( CheckMYSQL ( client ) > = GetConVarInt ( g_hCVar_MilestoneInfection ) ) | | CheckMYSQL ( attacker ) > = GetConVarInt ( g_hCVar_MilestoneInfection ) ) )
{
float fInfectionOrigin [ 3 ] ;
GetClientAbsOrigin ( client , fInfectionOrigin ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
int EntityProp ;
2018-07-23 17:06:03 +02:00
EntityProp = CreateEntityByName ( " prop_dynamic_override " ) ;
2018-07-23 14:09:42 +02:00
DispatchKeyValue ( EntityProp , " targetname " , " season_infection_prop " ) ;
2018-07-23 17:06:03 +02:00
int iRandomSkin = GetRandomInt ( 0 , 4 ) ;
2018-07-23 14:09:42 +02:00
if ( iRandomSkin = = 0 )
{
DispatchKeyValue ( EntityProp , " model " , " models/models_kit/xmas/xmastree_mini.mdl " ) ;
DispatchKeyValue ( EntityProp , " modelscale " , " 0.35 " ) ;
DispatchKeyValue ( EntityProp , " angles " , " 0 0 0 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 1 )
{
DispatchKeyValue ( EntityProp , " model " , " models/weapons/w_revenge_xmas_candy.mdl " ) ;
DispatchKeyValue ( EntityProp , " modelscale " , " 1.2 " ) ;
DispatchKeyValue ( EntityProp , " angles " , " -27 0 0 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 2 )
{
DispatchKeyValue ( EntityProp , " model " , " models/johny-srka/snowman.mdl " ) ;
DispatchKeyValue ( EntityProp , " modelscale " , " 0.45 " ) ;
DispatchKeyValue ( EntityProp , " angles " , " 0 0 0 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 3 )
{
DispatchKeyValue ( EntityProp , " model " , " models/weapons/w_santa_hat_thrown.mdl " ) ;
DispatchKeyValue ( EntityProp , " modelscale " , " 2.7 " ) ;
DispatchKeyValue ( EntityProp , " angles " , " 0 0 -90 " ) ;
fInfectionOrigin [ 2 ] + = 7 ;
}
else if ( iRandomSkin = = 4 )
{
DispatchKeyValue ( EntityProp , " model " , " models/models_kit/xmas/xmas_teddybear.mdl " ) ;
DispatchKeyValue ( EntityProp , " modelscale " , " 0.7 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
DispatchKeyValue ( EntityProp , " disableshadows " , " 1 " ) ;
DispatchKeyValue ( EntityProp , " disablereceiveshadows " , " 1 " ) ;
DispatchKeyValue ( EntityProp , " DisableBoneFollowers " , " 1 " ) ;
DispatchKeyValueVector ( EntityProp , " origin " , fInfectionOrigin ) ;
DispatchSpawn ( EntityProp ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( EntityProp ) ;
2018-07-23 14:09:42 +02:00
int EntityRotating ;
2018-07-23 17:06:03 +02:00
EntityRotating = CreateEntityByName ( " func_rotating " ) ;
2018-07-23 14:09:42 +02:00
DispatchKeyValue ( EntityRotating , " targetname " , " season_infection_rotating " ) ;
DispatchKeyValue ( EntityRotating , " maxspeed " , " 13 " ) ;
DispatchKeyValue ( EntityRotating , " spawnflags " , " 65 " ) ;
DispatchKeyValueVector ( EntityRotating , " origin " , fInfectionOrigin ) ;
DispatchKeyValue ( EntityRotating , " OnUser1 " , " !self,KillHierarchy,,45,1 " ) ;
DispatchKeyValue ( EntityRotating , " OnUser2 " , " !self,KillHierarchy,,0,1 " ) ;
DispatchSpawn ( EntityRotating ) ;
2018-07-23 17:06:03 +02:00
ActivateEntity ( EntityRotating ) ;
2018-07-23 14:09:42 +02:00
SetEntityModel ( EntityRotating , " models/models_kit/xmas/xmastree_mini.mdl " ) ;
float fMinbounds [ 3 ] = { - 1.00 , - 1.00 , - 1.00 } ;
float fMaxbounds [ 3 ] = { 1.00 , 1.00 , 1.00 } ;
SetEntPropVector ( EntityRotating , Prop_Send , " m_vecMins " , fMinbounds ) ;
SetEntPropVector ( EntityRotating , Prop_Send , " m_vecMaxs " , fMaxbounds ) ;
SetEntProp ( EntityRotating , Prop_Send , " m_nSolidType " , 2 ) ;
int enteffects = GetEntProp ( EntityRotating , Prop_Send , " m_fEffects " ) ;
enteffects | = 32 ;
SetEntProp ( EntityRotating , Prop_Send , " m_fEffects " , enteffects ) ;
2018-07-23 17:06:03 +02:00
2018-07-23 14:09:42 +02:00
SetVariantString ( " !activator " ) ;
AcceptEntityInput ( EntityProp , " SetParent " , EntityRotating ) ;
AcceptEntityInput ( EntityRotating , " FireUser1 " ) ;
2018-07-23 17:06:03 +02:00
int iEntityLimit = GetConVarInt ( g_hCVar_EntityLimit ) ;
2018-07-23 14:09:42 +02:00
if ( ( EntityRotating > iEntityLimit ) | | ( EntityProp > iEntityLimit ) )
{
AcceptEntityInput ( EntityRotating , " FireUser2 " ) ;
CPrintToChatAll ( " {green}[Unloze XMAS] {white}Infection Effect removed due to {red}critical amount of entities{white}! " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
}
}
public void OnEntityCreated ( int entity , const char [ ] classname )
{
if ( StrContains ( classname , " _projectile " , false ) ! = - 1 )
SDKHook ( entity , SDKHook_SpawnPost , ProjectileSpawned ) ;
}
public void ProjectileSpawned ( int Entity )
{
2018-07-23 17:06:03 +02:00
int iOwner = GetEntPropEnt ( Entity , Prop_Data , " m_hOwnerEntity " ) ;
2018-07-23 14:09:42 +02:00
if ( 0 < iOwner < = MaxClients & & IsClientInGame ( iOwner ) )
{
if ( CheckMYSQL ( iOwner ) > = GetConVarInt ( g_hCVar_MilestoneGrenade ) )
2018-07-23 17:06:03 +02:00
{
int iRandomSkin = GetRandomInt ( 0 , 3 ) ;
2018-07-23 14:09:42 +02:00
if ( iRandomSkin = = 0 )
{
SetEntityModel ( Entity , " models/weapons/w_snowball_thrown.mdl " ) ;
SetVariantString ( " modelscale 3.0 " ) ;
AcceptEntityInput ( Entity , " AddOutput " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 1 )
{
SetEntityModel ( Entity , " models/zombieden/xmas/giftbox.mdl " ) ;
SetVariantString ( " modelscale 0.6 " ) ;
AcceptEntityInput ( Entity , " AddOutput " ) ;
2018-07-23 17:06:03 +02:00
iRandomSkin = GetRandomInt ( 0 , 1 ) ;
2018-07-23 14:09:42 +02:00
if ( iRandomSkin = = 0 )
{
SetVariantString ( " 0 " ) ;
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
else if ( iRandomSkin = = 1 )
{
SetVariantString ( " 1 " ) ;
}
2018-07-23 17:06:03 +02:00
AcceptEntityInput ( Entity , " Skin " ) ;
2018-07-23 14:09:42 +02:00
}
else if ( iRandomSkin = = 2 )
{
SetEntityModel ( Entity , " models/weapons/w_ornament_thrown.mdl " ) ;
SetVariantString ( " modelscale 2.0 " ) ;
AcceptEntityInput ( Entity , " AddOutput " ) ;
}
else if ( iRandomSkin = = 3 )
{
SetEntityModel ( Entity , " models/weapons/w_santa_hat_thrown.mdl " ) ;
SetVariantString ( " modelscale 2.3 " ) ;
AcceptEntityInput ( Entity , " AddOutput " ) ;
}
}
2018-07-23 17:06:03 +02:00
}
2018-07-23 14:09:42 +02:00
}
int IsValidClient ( int client , bool nobots = true )
{
if ( client < = 0 | | client > MaxClients | | ! IsClientConnected ( client ) | | ( nobots & & IsFakeClient ( client ) ) )
{
return false ;
}
return IsClientInGame ( client ) ;
}