diff --git a/AFKManager/scripting/AFKManager.sp b/AFKManager/scripting/AFKManager.sp index 73b6e2b9..e816bcbe 100644 --- a/AFKManager/scripting/AFKManager.sp +++ b/AFKManager/scripting/AFKManager.sp @@ -90,7 +90,7 @@ public void OnPluginStart() HookConVarChange((cvar = CreateConVar("sm_afk_immunity", "1", "AFK admins immunity: 0 = DISABLED, 1 = COMPLETE, 2 = KICK, 3 = MOVE")), Cvar_Immunity); g_iImmunity = GetConVarInt(cvar); - CloseHandle(cvar); + delete cvar; AddCommandListener(Command_Say, "say"); AddCommandListener(Command_Say, "say_team"); @@ -373,7 +373,7 @@ public Action Timer_CheckPlayer(Handle Timer, any Data) if(IdleTime_ > IdleTime) Position++; } - PrintCenterText(client, "You have been kick-flagged for being inactive. [%d/%d]", Position, FlaggedPlayers); + PrintCenterText(client, "You have been kick-flagged for being inactive. Your Position: [%d of %d]", Position, FlaggedPlayers); } } } diff --git a/AdminGroups/scripting/AdminGroups.sp b/AdminGroups/scripting/AdminGroups.sp new file mode 100644 index 00000000..abaeb352 --- /dev/null +++ b/AdminGroups/scripting/AdminGroups.sp @@ -0,0 +1,320 @@ +#pragma newdecls required + +#include +#include + +/* ARRAYS */ +ArrayList G_hArray_AdminGroups; +ArrayList G_hArray_ClientGroups[MAXPLAYERS+1]; + +/* BOOLEANS */ +bool G_bClientPostAdminFilter[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "AdminGroups", + author = "zaCade", + description = "Manage custom sourcemod admin groups with plugins", + version = "1.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int errorSize) +{ + CreateNative("AdminGroups_CreateAdminGroup", Native_CreateAdminGroup); + CreateNative("AdminGroups_DeleteAdminGroup", Native_DeleteAdminGroup); + + CreateNative("AdminGroups_GrantAdminGroup", Native_GrantAdminGroup); + CreateNative("AdminGroups_RevokeAdminGroup", Native_RevokeAdminGroup); + + RegPluginLibrary("AdminGroups"); + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + G_hArray_AdminGroups = new ArrayList(128); + + for (int client = 1; client <= MaxClients; client++) + { + G_hArray_ClientGroups[client] = new ArrayList(128); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRebuildAdminCache(AdminCachePart part) +{ + switch(part) + { + case(AdminCache_Groups): + { + CreateAdminGroups(); + } + case(AdminCache_Admins): + { + CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnRebuildAdminCachePost(Handle hTimer) +{ + for (int client = 1; client <= MaxClients; client++) + { + GrantAdminGroups(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + G_bClientPostAdminFilter[client] = false; + + G_hArray_ClientGroups[client].Clear(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + G_bClientPostAdminFilter[client] = false; + + G_hArray_ClientGroups[client].Clear(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminFilter(int client) +{ + G_bClientPostAdminFilter[client] = true; + + GrantAdminGroups(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: Create all groups (Wrapper) +//---------------------------------------------------------------------------------------------------- +stock void CreateAdminGroups() +{ + if (G_hArray_AdminGroups.Length) + { + for (int adminGroupIndex; adminGroupIndex < G_hArray_AdminGroups.Length; adminGroupIndex++) + { + char group[128]; + G_hArray_AdminGroups.GetString(adminGroupIndex, group, sizeof(group)); + + CreateAdminGroup(group); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: Create a specific group +//---------------------------------------------------------------------------------------------------- +stock void CreateAdminGroup(const char[] group) +{ + GroupId GrpID; + + if ((GrpID = FindAdmGroup(group)) == INVALID_GROUP_ID) + { + LogMessage("Creating new admin group %s", group); + + GrpID = CreateAdmGroup(group); + GrpID.ImmunityLevel = 0; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: Grant all groups (Wrapper) +//---------------------------------------------------------------------------------------------------- +stock void GrantAdminGroups(int client) +{ + if (!G_bClientPostAdminFilter[client]) + return; + + if (G_hArray_ClientGroups[client].Length) + { + for (int clientGroupIndex; clientGroupIndex < G_hArray_ClientGroups[client].Length; clientGroupIndex++) + { + char group[128]; + G_hArray_ClientGroups[client].GetString(clientGroupIndex, group, sizeof(group)); + + GrantAdminGroup(client, group); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: Grant a specific group +//---------------------------------------------------------------------------------------------------- +stock void GrantAdminGroup(int client, const char[] group) +{ + if (!G_bClientPostAdminFilter[client]) + return; + + AdminId AdmID; + GroupId GrpID; + + if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) + { + LogMessage("Creating new admin for %L", client); + + AdmID = CreateAdmin(); + SetUserAdmin(client, AdmID, true); + } + + if ((GrpID = FindAdmGroup(group)) != INVALID_GROUP_ID) + { + if (AdminInheritGroup(AdmID, GrpID)) + { + LogMessage("%L added to group %s", client, group); + } + } + else + { + LogMessage("%L group not found %s", client, group); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_CreateAdminGroup(Handle hPlugin, int numParams) +{ + char group[128]; + GetNativeString(1, group, sizeof(group)); + + int adminGroupIndex; + if ((adminGroupIndex = G_hArray_AdminGroups.FindString(group)) != -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Group already exists. (%s) [%d]", group, adminGroupIndex); + return; + } + + G_hArray_AdminGroups.PushString(group); + + SortADTArray(G_hArray_AdminGroups, Sort_Ascending, Sort_String); + + CreateAdminGroup(group); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_DeleteAdminGroup(Handle hPlugin, int numParams) +{ + char group[128]; + GetNativeString(1, group, sizeof(group)); + + int adminGroupIndex; + if ((adminGroupIndex = G_hArray_AdminGroups.FindString(group)) == -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Group doesnt exist. (%s) [%d]", group, adminGroupIndex); + return; + } + + G_hArray_AdminGroups.Erase(adminGroupIndex); + + SortADTArray(G_hArray_AdminGroups, Sort_Ascending, Sort_String); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GrantAdminGroup(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + + if (client < 1 || client > MaxClients) + { + ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index. (%d)", client); + return; + } + + if (!IsClientConnected(client)) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client (%d) is not connected.", client); + return; + } + + char group[128]; + GetNativeString(2, group, sizeof(group)); + + int adminGroupIndex + if ((adminGroupIndex = G_hArray_AdminGroups.FindString(group)) == -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Group doesnt exist. (%s) [%d]", group, adminGroupIndex); + return; + } + + int clientGroupIndex; + if ((clientGroupIndex = G_hArray_ClientGroups[client].FindString(group)) != -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client already has group. (%s) [%d]", group, clientGroupIndex); + return; + } + + G_hArray_ClientGroups[client].PushString(group); + + SortADTArray(G_hArray_ClientGroups[client], Sort_Ascending, Sort_String); + + GrantAdminGroup(client, group); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_RevokeAdminGroup(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + + if (client < 1 || client > MaxClients) + { + ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index. (%d)", client); + return; + } + + if (!IsClientConnected(client)) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client (%d) is not connected.", client); + return; + } + + char group[128]; + GetNativeString(2, group, sizeof(group)); + + int adminGroupIndex + if ((adminGroupIndex = G_hArray_AdminGroups.FindString(group)) == -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Group doesnt exist. (%s) [%d]", group, adminGroupIndex); + return; + } + + int clientGroupIndex; + if ((clientGroupIndex = G_hArray_ClientGroups[client].FindString(group)) == -1) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client doesnt have group. (%s) [%d]", group, clientGroupIndex); + return; + } + + G_hArray_ClientGroups[client].Erase(clientGroupIndex); + + SortADTArray(G_hArray_ClientGroups[client], Sort_Ascending, Sort_String); +} diff --git a/AdminGroups/scripting/include/AdminGroups.inc b/AdminGroups/scripting/include/AdminGroups.inc new file mode 100644 index 00000000..4092cf75 --- /dev/null +++ b/AdminGroups/scripting/include/AdminGroups.inc @@ -0,0 +1,34 @@ +#if defined _admingroups_included_ + #endinput +#endif +#define _admingroups_included_ + +/** + * Create a admin group. + * + * @param group Name of the group to create. + */ +native void AdminGroups_CreateAdminGroup(const char[] group); + +/** + * Delete a admin group. + * + * @param group Name of the group to delete. + */ +native void AdminGroups_DeleteAdminGroup(const char[] group); + +/** + * Grant a admin group. + * + * @param client Client to grant to. + * @param group Name of the group to grant. + */ +native void AdminGroups_GrantAdminGroup(int client, const char[] group); + +/** + * Revoke a admin group. + * + * @param client Client to revoke from. + * @param group Name of the group to revoke. + */ +native void AdminGroups_RevokeAdminGroup(int client, const char[] group); diff --git a/AmmoManager/configs/AmmoManager.cfg b/AmmoManager/configs/AmmoManager.cfg new file mode 100644 index 00000000..5e329102 --- /dev/null +++ b/AmmoManager/configs/AmmoManager.cfg @@ -0,0 +1,173 @@ +"weapons" +{ + "weapon_ak47" + { + "primary clip" "30" + "primary reserve" "90" + } + "weapon_aug" + { + "primary clip" "30" + "primary reserve" "90" + } + "weapon_awp" + { + "primary clip" "10" + "primary reserve" "30" + } + "weapon_bizon" + { + "primary clip" "64" + "primary reserve" "120" + } + "weapon_cz75a" + { + "primary clip" "12" + "primary reserve" "12" + } + "weapon_deagle" + { + "primary clip" "7" + "primary reserve" "35" + } + "weapon_elite" + { + "primary clip" "30" + "primary reserve" "120" + } + "weapon_famas" + { + "primary clip" "25" + "primary reserve" "90" + } + "weapon_fiveseven" + { + "primary clip" "20" + "primary reserve" "100" + } + "weapon_g3sg1" + { + "primary clip" "20" + "primary reserve" "90" + } + "weapon_galilar" + { + "primary clip" "35" + "primary reserve" "90" + } + "weapon_glock" + { + "primary clip" "20" + "primary reserve" "120" + } + "weapon_hkp2000" + { + "primary clip" "13" + "primary reserve" "52" + } + "weapon_m249" + { + "primary clip" "100" + "primary reserve" "200" + } + "weapon_m4a1" + { + "primary clip" "30" + "primary reserve" "90" + } + "weapon_m4a1_silencer" + { + "primary clip" "20" + "primary reserve" "60" + } + "weapon_mac10" + { + "primary clip" "30" + "primary reserve" "100" + } + "weapon_mag7" + { + "primary clip" "5" + "primary reserve" "32" + } + "weapon_mp7" + { + "primary clip" "30" + "primary reserve" "120" + } + "weapon_mp9" + { + "primary clip" "30" + "primary reserve" "120" + } + "weapon_negev" + { + "primary clip" "150" + "primary reserve" "300" + } + "weapon_nova" + { + "primary clip" "8" + "primary reserve" "32" + } + "weapon_p250" + { + "primary clip" "13" + "primary reserve" "26" + } + "weapon_p90" + { + "primary clip" "50" + "primary reserve" "100" + } + "weapon_sawedoff" + { + "primary clip" "7" + "primary reserve" "32" + } + "weapon_scar20" + { + "primary clip" "20" + "primary reserve" "90" + } + "weapon_sg556" + { + "primary clip" "30" + "primary reserve" "90" + } + "weapon_ssg08" + { + "primary clip" "10" + "primary reserve" "90" + } + "weapon_taser" + { + "primary clip" "1" + "primary reserve" "0" + } + "weapon_tec9" + { + "primary clip" "18" + "primary reserve" "90" + } + "weapon_ump45" + { + "primary clip" "25" + "primary reserve" "100" + } + "weapon_usp_silencer" + { + "primary clip" "12" + "primary reserve" "24" + } + "weapon_xm1014" + { + "primary clip" "7" + "primary reserve" "32" + } + "weapon_revolver" + { + "primary clip" "8" + "primary reserve" "8" + } +} \ No newline at end of file diff --git a/AmmoManager/gamedata/AmmoManager.games.txt b/AmmoManager/gamedata/AmmoManager.games.txt new file mode 100644 index 00000000..398e55f3 --- /dev/null +++ b/AmmoManager/gamedata/AmmoManager.games.txt @@ -0,0 +1,30 @@ +"Games" +{ + "csgo" + { + "Offsets" + { + "GetMaxClip" + { + "windows" "348" + "linux" "356" + } + "GetMaxReserve" + { + "windows" "352" + "linux" "360" + } + } + } + "cstrike" + { + "Offsets" + { + "GetMaxClip" + { + "windows" "311" + "linux" "312" + } + } + } +} \ No newline at end of file diff --git a/AmmoManager/scripting/AmmoManager.sp b/AmmoManager/scripting/AmmoManager.sp new file mode 100644 index 00000000..f14a2e12 --- /dev/null +++ b/AmmoManager/scripting/AmmoManager.sp @@ -0,0 +1,171 @@ +#pragma newdecls required + +#include +#include +#include + +Handle g_hGetMaxClip; +Handle g_hGetMaxReserve; + +KeyValues g_aKeyValues; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "AmmoManager", + author = "zaCade", + description = "", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + Handle hGameConf; + if ((hGameConf = LoadGameConfigFile("AmmoManager.games")) == INVALID_HANDLE) + { + SetFailState("Couldn't load \"AmmoManager.games\" game config!"); + return; + } + + // CBaseCombatWeapon::GetMaxClip1() const + int iMaxClipOffset; + if ((iMaxClipOffset = GameConfGetOffset(hGameConf, "GetMaxClip")) == -1) + { + delete hGameConf; + SetFailState("GameConfGetOffset(hGameConf, \"GetMaxClip\") failed!"); + return; + } + + if ((g_hGetMaxClip = DHookCreate(iMaxClipOffset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnGetMaxClip)) == INVALID_HANDLE) + { + delete hGameConf; + SetFailState("DHookCreate(iMaxClipOffset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnGetMaxClip) failed!"); + return; + } + + // CBaseCombatWeapon::GetMaxReserve1() const + if (GetEngineVersion() == Engine_CSGO) + { + int iMaxReserveOffset; + if ((iMaxReserveOffset = GameConfGetOffset(hGameConf, "GetMaxReserve")) == -1) + { + delete hGameConf; + SetFailState("GameConfGetOffset(hGameConf, \"GetMaxReserve\") failed!"); + return; + } + + if ((g_hGetMaxReserve = DHookCreate(iMaxReserveOffset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnGetMaxReserve)) == INVALID_HANDLE) + { + delete hGameConf; + SetFailState("DHookCreate(iMaxReserveOffset, HookType_Entity, ReturnType_Int, ThisPointer_CBaseEntity, OnGetMaxReserve) failed!"); + return; + } + } + + // Late load. + int entity = INVALID_ENT_REFERENCE; + while ((entity = FindEntityByClassname(entity, "weapon_*")) != INVALID_ENT_REFERENCE) + { + OnEntityCreated(entity, "weapon_*"); + } + + delete hGameConf; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + char sFilePath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sFilePath, sizeof(sFilePath), "configs/AmmoManager.cfg"); + + if (!FileExists(sFilePath)) + { + LogMessage("Config file doesn't exist: \"%s\"!", sFilePath); + return; + } + + g_aKeyValues = new KeyValues("weapons"); + + if (!g_aKeyValues.ImportFromFile(sFilePath)) + { + LogMessage("Couldn't load config file: \"%s\"!", sFilePath); + delete g_aKeyValues; + return; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnEntityCreated(int entity, const char[] classname) +{ + if (strncmp(classname, "weapon_", 7, false) == 0) + { + if (g_hGetMaxClip != INVALID_HANDLE) + DHookEntity(g_hGetMaxClip, true, entity); + + if (g_hGetMaxReserve != INVALID_HANDLE) + DHookEntity(g_hGetMaxReserve, true, entity); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public MRESReturn OnGetMaxClip(int entity, Handle hReturn) +{ + if (!IsValidEntity(entity)) + return MRES_Ignored; + + bool bChanged; + char sClassname[128]; + GetEntityClassname(entity, sClassname, sizeof(sClassname)) + + if (g_aKeyValues && g_aKeyValues.JumpToKey(sClassname, false)) + { + int iClip; + if ((iClip = g_aKeyValues.GetNum("primary clip", -1)) != -1) + { + DHookSetReturn(hReturn, iClip); + bChanged = true; + } + + g_aKeyValues.Rewind(); + } + + return (bChanged) ? MRES_Supercede : MRES_Ignored; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public MRESReturn OnGetMaxReserve(int entity, Handle hReturn) +{ + if (!IsValidEntity(entity)) + return MRES_Ignored; + + bool bChanged; + char sClassname[128]; + GetEntityClassname(entity, sClassname, sizeof(sClassname)) + + if (g_aKeyValues && g_aKeyValues.JumpToKey(sClassname, false)) + { + int iReserve; + if ((iReserve = g_aKeyValues.GetNum("primary reserve", -1)) != -1) + { + DHookSetReturn(hReturn, iReserve); + bChanged = true; + } + + g_aKeyValues.Rewind(); + } + + return (bChanged) ? MRES_Supercede : MRES_Ignored; +} \ No newline at end of file diff --git a/AntiBhopCheat/scripting/AntiBhopCheat.sp b/AntiBhopCheat/scripting/AntiBhopCheat.sp index f1bc5991..386b1d6c 100644 --- a/AntiBhopCheat/scripting/AntiBhopCheat.sp +++ b/AntiBhopCheat/scripting/AntiBhopCheat.sp @@ -27,11 +27,11 @@ char g_sStats[4096]; public Plugin myinfo = { - name = "AntiBhopCheat", - author = "BotoX", - description = "Detect all kinds of bhop cheats", - version = "0.0", - url = "" + name = "AntiBhopCheat", + author = "BotoX", + description = "Detect all kinds of bhop cheats", + version = "0.0", + url = "" }; @@ -313,6 +313,7 @@ void DoStats(CPlayer Player, CStreak CurStreak, CJump hJump) Player.bFlagged = true; NotifyAdmins(client, "bhop hack streak"); // KickClient(client, "Turn off your hack!"); + LimitBhop(client, true); return; } @@ -336,7 +337,8 @@ void DoStats(CPlayer Player, CStreak CurStreak, CJump hJump) { Player.bFlagged = true; NotifyAdmins(client, "bhop hack global"); -// KickClient(client, "Turn off your hack!"); + //KickClient(client, "Turn off your hack!"); + LimitBhop(client, true); return; } diff --git a/AntiBhopCheat/scripting/CPlayer.inc b/AntiBhopCheat/scripting/CPlayer.inc index d442f2f1..1aa08379 100644 --- a/AntiBhopCheat/scripting/CPlayer.inc +++ b/AntiBhopCheat/scripting/CPlayer.inc @@ -47,7 +47,6 @@ methodmap CPlayer < Basic } } - property int iJumps { public get() diff --git a/AntiBhopCheat/scripting/include/AntiBhopCheat.inc b/AntiBhopCheat/scripting/include/AntiBhopCheat.inc index c71338b1..0b968fb1 100644 --- a/AntiBhopCheat/scripting/include/AntiBhopCheat.inc +++ b/AntiBhopCheat/scripting/include/AntiBhopCheat.inc @@ -2,5 +2,5 @@ #endinput #endif #define _AntiBhopCheat_Included - + forward void AntiBhopCheat_OnClientDetected(int client, char[] sReason, char[] sStats); \ No newline at end of file diff --git a/BossHP/configs/bosshp/ZE_FFVII_Mako_Reactor_V6_B08.cfg b/BossHP/configs/bosshp/ZE_FFVII_Mako_Reactor_V6_B08.cfg index 131ace60..51e873ac 100644 --- a/BossHP/configs/bosshp/ZE_FFVII_Mako_Reactor_V6_B08.cfg +++ b/BossHP/configs/bosshp/ZE_FFVII_Mako_Reactor_V6_B08.cfg @@ -5,6 +5,7 @@ "name" "Scorpion" "method" "hpbar" "trigger" "Boss_Scorpion_Relay:OnUser1" + "hurttrigger" "Boss_Scorpion_Breakable:OnHealthChanged" "iterator" "HPCounterIterator" "counter" "HPCounter" @@ -15,6 +16,7 @@ "name" "Bahamut" "method" "hpbar" "trigger" "Boss_Bahamut_Relay:OnUser1" + "hurttrigger" "Boss_Bahamut_Breakable:OnHealthChanged" "iterator" "HPCounterIterator" "counter" "HPCounter" @@ -25,6 +27,7 @@ "name" "Bahamut" "method" "breakable" "trigger" "Sephiroth_Final_HP_Counter:OnStartTouch" + "hurttrigger" "Final_Fulgor_Breakable:OnTakeDamage" "breakable" "Final_Fulgor_Breakable" } @@ -33,6 +36,7 @@ "name" "Sephiroth" "method" "breakable" "trigger" "Sephiroth_Final_HP_Counter:OnTrigger" + "hurttrigger" "Sephiroth_Final_Breakable:OnTakeDamage" "breakable" "Sephiroth_Final_Breakable" "timeout" "1" diff --git a/BossHP/configs/bosshp/missing.sh b/BossHP/configs/bosshp/missing.sh old mode 100755 new mode 100644 diff --git a/BossHP/configs/bosshp/ze_666_crazy_escape_b3s.cfg b/BossHP/configs/bosshp/ze_666_crazy_escape_b3s.cfg new file mode 100644 index 00000000..c58c654c --- /dev/null +++ b/BossHP/configs/bosshp/ze_666_crazy_escape_b3s.cfg @@ -0,0 +1,21 @@ +"bosses" +{ + "0" + { + "name" "Naraka" + "method" "hpbar" + "trigger" "nrk1_count_player:OnStartTouch" + + "iterator" "nrk1_hp_iterations" + "counter" "nrk1_counter" + "backup" "nrk1_hp_backup" + } + "1" + { + "name" "Naraka" + "method" "breakable" + "trigger" "nrk1_room6_spawner2:OnEntitySpawned" + + "breakable" "nrk1_laserboss_2_break" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_8bit_v4b.cfg b/BossHP/configs/bosshp/ze_8bit_v4b.cfg new file mode 100644 index 00000000..0f257c11 --- /dev/null +++ b/BossHP/configs/bosshp/ze_8bit_v4b.cfg @@ -0,0 +1,75 @@ +"bosses" +{ + "0" // Boss 1 + { + "name" "Shitty Russian Boss 1" + "method" "counter" + "trigger" "Trigger_heal_boss1:OnStartTouch" + "hurttrigger" "Boss_box_1:OnHealthChanged" + + "counter" "Counter_boss1" + } + "1" // Boss 2 + { + "name" "Shitty Russian Boss 2" + "method" "counter" + "trigger" "Trigger_heal_boss2:OnStartTouch" + "hurttrigger" "Boss_box_2:OnHealthChanged" + + "counter" "Counter_boss2" + } + "2" // Boss 3 + { + "name" "Shitty Russian Boss 3" + "method" "counter" + "trigger" "Trigger_heal_boss4:OnStartTouch" + "hurttrigger" "Boss_box_5:OnHealthChanged" + + "counter" "Counter_boss3" + } + "3" // Boss 4 + { + "name" "Shitty Russian Boss 4" + "method" "counter" + "trigger" "Trigger_boss_hp_2:OnStartTouch" + "hurttrigger" "Boss_box_4:OnHealthChanged" + + "counter" "Counter_boss4" + } + "4" // Boss 5 + { + "name" "Shitty Russian Boss 5" + "method" "counter" + "trigger" "Trigger_heal_boss5:OnStartTouch" + "hurttrigger" "Ponch_box_1:OnHealthChanged" + + "counter" "Counter_boss5" + } + "5" // Boss 5 - Phase 2 + { + "name" "Shitty Russian Boss 5 - Phase 2" + "method" "counter" + "trigger" "Counter_boss5:OnHitMin" + "hurttrigger" "Ponch_box:OnHealthChanged" + + "counter" "Counter_boss5_1" + } + "6" // Boss 6 + { + "name" "Shitty Russian Boss 6" + "method" "counter" + "trigger" "Trigger_boss_hp_6:OnStartTouch" + "hurttrigger" "Boss6_1:OnHealthChanged" + + "counter" "Counter_boss6" + } + "5" // Boss 5 - Phase 2 + { + "name" "Shitty Russian Boss 6 - Phase 2" + "method" "counter" + "trigger" "Counter_boss6:OnHitMin" + "hurttrigger" "Boss6:OnHealthChanged" + + "counter" "Counter_boss6_1" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_Ancient_wrath_v1_fix2.cfg b/BossHP/configs/bosshp/ze_Ancient_wrath_v1_fix2.cfg index 49e8c3b9..8f2bd404 100644 --- a/BossHP/configs/bosshp/ze_Ancient_wrath_v1_fix2.cfg +++ b/BossHP/configs/bosshp/ze_Ancient_wrath_v1_fix2.cfg @@ -6,6 +6,7 @@ "name" "Energy Beam 1" "method" "breakable" "trigger" "boss_3_energy_trigger:OnStartTouch" + "hurttrigger" "boss_3_energy_1:OnTakeDamage" "breakable" "boss_3_energy_1" } @@ -14,6 +15,7 @@ "name" "Energy Beam 2" "method" "breakable" "trigger" "boss_3_energy_trigger:OnStartTouch" + "hurttrigger" "boss_3_energy_2:OnTakeDamage" "breakable" "boss_3_energy_2" } @@ -22,6 +24,7 @@ "name" "Container" "method" "breakable" "trigger" "boss_3_energy_counter:OnHitMax" + "hurttrigger" "boss_3_container:OnTakeDamage" "breakable" "boss_3_container" } @@ -40,6 +43,7 @@ "name" "Boss" "method" "counter" "trigger" "boss_2_quad_path_2:OnPass" + "hurttrigger" "dw_boss:OnTakeDamage" "counter" "boss_3_knockback_1_counter" } diff --git a/BossHP/configs/bosshp/ze_Ancient_wrath_v2_test27.cfg b/BossHP/configs/bosshp/ze_Ancient_wrath_v2_test27.cfg new file mode 100644 index 00000000..416a61fe --- /dev/null +++ b/BossHP/configs/bosshp/ze_Ancient_wrath_v2_test27.cfg @@ -0,0 +1,74 @@ +"bosses" + +{ + "0" + { + "name" "Energy Beam 1" + "method" "breakable" + "trigger" "boss_3_energy_trigger:OnStartTouch" + + "breakable" "boss_3_energy_1" + } + "1" + { + "name" "Energy Beam 2" + "method" "breakable" + "trigger" "boss_3_energy_trigger:OnStartTouch" + + "breakable" "boss_3_energy_2" + } + "2" + { + "name" "Container" + "method" "breakable" + "trigger" "boss_3_energy_counter:OnHitMax" + + "breakable" "boss_3_container" + } + "3" + { + "name" "Boss" + "method" "counter" + "trigger" "boss_2_player_counter_trigger:OnStartTouch" + + "counter" "boss_2_knockback_1_counter" + "counter" "boss_2_knockback_2_counter" + "counter" "boss_2_knockback_3_counter" + } + "4" + { + "name" "Boss" + "method" "counter" + "trigger" "boss_2_quad_path_2:OnPass" + + "counter" "boss_3_knockback_1_counter" + } + + + "5" + { + "name" "Boss" + "method" "counter" + "trigger" "boss_quad_encounter_01_maker:OnEntitySpawned" + "namefixup" "1" + + "counter" "boss_quad_encounter_01_counter" + } + "6" + { + "name" "Boss" + "method" "counter" + "trigger" "boss_quad_encounter_02_maker:OnEntitySpawned" + "namefixup" "1" + + "counter" "boss_quad_encounter_01_counter" + } + "7" + { + "name" "Boss" + "method" "counter" + "trigger" "boss_worm_01_trigger_health:OnStartTouch" + + "counter" "boss_worm_01_counter" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v3_1.cfg b/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v3_1.cfg index 288d925b..893a4ab0 100644 --- a/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v3_1.cfg +++ b/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v3_1.cfg @@ -3,10 +3,10 @@ "0" // Normal: Crab? { "name" "Scorpion" - "method" "breakable" + "method" "counter" "trigger" "calcVidaM:OnStartTouch" - "breakable" "Monstruo_Breakable" + "breakable" "monstruo_vida" } "1" // Hard, Extreme, Extreme 2: Bahamut { @@ -28,7 +28,7 @@ { "name" "Bahamut" "method" "breakable" - "trigger" "baha_vida:OnStartTouch" + "trigger" "#1820834:OnStartTouch" "breakable" "bahamutend" } @@ -36,7 +36,7 @@ { "name" "Sephiroth" "method" "breakable" - "trigger" "baha_vida2:OnStartTouch" + "trigger" "#1820834:OnStartTouch" "breakable" "bahamutend1" } diff --git a/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v5_3.cfg b/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v5_3.cfg index 288d925b..4cd3528b 100644 --- a/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v5_3.cfg +++ b/BossHP/configs/bosshp/ze_FFVII_Mako_Reactor_v5_3.cfg @@ -5,6 +5,7 @@ "name" "Scorpion" "method" "breakable" "trigger" "calcVidaM:OnStartTouch" + "hurttrigger" "Monstruo_Breakable:OnTakeDamage" "breakable" "Monstruo_Breakable" } @@ -13,6 +14,7 @@ "name" "Bahamut" "method" "counter" "trigger" "calcVidaD:OnStartTouch" + "hurttrigger" "BahaHitbox:OnTakeDamage" "counter" "bahamut_vida" } @@ -21,6 +23,7 @@ "name" "Sephiroth" "method" "breakable" "trigger" "puertafinal:OnStartTouch" + "hurttrigger" "glassT:OnTakeDamage" "breakable" "glassT" } @@ -29,6 +32,7 @@ "name" "Bahamut" "method" "breakable" "trigger" "baha_vida:OnStartTouch" + "hurttrigger" "bahamutend:OnTakeDamage" "breakable" "bahamutend" } @@ -37,7 +41,17 @@ "name" "Sephiroth" "method" "breakable" "trigger" "baha_vida2:OnStartTouch" + "hurttrigger" "bahamutend1:OnTakeDamage" "breakable" "bahamutend1" } + "5" // Extreme 3: Sephiroth @ Traintracks + { + "name" "Sephiroth" + "method" "breakable" + "trigger" "EX3SephirothWeapon:OnPlayerPickup" + "hurttrigger" "zombies_sephiroth:OnTakeDamage" + + "breakable" "zombies_sephiroth" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_FFVII_Temple_Ancient_v3_3.cfg b/BossHP/configs/bosshp/ze_FFVII_Temple_Ancient_v3_3.cfg index 3aee26fa..7a3c4f0e 100644 --- a/BossHP/configs/bosshp/ze_FFVII_Temple_Ancient_v3_3.cfg +++ b/BossHP/configs/bosshp/ze_FFVII_Temple_Ancient_v3_3.cfg @@ -22,53 +22,79 @@ } "2" { - "name" "Gaulle" + "name" "Meteor" "method" "counter" - "trigger" "counter_golem_3:OutValue" + "trigger" "#4217091:OnStartTouch" - "counter" "counter_golem_3" + "counter" "meteor_counter" } "3" + { + "name" "Gaulle" + "method" "counter" + "trigger" "#3878732:OnStartTouch" + + "counter" "counter_golem_3" + } + "4" + { + "name" "Gaulle" + "method" "counter" + "trigger" "#3878772:OnStartTouch" + + "counter" "counter_golem_3" + } + "5" + { + "name" "Tri-Face" + "method" "hpbar" + "trigger" "#5724587:OnStartTouch" + + "iterator" "counter_triface_3" + "counter" "counter_triface_1" + "backup" "counter_triface_2" + } + "6" { "name" "Sephiroth" "method" "hpbar" - "trigger" "counter_edge_2:OutValue" + "trigger" "#5854857:OnStartTouch" "iterator" "Edge_Health" "counter" "counter_edge_1" "backup" "counter_edge_2" } - "4" + "7" { "name" "Bomb" "method" "counter" - "trigger" "bomb_3_move:OnFullyOpen" + "trigger" "#5771963:OnFullyOpen" "killtrigger" "Edge_Health:OnHitMin" "counter" "bomb_1_counter" } - "5" + "8" { "name" "Bomb" "method" "counter" - "trigger" "bomb_2_move:OnFullyOpen" + "trigger" "#5772146:OnFullyOpen" "killtrigger" "Edge_Health:OnHitMin" "counter" "bomb_3_counter" } - "6" + "9" { "name" "Sephiroth" "method" "counter" - "trigger" "push_lasers_Ex:OnStartTouch" + "trigger" "#5866460:OnStartTouch" "counter" "counter_seph" } - "7" + "10" { "name" "Cloud" "method" "hpbar" - "trigger" "counter_cloud_1:OutValue" + "trigger" "#630099:OnDamaged" "timeout" "3" "iterator" "counter_cloud_3" diff --git a/BossHP/configs/bosshp/ze_FFXII_Feywood_b3_1.cfg b/BossHP/configs/bosshp/ze_FFXII_Feywood_b3_1.cfg index f8f6484f..435b2b5f 100644 --- a/BossHP/configs/bosshp/ze_FFXII_Feywood_b3_1.cfg +++ b/BossHP/configs/bosshp/ze_FFXII_Feywood_b3_1.cfg @@ -5,6 +5,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "lvl1_Boss_HP_Add:OnStartTouch" + "hurttrigger" "lvl1_Boss_Phys:OnHealthChanged" "iterator" "Boss_HPbar_Counter" "counter" "Boss_HP_2" @@ -15,6 +16,7 @@ "name" "Chaos" "method" "hpbar" "trigger" "Chaos_HP_Add:OnStartTouch" + "hurttrigger" "Chaos_Phys_Body:OnHealthChanged" "iterator" "Boss_HPbar_Counter" "counter" "Boss_HP_2" @@ -25,6 +27,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "lvl3_Boss_Phys:OnHealthChanged" + "hurttrigger" "lvl3_Boss_Phys:OnHealthChanged" "iterator" "Boss_HPbar_Counter" "counter" "Boss_HP_2" @@ -35,6 +38,7 @@ "name" "Chuchulainn" "method" "hpbar" "trigger" "lvl4_Boss_Push_HP:OnStartTouch" + "hurttrigger" "Chuchulainn_Phys_Body:OnHealthChanged" "iterator" "Boss_HPbar_Counter" "counter" "Boss_HP_2" @@ -45,6 +49,7 @@ "name" "Zodiark" "method" "hpbar" "trigger" "Zodiark_HP_Add:OnStartTouch" + "hurttrigger" "Zodiark_Phys_Body:OnHealthChanged" "iterator" "Boss_HPbar_Counter" "counter" "Boss_HP_2" @@ -55,6 +60,7 @@ "name" "Crystal 1" "method" "breakable" "trigger" "lvl2_Action_3:OnTrigger" + "hurttrigger" "Tomb_01_Crystall_1:OnTakeDamage" "breakable" "Tomb_01_Crystall_1" } @@ -63,6 +69,7 @@ "name" "Crystal 2" "method" "breakable" "trigger" "lvl2_Action_3:OnTrigger" + "hurttrigger" "Tomb_01_Crystall_2:OnTakeDamage" "breakable" "Tomb_01_Crystall_2" } @@ -71,6 +78,7 @@ "name" "Energy Ball" "method" "breakable" "trigger" "lvl3_Action_5:OnStartTouch" + "hurttrigger" "Glass_Ball_Break:OnTakeDamage" "breakable" "Glass_Ball_Break" } @@ -79,7 +87,19 @@ "name" "Cactus" "method" "breakable" "trigger" "lvl5_Cactus_Trigger:OnStartTouch" + "hurttrigger" "Boss_Cactus_Break:OnTakeDamage" "breakable" "Boss_Cactus_Break" } + "9" + { + "name" "Zodiark" + "method" "hpbar" + "trigger" "lvl5_Zodiark_HP_Add:OnStartTouch" + "hurttrigger" "End_Zodiark_Phys:OnHealthChanged" + + "iterator" "lvl5_Boss_HPbar_Counter" + "counter" "lvl5_Boss_HP_2" + "backup" "lvl5_Boss_HP" + } } diff --git a/BossHP/configs/bosshp/ze_FFXII_Paramina_Rift_v1_4.cfg b/BossHP/configs/bosshp/ze_FFXII_Paramina_Rift_v1_4.cfg index fd4271ee..f4abc713 100644 --- a/BossHP/configs/bosshp/ze_FFXII_Paramina_Rift_v1_4.cfg +++ b/BossHP/configs/bosshp/ze_FFXII_Paramina_Rift_v1_4.cfg @@ -5,6 +5,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_1:OnHealthChanged" + "hurttrigger" "Rift_Tower_1:OnTakeDamage" "breakable" "Rift_Tower_1" "timeout" "3" } @@ -13,6 +14,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_2:OnHealthChanged" + "hurttrigger" "Rift_Tower_2:OnTakeDamage" "breakable" "Rift_Tower_2" "timeout" "3" } @@ -21,6 +23,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_3:OnHealthChanged" + "hurttrigger" "Rift_Tower_3:OnTakeDamage" "breakable" "Rift_Tower_3" "timeout" "3" } @@ -29,6 +32,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_4:OnHealthChanged" + "hurttrigger" "Rift_Tower_4:OnTakeDamage" "breakable" "Rift_Tower_4" "timeout" "3" } @@ -37,6 +41,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_5:OnHealthChanged" + "hurttrigger" "Rift_Tower_5:OnTakeDamage" "breakable" "Rift_Tower_5" "timeout" "3" } @@ -45,6 +50,7 @@ "name" "Tower" "method" "breakable" "trigger" "Rift_Tower_6:OnHealthChanged" + "hurttrigger" "Rift_Tower_6:OnTakeDamage" "breakable" "Rift_Tower_6" "timeout" "3" } @@ -54,6 +60,7 @@ "name" "Frozen lake" "method" "breakable" "trigger" "Forest_BreakGlass:OnTakeDamage" + "hurttrigger" "Forest_BreakGlass:OnTakeDamage" "breakable" "Forest_BreakGlass" } @@ -71,11 +78,21 @@ "trigger" "Temple_Randomizer:OnCase01" "counter" "Temple_Puzzle_BtnCount" } + "-10" + { + "name" "Tower" + "method" "breakable" + "trigger" "#1159086:OnHealthChanged" + "hurttrigger" "#1159086:OnTakeDamage" + "breakable" "#1159086" + "timeout" "3" + } "0" { "name" "Mateus" "method" "hpbar" "trigger" "Boss_Hurt_Hpadd:OnStartTouch" + "hurttrigger" "Boss_Physbox:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -96,6 +113,7 @@ "name" "Chaos" "method" "hpbar" "trigger" "Forest_Puzzle_Temp:OnEntitySpawned" + "hurttrigger" "Chaos_Physbox:OnHealthChanged" "iterator" "Chaos_Overlay_Counter" "counter" "Chaos_Health" @@ -106,6 +124,7 @@ "name" "Mateus" "method" "counter" "trigger" "Fin_Boss_Temp:OnEntitySpawned" + "hurttrigger" "Fin_Boss_Physbox:OnHealthChanged" "counter" "Fin_Boss_Counter" } @@ -114,6 +133,7 @@ "name" "Gabranth" "method" "counter" "trigger" "Guardian_Temp:OnEntitySpawned" + "hurttrigger" "Guardian_Break:OnHealthChanged" "counter" "Guardian_Counter" } diff --git a/BossHP/configs/bosshp/ze_FFXII_Westersand_v7_2.cfg b/BossHP/configs/bosshp/ze_FFXII_Westersand_v7_2.cfg index d3d0915c..653d851d 100644 --- a/BossHP/configs/bosshp/ze_FFXII_Westersand_v7_2.cfg +++ b/BossHP/configs/bosshp/ze_FFXII_Westersand_v7_2.cfg @@ -5,6 +5,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Boss_Health_Init:OutValue" + "hurttrigger" "Boss_Model:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "Dragon" "method" "counter" "trigger" "Ehe_Dragon:OnUser2" + "hurttrigger" "Ehe_Dragon:OnHealthChanged" "counter" "Ehe_Dragon_HP" } @@ -23,6 +25,7 @@ "name" "Gabranth" "method" "counter" "trigger" "#896598:OnStartTouch" + "hurttrigger" "Ehe_Guardian:OnHealthChanged" "counter" "Ehe_Guardian_HP" } @@ -31,6 +34,7 @@ "name" "Gabranth" "method" "hpbar" "trigger" "Guard_Health_Init:OutValue" + "hurttrigger" "Guard_1_Physbox:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Guard_Health" @@ -42,6 +46,7 @@ "method" "counter" "trigger" "Guard_2_Physbox:OnTakeDamage" "timeout" "3" + "hurttrigger" "Guard_2_Physbox:OnHealthChanged" "counter" "Guard_2_Health" } @@ -51,6 +56,7 @@ "method" "counter" "trigger" "Guard_3_Physbox:OnTakeDamage" "timeout" "3" + "hurttrigger" "Guard_3_Physbox:OnHealthChanged" "counter" "Guard_3_Health" } @@ -59,6 +65,7 @@ "name" "Chaos" "method" "counter" "trigger" "#558327:OnStartTouch" + "hurttrigger" "Airship_Ending_Boss_Physbox:OnHealthChanged" "counter" "Airship_Ending_Boss_Health" } diff --git a/BossHP/configs/bosshp/ze_FFXII_Westersand_v8zeta1.cfg b/BossHP/configs/bosshp/ze_FFXII_Westersand_v8zeta1.cfg index 9e22494b..e3a33abb 100644 --- a/BossHP/configs/bosshp/ze_FFXII_Westersand_v8zeta1.cfg +++ b/BossHP/configs/bosshp/ze_FFXII_Westersand_v8zeta1.cfg @@ -5,6 +5,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Boss_Temp:OnEntitySpawned" + "hurttrigger" "Boss_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Ehe_Dragon_Temp:OnEntitySpawned" + "hurttrigger" "Ehe_Dragon_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -25,6 +27,7 @@ "name" "Belias" "method" "hpbar" "trigger" "Belias_Temp:OnEntitySpawned" + "hurttrigger" "Belias_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -35,6 +38,7 @@ "name" "Gabranth" "method" "hpbar" "trigger" "Judge_Temp:OnEntitySpawned" + "hurttrigger" "Judge_Armor:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -45,6 +49,7 @@ "name" "Gabranth" "method" "hpbar" "trigger" "Guard_Temp_Boss:OnEntitySpawned" + "hurttrigger" "Guard_Boss_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -55,6 +60,7 @@ "name" "Chaos" "method" "hpbar" "trigger" "Chaos_Hp_To_Boss:OnStartTouch" + "hurttrigger" "Chaos_Armor:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -66,6 +72,7 @@ "method" "counter" "trigger" "Espers_Temp_Belias:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Belias_Physbox:OnHealthChanged" "counter" "Espers_Belias_Counter" } @@ -75,6 +82,7 @@ "method" "counter" "trigger" "Espers_Temp_Chaos:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Chaos_Physbox:OnHealthChanged" "counter" "Espers_Chaos_Counter" } @@ -84,6 +92,7 @@ "method" "counter" "trigger" "Espers_Temp_Mateus:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Mateus_Physbox:OnHealthChanged" "counter" "Espers_Mateus_Counter" } @@ -94,6 +103,7 @@ "method" "breakable" "trigger" "Summon_Belias_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Belias_Summon_Physbox:OnTakeDamage" "breakable" "Belias_Summon_Physbox" } @@ -103,6 +113,7 @@ "method" "breakable" "trigger" "Summon_Chaos_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Chaos_Summon_Physbox:OnTakeDamage" "breakable" "Chaos_Summon_Physbox" } @@ -112,6 +123,7 @@ "method" "breakable" "trigger" "Summon_Mateus_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Mateus_Summon_Physbox:OnTakeDamage" "breakable" "Mateus_Summon_Physbox" } diff --git a/BossHP/configs/bosshp/ze_FFXIV_Wanderers_Palace_v5_2f.cfg b/BossHP/configs/bosshp/ze_FFXIV_Wanderers_Palace_v5_2f.cfg index a8cafddb..43b6c07b 100644 --- a/BossHP/configs/bosshp/ze_FFXIV_Wanderers_Palace_v5_2f.cfg +++ b/BossHP/configs/bosshp/ze_FFXIV_Wanderers_Palace_v5_2f.cfg @@ -4,37 +4,48 @@ { "name" "Knight" "method" "counter" + "trigger" "Boss_Template_Knight:OnEntitySpawned" "showtrigger" "Boss_Template_Knight:OnEntitySpawned" - "trigger" "Boss_Template_Knight:OnEntitySpawned" + "hurttrigger" "Knight_Breakable:OnHealthChanged" + "counter" "Knight_HP_Counter" } "1" { "name" "Keeper of Halidom" "method" "counter" + "trigger" "KOH_HP_Add:OnStartTouch" "showtrigger" "KOH_Dynamic:OnUser1" - "trigger" "KOH_HP_Add:OnStartTouch" + "hurttrigger" "KOH_Breakable:OnHealthChanged" + "counter" "KOH_HP_Counter" } "2" { "name" "Odin" "method" "counter" - "trigger" "Boss_Template_Odin:OnEntitySpawned" + "trigger" "Boss_Template_Odin:OnEntitySpawned" + "hurttrigger" "Odin_Breakable:OnHealthChanged" + "counter" "Odin_HP_Counter" } + + "3" { "name" "Seymour Natus" "method" "counter" "trigger" "Savage_Boss_HP_Add:OnStartTouch" + "hurttrigger" "Odin_Breakable:OnHealthChanged" + "counter" "Sanctuary_Keeper_HP_Counter" } "4" { "name" "Mortibody" "method" "counter" - "trigger" "Seymour_Natus_Branch_Break:OnFalse" + "trigger" "Seymour_Natus_Branch_Break:OnFalse" + "counter" "Seymour_Natus_Break_HP_Counter" } "5" @@ -44,6 +55,7 @@ "trigger" "Iron_Giant_Breakable:OnHealthChanged" "showtrigger" "Iron_Giant_Breakable:OnHealthChanged" "timeout" "3" + "counter" "Iron_Giant_HP_Counter" } "6" @@ -53,14 +65,18 @@ "trigger" "Serpent_Breakable:OnHealthChanged" "showtrigger" "Serpent_Breakable:OnHealthChanged" "timeout" "3" + "counter" "Serpent_HP_Counter" } + + "7" { "name" "Behemoth" "method" "hpbar" "trigger" "TP_Behemoth:OnStartTouch" - + "hurttrigger" "Behemoth_Breakable:OnHealthChanged" + "iterator" "Behemoth_HP_Breakable_Counter" "counter" "Behemoth_HP_Counter" "backup" "Behemoth_HP_Initial" @@ -69,35 +85,45 @@ { "name" "Seymour Natus" "method" "counter" - "trigger" "Seymour_Natus_HP_Add:OnStartTouch" + "trigger" "Seymour_Natus_HP_Add:OnStartTouch" + "hurttrigger" "Seymour_Natus_Breakable:OnHealthChanged" + "counter" "Seymour_Natus_HP_Counter" } "9" { "name" "Ultima Weapon" "method" "counter" - "trigger" "Ultima_Weapon_HP_Add:OnStartTouch" + "trigger" "Ultima_Weapon_HP_Add:OnStartTouch" + "hurttrigger" "Ultima_Weapon_Breakable:OnHealthChanged" + "counter" "Ultima_Weapon_HP_Counter" } "10" { "name" "Garland" "method" "counter" - "trigger" "Garland_HP_Add:OnStartTouch" + "trigger" "Garland_HP_Add:OnStartTouch" + "hurttrigger" "Garland_Breakable:OnHealthChanged" + "counter" "Garland_HP_Counter" } "11" { "name" "Bahamut" "method" "counter" - "trigger" "Bahamut_HP_Add_Branch:OnFalse" + "trigger" "Bahamut_HP_Add_Branch:OnFalse" + "hurttrigger" "Castle_Bahamut_Breakable:OnHealthChanged" + "counter" "Castle_Bahamut_HP_Counter" } - "11" + "12" { "name" "Final Bahamut" "method" "counter" - "trigger" "Boss_Template_Final_Bahamut:OnEntitySpawned" + "trigger" "Boss_Template_Final_Bahamut:OnEntitySpawned" + "hurttrigger" "Final_Bahamut_Breakable:OnHealthChanged" + "counter" "Final_Bahamut_HP_Counter" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_Genso_Of_Last_v2_2fix.cfg b/BossHP/configs/bosshp/ze_Genso_Of_Last_v2_2fix.cfg new file mode 100644 index 00000000..324352f3 --- /dev/null +++ b/BossHP/configs/bosshp/ze_Genso_Of_Last_v2_2fix.cfg @@ -0,0 +1,31 @@ +"bosses" +{ + "0" + { + "name" "Edge" + "method" "counter" + "trigger" "push_boss_stage2:OnStartTouch" + "counter" "Edge_Health" + } + "1" + { + "name" "Edge" + "method" "counter" + "trigger" "push_boss_stage3:OnStartTouch" + "counter" "Edge_Health" + } + "2" + { + "name" "Genesis" + "method" "counter" + "trigger" "#273800:OnStartTouch" + "counter" "Genesis_Counter" + } + "3" + { + "name" "Balrog" + "method" "counter" + "trigger" "#304673:OnStartTouch" + "counter" "Airship_Ending_Boss_Health" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_GoT_The_North_b4.cfg b/BossHP/configs/bosshp/ze_GoT_The_North_b4.cfg index fb31e1be..b3e81495 100644 --- a/BossHP/configs/bosshp/ze_GoT_The_North_b4.cfg +++ b/BossHP/configs/bosshp/ze_GoT_The_North_b4.cfg @@ -1,109 +1,33 @@ "bosses" { - "0" - { - "name" "Dragon" - "method" "counter" - "trigger" "Dragon_City_Addhp:OnStartTouch" - - "counter" "Dragon_City_Health" - } "0" { "name" "Giant" "method" "counter" - "trigger" "Giant_Break:OnUser1" - "timeout" "5" + "trigger" "Giant_Temp:OnEntitySpawned" + "showtrigger" "Giant_Break:OnDamaged" + "hurttrigger" "Giant_Break:OnDamaged" + "killtrigger" "Giant_Die:OnTrigger" + "timeout" "3" "counter" "Giant_Health" } - "0" + "1" + { + "name" "Dragon" + "method" "counter" + "trigger" "Dragon_City_Addhp:OnStartTouch" + "hurttrigger" "Dragon_City_Armor:OnHealthChanged" + + "counter" "Dragon_City_Health" + } + "2" { "name" "Dragon" "method" "counter" "trigger" "Dragon_End_Addhp:OnStartTouch" + "hurttrigger" "Dragon_City_Armor:OnHealthChanged" "counter" "Dragon_End_Health" } - "0" - { - "name" "TeamHP" - "method" "counter" - "trigger" "Shop_TeamHP_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_TeamHP_Counter" - } - "0" - { - "name" "HealItem" - "method" "counter" - "trigger" "Shop_HealItem_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_HealItem_Counter" - } - "0" - { - "name" "AmmoItem" - "method" "counter" - "trigger" "Shop_AmmoItem_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_AmmoItem_Counter" - } - "0" - { - "name" "SwordItem" - "method" "counter" - "trigger" "Shop_SwordItem_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_SwordItem_Counter" - } - "0" - { - "name" "BowItem" - "method" "counter" - "trigger" "Shop_BowItem_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_BowItem_Counter" - } - "0" - { - "name" "AxeItem" - "method" "counter" - "trigger" "Shop_AxeItem_Relay:OnTrigger" - "timeout" "3" - - "counter" "Shop_AxeItem_Counter" - } - "0" - { - "name" "Bow" - "method" "breakable" - "trigger" "Item_Bow_Relay:OnTrigger" - "timeout" "3" - - "breakable" "Item_Bow_Model" - } - "0" - { - "name" "Sword" - "method" "counter" - "trigger" "Item_Sword_Relay:OnTrigger" - "timeout" "3" - - "counter" "Item_Sword_Counter" - } - "0" - { - "name" "DoorBreak" - "method" "counter" - "trigger" "Fell_City0_DoorBreak:OnBreak" - "timeout" "3" - - "counter" "Fell_City0_DoorCounter" - } } diff --git a/BossHP/configs/bosshp/ze_Infected_Sewers_v6_5.cfg b/BossHP/configs/bosshp/ze_Infected_Sewers_v6_5.cfg index 9491b1a0..345aadd6 100644 --- a/BossHP/configs/bosshp/ze_Infected_Sewers_v6_5.cfg +++ b/BossHP/configs/bosshp/ze_Infected_Sewers_v6_5.cfg @@ -1,133 +1,133 @@ "bosses" { - "0" - { - "name" "Robot Spider" - "method" "hpbar" - "trigger" "contador:OnStartTouch" - - "iterator" "hpcount3" - "counter" "hpcount2" - "backup" "hpcount1" - } - "1" - { - "name" "Helicopter" - "method" "hpbar" - "trigger" "Boss_AddHp:OnStartTouch" - - "iterator" "chop_counter3" - "counter" "chop_counter1" - "backup" "chop_counter2" - } - "2" - { - "name" "Npc 1" - "method" "breakable" - "trigger" "lvl1_template:OnEntitySpawned" - "showtrigger" "mini_break1:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break1" - } - "3" - { - "name" "Npc 2" - "method" "breakable" - "trigger" "lvl1_template2:OnEntitySpawned" - "showtrigger" "mini_break2:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break2" - } - "4" - { - "name" "Npc 3" - "method" "breakable" - "trigger" "lvl1_template3:OnEntitySpawned" - "showtrigger" "mini_break3:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break3" - } - "5" - { - "name" "Npc 4" - "method" "breakable" - "trigger" "lvl2_template1:OnEntitySpawned" - "showtrigger" "mini_break4:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break4" - } - "6" - { - "name" "Npc 5" - "method" "breakable" - "trigger" "lvl2_template3:OnEntitySpawned" - "showtrigger" "mini_break6:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break6" - } - "7" - { - "name" "Npc 6" - "method" "breakable" - "trigger" "lvl2_template4:OnEntitySpawned" - "showtrigger" "mini_break7:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break7" - } - "8" - { - "name" "Npc 7" - "method" "breakable" - "trigger" "lvl3_template1:OnEntitySpawned" - "showtrigger" "mini_break10:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break10" - } - "9" - { - "name" "Npc 8" - "method" "breakable" - "trigger" "lvl3_template11:OnEntitySpawned" - "showtrigger" "mini_break11:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break11" - } - "10" - { - "name" "Npc 9" - "method" "breakable" - "trigger" "lvl3_template12:OnEntitySpawned" - "showtrigger" "mini_break12:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break12" - } - "11" - { - "name" "Npc 10" - "method" "breakable" - "trigger" "lvl3_template13:OnEntitySpawned" - "showtrigger" "mini_break13:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break13" - } - "12" - { - "name" "Npc 11" - "method" "breakable" - "trigger" "lvl3_template14:OnEntitySpawned" - "showtrigger" "mini_break14:OnTakeDamage" - "timeout" "3" - - "breakable" "mini_break14" - } + "0" + { + "name" "Mech Spider" + "method" "hpbar" + "trigger" "contador:OnStartTouch" + + "iterator" "hpcount3" + "counter" "hpcount2" + "backup" "hpcount1" + } + "1" + { + "name" "Chopper" + "method" "hpbar" + "trigger" "Boss_AddHp:OnStartTouch" + + "iterator" "chop_counter3" + "counter" "chop_counter1" + "backup" "chop_counter2" + } + "2" + { + "name" "Turret 1" + "method" "breakable" + "trigger" "lvl1_template:OnEntitySpawned" + "showtrigger" "mini_break1:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break1" + } + "3" + { + "name" "Turret 2" + "method" "breakable" + "trigger" "lvl1_template2:OnEntitySpawned" + "showtrigger" "mini_break2:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break2" + } + "4" + { + "name" "Turret 3" + "method" "breakable" + "trigger" "lvl1_template3:OnEntitySpawned" + "showtrigger" "mini_break3:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break3" + } + "5" + { + "name" "Turret 4" + "method" "breakable" + "trigger" "lvl2_template1:OnEntitySpawned" + "showtrigger" "mini_break4:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break4" + } + "6" + { + "name" "Turret 5" + "method" "breakable" + "trigger" "lvl2_template3:OnEntitySpawned" + "showtrigger" "mini_break6:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break6" + } + "7" + { + "name" "Turret 6" + "method" "breakable" + "trigger" "lvl2_template4:OnEntitySpawned" + "showtrigger" "mini_break7:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break7" + } + "8" + { + "name" "Turret 7" + "method" "breakable" + "trigger" "lvl3_template1:OnEntitySpawned" + "showtrigger" "mini_break10:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break10" + } + "9" + { + "name" "Turret 8" + "method" "breakable" + "trigger" "lvl3_template11:OnEntitySpawned" + "showtrigger" "mini_break11:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break11" + } + "10" + { + "name" "Turret 9" + "method" "breakable" + "trigger" "lvl3_template12:OnEntitySpawned" + "showtrigger" "mini_break12:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break12" + } + "11" + { + "name" "Turret 10" + "method" "breakable" + "trigger" "lvl3_template13:OnEntitySpawned" + "showtrigger" "mini_break13:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break13" + } + "12" + { + "name" "Turret 11" + "method" "breakable" + "trigger" "lvl3_template14:OnEntitySpawned" + "showtrigger" "mini_break14:OnTakeDamage" + "timeout" "3" + + "breakable" "mini_break14" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_LOTR_Isengard_v2_3.cfg b/BossHP/configs/bosshp/ze_LOTR_Isengard_v2_3.cfg index 7a1b78df..f6dc798d 100644 --- a/BossHP/configs/bosshp/ze_LOTR_Isengard_v2_3.cfg +++ b/BossHP/configs/bosshp/ze_LOTR_Isengard_v2_3.cfg @@ -5,6 +5,7 @@ "name" "Web" "method" "breakable" "trigger" "#391272:OnTakeDamage" + "hurttrigger" "#391272:OnTakeDamage" "timeout" "3" "breakable" "#391272" @@ -14,6 +15,7 @@ "name" "Web" "method" "breakable" "trigger" "#391280:OnTakeDamage" + "hurttrigger" "#391280:OnTakeDamage" "timeout" "3" "breakable" "#391280" @@ -23,6 +25,7 @@ "name" "Web" "method" "breakable" "trigger" "#391289:OnTakeDamage" + "hurttrigger" "#391289:OnTakeDamage" "timeout" "3" "breakable" "#391289" @@ -32,6 +35,7 @@ "name" "Web" "method" "breakable" "trigger" "#391297:OnTakeDamage" + "hurttrigger" "#391297:OnTakeDamage" "timeout" "3" "breakable" "#391297" @@ -41,6 +45,7 @@ "name" "Spider" "method" "hpbar" "trigger" "logic_spider:OnTrigger:5" + "hurttrigger" "boss_break_head:OnDamaged" "iterator" "stripper_health_iterator" "counter" "stripper_health_counter" @@ -51,6 +56,7 @@ "name" "Web" "method" "breakable" "trigger" "point_web2:OnEntitySpawned" + "hurttrigger" "web3:OnTakeDamage" "multitrigger" "1" "namefixup" "1" @@ -61,6 +67,7 @@ "name" "Web" "method" "breakable" "trigger" "point_web2:OnEntitySpawned" + "hurttrigger" "web2:OnTakeDamage" "multitrigger" "1" "namefixup" "1" @@ -71,6 +78,7 @@ "name" "Nazgul" "method" "breakable" "trigger" "boat_1_path1:OnPass:0.03" + "hurttrigger" "box_nazgryl:OnTakeDamage" "breakable" "box_nazgryl" } @@ -79,6 +87,7 @@ "name" "Uruk-Hai" "method" "hpbar" "trigger" "boss1_trigger_start:OnTrigger:4" + "hurttrigger" "boss1_break:OnDamaged" "iterator" "stripper_health_iterator" "counter" "stripper_health_counter" @@ -89,6 +98,7 @@ "name" "Support 1" "method" "breakable" "trigger" "trigger_set_damba_hp:OnStartTouch:0.03" + "hurttrigger" "beam_1:OnTakeDamage" "breakable" "beam_1" } @@ -97,6 +107,7 @@ "name" "Support 2" "method" "breakable" "trigger" "trigger_set_damba_hp:OnStartTouch:0.03" + "hurttrigger" "beam_2:OnTakeDamage" "breakable" "beam_2" } @@ -105,6 +116,7 @@ "name" "Grima" "method" "breakable" "trigger" "stripper_grima_trigger:OnTrigger:0.03" + "hurttrigger" "box_grima_helth:OnTakeDamage" "breakable" "box_grima_helth" } @@ -113,6 +125,7 @@ "name" "Saruman" "method" "hpbar" "trigger" "boss3_trigger_start:OnTrigger:4" + "hurttrigger" "boss3_break:OnDamaged" "iterator" "stripper_health_iterator" "counter" "stripper_health_counter" diff --git a/BossHP/configs/bosshp/ze_Pidaras_v1_4fix3.cfg b/BossHP/configs/bosshp/ze_Pidaras_v1_5fix.cfg similarity index 69% rename from BossHP/configs/bosshp/ze_Pidaras_v1_4fix3.cfg rename to BossHP/configs/bosshp/ze_Pidaras_v1_5fix.cfg index b65149c4..d2aabc7b 100644 --- a/BossHP/configs/bosshp/ze_Pidaras_v1_4fix3.cfg +++ b/BossHP/configs/bosshp/ze_Pidaras_v1_5fix.cfg @@ -5,6 +5,7 @@ "name" "Pyramigay" "method" "counter" "trigger" "trigger_pyramid_1:OnStartTouch" + "hurttrigger" "jugg_physbox:OnHealthChanged" "counter" "trigger_pyramid_counter" } "1" @@ -12,6 +13,7 @@ "name" "Eye - Phase 1/2" "method" "counter" "trigger" "space_boss_trigger:OnStartTouch" + "hurttrigger" "space_physbox:OnHealthChanged" "counter" "space_counter1" } "2" @@ -19,13 +21,15 @@ "name" "Eye - Phase 2/2" "method" "counter" "trigger" "space_boss_trigger:OnStartTouch" + "hurttrigger" "space_physbox2:OnHealthChanged" "counter" "space_counter2" } "3" { "name" "Roshi" "method" "counter" - "trigger" "trig_laser:OnStartTouch" + "trigger" "roshi_counter:OutValue" + "hurttrigger" "laser_physbox:OnHealthChanged" "counter" "roshi_counter" } "4" @@ -33,6 +37,7 @@ "name" "Bahatard" "method" "counter" "trigger" "trig_bahamut_vie:OnStartTouch" + "hurttrigger" "npc_bahamut_physbox:OnHealthChanged" "counter" "npc_bahamut_counter" } "5" @@ -40,6 +45,7 @@ "name" "Meshlem" "method" "counter" "trigger" "Meshlem_Boss_Hp_To_Boss:OnStartTouch" + "hurttrigger" "Meshlem_Boss_Break:OnHealthChanged" "counter" "Boss_Health" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_PoncherMonkey_Shooter_v3_5.cfg b/BossHP/configs/bosshp/ze_PoncherMonkey_Shooter_v3_5.cfg index fcc5be62..be07b328 100644 --- a/BossHP/configs/bosshp/ze_PoncherMonkey_Shooter_v3_5.cfg +++ b/BossHP/configs/bosshp/ze_PoncherMonkey_Shooter_v3_5.cfg @@ -9,6 +9,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "ChariotHitbox:OnTakeDamage" "iterator" "Chariotcounter3" "counter" "ChariotCounter1" @@ -23,6 +24,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "NigraHitbox:OnTakeDamage" "iterator" "Nigracounter3" "counter" "NigraCounter1" @@ -37,6 +39,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "GoroHitbox:OnTakeDamage" "iterator" "Gorocounter3" "counter" "GoroCounter1" @@ -51,6 +54,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "jeepHitbox:OnTakeDamage" "iterator" "jeepcounter3" "counter" "jeepCounter1" @@ -65,6 +69,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "sanicHitbox:OnTakeDamage" "iterator" "saniccounter3" "counter" "sanicCounter1" @@ -79,6 +84,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "PoncherDogHitbox:OnTakeDamage" "iterator" "PoncherDogcounter3" "counter" "PoncherDogCounter1" @@ -93,6 +99,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "3" + "hurttrigger" "AnalHitbox:OnTakeDamage" "iterator" "Analcounter3" "counter" "AnalCounter1" @@ -103,6 +110,7 @@ "name" "Poncher Monkey" "method" "hpbar" "trigger" "Stage1_Door5_trigger:OnStartTouch" + "hurttrigger" "DevilHitbox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" @@ -113,6 +121,7 @@ "name" "Muhamed" "method" "hpbar" "trigger" "Stage2_Muhamed_HpScale:OnStartTouch" + "hurttrigger" "isisHitbox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" @@ -124,6 +133,7 @@ "method" "breakable" "trigger" "Typhoon_GoatTemplate:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Vacuum_HitBox:OnTakeDamage" "breakable" "Typhoon_GoatHitBox" } @@ -132,6 +142,7 @@ "name" "Poncher Monkey" "method" "hpbar" "trigger" "Stage2_GrapeSoda_HpScale:OnStartTouch" + "hurttrigger" "GrapeSoda_HitBox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" @@ -142,6 +153,7 @@ "name" "Dancing Queers" "method" "hpbar" "trigger" "Stage3_DancingQueersHpScale:OnStartTouch" + "hurttrigger" "GarbageDisposal_Hitbox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" @@ -152,6 +164,7 @@ "name" "King Poncher" "method" "hpbar" "trigger" "Stage3_PoncherHPScale:OnStartTouch" + "hurttrigger" "KingPoncherHitbox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" @@ -162,6 +175,7 @@ "name" "Qwerpifloom" "method" "hpbar" "trigger" "AutismTemplate:OnEntitySpawned" + "hurttrigger" "AutismHitbox:OnTakeDamage" "iterator" "QwerpifloomCounter3" "counter" "QwerpifloomCounter1" @@ -172,6 +186,7 @@ "name" "Dodge Charger" "method" "hpbar" "trigger" "DodgeChargerTemplate:OnEntitySpawned" + "hurttrigger" "DodgeChargerHitbox:OnHealthChanged" "iterator" "ChargerCounter3" "counter" "ChargerCounter1" @@ -182,6 +197,7 @@ "name" "SSJ Poncher" "method" "hpbar" "trigger" "SpaceJam_BossHpScale:OnStartTouch" + "hurttrigger" "SSJPoncherHitbox:OnHealthChanged" "iterator" "BossCounter3" "counter" "BossCounter1" diff --git a/BossHP/configs/bosshp/ze_Serpentis_Temple_v1_1.cfg b/BossHP/configs/bosshp/ze_Serpentis_Temple_v1_1.cfg index 72263861..80679f1a 100644 --- a/BossHP/configs/bosshp/ze_Serpentis_Temple_v1_1.cfg +++ b/BossHP/configs/bosshp/ze_Serpentis_Temple_v1_1.cfg @@ -5,6 +5,7 @@ "name" "Snake" "method" "hpbar" "trigger" "Room4_Hp_Trigger:OnStartTouch" + "hurttrigger" "Noctali_Boss_Break:OnHealthChanged" "iterator" "Room4_Boss_HpCounter" "counter" "Room4_Boss_Hp" @@ -15,6 +16,7 @@ "name" "Medusa" "method" "hpbar" "trigger" "medusa_hpadd_trigger:OnStartTouch" + "hurttrigger" "mboss_hurt_relay:OnTrigger" "iterator" "HPCounterIterator" "counter" "HPCounter" @@ -25,6 +27,7 @@ "name" "Ball" "method" "counter" "trigger" "Room5_Phys_HpTrig:OnStartTouch" + "hurttrigger" "Room5_Phys_1:OnHealthChanged" "counter" "Room5_Phys_HpCounter1" } @@ -33,6 +36,7 @@ "name" "Ball" "method" "counter" "trigger" "Room5_Phys_HpTrig:OnStartTouch" + "hurttrigger" "Room5_Phys_2:OnHealthChanged" "counter" "Room5_Phys_HpCounter2" } @@ -41,6 +45,7 @@ "name" "Little Snake" "method" "hpbar" "trigger" "Room8_Hp_Trigger:OnStartTouch" + "hurttrigger" "Nostar_Boss_Break_2:OnHealthChanged" "iterator" "Room8_Boss_HpCounter" "counter" "Room8_Boss_Hp" @@ -51,6 +56,7 @@ "name" "Big Snake" "method" "hpbar" "trigger" "Room8_Hp_Trigger2:OnStartTouch" + "hurttrigger" "Nostar_Boss_Break_2:OnHealthChanged" "iterator" "Room8_Boss_HpCounter" "counter" "Room8_Boss_Hp" diff --git a/BossHP/configs/bosshp/ze_Temple_v2_1.cfg b/BossHP/configs/bosshp/ze_Temple_v2_1.cfg deleted file mode 100644 index b29ddd0a..00000000 --- a/BossHP/configs/bosshp/ze_Temple_v2_1.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "1" - { - "name" "Dragon" - "method" "counter" - "trigger" "hp_add:OnStartTouch" - - "counter" "couner" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_abandoned_project_v1_2.cfg b/BossHP/configs/bosshp/ze_abandoned_project_v1_2.cfg index dda6fef0..825a50b0 100644 --- a/BossHP/configs/bosshp/ze_abandoned_project_v1_2.cfg +++ b/BossHP/configs/bosshp/ze_abandoned_project_v1_2.cfg @@ -5,7 +5,6 @@ "name" "Alien" "method" "counter" "trigger" "trigger_boss_activar:OnStartTouch" - "counter" "vidajefe" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_alien_shooter_v7.cfg b/BossHP/configs/bosshp/ze_alien_shooter_v7.cfg index 86408a62..8732f359 100644 --- a/BossHP/configs/bosshp/ze_alien_shooter_v7.cfg +++ b/BossHP/configs/bosshp/ze_alien_shooter_v7.cfg @@ -15,7 +15,6 @@ "name" "Alien" "method" "counter" "trigger" "trigger_hp_add_lasers:OnStartTouch" - "counter" "roshi_counter" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_alien_vs_predator_v4fix6.cfg b/BossHP/configs/bosshp/ze_alien_vs_predator_v5.cfg similarity index 76% rename from BossHP/configs/bosshp/ze_alien_vs_predator_v4fix6.cfg rename to BossHP/configs/bosshp/ze_alien_vs_predator_v5.cfg index fdadd6c6..7e7ca5f6 100644 --- a/BossHP/configs/bosshp/ze_alien_vs_predator_v4fix6.cfg +++ b/BossHP/configs/bosshp/ze_alien_vs_predator_v5.cfg @@ -1,10 +1,11 @@ "bosses" { - "0" + "0" //Stage 1 { "name" "Predator" "method" "hpbar" "trigger" "tku2:OnStartTouch" + "hurttrigger" "pr2_ph:OnDamaged" "iterator" "pirate_hp_iterations" "counter" "pirate_counter" @@ -15,30 +16,34 @@ "name" "Uterus" "method" "counter" "trigger" "bazaaren:OnStartTouch" + "hurttrigger" "pr_ph2sa:OnDamaged" "counter" "Health3s" } - "2" + "2" //Stage 2 { "name" "Alien" "method" "counter" "trigger" "mult:OnStartTouch" + "hurttrigger" "al_ph:OnDamaged" "counter" "al_hp" } - "3" + "3" //Stage 2 { "name" "Alien" "method" "counter" "trigger" "multpret2:OnStartTouch" + "hurttrigger" "al_ph:OnDamaged" "counter" "al_hp" } - "4" + "4" //Stage 2 { "name" "Alien" "method" "counter" "trigger" "multpredaliens:OnStartTouch" + "hurttrigger" "breakpredalien:OnDamaged" "counter" "matpred" } @@ -47,6 +52,7 @@ "name" "Uterus" "method" "counter" "trigger" "multlevel4boss1:OnStartTouch" + "hurttrigger" "doorlevel4phy:OnDamaged" "counter" "Health3s4" } @@ -55,6 +61,7 @@ "name" "Predator" "method" "hpbar" "trigger" "multpret3:OnStartTouch" + "hurttrigger" "pr2_ph:OnDamaged" "iterator" "pirate_hp_iterations" "counter" "pirate_counter" @@ -65,6 +72,7 @@ "name" "Uterus" "method" "counter" "trigger" "multpret:OnStartTouch" + "hurttrigger" "kuba2:OnDamaged" "counter" "lm12" } @@ -73,6 +81,7 @@ "name" "Alien" "method" "counter" "trigger" "activatboi2:OnStartTouch" + "hurttrigger" "pr_ph:OnDamaged" "counter" "pr_hp" } @@ -81,6 +90,7 @@ "name" "Uterus" "method" "counter" "trigger" "zadnica1:OnStartTouch" + "hurttrigger" "matkatriger:OnDamaged" "counter" "ruina" } @@ -97,6 +107,7 @@ "name" "Alien" "method" "counter" "trigger" "multpret:OnStartTouch" + "hurttrigger" "al_ph:OnDamaged" "counter" "al_hp" } diff --git a/BossHP/configs/bosshp/ze_amkoescape_v1337.cfg b/BossHP/configs/bosshp/ze_amkoescape_v1337.cfg index 3604c23e..74c60e4c 100644 --- a/BossHP/configs/bosshp/ze_amkoescape_v1337.cfg +++ b/BossHP/configs/bosshp/ze_amkoescape_v1337.cfg @@ -2,26 +2,23 @@ { "0" { - "name" "Boss" + "name" "Cube" "method" "counter" "trigger" "Boss_HP_Adder:OnStartTouch" - "counter" "Boss_HP" } "1" { - "name" "Boss" + "name" "Cube - Rage Mode" "method" "counter" - "trigger" "Boss_HP_Ragemode:OnStartTouch" - + "trigger" "Boss_HP:OnHitMin" "counter" "Boss_HP_Ragemode" } - "1" + "2" { - "name" "Boss" + "name" "Robot" "method" "counter" - "trigger" "trigger_multiple:OnStartTouch" - + "trigger" "Boss_return:OnDamaged" "counter" "Bossreturn_HP_Counter" } -} \ No newline at end of file +} diff --git a/BossHP/configs/bosshp/ze_avalanche_b6.cfg b/BossHP/configs/bosshp/ze_avalanche_b6.cfg index bbd7c2f6..444979a5 100644 --- a/BossHP/configs/bosshp/ze_avalanche_b6.cfg +++ b/BossHP/configs/bosshp/ze_avalanche_b6.cfg @@ -58,4 +58,4 @@ "counter" "bosslvl2_5_counter1" "backup" "bosslvl2_5_counter2" } -} \ No newline at end of file +} diff --git a/BossHP/configs/bosshp/ze_avalanche_reboot_beta7.cfg b/BossHP/configs/bosshp/ze_avalanche_reboot_beta7.cfg new file mode 100644 index 00000000..444979a5 --- /dev/null +++ b/BossHP/configs/bosshp/ze_avalanche_reboot_beta7.cfg @@ -0,0 +1,61 @@ +"bosses" +{ + "0" // Stage 5 + { + "name" "Helicopter_Boss" + "method" "counter" + "trigger" "bosslvl5_end_hptrigger:OnStartTouch" + + "counter" "bosslvl5_end_counter" + } + "1" // Stage 1 + { + "name" "Gargantua" + "method" "hpbar" + "trigger" "bosslvl1_trigger:OnStartTouch" + + "iterator" "bosslvl1_4_counter3" + "counter" "bosslvl1_4_counter1" + "backup" "bosslvl1_4_counter2" + } + "2" // Stage 3 + { + "name" "Station" + "method" "hpbar" + "trigger" "bosslvl3_trigger:OnStartTouch" + + "iterator" "bosslvl3_counter3" + "counter" "bosslvl3_counter1" + "backup" "bosslvl3_counter2" + } + "3" // Stage 2 + { + "name" "Cockroach" + "method" "hpbar" + "trigger" "bosslvl2_trigger:OnStartTouch" + + "iterator" "bosslvl2_5_counter3" + "counter" "bosslvl2_5_counter1" + "backup" "bosslvl2_5_counter2" + } + "1" // Stage 4 + { + "name" "Gargantua" + "method" "hpbar" + "trigger" "bosslvl4_trigger:OnStartTouch" + + "iterator" "bosslvl1_4_counter3" + "counter" "bosslvl1_4_counter1" + "backup" "bosslvl1_4_counter2" + } + "3" // Stage 2 + { + "name" "Cockroach" + "method" "hpbar" + "trigger" "bosslvl5_trigger:OnStartTouch" + + "iterator" "bosslvl2_5_counter3" + "counter" "bosslvl2_5_counter1" + "backup" "bosslvl2_5_counter2" + } +} diff --git a/BossHP/configs/bosshp/ze_bioshock_v6_2.cfg b/BossHP/configs/bosshp/ze_bioshock_v6_3.cfg similarity index 74% rename from BossHP/configs/bosshp/ze_bioshock_v6_2.cfg rename to BossHP/configs/bosshp/ze_bioshock_v6_3.cfg index 1416bb50..113cc1bc 100644 --- a/BossHP/configs/bosshp/ze_bioshock_v6_2.cfg +++ b/BossHP/configs/bosshp/ze_bioshock_v6_3.cfg @@ -5,6 +5,7 @@ "name" "Bouncer" "method" "hpbar" "trigger" "welcome_bouncer_enter_path1:OnPass" + "hurttrigger" "bouncer_physbox_hp:OnHealthChanged" "iterator" "bouncer_Health_HP" "counter" "bouncer_Health_BarHP" @@ -15,6 +16,7 @@ "name" "Fontaine" "method" "hpbar" "trigger" "fontaine_1_Start:OnTrigger" + "hurttrigger" "fontaine_1_hitbox:OnHealthChanged" "iterator" "fontaine_Health_HP" "counter" "fontaine_Health_BarHP" @@ -25,6 +27,7 @@ "name" "Cohen" "method" "hpbar" "trigger" "cohen_spawn_relay:OnTrigger" + "hurttrigger" "cohen_hitbox:OnHealthChanged" "iterator" "cohen_Health_HP" "counter" "cohen_Health_BarHP" @@ -34,7 +37,8 @@ { "name" "Songbird" "method" "hpbar" - "trigger" "songbird_start:OnTrigger" + "trigger" "songbird_addhealth_movelinear:OnFullyOpen" + "hurttrigger" "songbird_hitbox_head:OnHealthChanged" "iterator" "songbird_Health_HP" "counter" "songbird_Health_BarHP" @@ -45,7 +49,8 @@ "name" "Patriot" "method" "breakable" "trigger" "columbia_patriot_timer:OnTimer" + "hurttrigger" "columbia_patriot_health:OnTakeDamage" "breakable" "columbia_patriot_health" } -} \ No newline at end of file +} diff --git a/BossHP/configs/bosshp/ze_bioshock_v7.cfg b/BossHP/configs/bosshp/ze_bioshock_v7.cfg new file mode 100644 index 00000000..113cc1bc --- /dev/null +++ b/BossHP/configs/bosshp/ze_bioshock_v7.cfg @@ -0,0 +1,56 @@ +"bosses" +{ + "0" + { + "name" "Bouncer" + "method" "hpbar" + "trigger" "welcome_bouncer_enter_path1:OnPass" + "hurttrigger" "bouncer_physbox_hp:OnHealthChanged" + + "iterator" "bouncer_Health_HP" + "counter" "bouncer_Health_BarHP" + "backup" "bouncer_Health_Init" + } + "4" + { + "name" "Fontaine" + "method" "hpbar" + "trigger" "fontaine_1_Start:OnTrigger" + "hurttrigger" "fontaine_1_hitbox:OnHealthChanged" + + "iterator" "fontaine_Health_HP" + "counter" "fontaine_Health_BarHP" + "backup" "fontaine_Health_Init" + } + "4" + { + "name" "Cohen" + "method" "hpbar" + "trigger" "cohen_spawn_relay:OnTrigger" + "hurttrigger" "cohen_hitbox:OnHealthChanged" + + "iterator" "cohen_Health_HP" + "counter" "cohen_Health_BarHP" + "backup" "cohen_Health_Init" + } + "4" + { + "name" "Songbird" + "method" "hpbar" + "trigger" "songbird_addhealth_movelinear:OnFullyOpen" + "hurttrigger" "songbird_hitbox_head:OnHealthChanged" + + "iterator" "songbird_Health_HP" + "counter" "songbird_Health_BarHP" + "backup" "songbird_Health_Init" + } + "5" + { + "name" "Patriot" + "method" "breakable" + "trigger" "columbia_patriot_timer:OnTimer" + "hurttrigger" "columbia_patriot_health:OnTakeDamage" + + "breakable" "columbia_patriot_health" + } +} diff --git a/BossHP/configs/bosshp/ze_boatescape6_remix_fix2.cfg b/BossHP/configs/bosshp/ze_boatescape6_remix_fix2.cfg new file mode 100644 index 00000000..4fc1922d --- /dev/null +++ b/BossHP/configs/bosshp/ze_boatescape6_remix_fix2.cfg @@ -0,0 +1,10 @@ +"bosses" +{ + "0" + { + "name" "Henchman" + "method" "counter" + "trigger" "secret_boss_movelinear:OnFullyOpen" + "counter" "secret_boss_hp" + } +} diff --git a/BossHP/configs/bosshp/ze_bowser_in_the_fire_sea_v1e.cfg b/BossHP/configs/bosshp/ze_bowser_in_the_fire_sea_v1e.cfg index 0789a86f..f6901614 100644 --- a/BossHP/configs/bosshp/ze_bowser_in_the_fire_sea_v1e.cfg +++ b/BossHP/configs/bosshp/ze_bowser_in_the_fire_sea_v1e.cfg @@ -5,6 +5,7 @@ "name" "BOWSER" "method" "counter" "trigger" "ins_score_trigger:OnStartTouch" + "hurttrigger" "final_break_counter:OnHealthChanged" "counter" "final_counter" } @@ -13,6 +14,7 @@ "name" "BOWSER" "method" "counter" "trigger" "boss_hp_inc_hard:OnStartTouch" + "hurttrigger" "final_break_counter:OnHealthChanged" "counter" "boss_hp_counter" } @@ -21,6 +23,7 @@ "name" "BOWSER" "method" "counter" "trigger" "boss_hp_inc_vh:OnStartTouch" + "hurttrigger" "final_break_counter:OnHealthChanged" "counter" "boss_hp_counter" } @@ -29,6 +32,7 @@ "name" "BOWSER" "method" "counter" "trigger" "boss_hp_inc_ins:OnStartTouch" + "hurttrigger" "final_break_counter:OnHealthChanged" "counter" "boss_hp_counter" } diff --git a/BossHP/configs/bosshp/ze_castlevania_64_v1_1.cfg b/BossHP/configs/bosshp/ze_castlevania_64_v1_1.cfg new file mode 100644 index 00000000..7ac727d7 --- /dev/null +++ b/BossHP/configs/bosshp/ze_castlevania_64_v1_1.cfg @@ -0,0 +1,14 @@ +"bosses" +{ + "0" + { + "name" "Crest" + "method" "hpbar" + "trigger" "Stage2_Entrance_Trigger:OnStartTouch" + "hurttrigger" "Stage2_DoorCrest:OnDamaged" + + "iterator" "BossCounter3" + "counter" "BossCounter1" + "backup" "BossCounter2" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_castlevania_64_v1_2.cfg b/BossHP/configs/bosshp/ze_castlevania_64_v1_2.cfg new file mode 100644 index 00000000..7ac727d7 --- /dev/null +++ b/BossHP/configs/bosshp/ze_castlevania_64_v1_2.cfg @@ -0,0 +1,14 @@ +"bosses" +{ + "0" + { + "name" "Crest" + "method" "hpbar" + "trigger" "Stage2_Entrance_Trigger:OnStartTouch" + "hurttrigger" "Stage2_DoorCrest:OnDamaged" + + "iterator" "BossCounter3" + "counter" "BossCounter1" + "backup" "BossCounter2" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_castlevania_v1_3.cfg b/BossHP/configs/bosshp/ze_castlevania_v1_3.cfg index 8eeda9b6..8a05d73d 100644 --- a/BossHP/configs/bosshp/ze_castlevania_v1_3.cfg +++ b/BossHP/configs/bosshp/ze_castlevania_v1_3.cfg @@ -5,7 +5,7 @@ "name" "Sea Monster" "method" "hpbar" "trigger" "event_case_s1:OnCase04:47" - "killtrigger" "event_case_s1:OnCase05" + "killtrigger" "event_case_s1:OnCase05" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -16,7 +16,7 @@ "name" "Ogre" "method" "hpbar" "trigger" "event_case_s2:OnCase11:6" - "killtrigger" "event_case_s2:OnCase12" + "killtrigger" "event_case_s2:OnCase12" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -27,7 +27,7 @@ "name" "Slogra" "method" "hpbar" "trigger" "event_case_s3:OnCase11:12" - "killtrigger" "event_case_s3:OnCase13" + "killtrigger" "event_case_s3:OnCase13" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -38,7 +38,7 @@ "name" "Gaibon" "method" "hpbar" "trigger" "event_case_s3:OnCase13:10" - "killtrigger" "event_case_s3:OnCase14" + "killtrigger" "event_case_s3:OnCase14" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -49,7 +49,7 @@ "name" "Swamp Monster" "method" "hpbar" "trigger" "event_case_s4:OnCase09:15" - "killtrigger" "event_case_s4:OnCase10" +// "killtrigger" "event_case_s4:OnCase10" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -60,7 +60,7 @@ "name" "Spider Queen" "method" "hpbar" "trigger" "event_case_s5:OnCase08:21" - "killtrigger" "event_case_s5:OnCase09" + "killtrigger" "event_case_s5:OnCase09" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -71,7 +71,7 @@ "name" "Snow Titan" "method" "hpbar" "trigger" "event_case_s6:OnCase06:15" - "killtrigger" "event_case_s6:OnCase08" + "killtrigger" "event_case_s6:OnCase08" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" @@ -82,7 +82,7 @@ "name" "Snow Titan" "method" "hpbar" "trigger" "event_case_s6:OnCase08" - "killtrigger" "event_case_s6:OnCase09" + "killtrigger" "event_case_s6:OnCase09" "iterator" "boss_hpbar_overlaycounter" "counter" "boss_counter" diff --git a/BossHP/configs/bosshp/ze_christmas_beta3f.cfg b/BossHP/configs/bosshp/ze_christmas_beta3f.cfg deleted file mode 100644 index 9a9d7560..00000000 --- a/BossHP/configs/bosshp/ze_christmas_beta3f.cfg +++ /dev/null @@ -1,33 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Angry Santa" - "method" "hpbar" - "trigger" "Lvl1_Boss_HealthTr:OnStartTouch" - - "iterator" "Boss_HealthCount" - "counter" "Boss_Health" - "backup" "Boss_HealthInit" - } - "1" - { - "name" "Angry Santa" - "method" "hpbar" - "trigger" "Lvl2_Boss_HealthTr:OnStartTouch" - - "iterator" "Boss_HealthCount" - "counter" "Boss_Health" - "backup" "Boss_HealthInit" - } - "2" - { - "name" "Subzero" - "method" "hpbar" - "trigger" "Lvl3_Boss_HealthTr:OnStartTouch" - - "iterator" "Boss_HealthCount" - "counter" "Boss_Health" - "backup" "Boss_HealthInit" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_chroma_v0_4.cfg b/BossHP/configs/bosshp/ze_chroma_v0_4.cfg index 6e3ef9e6..bd038c4c 100644 --- a/BossHP/configs/bosshp/ze_chroma_v0_4.cfg +++ b/BossHP/configs/bosshp/ze_chroma_v0_4.cfg @@ -1,20 +1,20 @@ -"bosses" -{ - "0" - { - "name" "Segments" - "method" "counter" - "trigger" "tr_bossaddhp:OnStartTouch" - - "counter" "counter_boss" - } - "1" - { - "name" "Boss" - "method" "breakable" - "trigger" "tr_bossaddhp:OnStartTouch" - "multitrigger" "1" - - "breakable" "pbox_boss" - } +"bosses" +{ + "0" + { + "name" "Segments" + "method" "counter" + "trigger" "tr_bossaddhp:OnStartTouch" + + "counter" "counter_boss" + } + "1" + { + "name" "Boss" + "method" "breakable" + "trigger" "tr_bossaddhp:OnStartTouch" + "multitrigger" "1" + + "breakable" "pbox_boss" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_crazy_escape_css2.cfg b/BossHP/configs/bosshp/ze_crazy_escape_css2.cfg new file mode 100644 index 00000000..c3bf62ee --- /dev/null +++ b/BossHP/configs/bosshp/ze_crazy_escape_css2.cfg @@ -0,0 +1,86 @@ +"bosses" +{ + "0" + { + "name" "Sinner" + "method" "counter" + "trigger" "sinnerboss_hp_trigger:OnStartTouch" + + "counter" "sinnerboss_hp" + } + "1" + { + "name" "Naraka" + "method" "hpbar" + "trigger" "naraka_count_players:OnStartTouch" + + "counter" "naraka_counter" + "iterator" "naraka_hp_iterations" + "backup" "naraka_hp_backup" + } + "2" + { + "name" "Zombie Breakable Box" + "method" "counter" + "trigger" "nrk3_room4_zombie_breakable:OnTakeDamage" + "showtrigger" "nrk3_room4_zombie_breakable:OnTakeDamage" + + "timeout" "3" + + "counter" "nrk3_room3_box_hp" + + + } + "3" + { + "name" "Trump's Wall -- Humans" + "method" "counter" + "trigger" "trumpwall_humans_hp_trigger:OnStartTouch" + + "counter" "trumpwall_humans_hp" + } + "4" + { + "name" "Trump's Wall -- Zombies" + "method" "counter" + "trigger" "trumpwall_zombies_hp_trigger:OnStartTouch" + + "counter" "trumpwall_zombies_hp" + } + "5" + { + "name" "Naraka" + "method" "hpbar" + "trigger" "naraka_count_players2:OnStartTouch" + + "counter" "naraka_counter2" + "iterator" "naraka_hp_iterations2" + "backup" "naraka_hp_backup2" + } + "6" + { + "name" "Naraka's Ultimate -- Laser Boss" + "method" "hpbar" + "trigger" "naraka_ultimate_count:OnStartTouch" + + "counter" "naraka_ultimate_counter" + "iterator" "naraka_ultimate_hp_iterations" + "backup" "naraka_ultimate_hp_backup" + } + "7" + { + "name" "Trump's Wall -- Left Button" + "method" "counter" + "trigger" "nrk3_room5_button_trigger:OnStartTouch" + + "counter" "trumpwall_left_button_hp" + } + "8" + { + "name" "Trump's Wall -- Right Button" + "method" "counter" + "trigger" "nrk3_room5_button_trigger:OnStartTouch" + + "counter" "trumpwall_right_button_hp" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_dangerous_waters_v1a.cfg b/BossHP/configs/bosshp/ze_dangerous_waters_v1a.cfg new file mode 100644 index 00000000..5c435b22 --- /dev/null +++ b/BossHP/configs/bosshp/ze_dangerous_waters_v1a.cfg @@ -0,0 +1,36 @@ +"bosses" +{ + "0" + { + "name" "Tree" + "method" "breakable" + "trigger" "Heli 19:OnPass" + "showtrigger" "Tree 1 Breakable:OnTakeDamage" + "hurttrigger" "Tree 1 Breakable:OnTakeDamage" + "timeout" "4" + + "breakable" "Tree 1 Breakable" + } + "1" + { + "name" "Rock" + "method" "breakable" + "trigger" "Heli 66:OnPass" + "showtrigger" "Rock Breakable:OnTakeDamage" + "hurttrigger" "Rock Breakable:OnTakeDamage" + "timeout" "4" + + "breakable" "Rock Breakable" + } + "2" + { + "name" "Wall" + "method" "breakable" + "trigger" "Heli 100:OnPass" + "showtrigger" "Wall Breakable 1:OnTakeDamage" + "hurttrigger" "Wall Breakable 1:OnTakeDamage" + "timeout" "4" + + "breakable" "Wall Breakable 1" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_dark_souls_ptd_v0_4.cfg b/BossHP/configs/bosshp/ze_dark_souls_ptd_v0_4.cfg index 44254d99..8b1cde69 100644 --- a/BossHP/configs/bosshp/ze_dark_souls_ptd_v0_4.cfg +++ b/BossHP/configs/bosshp/ze_dark_souls_ptd_v0_4.cfg @@ -5,6 +5,7 @@ "name" "Stray Demon" "method" "counter" "trigger" "Asylum_Demon_HP_Add:OnStartTouch" + "hurttrigger" "Asylum_Demon_Hitbox:OnHealthChanged" "counter" "Asylum_Demon_Counter" } @@ -13,6 +14,7 @@ "name" "Old Witch" "method" "counter" "trigger" "Broadhead_HP_Add:OnStartTouch" + "hurttrigger" "Broadhead_Phys_Body:OnHealthChanged" "counter" "Broadhead_Counter" } @@ -21,6 +23,7 @@ "name" "Golem" "method" "counter" "trigger" "Golem_Boss_Push_HP:OnStartTouch" + "hurttrigger" "Golem_Phys_Body:OnHealthChanged" "counter" "Golem_Counter" } @@ -30,6 +33,7 @@ "method" "counter" "trigger" "Gwyndolin_Push_HP:OnStartTouch" "killtrigger" "Phase2_Add_HP:OnStartTouch" + "hurttrigger" "Gwyndolin_Phys_Body:OnHealthChanged" "counter" "Gwyndolin_Counter" } @@ -39,6 +43,7 @@ "method" "counter" "trigger" "Gwyndolin_Push_HP:OnStartTouch" "killtrigger" "Phase2_Add_HP:OnStartTouch" + "hurttrigger" "Ornstein_Phys_Body:OnHealthChanged" "counter" "2Ornstein_Counter" } @@ -47,6 +52,7 @@ "name" "Phase 2" "method" "counter" "trigger" "Phase2_Add_HP:OnStartTouch" + "hurttrigger" "Ornstein_Phys_Body:OnHealthChanged" "counter" "Phase2_Counter" } @@ -55,7 +61,17 @@ "name" "Gwyn" "method" "counter" "trigger" "Gwyn_Push_HP:OnStartTouch" + "hurttrigger" "Gwyn_Phys_Body:OnHealthChanged" "counter" "Gwyn_Counter" } + "7" // Gargoyle + { + "name" "Gargoyle" + "method" "counter" + "trigger" "Gargoyle_HP_Add:OnStartTouch" + "hurttrigger" "Gargoyle_Phys:OnHealthChanged" + + "counter" "Gargoyle_Counter" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_dark_souls_v2.cfg b/BossHP/configs/bosshp/ze_dark_souls_v2.cfg new file mode 100644 index 00000000..44254d99 --- /dev/null +++ b/BossHP/configs/bosshp/ze_dark_souls_v2.cfg @@ -0,0 +1,61 @@ +"bosses" +{ + "0" // Stray Demon + { + "name" "Stray Demon" + "method" "counter" + "trigger" "Asylum_Demon_HP_Add:OnStartTouch" + + "counter" "Asylum_Demon_Counter" + } + "1" // Old Witch + { + "name" "Old Witch" + "method" "counter" + "trigger" "Broadhead_HP_Add:OnStartTouch" + + "counter" "Broadhead_Counter" + } + "2" // Golem + { + "name" "Golem" + "method" "counter" + "trigger" "Golem_Boss_Push_HP:OnStartTouch" + + "counter" "Golem_Counter" + } + "3" // Gwyndolin / Ornstein + { + "name" "Gwyndolin" + "method" "counter" + "trigger" "Gwyndolin_Push_HP:OnStartTouch" + "killtrigger" "Phase2_Add_HP:OnStartTouch" + + "counter" "Gwyndolin_Counter" + } + "4" + { + "name" "Ornstein" + "method" "counter" + "trigger" "Gwyndolin_Push_HP:OnStartTouch" + "killtrigger" "Phase2_Add_HP:OnStartTouch" + + "counter" "2Ornstein_Counter" + } + "5" + { + "name" "Phase 2" + "method" "counter" + "trigger" "Phase2_Add_HP:OnStartTouch" + + "counter" "Phase2_Counter" + } + "6" // Gwyn + { + "name" "Gwyn" + "method" "counter" + "trigger" "Gwyn_Push_HP:OnStartTouch" + + "counter" "Gwyn_Counter" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_deadcore_c10.cfg b/BossHP/configs/bosshp/ze_deadcore_c10.cfg deleted file mode 100644 index bca3fbc6..00000000 --- a/BossHP/configs/bosshp/ze_deadcore_c10.cfg +++ /dev/null @@ -1,67 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Red Cube" - "method" "breakable" - "trigger" "enemy1_temp1:OnEntitySpawned" - "showtrigger" "enemy1_core1:OnTakeDamage" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "breakable" "enemy1_core1" - } - "1" - { - "name" "Green Cube" - "method" "breakable" - "trigger" "enemy2_temp1:OnEntitySpawned" - "showtrigger" "enemy2_core1:OnTakeDamage" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "breakable" "enemy2_core1" - } - "2" - { - "name" "Blue Cube" - "method" "breakable" - "trigger" "enemy3_temp1:OnEntitySpawned" - "showtrigger" "enemy3_core1:OnTakeDamage" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "breakable" "enemy3_core1" - } - "3" - { - "name" "Crystal" - "method" "breakable" - "trigger" "enemy4_temp1:OnEntitySpawned" - "showtrigger" "enemy4_core1:OnTakeDamage" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "breakable" "enemy4_core1" - } - "4" - { - "name" "Crystals left" - "method" "counter" - "trigger" "b_boss_relay1:OnTrigger" - - "counter" "b_boss_counter1" - } - "5" - { - "name" "Crystals left" - "method" "counter" - "trigger" "c_t3:OnStartTouch" - - "counter" "c_crystal_counter1" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_deadcore_s6.cfg b/BossHP/configs/bosshp/ze_deadcore_s6.cfg index 88dd757d..af798fe5 100644 --- a/BossHP/configs/bosshp/ze_deadcore_s6.cfg +++ b/BossHP/configs/bosshp/ze_deadcore_s6.cfg @@ -6,6 +6,7 @@ "method" "breakable" "trigger" "enemy1_temp1:OnEntitySpawned" "showtrigger" "enemy1_core1:OnTakeDamage" + "hurttrigger" "enemy1_core1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -18,6 +19,7 @@ "method" "breakable" "trigger" "enemy2_temp1:OnEntitySpawned" "showtrigger" "enemy2_core1:OnTakeDamage" + "hurttrigger" "enemy2_core1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -30,25 +32,27 @@ "method" "breakable" "trigger" "enemy3_temp1:OnEntitySpawned" "showtrigger" "enemy3_core1:OnTakeDamage" + "hurttrigger" "enemy3_core1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" "breakable" "enemy3_core1" } - "3" + "3" // B Boss { "name" "Crystal" "method" "breakable" "trigger" "enemy4_temp1:OnEntitySpawned" "showtrigger" "enemy4_core1:OnTakeDamage" + "hurttrigger" "enemy4_core1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" "breakable" "enemy4_core1" } - "4" + "4" // B Boss { "name" "Crystals left" "method" "counter" @@ -56,30 +60,32 @@ "counter" "b_boss_counter1" } - "5" + "5" // Stage C { "name" "Crystals left" "method" "counter" - "trigger" "c_t3:OnStartTouch" + "trigger" "c_relay:OnUser1" + "showtrigger" "c_t3:OnStartTouch" "counter" "c_crystal_counter1" } "6" // D Boss - { - "name" "Core: Segments Left" - "method" "counter" - "trigger" "radiation_startrelay1:OnTrigger" - "showtrigger" "radiation_hptrigger:OnStartTouch" - - "counter" "radiation_hpmasscounter" - } - "7" // D Boss - { - "name" "Core: Current Segment" - "method" "counter" - "trigger" "radiation_startrelay1:OnTrigger" - "showtrigger" "radiation_hptrigger:OnStartTouch" - - "counter" "radiation_hpcounter" - } -} \ No newline at end of file + { + "name" "Segments Left" + "method" "counter" + "trigger" "radiation_startrelay1:OnTrigger" + "showtrigger" "radiation_hptrigger:OnStartTouch" + + "counter" "radiation_hpmasscounter" + } + "7" // D Boss + { + "name" "Current Segment" + "method" "counter" + "trigger" "radiation_startrelay1:OnTrigger" + "showtrigger" "radiation_hptrigger:OnStartTouch" + "hurttrigger" "radiation_target:OnHealthChanged" + + "counter" "radiation_hpcounter" + } +} diff --git a/BossHP/configs/bosshp/ze_destruction_of_exorath_re3.cfg b/BossHP/configs/bosshp/ze_destruction_of_exorath_re3.cfg new file mode 100644 index 00000000..f69d6099 --- /dev/null +++ b/BossHP/configs/bosshp/ze_destruction_of_exorath_re3.cfg @@ -0,0 +1,31 @@ +"bosses" +{ + + "2" + { + "name" "Plants left" + "method" "counter" + "trigger" "map_stages:OnCase03" + "counter" "nuke_secret_counter" + "showtrigger" "nuke_secret_counter:OutValue" + "timeout" "3" + } + "3" + { + "name" "Plants left" + "method" "counter" + "trigger" "map_stages:OnCase04" + "counter" "nuke_secret_counter" + "showtrigger" "nuke_secret_counter:OutValue" + "timeout" "3" + } + "4" + { + "name" "Plants left" + "method" "counter" + "trigger" "map_stages:OnCase05" + "counter" "nuke_secret_counter" + "showtrigger" "nuke_secret_counter:OutValue" + "timeout" "3" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_dev_r4a.cfg b/BossHP/configs/bosshp/ze_dev_r4a.cfg new file mode 100644 index 00000000..f330ae2c --- /dev/null +++ b/BossHP/configs/bosshp/ze_dev_r4a.cfg @@ -0,0 +1,39 @@ +"bosses" +{ + "0" + { + "name" "Boss" + "method" "breakable" + "trigger" "#7483:OnStartTouch" + "hurttrigger" "lasercube:OnTakeDamage" + + "breakable" "lasercube" + } + "1" + { + "name" "Boss" + "method" "breakable" + "trigger" "l2Bosshpscale:OnStartTouch" + "hurttrigger" "l2Boss:OnTakeDamage" + + "breakable" "l2Boss" + } + "2" + { + "name" "Boss" + "method" "breakable" + "trigger" "l3bosshpscale:OnStartTouch" + "hurttrigger" "l3boss:OnTakeDamage" + + "breakable" "l3boss" + } + "3" + { + "name" "Boss" + "method" "breakable" + "trigger" "l3bosslaserscale:OnStartTouch" + "hurttrigger" "laserL3:OnTakeDamage" + + "breakable" "laserL3" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_doom3_beta.cfg b/BossHP/configs/bosshp/ze_doom3_beta.cfg deleted file mode 100644 index f4a19e60..00000000 --- a/BossHP/configs/bosshp/ze_doom3_beta.cfg +++ /dev/null @@ -1,23 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Guardian" - "method" "hpbar" - "trigger" "Noctali_Boss_Hp_To_Boss1:OnStartTouch" - - "iterator" "pirate_hp_iterations1" - "counter" "pirate_counter1" - "backup" "pirate_hp_backup1" - } - "1" - { - "name" "Invul" - "method" "hpbar" - "trigger" "Noctali_Boss_Hp_To_Boss:OnStartTouch" - - "iterator" "pirate_hp_iterations" - "counter" "pirate_counter" - "backup" "pirate_hp_backup" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_doom3_v1.cfg b/BossHP/configs/bosshp/ze_doom3_v1.cfg index 1bf7bf16..ce341be5 100644 --- a/BossHP/configs/bosshp/ze_doom3_v1.cfg +++ b/BossHP/configs/bosshp/ze_doom3_v1.cfg @@ -9,6 +9,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "4" + "hurttrigger" "npc_phys2gg2:OnTakeDamage" "breakable" "npc_phys2gg2" } @@ -21,6 +22,7 @@ "multitrigger" "1" "namefixup" "1" "timeout" "4" + "hurttrigger" "npc_phys2gg3:OnTakeDamage" "breakable" "npc_phys2gg3" } @@ -40,6 +42,8 @@ "method" "breakable" "trigger" "stage2_trigger:OnStartTouch" "timeout" "3" + "hurttrigger" "vedr1blac:OnTakeDamage" + "breakable" "vedr1blac" } "4" @@ -47,6 +51,8 @@ "name" "The Doctor Bertruger" "method" "counter" "trigger" "stage3_bertug_hp:OnStartTouch" + "hurttrigger" "stage3_bertug_phys:OnDamaged" + "counter" "hp_bertug" } "2" diff --git a/BossHP/configs/bosshp/ze_doom_v1_1.cfg b/BossHP/configs/bosshp/ze_doom_v1_1.cfg new file mode 100644 index 00000000..90f3a876 --- /dev/null +++ b/BossHP/configs/bosshp/ze_doom_v1_1.cfg @@ -0,0 +1,39 @@ +"bosses" +{ + "0" + { + "name" "Boss Phase 1/4" + "method" "breakable" + "trigger" "boss_trigger:OnStartTouch" + "hurttrigger" "Bossheadbegin:OnTakeDamage" + + "breakable" "Bossheadbegin" + } + "1" + { + "name" "Boss Phase 2/4" + "method" "breakable" + "trigger" "Bossheadfirst:OnAwakened" + "hurttrigger" "Bossheadfirst:OnTakeDamage" + + "breakable" "Bossheadfirst" + } + "2" + { + "name" "Boss Phase 3/4" + "method" "breakable" + "trigger" "Bossheadsecond:OnAwakened" + "hurttrigger" "Bossheadsecond:OnTakeDamage" + + "breakable" "Bossheadsecond" + } + "3" + { + "name" "Boss Phase 4/4" + "method" "breakable" + "trigger" "BossHeadfinal:OnAwakened" + "hurttrigger" "BossHeadfinal:OnTakeDamage" + + "breakable" "BossHeadfinal" + } +} diff --git a/BossHP/configs/bosshp/ze_doorhug_and_solo_v5.cfg b/BossHP/configs/bosshp/ze_doorhug_and_solo_v5.cfg deleted file mode 100644 index 05c891de..00000000 --- a/BossHP/configs/bosshp/ze_doorhug_and_solo_v5.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "1" - { - "name" "Hemah" - "method" "counter" - "trigger" "Boss_HP_Add:OnStartTouch" - - "counter" "Boss_Counter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_dreamin_v1_8s.cfg b/BossHP/configs/bosshp/ze_dreamin_v1_8s.cfg new file mode 100644 index 00000000..39cf3e51 --- /dev/null +++ b/BossHP/configs/bosshp/ze_dreamin_v1_8s.cfg @@ -0,0 +1,39 @@ +"bosses" +{ + "0" + { + "name" "Phase Health" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "counter" "HPCounter2" + } + "1" + { + "name" "Phases left" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "counter" "HPCounterIterator2" + } + "2" + { + "name" "Phase Health" + "method" "counter" + "trigger" "HPCounterIterator2:OutValue" + "counter" "HPCounter2" + "multitrigger" "1" + } + "3" + { + "name" "Crystal" + "method" "counter" + "trigger" "boss_to_blade2:OnStartTouch" + "counter" "blade_hp" + } + "4" + { + "name" "???" + "method" "breakable" + "trigger" "st2_hitbox:OnDamaged" + "breakable" "st2_hitbox" + } +} diff --git a/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix3.cfg b/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix3.cfg new file mode 100644 index 00000000..5acb6464 --- /dev/null +++ b/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix3.cfg @@ -0,0 +1,67 @@ +"bosses" +{ + "-2" + { + "name" "Crystal" + "method" "breakable" + "trigger" "#23551:OnHealthChanged" + "hurttrigger" "#23551:OnTakeDamage" + "breakable" "#23551" + } + "-1" + { + "name" "Crystal" + "method" "breakable" + "trigger" "#3664:OnHealthChanged" + "hurttrigger" "#3664:OnTakeDamage" + "breakable" "#3664" + } + "0" + { + "name" "Phase Health" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "hurttrigger" "boss_target:OnHealthChanged" + "counter" "HPCounter2" + } + "1" + { + "name" "Phases left" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "counter" "HPCounterIterator2" + } + "2" + { + "name" "Phase Health" + "method" "counter" + "trigger" "HPCounterIterator2:OutValue" + "hurttrigger" "boss_target:OnHealthChanged" + "counter" "HPCounter2" + "multitrigger" "1" + } + "3" + { + "name" "Crystal" + "method" "counter" + "trigger" "boss_to_blade2:OnStartTouch" + "hurttrigger" "boss_target2:OnHealthChanged" + "counter" "blade_hp" + } + "4" + { + "name" "???" + "method" "breakable" + "trigger" "st2_hitbox:OnDamaged" + "hurttrigger" "st2_hitbox:OnTakeDamage" + "breakable" "st2_hitbox" + } + "5" + { + "name" "???" + "method" "counter" + "trigger" "st3_hitbox:OnDamaged" + "hurttrigger" "st3_hitbox:OnHealthChanged" + "counter" "st3_hp" + } +} diff --git a/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix4.cfg b/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix4.cfg new file mode 100644 index 00000000..3c6d903e --- /dev/null +++ b/BossHP/configs/bosshp/ze_dreamin_v2_1s_fix4.cfg @@ -0,0 +1,67 @@ +"bosses" +{ + "-2" + { + "name" "Crystal" + "method" "breakable" + "trigger" "#23551:OnHealthChanged" + "hurttrigger" "#23551:OnTakeDamage" + "breakable" "#23551" + } + "-1" + { + "name" "Crystal" + "method" "breakable" + "trigger" "#3664:OnHealthChanged" + "hurttrigger" "#3664:OnTakeDamage" + "breakable" "#3664" + } + "0" + { + "name" "Phase Health" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "hurttrigger" "boss_target:OnHealthChanged" + "counter" "HPCounter2" + } + "1" + { + "name" "Phases left" + "method" "counter" + "trigger" "boss_teleport:OnStartTouch" + "counter" "HPCounterIterator2" + } + "2" + { + "name" "Phase Health" + "method" "counter" + "trigger" "HPCounterIterator2:OutValue" + "hurttrigger" "boss_target:OnHealthChanged" + "counter" "HPCounter2" + "multitrigger" "1" + } + "3" + { + "name" "Crystal" + "method" "counter" + "trigger" "boss_to_blade2:OnStartTouch" + "hurttrigger" "boss_target2:OnHealthChanged" + "counter" "blade_hp" + } + "4" + { + "name" "???" + "method" "breakable" + "trigger" "st2_hitbox:OnHealthChanged" + "hurttrigger" "st2_hitbox:OnTakeDamage" + "breakable" "st2_hitbox" + } + "5" + { + "name" "???" + "method" "counter" + "trigger" "st3_hitbox:OnHealthChanged" + "hurttrigger" "st3_hitbox:OnTakeDamage" + "counter" "st3_hp" + } +} diff --git a/BossHP/configs/bosshp/ze_eden_a3s.cfg b/BossHP/configs/bosshp/ze_eden_a3s.cfg new file mode 100644 index 00000000..842c79bc --- /dev/null +++ b/BossHP/configs/bosshp/ze_eden_a3s.cfg @@ -0,0 +1,11 @@ +"bosses" +{ + "0" + { + "name" "Anomaly" + "method" "breakable" + "trigger" "boss_hp:OnStartTouch" + + "breakable" "boss_physbox" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_epic_end_v4_3.cfg b/BossHP/configs/bosshp/ze_epic_end_v4_3.cfg deleted file mode 100644 index 6e62e422..00000000 --- a/BossHP/configs/bosshp/ze_epic_end_v4_3.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Hedgehog" - "method" "counter" - "trigger" "XP_LEGO_BOSS:OnStartTouch" - - "counter" "math_boss" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_eternal_journey_v1_1.cfg b/BossHP/configs/bosshp/ze_eternal_journey_v1_1.cfg new file mode 100644 index 00000000..9a59e093 --- /dev/null +++ b/BossHP/configs/bosshp/ze_eternal_journey_v1_1.cfg @@ -0,0 +1,24 @@ +"bosses" +{ + "0" + { + "name" "Glasgavelen" + "method" "hpbar" + "trigger" "stg2_mutant_add_hp:OnStartTouch" + + "iterator" "mutant_hp_iterations" + "counter" "mutant_counter" + "backup" "mutant_hp_backup" + } + + "1" + { + "name" "Cromcruach" + "method" "hpbar" + "trigger" "stg3_mutant2_add_hp:OnStartTouch" + + "iterator" "mutant2_hp_iterations" + "counter" "mutant2_counter" + "backup" "mutant2_hp_backup" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_evernight_a2_2s.cfg b/BossHP/configs/bosshp/ze_evernight_a2_2s.cfg deleted file mode 100644 index 6670c697..00000000 --- a/BossHP/configs/bosshp/ze_evernight_a2_2s.cfg +++ /dev/null @@ -1,25 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Crystal" - "method" "counter" - "trigger" "act1_crystal:OnHealthChanged" - "counter" "crystal_hp" - - } - "1" - { - "name" "Basileusis" - "method" "counter" - "trigger" "act1_brige_count_trigger:OnStartTouch" - "counter" "imagebasileusis_hp" - } - "2" - { - "name" "Magic Ball" - "method" "counter" - "trigger" "act2_boss_hpadd:OnStartTouch" - "counter" "act2_boss_hp" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_evernight_a3_4_css2.cfg b/BossHP/configs/bosshp/ze_evernight_a3_4_css2.cfg new file mode 100644 index 00000000..4c8bb4da --- /dev/null +++ b/BossHP/configs/bosshp/ze_evernight_a3_4_css2.cfg @@ -0,0 +1,71 @@ +"bosses" +{ + "0" + { + "name" "Boss" + "method" "hpbar" + "trigger" "Boss_1_Hpadd:OnStartTouch" + + "iterator" "Boss_1_Hp_Overlay" + "counter" "Boss_1_Hp" + "backup" "Boss_1_Hp_Init" + } + + "1" + { + "name" "Boss Orb" + "method" "hpbar" + "trigger" "Boss_2_Hpadd:OnStartTouch" + + "iterator" "Boss_2_Hp_Overlay" + "counter" "Boss_2_Hp" + "backup" "Boss_2_Hp_Init" + } + "2" + { + "name" "Arcane Orb" + "method" "counter" + "trigger" "Boss_2_Hpadd:OnStartTouch" + "killtrigger" "Boss_2_Phase_Switcher:OnLessThan" + + "counter" "Boss_2_Hp_Arc" + } + "3" + { + "name" "Blizzard Orb" + "method" "counter" + "trigger" "Boss_2_Hpadd:OnStartTouch" + "killtrigger" "Boss_2_Phase_Switcher:OnLessThan" + + "counter" "Boss_2_Hp_Blizzard" + } + "4" + { + "name" "Hurricane Orb" + "method" "counter" + "trigger" "Boss_2_Hpadd:OnStartTouch" + "killtrigger" "Boss_2_Phase_Switcher:OnLessThan" + + "counter" "Boss_2_Hp_Hurricane" + } + "5" + { + "name" "Lava Orb" + "method" "counter" + "trigger" "Boss_2_Hpadd:OnStartTouch" + "killtrigger" "Boss_2_Phase_Switcher:OnLessThan" + + "counter" "Boss_2_Hp_Lava" + } + + "6" + { + "name" "Boss" + "method" "hpbar" + "trigger" "Boss_3_Hpadd:OnStartTouch" + + "iterator" "Boss_3_Hp_Overlay" + "counter" "Boss_3_Hp" + "backup" "Boss_3_Hp_Init" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_fapescape_rote_v1_3f.cfg b/BossHP/configs/bosshp/ze_fapescape_rote_v1_3f.cfg index fb72f2c0..8ae977d0 100644 --- a/BossHP/configs/bosshp/ze_fapescape_rote_v1_3f.cfg +++ b/BossHP/configs/bosshp/ze_fapescape_rote_v1_3f.cfg @@ -5,6 +5,7 @@ "name" "Pencil" "method" "hpbar" "trigger" "#459232:OnStartTouch" + "hurttrigger" "stage1_boss_phys:OnHealthChanged" "iterator" "boss_hp_iterations" "counter" "boss_hp" @@ -15,6 +16,7 @@ "name" "Kappa" "method" "hpbar" "trigger" "#465328:OnStartTouch" + "hurttrigger" "stage2_normal_bossphys2:OnHealthChanged" "iterator" "boss_hp2_iterations" "counter" "boss_hp2" @@ -25,6 +27,7 @@ "name" "Pingu" "method" "hpbar" "trigger" "#1257636:OnStartTouch" + "hurttrigger" "stage_3_normal_boss_24:OnHealthChanged" "iterator" "boss_hp3_iterations" "counter" "boss_hp3" @@ -35,6 +38,7 @@ "name" "Robot" "method" "hpbar" "trigger" "#1532233:OnStartTouch" + "hurttrigger" "stage_1_ex_boss_34:OnHealthChanged" "iterator" "boss_hp_ex1_iterations" "counter" "boss_hp_ex1" @@ -45,6 +49,7 @@ "name" "Robot" "method" "hpbar" "trigger" "#1342349:OnStartTouch" + "hurttrigger" "stage_2_ex_boss_52:OnHealthChanged" "iterator" "boss_hp_ex2_iterations" "counter" "boss_hp_ex2" @@ -55,6 +60,7 @@ "name" "Evil Eye - Phase 1" "method" "counter" "trigger" "#3403461:OnStartTouch" + "hurttrigger" "final_boss_phase_one_34:OnHealthChanged" "counter" "boss_hp4_phase1" } @@ -63,6 +69,7 @@ "name" "Evil Eye - Phase 2" "method" "counter" "trigger" "#1761267:OnHitMin" + "hurttrigger" "final_boss_phase_two_1:OnHealthChanged" "counter" "boss_hp4_phase2" } @@ -71,6 +78,7 @@ "name" "Evil Eye - Phase 3" "method" "counter" "trigger" "#1930773:OnHitMin" + "hurttrigger" "final_boss_phase_three_46:OnHealthChanged" "counter" "boss_hp4_phase3" } diff --git a/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v2_1.cfg b/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v2_1.cfg deleted file mode 100644 index 4965545b..00000000 --- a/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v2_1.cfg +++ /dev/null @@ -1,63 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Gi Nattak" - "method" "hpbar" - "trigger" "Hold7_Trigger:OnTrigger:35" - - "iterator" "Special_HealthCount" - "counter" "Special_Health" - "backup" "Special_HealthInit" - } - "1" - { - "name" "Pampa" - "method" "counter" - "trigger" "lvl2_Gi_Nattak_HP_Add:OnStartTouch" - - "counter" "Chocobo_End_Counter" - } - "2" - { - "name" "Gi Nattak" - "method" "counter" - "trigger" "Hard_End_Relay:OnTrigger:3" - - "counter" "lvl2_Gi_Nattak_Counter" - } - "3" - { - "name" "Ifrit" - "method" "counter" - "trigger" "Hojo_Temp:OnEntitySpawned" - - "counter" "lvl2_Gi_Nattak_Counter" - } - "4" - { - "name" "Ifrit" - "method" "hpbar" - "trigger" "Shinra_Arena_HP_Add:OnStartTouch" - - "iterator" "Special_HealthCount" - "counter" "Special_Health" - "backup" "Special_HealthInit" - } - "5" - { - "name" "Genesis" - "method" "counter" - "trigger" "Genesis_Temp:OnEntitySpawned" - - "counter" "Genesis_Counter" - } - "6" - { - "name" "Ifrit" - "method" "counter" - "trigger" "Ifrit_Rage_Temp:OnEntitySpawned" - - "counter" "Rage2_Ifrit_Counter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v5fix.cfg b/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v5fix.cfg index 8815bfb0..37d91e56 100644 --- a/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v5fix.cfg +++ b/BossHP/configs/bosshp/ze_ffvii_cosmo_canyon_v5fix.cfg @@ -5,6 +5,7 @@ "name" "Gi Nattak" "method" "hpbar" "trigger" "Hold7_Trigger:OnTrigger:35" + "hurttrigger" "Gi_Nattak_Bullet_Branch:OnTrue" "iterator" "Special_HealthCount" "counter" "Special_Health" @@ -15,6 +16,7 @@ "name" "Bomb" "method" "counter" "trigger" "Hard_End:OnTrigger" + "hurttrigger" "lvl2_Boss_Hitbox:OnHealthChanged" "counter" "lvl2_Gi_Nattak_Counter" } @@ -23,6 +25,7 @@ "name" "Ifrit" "method" "counter" "trigger" "Hojo_Temp:OnEntitySpawned" + "hurttrigger" "lvl3_end_boss:OnHealthChanged" "counter" "lvl2_Gi_Nattak_Counter" } @@ -31,6 +34,7 @@ "name" "Genesis" "method" "hpbar" "trigger" "Shinra_Elevator_Path_3:OnPass" + "hurttrigger" "Ifrit_Phys_Body:OnHealthChanged" "iterator" "Special_HealthCount" "counter" "Special_Health" @@ -42,6 +46,7 @@ "method" "counter" "trigger" "Shinra_Ifrit_Phys:OnTakeDamage" "timeout" "3" + "hurttrigger" "Shinra_Ifrit_Phys:OnHealthChanged" "counter" "Shinra_Ifrit_Counter" } @@ -51,6 +56,7 @@ "method" "counter" "trigger" "Shinra_Jenova_Phys:OnTakeDamage" "timeout" "3" + "hurttrigger" "Shinra_Jenova_Phys:OnHealthChanged" "counter" "Shinra_Jenova_Counter" } @@ -60,6 +66,7 @@ "method" "counter" "trigger" "Shinra_Shiva_Phys:OnTakeDamage" "timeout" "3" + "hurttrigger" "Shinra_Shiva_Phys:OnHealthChanged" "counter" "Shinra_Shiva_Counter" } @@ -68,6 +75,7 @@ "name" "Genesis" "method" "counter" "trigger" "Genesis_Temp:OnEntitySpawned" + "hurttrigger" "lvl4_end_boss:OnHealthChanged" "counter" "Genesis_Counter" } diff --git a/BossHP/configs/bosshp/ze_ffxii_ridorana_cataract_t5_3.cfg b/BossHP/configs/bosshp/ze_ffxii_ridorana_cataract_t5_3.cfg new file mode 100644 index 00000000..443555a9 --- /dev/null +++ b/BossHP/configs/bosshp/ze_ffxii_ridorana_cataract_t5_3.cfg @@ -0,0 +1,117 @@ +"bosses" +{ + "0" + { + "name" "Zalera" + "method" "hpbar" + "trigger" "Zalera_HP_Add:OnStartTouch" + "hurttrigger" "Zalera_Hitbox:OnHealthChanged" + + "iterator" "Special_HealthCount" + "counter" "Special_Health" + "backup" "Special_HealthInit" + } + "1" + { + "name" "Famfrit" + "method" "hpbar" + "trigger" "Famfrit_HP_Add:OnStartTouch" + "hurttrigger" "Famfrit_Phys_Body:OnHealthChanged" + + "iterator" "Special_HealthCount" + "counter" "Special_Health" + "backup" "Special_HealthInit" + } + "2" + { + "name" "Bergan" + "method" "counter" + "trigger" "Famfrit_HP_Add:OnStartTouch" + "hurttrigger" "Famfrit_Phys_Body_Fire:OnHealthChanged" + + "counter" "Famfrit_Fire_Summon_Counter" + } + "3" + { + "name" "Zargabaath" + "method" "counter" + "trigger" "Famfrit_HP_Add:OnStartTouch" + "hurttrigger" "Famfrit_Phys_Body_Holy:OnHealthChanged" + + "counter" "Famfrit_Holy_Summon_Counter" + } + "4" + { + "name" "Hydro" + "method" "counter" + "trigger" "Stage_2_End_Dragon_HP_Add:OnStartTouch" + "hurttrigger" "Stage_2_End_Boss_Phys:OnHealthChanged" + + "counter" "Stage_2_End_Dragon_Counter" + } + "5" + { + "name" "Famfrit" + "method" "counter" + "trigger" "Stage_24_End_Famfrit_HP_Add:OnStartTouch" + "hurttrigger" "Stage_24_End_Famfrit_Phys:OnHealthChanged" + + "counter" "Stage_24_End_Famfrit_Counter" + } + "6" + { + "name" "Hashmel" + "method" "hpbar" + "trigger" "Hashmel_HP_Add:OnStartTouch" + "hurttrigger" "Hashmel_Hitbox:OnHealthChanged" + + "iterator" "Special_HealthCount" + "counter" "Special_Health" + "backup" "Special_HealthInit" + } + "7" + { + "name" "Hydro" + "method" "counter" + "trigger" "Stage_3_End_Boss_HP_Add:OnStartTouch" + "hurttrigger" "Stage_3_End_Boss_Phys:OnHealthChanged" + + "counter" "Stage_3_End_Boss_Counter" + } + "8" + { + "name" "Zalera" + "method" "counter" + "trigger" "Fat_Nigger_HP_Add:OnStartTouch" + "hurttrigger" "Fat_Nigger_Phys:OnHealthChanged" + + "counter" "Fat_Nigger_Counter" + } + "9" + { + "name" "Gabranth" + "method" "counter" + "trigger" "Stage_4_End_Guard_HP_Add:OnStartTouch" + "hurttrigger" "Stage_4_End_Guard_Phys:OnHealthChanged" + + "counter" "Stage_4_End_Guard_Counter" + } + "10" + { + "name" "Crystal - 2" + "method" "breakable" + "trigger" "Stage_1_Hold_3_Crystall_2:OnHealthChanged" + "hurttrigger" "Stage_1_Hold_3_Crystall_2:OnTakeDamage" + + "breakable" "Stage_1_Hold_3_Crystall_2" + } + "11" + { + "name" "Crystal - 1" + "method" "breakable" + "trigger" "Stage_1_Hold_3_Crystall_1:OnHealthChanged" + "hurttrigger" "Stage_1_Hold_3_Crystall_1:OnTakeDamage" + + "breakable" "Stage_1_Hold_3_Crystall_1" + } +} diff --git a/BossHP/configs/bosshp/ze_ffxii_westersand_v5_2.cfg b/BossHP/configs/bosshp/ze_ffxii_westersand_v5_2.cfg new file mode 100644 index 00000000..450ce323 --- /dev/null +++ b/BossHP/configs/bosshp/ze_ffxii_westersand_v5_2.cfg @@ -0,0 +1,22 @@ +"bosses" +{ + + "1" // Final Dragon + { + "name" "Dragon" + "method" "counter" + "trigger" "boss_dragon_ending:OnHealthChanged" + + "counter" "boss_dragon_hp_ending" + } + "1" // Final Chocobo + { + "name" "Chocobo" + "method" "breakable" + "trigger" "lvl_extreme_chocoboending:OnStartTouch" + + "breakable" "ending_block_chocobo_break" + } + + +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_ffxiv_wanderers_palace_v4_5s.cfg b/BossHP/configs/bosshp/ze_ffxiv_wanderers_palace_v4_5s.cfg index 3fe38dac..97b57b5f 100644 --- a/BossHP/configs/bosshp/ze_ffxiv_wanderers_palace_v4_5s.cfg +++ b/BossHP/configs/bosshp/ze_ffxiv_wanderers_palace_v4_5s.cfg @@ -2,138 +2,176 @@ { "0" { - "name" "True Bahamut" + "name" "Behemoth Phase (1/3)" "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "true_bahamut_hp_100" - } - "1" - { - "name" "True Bahamut" - "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "true_bahamut_hp_75" - } - "2" - { - "name" "True Bahamut" - "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "true_bahamut_hp_50" - } - "3" - { - "name" "True Bahamut" - "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "true_bahamut_hp_25" - } - "4" - { - "name" "Dalamud" - "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "dalamud_hp_100" - } - "5" - { - "name" "Dalamud" - "method" "counter" - "trigger" "hp_counter:OnStartTouch" - - "counter" "dalamud_hp_50" - } - "6" - { - "name" "Wall_1" - "method" "counter" - "trigger" "ads_attack_hp_counter:OnStartTouch" - - "counter" "ads_atack1_hp" - } - "7" - { - "name" "Wall_2" - "method" "counter" - "trigger" "ads_attack_hp_counter:OnStartTouch" - - "counter" "ads_atack2_hp" - } - "8" - { - "name" "Bahamut" - "method" "counter" - "trigger" "bahamut_hp_counter:OnStartTouch" - - "counter" "bahamut_hp_100" - } - "9" - { - "name" "Bahamut" - "method" "counter" - "trigger" "bahamut_hp_counter:OnStartTouch" - - "counter" "bahamut_hp_75" - } - "10" - { - "name" "Bahamut" - "method" "counter" - "trigger" "bahamut_hp_counter:OnStartTouch" - - "counter" "bahamut_hp_50" - } - "11" - { - "name" "Bahamut" - "method" "counter" - "trigger" "bahamut_hp_counter:OnStartTouch" - - "counter" "bahamut_hp_25" - } - "12" - { - "name" "Wall" - "method" "counter" - "trigger" "ads_hp_counter:OnStartTouch" - - "counter" "ads_hp" - } - "13" - { - "name" "Nael" - "method" "counter" - "trigger" "lv3_nael_hp_counter:OnStartTouch" - - "counter" "lv3_nael_hp" - } - "14" - { - "name" "Behemoth" - "method" "counter" - "trigger" "behemoth_hp_set:OnStartTouch" - - "counter" "behemoth_king_hp1_counter" - } - "15" - { - "name" "Behemoth" - "method" "counter" - "trigger" "behemoth_hp_set:OnStartTouch" - - "counter" "behemoth_king_hp2_counter" - } - "16" - { - "name" "Behemoth" - "method" "counter" - "trigger" "behemoth_hp_set:OnStartTouch" + "trigger" "behemoth_king_hp3:OnHealthChanged" + "hurttrigger" "behemoth_king_hp3:OnHealthChanged" "counter" "behemoth_king_hp3_counter" } + "1" + { + "name" "Behemoth Phase (2/3)" + "method" "counter" + "trigger" "behemoth_king_hp3_counter:OnHitMin" + "hurttrigger" "behemoth_king_hp2:OnHealthChanged" + + "counter" "behemoth_king_hp2_counter" + } + "2" + { + "name" "Behemoth Phase (3/3)" + "method" "counter" + "trigger" "behemoth_king_hp2_counter:OnHitMin" + "hurttrigger" "behemoth_king_hp1:OnHealthChanged" + + "counter" "behemoth_king_hp1_counter" + } + "3" + { + "name" "Enkidu" + "method" "breakable" + "trigger" "enkidu_hitbox:OnTakeDamage" + "hurttrigger" "enkidu_hitbox:OnTakeDamage" + + "breakable" "enkidu_hitbox" + } + "4" + { + "name" "Bahamuth Phase (1/4)" + "method" "counter" + "trigger" "bahamut_hp_100_break:OnHealthChanged" + "hurttrigger" "bahamut_hp_100_break:OnHealthChanged" + + "counter" "bahamut_hp_100" + } + "5" + { + "name" "Bahamuth Phase (2/4)" + "method" "counter" + "trigger" "bahamut_hp_100:OnHitMin" + "hurttrigger" "bahamut_hp_75_break:OnHealthChanged" + + "counter" "bahamut_hp_75" + } + "6" + { + "name" "Bahamuth Phase (3/4)" + "method" "counter" + "trigger" "bahamut_hp_75:OnHitMin" + "hurttrigger" "bahamut_hp_50_break:OnHealthChanged" + + "counter" "bahamut_hp_50" + } + "7" + { + "name" "Bahamuth Phase (4/4)" + "method" "counter" + "trigger" "bahamut_hp_50:OnHitMin" + "hurttrigger" "bahamut_hp_25_break:OnHealthChanged" + + "counter" "bahamut_hp_25" + } + "8" + { + "name" "ADS Right" + "method" "counter" + "trigger" "ads_attack_relay:OnTrigger" + "multitrigger" "1" + "hurttrigger" "ads_atack1_break:OnHealthChanged" + + "counter" "ads_atack1_hp" + } + "9" + { + "name" "ADS Left" + "method" "counter" + "trigger" "ads_attack_relay:OnTrigger" + "multitrigger" "1" + "hurttrigger" "ads_atack2_break:OnHealthChanged" + + "counter" "ads_atack2_hp" + } + "10" + { + "name" "Nael" + "method" "counter" + "trigger" "nael_template:OnEntitySpawned" + "hurttrigger" "lv3_nael_hitbox:OnHealthChanged" + + "counter" "lv3_nael_hp" + } + "11" + { + "name" "Dalamud Phase [1/2]" + "method" "counter" + "trigger" "dalamud_hitbox:OnHealthChanged" + "hurttrigger" "dalamud_hitbox:OnHealthChanged" + + "counter" "dalamud_hp_100" + } + "12" + { + "name" "Dalamud Phase [2/2]" + "method" "counter" + "trigger" "dalamud_hp_100:OnHitMin" + "hurttrigger" "dalamud_hitbox:OnHealthChanged" + + "counter" "dalamud_hp_50" + } + "13" + { + "name" "Bahamuth Phase [1/4]" + "method" "counter" + "trigger" "dalamud_hp_50:OnHitMin" + "hurttrigger" "true_bahamut_hitbox:OnHealthChanged" + + "counter" "true_bahamut_hp_100" + } + "14" + { + "name" "Bahamuth Phase [2/4]" + "method" "counter" + "trigger" "true_bahamut_hp_100:OnHitMin" + "hurttrigger" "true_bahamut_hitbox:OnHealthChanged" + + "counter" "true_bahamut_hp_75" + } + "15" + { + "name" "Bahamuth Phase [3/4]" + "method" "counter" + "trigger" "true_bahamut_hp_75:OnHitMin" + "hurttrigger" "true_bahamut_hitbox:OnHealthChanged" + + "counter" "true_bahamut_hp_50" + } + "16" + { + "name" "Bahamuth Phase [4/4]" + "method" "counter" + "trigger" "true_bahamut_hp_50:OnHitMin" + "hurttrigger" "true_bahamut_hitbox:OnHealthChanged" + + "counter" "true_bahamut_hp_25" + } + "17" + { + "name" "ADS" + "method" "counter" + "trigger" "ads_hp_counter:OnStartTouch" + "hurttrigger" "ads_6:OnHealthChanged" + + "counter" "ads_hp" + } + "18" + { + "name" "Odin" + "method" "counter" + "trigger" "odin_tenplate:OnEntitySpawned" + "hurttrigger" "odin_hitbox:OnHealthChanged" + + "counter" "lv3_nael_hp" + } + } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_fiendlordkeep_v3_2.cfg b/BossHP/configs/bosshp/ze_fiendlordkeep_v3_2.cfg new file mode 100644 index 00000000..2d5dff67 --- /dev/null +++ b/BossHP/configs/bosshp/ze_fiendlordkeep_v3_2.cfg @@ -0,0 +1,59 @@ +"bosses" +{ + "0" + { + "name" "Slash Phase 1" + "method" "counter" + "trigger" "Boss_SlashPhase1_HPScale:OnStartTouch" + "hurttrigger" "Boss_SlashPhase1_Hitbox:OnHealthChanged" + + "counter" "Boss_SlashPhase1_HPCounter" + } + "1" + { + "name" "Slash Phase 2" + "method" "counter" + "trigger" "Boss_SlashPhase1_Hitbox:OnBreak" + "hurttrigger" "Boss_SlashPhase2_Hitbox:OnHealthChanged" + + "counter" "Boss_SlashPhase2_HPCounter" + } + + "2" + { + "name" "Magus Phase 1" + "method" "counter" + "trigger" "Boss_Magus_HPScale:OnStartTouch" + "hurttrigger" "Boss_Magus_Hurtbox:OnHealthChanged" + + "counter" "Boss_Magus_HPCounter" + } + "3" + { + "name" "Magus Phase 2" + "method" "counter" + "trigger" "Boss_Magus_Phase2HPScale:OnStartTouch" + "hurttrigger" "Boss_Magus2_Hurtbox:OnHealthChanged" + + "counter" "Boss_Magus2_HPCounter" + } + + "4" + { + "name" "Flea" + "method" "counter" + "trigger" "Boss_Flea_HPScale:OnStartTouch" + "hurttrigger" "Boss_Flea_Hitbox:OnHealthChanged" + + "counter" "Boss_Flea_HPCounter" + } + "5" + { + "name" "Omnicrome" + "method" "counter" + "trigger" "minibosshpscaling:OnStartTouch" + "hurttrigger" "OmnicronePhys:OnHealthChanged" + + "counter" "Boss_Omnicrone_Counter" + } +} diff --git a/BossHP/configs/bosshp/ze_fiendlordkeep_v4_2.cfg b/BossHP/configs/bosshp/ze_fiendlordkeep_v4_2.cfg new file mode 100644 index 00000000..a857ae69 --- /dev/null +++ b/BossHP/configs/bosshp/ze_fiendlordkeep_v4_2.cfg @@ -0,0 +1,59 @@ +"bosses" +{ + "0" + { + "name" "Slash Phase 1" + "method" "counter" + "trigger" "Boss_SlashPhase1_HPScale:OnStartTouch" + "hurttrigger" "Boss_SlashPhase1_Hitbox:OnHealthChanged" + + "counter" "Boss_SlashPhase1_HPCounter" + } + "1" + { + "name" "Slash Phase 2" + "method" "counter" + "trigger" "Boss_SlashPhase2_HPScale:OnStartTouch" + "hurttrigger" "Boss_SlashPhase2_Hitbox:OnHealthChanged" + + "counter" "Boss_SlashPhase2_HPCounter" + } + + "2" + { + "name" "Magus Phase 1" + "method" "counter" + "trigger" "Boss_Magus_HPScale:OnStartTouch" + "hurttrigger" "Boss_Magus_Hurtbox:OnHealthChanged" + + "counter" "Boss_Magus_HPCounter" + } + "3" + { + "name" "Magus Phase 2" + "method" "counter" + "trigger" "Boss_Magus_Phase2HPScale:OnStartTouch" + "hurttrigger" "Boss_Magus2_Hurtbox:OnHealthChanged" + + "counter" "Boss_Magus2_HPCounter" + } + + "4" + { + "name" "Flea" + "method" "counter" + "trigger" "Boss_Flea_HPScale:OnStartTouch" + "hurttrigger" "Boss_Flea_Hitbox:OnHealthChanged" + + "counter" "Boss_Flea_HPCounter" + } + "5" + { + "name" "Omnicrome" + "method" "counter" + "trigger" "minibosshpscaling:OnStartTouch" + "hurttrigger" "OmnicronePhys:OnHealthChanged" + + "counter" "Boss_Omnicrone_Counter" + } +} diff --git a/BossHP/configs/bosshp/ze_frostdrake_tower_v1s.cfg b/BossHP/configs/bosshp/ze_frostdrake_tower_v1s.cfg index 07cc98c5..16dd20d5 100644 --- a/BossHP/configs/bosshp/ze_frostdrake_tower_v1s.cfg +++ b/BossHP/configs/bosshp/ze_frostdrake_tower_v1s.cfg @@ -2,9 +2,10 @@ { "0" { - "name" "Dragon" + "name" "Frostdrake" "method" "breakable" "trigger" "healthadder:OnStartTouch" + "hurttrigger" "drake_hp:OnTakeDamage" "breakable" "drake_hp" } diff --git a/BossHP/configs/bosshp/ze_frozentemple_b8_2.cfg b/BossHP/configs/bosshp/ze_frozentemple_b8_2.cfg index 7ca6d04b..98d7ca21 100644 --- a/BossHP/configs/bosshp/ze_frozentemple_b8_2.cfg +++ b/BossHP/configs/bosshp/ze_frozentemple_b8_2.cfg @@ -1,12 +1,13 @@ "bosses" { - "1" - { - "name" "Crystal" - "method" "breakable" - "trigger" "boss_hp_trigger:OnStartTouch" - - "breakable" "bt_hitbox" - } + "0" + { + "name" "Crystal" + "method" "hpbar" + "trigger" "boss_hp_trigger:OnStartTouch" + "iterator" "boss_hp_counter_bar" + "counter" "boss_hp_counter_1" + "backup" "boss_hp_counter_2" + } } diff --git a/BossHP/configs/bosshp/ze_grau_s1.cfg b/BossHP/configs/bosshp/ze_grau_s1.cfg new file mode 100644 index 00000000..049d02e8 --- /dev/null +++ b/BossHP/configs/bosshp/ze_grau_s1.cfg @@ -0,0 +1,22 @@ +"bosses" +{ + "0" + { + "name" "Phases left" + "method" "counter" + "trigger" "st3_boss_break:OnHealthChanged" + + "counter" "counter_st3_boss_vida_bar" + } + + "1" + { + "name" "Phase Health" + "method" "counter" + "trigger" "st3_boss_break:OnHealthChanged" + "showtrigger" "st3_boss_break:OnHealthChanged" + "timeout" "1" + + "counter" "counter_st3_boss_vida" + } +} diff --git a/BossHP/configs/bosshp/ze_harry_potter_v2_1.cfg b/BossHP/configs/bosshp/ze_harry_potter_v2_1.cfg new file mode 100644 index 00000000..edec6681 --- /dev/null +++ b/BossHP/configs/bosshp/ze_harry_potter_v2_1.cfg @@ -0,0 +1,174 @@ +"bosses" +{ + //"0" + //{ + //"name" "Deatheater" + //"method" "counter" + //"trigger" "map_template_miniboss:OnEntitySpawned" + //"killtrigger" "map_miniboss_brush:OnUser1" + //"hurttrigger" "map_miniboss_phys:OnHealthChanged" + //"multitrigger" "1" + + //"counter" "map_boss_counter2" + //} + "0" + { + "name" "Voldemort" + "method" "hpbar" + "trigger" "stage1_boss_template2:OnEntitySpawned" + "killtrigger" "stage1_boss_hp_case:OnCase06" + "hurttrigger" "stage1_boss_hp_physbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + + "1" + { + "name" "Troll" + "method" "hpbar" + "trigger" "stage2_miniboss_template:OnEntitySpawned" + "killtrigger" "stage2_miniboss_hp_case:OnCase06" + "hurttrigger" "stage2_miniboss_hp_phy1:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "2" //Extreme + { + "name" "Troll" + "method" "hpbar" + "trigger" "stage2_ex_miniboss_template:OnEntitySpawned" + "killtrigger" "stage2_ex_miniboss_hp_case:OnCase06" + "hurttrigger" "stage2_miniboss_hp_phy1:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + + "3" + { + "name" "Basilisk" + "method" "hpbar" + "trigger" "stage2_boss_template1:OnEntitySpawned" + "killtrigger" "stage2_boss_hp_case:OnCase06" + "hurttrigger" "stage2_boss_hp_physbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "4" + { + "name" "Dragon" + "method" "hpbar" + "trigger" "stage3_wizdrag1_template:OnEntitySpawned" + "killtrigger" "stage3_wizdrag1_case:OnCase04" + "hurttrigger" "stage3_wizdrag1_hitbox_h:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "5" + { + "name" "Dragon" + "method" "hpbar" + "trigger" "stage3_wizdrag2_template:OnEntitySpawned" + "killtrigger" "stage3_wizdrag2_case:OnCase04" + "hurttrigger" "stage3_wizdrag2_hitbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "6" + { + "name" "Dragon" + "method" "hpbar" + "trigger" "stage3_wizdrag3_template:OnEntitySpawned" + "killtrigger" "stage3_wizdrag3_case:OnCase04" + "hurttrigger" "stage3_wizdrag3_hitbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "7" + { + "name" "Dragon" + "method" "hpbar" + "trigger" "stage3_wizdrag4_template:OnEntitySpawned" + "killtrigger" "stage3_wizdrag4_case:OnCase04" + "hurttrigger" "stage3_wizdrag4_hitbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "8" + { + "name" "Aragog" + "method" "hpbar" + "trigger" "stage4_boss_template2:OnEntitySpawned" + "killtrigger" "stage4_boss_hp_case:OnCase06" + "hurttrigger" "stage4_boss_physbox_HP:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "9" + { + "name" "Mini Spider" + "method" "hpbar" + "trigger" "stage4_miniboss_template:OnEntitySpawned" + "killtrigger" "stage4_miniboss_hp_case:OnCase06" + "hurttrigger" "stage4_miniboss_phys_HP:OnHealthChanged" + "multitrigger" "1" + + "counter" "stage4_miniboss_counter2" + "iterator" "stage4_miniboss_counter3" + "backup" "stage4_miniboss_counter1" + } + "10" + { + "name" "Fluffy" + "method" "hpbar" + "trigger" "stage5_slidedoor2:OnFullyOpen" + "killtrigger" "stage5_miniboss_case:OnCase06" + "hurttrigger" "stage5_miniboss_physbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "11" + { + "name" "Voldemort" + "method" "hpbar" + "trigger" "stage5_boss_template_v:OnEntitySpawned" + "killtrigger" "stage5_boss_v_case:OnCase06" + "hurttrigger" "stage5_boss_v_physbox_HP:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + "12" + { + "name" "Snape" + "method" "hpbar" + "trigger" "stage5_ending_template:OnEntitySpawned" + "killtrigger" "stage5_ending_xwin:OnTrigger" + "hurttrigger" "stage5_ending_tracker_physbox:OnHealthChanged" + + "counter" "map_boss_counter2" + "iterator" "map_boss_counter3" + "backup" "map_boss_counter1" + } + +} diff --git a/BossHP/configs/bosshp/ze_hellz_rescuebase_v5_b1.cfg b/BossHP/configs/bosshp/ze_hellz_rescuebase_v5_b1.cfg index 4d3a02a6..d380c708 100644 --- a/BossHP/configs/bosshp/ze_hellz_rescuebase_v5_b1.cfg +++ b/BossHP/configs/bosshp/ze_hellz_rescuebase_v5_b1.cfg @@ -10,25 +10,4 @@ "counter" "Noctali_Boss_Health" "backup" "Noctali_Boss_Health_Init" } - "1" - { - "name" "White Knight" - "method" "breakable" - "trigger" "Temp_Item_White_Knight:OnEntitySpawned" - "showtrigger" "Item_White_Knight_Physbox:OnTakeDamage" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "breakable" "Item_White_Knight_Physbox" - } - "2" - { - "name" "Anarchy Breakable" - "method" "breakable" - "trigger" "Anarchy_Activator_Break:OnTakeDamage" - "timeout" "3" - - "breakable" "Anarchy_Activator_Break" - } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_hidden_temple_v2_5.cfg b/BossHP/configs/bosshp/ze_hidden_temple_v2_5.cfg deleted file mode 100644 index 10ad3151..00000000 --- a/BossHP/configs/bosshp/ze_hidden_temple_v2_5.cfg +++ /dev/null @@ -1,13 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Boss" - "method" "hpbar" - "trigger" "naraka_count_players:OnStartTouch" - - "iterator" "naraka_hp_iterations" - "counter" "naraka_counter" - "backup" "naraka_hp_backup" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_hold_em_v10.cfg b/BossHP/configs/bosshp/ze_hold_em_v10.cfg index d4f5642c..9ed9c67f 100644 --- a/BossHP/configs/bosshp/ze_hold_em_v10.cfg +++ b/BossHP/configs/bosshp/ze_hold_em_v10.cfg @@ -5,6 +5,7 @@ "name" "Billy" "method" "counter" "trigger" "end_trigger:OnStartTouch" + "hurttrigger" "boss:OnHealthChanged" "counter" "boss_hp" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_isla_nublar_v2_1.cfg b/BossHP/configs/bosshp/ze_isla_nublar_v2_1.cfg deleted file mode 100644 index 51104a7b..00000000 --- a/BossHP/configs/bosshp/ze_isla_nublar_v2_1.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "0" // T-Rex - { - "name" "T-Rex" - "method" "counter" - "trigger" "trexhealthadder:OnStartTouch" - - "counter" "trexhitbased1" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_johnny_nukem_b8_1.cfg b/BossHP/configs/bosshp/ze_johnny_nukem_b8_1.cfg index 328b3e1f..dab94ee8 100644 --- a/BossHP/configs/bosshp/ze_johnny_nukem_b8_1.cfg +++ b/BossHP/configs/bosshp/ze_johnny_nukem_b8_1.cfg @@ -24,4 +24,4 @@ "counter" "Solid_Paper_Counter" } -} \ No newline at end of file +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_johnny_nukem_beta7.cfg b/BossHP/configs/bosshp/ze_johnny_nukem_b8_8.cfg.cfg similarity index 71% rename from BossHP/configs/bosshp/ze_johnny_nukem_beta7.cfg rename to BossHP/configs/bosshp/ze_johnny_nukem_b8_8.cfg.cfg index 328b3e1f..b8a596ee 100644 --- a/BossHP/configs/bosshp/ze_johnny_nukem_beta7.cfg +++ b/BossHP/configs/bosshp/ze_johnny_nukem_b8_8.cfg.cfg @@ -2,15 +2,15 @@ { "0" // Frog { - "name" "Frog" + "name" "King of Frogs" "method" "counter" - "trigger" "stage1_ship_trigger:OnStartTouch" + "trigger" "Frog_Boss_Push_HP:OnStartTouch" "counter" "Frog_Counter" } "1" // Frog2 { - "name" "Frog" + "name" "Lego King IV" "method" "counter" "trigger" "Frog2_Boss_Push_HP:OnStartTouch" @@ -18,7 +18,7 @@ } "2" // Paper { - "name" "Paper Monster" + "name" "General Solid Paper" "method" "counter" "trigger" "Solid_Paper_Boss_Push_HP:OnStartTouch" diff --git a/BossHP/configs/bosshp/ze_jurassicpark_v2_10_ob.cfg b/BossHP/configs/bosshp/ze_jurassicpark_v2_10_ob.cfg new file mode 100644 index 00000000..6d42b772 --- /dev/null +++ b/BossHP/configs/bosshp/ze_jurassicpark_v2_10_ob.cfg @@ -0,0 +1,14 @@ +"bosses" +{ + "0" + { + "name" "Car" + "method" "breakable" + "trigger" "TruckPath11:OnPass" + "hurttrigger" "CarCrash_Physbox:OnTakeDamage" + + "killtrigger" "TruckPath12:OnPass" + + "breakable" "CarCrash_Physbox" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_l0v0l_b1.cfg b/BossHP/configs/bosshp/ze_l0v0l_v1_4.cfg similarity index 61% rename from BossHP/configs/bosshp/ze_l0v0l_b1.cfg rename to BossHP/configs/bosshp/ze_l0v0l_v1_4.cfg index 6255c9c0..bc639fad 100644 --- a/BossHP/configs/bosshp/ze_l0v0l_b1.cfg +++ b/BossHP/configs/bosshp/ze_l0v0l_v1_4.cfg @@ -2,9 +2,10 @@ { "0" // lvl1 { - "name" "Gargantua" + "name" "Priest" "method" "hpbar" "trigger" "bosslvl1_trigger:OnStartTouch" + "hurttrigger" "bosslvl1_hit:OnHealthChanged" "iterator" "bosslvl1_counter3" "counter" "bosslvl1_counter1" @@ -15,6 +16,7 @@ "name" "Gargantua" "method" "hpbar" "trigger" "bosslvl2_trigger:OnStartTouch" + "hurttrigger" "bosslvl2_hit:OnHealthChanged" "iterator" "bosslvl2_counter3" "counter" "bosslvl2_counter1" @@ -22,9 +24,10 @@ } "2" // lvl3 { - "name" "BOSS_HP" + "name" "Gunship" "method" "hpbar" "trigger" "bosslvl3_trigger:OnStartTouch" + "hurttrigger" "bosslvl3_hit:OnHealthChanged" "iterator" "bosslvl3_counter3" "counter" "bosslvl3_counter1" @@ -35,9 +38,22 @@ "name" "Gargantua" "method" "hpbar" "trigger" "bosslvl3_end_trigger:OnStartTouch" + "hurttrigger" "bosslvl3_end_hit:OnHealthChanged" "iterator" "bosslvl3_end_counter3" "counter" "bosslvl3_end_counter1" "backup" "bosslvl3_end_counter2" } + + "4" // harpy + { + "name" "Harpy" + "method" "hpbar" + "trigger" "bosslvl3_harpy_trigger1:OnStartTouch" + "hurttrigger" "bosslvl3_harpy_hit:OnHealthChanged" + + "iterator" "bosslvl3_harpy_counter3" + "counter" "bosslvl3_harpy_counter1" + "backup" "bosslvl3_harpy_counter2" + } } diff --git a/BossHP/configs/bosshp/ze_lazers_v2_3.cfg b/BossHP/configs/bosshp/ze_lazers_v2_3.cfg deleted file mode 100644 index c4c5579c..00000000 --- a/BossHP/configs/bosshp/ze_lazers_v2_3.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Bahamut" - "method" "counter" - "trigger" "doorbell:OnStartTouch:35" - - "counter" "hp_counter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_lila_panic_escape_v3_1.cfg b/BossHP/configs/bosshp/ze_lila_panic_escape_v3_1.cfg index a0dbaf0e..529faafb 100644 --- a/BossHP/configs/bosshp/ze_lila_panic_escape_v3_1.cfg +++ b/BossHP/configs/bosshp/ze_lila_panic_escape_v3_1.cfg @@ -5,6 +5,18 @@ "name" "Pedobear" "method" "counter" "trigger" "boss_trigger_start:OnTrigger" + "hurttrigger" "boss_break:OnHealthChanged" + "counter" "boss_hp" } + "1" + { + "name" "chopper" + "method" "counter" + "trigger" "ZE_Trigger_Extreme:OnTrigger" + "hurttrigger" "Chopper_Model:OnHealthChanged" + "timeout" "3" + + "counter" "Heli_HP" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v2_2fix.cfg b/BossHP/configs/bosshp/ze_lotr_minas_tirith_v2_2fix.cfg index 475d392c..e52385ee 100644 --- a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v2_2fix.cfg +++ b/BossHP/configs/bosshp/ze_lotr_minas_tirith_v2_2fix.cfg @@ -4,39 +4,52 @@ { "name" "Balrog" "method" "breakable" - "trigger" "item_balrog_hp:OnTakeDamage" + "trigger" "stripper_temp_item_balrog:OnEntitySpawned" + "showtrigger" "item_balrog_physbox:OnTakeDamage" + "hurttrigger" "item_balrog_physbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" "timeout" "3" - "breakable" "item_balrog_hp" + "breakable" "item_balrog_physbox" } "1" { "name" "Gandalf" "method" "breakable" - "trigger" "item_gandalf_15:OnTakeDamage" + "trigger" "stripper_temp_item_gandalf:OnEntitySpawned" + "showtrigger" "item_gandalf_physbox:OnTakeDamage" + "hurttrigger" "item_gandalf_physbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" "timeout" "3" - "breakable" "item_gandalf_15" + "breakable" "item_gandalf_physbox" } "2" { "name" "White Knight" "method" "breakable" - "trigger" "item_goliath_2:OnTakeDamage" + "trigger" "stripper_temp_item_wk:OnEntitySpawned" + "showtrigger" "item_wk_physbox:OnTakeDamage" + "hurttrigger" "item_wk_physbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" "timeout" "3" - "breakable" "item_goliath_2" + "breakable" "item_wk_physbox" } "3" { "name" "Nazgul" "method" "counter" - "trigger" "temp_item_nazgul:OnEntitySpawned" - "showtrigger" "item_nazgul_17:OutValue" + "trigger" "stripper_temp_item_nazgul:OnEntitySpawned" + "showtrigger" "item_nazgul_counter:OutValue" + "hurttrigger" "item_nazgul_physbox_1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" - "counter" "item_nazgul_17" + "counter" "item_nazgul_counter" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_3.cfg b/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_3.cfg index df9f4839..e52385ee 100644 --- a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_3.cfg +++ b/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_3.cfg @@ -4,41 +4,52 @@ { "name" "Balrog" "method" "breakable" - "trigger" "templateBalrog:OnEntitySpawned" - "showtrigger" "item_balrog_hp:OnTakeDamage" - "timeout" "3" + "trigger" "stripper_temp_item_balrog:OnEntitySpawned" + "showtrigger" "item_balrog_physbox:OnTakeDamage" + "hurttrigger" "item_balrog_physbox:OnTakeDamage" "multitrigger" "1" + "namefixup" "1" + "timeout" "3" - "breakable" "item_balrog_hp" + "breakable" "item_balrog_physbox" } "1" { "name" "Gandalf" "method" "breakable" - "trigger" "item_gandalf_15:OnTakeDamage" + "trigger" "stripper_temp_item_gandalf:OnEntitySpawned" + "showtrigger" "item_gandalf_physbox:OnTakeDamage" + "hurttrigger" "item_gandalf_physbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" "timeout" "3" - "breakable" "item_gandalf_15" + "breakable" "item_gandalf_physbox" } "2" { "name" "White Knight" "method" "breakable" - "trigger" "item_goliath_2:OnTakeDamage" + "trigger" "stripper_temp_item_wk:OnEntitySpawned" + "showtrigger" "item_wk_physbox:OnTakeDamage" + "hurttrigger" "item_wk_physbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" "timeout" "3" - "breakable" "item_goliath_2" + "breakable" "item_wk_physbox" } "3" { "name" "Nazgul" "method" "counter" - "trigger" "temp_item_nazgul:OnEntitySpawned" - "showtrigger" "item_nazgul_17:OutValue" + "trigger" "stripper_temp_item_nazgul:OnEntitySpawned" + "showtrigger" "item_nazgul_counter:OutValue" + "hurttrigger" "item_nazgul_physbox_1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" - "counter" "item_nazgul_17" + "counter" "item_nazgul_counter" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_5.cfg b/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_5.cfg deleted file mode 100644 index 475d392c..00000000 --- a/BossHP/configs/bosshp/ze_lotr_minas_tirith_v3_5.cfg +++ /dev/null @@ -1,42 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Balrog" - "method" "breakable" - "trigger" "item_balrog_hp:OnTakeDamage" - "timeout" "3" - - "breakable" "item_balrog_hp" - } - "1" - { - "name" "Gandalf" - "method" "breakable" - "trigger" "item_gandalf_15:OnTakeDamage" - "timeout" "3" - - "breakable" "item_gandalf_15" - } - "2" - { - "name" "White Knight" - "method" "breakable" - "trigger" "item_goliath_2:OnTakeDamage" - "timeout" "3" - - "breakable" "item_goliath_2" - } - "3" - { - "name" "Nazgul" - "method" "counter" - "trigger" "temp_item_nazgul:OnEntitySpawned" - "showtrigger" "item_nazgul_17:OutValue" - "multitrigger" "1" - "namefixup" "1" - "timeout" "3" - - "counter" "item_nazgul_17" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_m0w0m_a2.cfg b/BossHP/configs/bosshp/ze_m0w0m_a2.cfg new file mode 100644 index 00000000..72d542a2 --- /dev/null +++ b/BossHP/configs/bosshp/ze_m0w0m_a2.cfg @@ -0,0 +1,253 @@ +"bosses" +{ + "0" + { + "name" "Sanictank" + "method" "hpbar" + "trigger" "bosslvl4_end_hptrigger1:OnStartTouch" + "timeout" "1" + "iterator" "bosslvl4_end_counter3" + "counter" "bosslvl4_end_counter1" + "backup" "bosslvl4_end_counter2" + } + "1" + { + "name" "Aircraft" + "method" "hpbar" + "trigger" "bosslvl2_trigger:OnStartTouch" + + "iterator" "bosslvl2_1_counter3" + "counter" "bosslvl2_1_counter1" + "backup" "bosslvl2_1_counter2" + } + "2" + { + "name" "Aircraft" + "method" "hpbar" + "trigger" "bosslvl5_trigger:OnStartTouch" + + "iterator" "bosslvl2_1_counter3" + "counter" "bosslvl2_1_counter1" + "backup" "bosslvl2_1_counter2" + } + "3" + { + "name" "UFO" + "method" "hpbar" + "trigger" "bosslvl2_trigger:OnStartTouch" + + "iterator" "bosslvl2_2_counter3" + "counter" "bosslvl2_2_counter1" + "backup" "bosslvl2_2_counter2" + } + "4" + { + "name" "UFO" + "method" "hpbar" + "trigger" "bosslvl5_trigger:OnStartTouch" + + "iterator" "bosslvl2_2_counter3" + "counter" "bosslvl2_2_counter1" + "backup" "bosslvl2_2_counter2" + } + "5" + { + "name" "Porygon" + "method" "hpbar" + "trigger" "bosslvl4_trigger:OnStartTouch" + + "iterator" "bosslvl4_counter3" + "counter" "bosslvl4_counter1" + "backup" "bosslvl4_counter2" + } + "6" + { + "name" "Porygon" + "method" "hpbar" + "trigger" "bosslvl1_trigger:OnStartTouch" + + "iterator" "bosslvl4_counter3" + "counter" "bosslvl4_counter1" + "backup" "bosslvl4_counter2" + } + "3" + { + "name" "Ifrit - Stage 1" + "method" "hpbar" + "trigger" "bosslvl3_trigger:OnStartTouch" + + "iterator" "bosslvl3_1_counter3" + "counter" "bosslvl3_1_counter1" + "backup" "bosslvl3_1_counter2" + } + "3" + { + "name" "Ifrit - Stage 2" + "method" "hpbar" + "trigger" "bosslvl3_trigger:OnStartTouch" + + "iterator" "bosslvl3_2_counter3" + "counter" "bosslvl3_2_counter1" + "backup" "bosslvl3_2_counter2" + } + "2" + { + "name" "Ifrit" + "method" "hpbar" + "trigger" "door27_3:OnStartTouch" + + "iterator" "bosslvl6_counter3" + "counter" "bosslvl6_counter1" + "backup" "bosslvl6_counter2" + } + "3" + { + "name" "Golem" + "method" "hpbar" + "trigger" "lvl6_end_golem_hptrigger:OnStartTouch" + + "iterator" "lvl6_end_golem_counter3" + "counter" "lvl6_end_golem_counter1" + "backup" "lvl6_end_golem_counter2" + } + "0" + { + "name" "Golem" + "method" "hpbar" + "trigger" "tele7_3:OnStartTouch" + + "iterator" "bosslvl3_golem_counter3" + "counter" "bosslvl3_golem_counter1" + "backup" "bosslvl3_golem_counter2" + } + "0" + { + "name" "Golem" + "method" "hpbar" + "trigger" "tele7_2:OnStartTouch" + + "iterator" "bosslvl3_golem_counter3" + "counter" "bosslvl3_golem_counter1" + "backup" "bosslvl3_golem_counter2" + } + "1" + { + "name" "Portal - 1" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter1" + } + "1" + { + "name" "Portal - 2" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter2" + } + "1" + { + "name" "Portal - 3" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter3" + } + "1" + { + "name" "Portal - 4" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter4" + } + "1" + { + "name" "Portal - 5" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter5" + } + "1" + { + "name" "Portal - 10" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter10" + } + "1" + { + "name" "Portal - 6" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter6" + } + "1" + { + "name" "Portal - 7" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter7" + } + "1" + { + "name" "Portal - 8" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter8" + } + "1" + { + "name" "Portal - 9" + "method" "counter" + "trigger" "lvl5_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl5_npc_counter9" + } + "1" + { + "name" "Portal - 2" + "method" "counter" + "trigger" "lvl2_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl2_npc_counter2" + } + "1" + { + "name" "Portal - 4" + "method" "counter" + "trigger" "lvl2_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl2_npc_counter4" + } + "1" + { + "name" "Portal - 1" + "method" "counter" + "trigger" "lvl2_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl2_npc_counter1" + } + "1" + { + "name" "Portal - 3" + "method" "counter" + "trigger" "lvl2_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl2_npc_counter3" + } + "1" + { + "name" "Portal - 5" + "method" "counter" + "trigger" "lvl2_npc_trigger:OnStartTouch" + "timeout" "10" + "counter" "lvl2_npc_counter5" + } +} diff --git a/BossHP/configs/bosshp/ze_minecraft_adventure_v1_2c.cfg b/BossHP/configs/bosshp/ze_minecraft_adventure_v1_2c.cfg index 19b78a9a..e0bec455 100644 --- a/BossHP/configs/bosshp/ze_minecraft_adventure_v1_2c.cfg +++ b/BossHP/configs/bosshp/ze_minecraft_adventure_v1_2c.cfg @@ -23,6 +23,7 @@ "name" "Ghast" "method" "hpbar" "trigger" "#177122:OnStartTouch" + "hurttrigger" "nether_boss_hitbox:OnHealthChanged" "iterator" "boss_hp_iterations" "counter" "boss_hp" @@ -105,6 +106,7 @@ "name" "Ender Dragon" "method" "hpbar" "trigger" "#968277:OnStartTouch" + "hurttrigger" "end_bosshitbox:OnHealthChanged" "iterator" "boss2_hp_iterations" "counter" "boss2_hp" @@ -115,6 +117,7 @@ "name" "Herobrine" "method" "counter" "trigger" "#1833927:OnStartTouch" + "hurttrigger" "stronghold_final_hitbox:OnHealthChanged" "timeout" "3" "counter" "stronghold_final_boss_hp" diff --git a/BossHP/configs/bosshp/ze_mist_v1_3.cfg b/BossHP/configs/bosshp/ze_mist_v1_3.cfg index 3765d80b..c3895e46 100644 --- a/BossHP/configs/bosshp/ze_mist_v1_3.cfg +++ b/BossHP/configs/bosshp/ze_mist_v1_3.cfg @@ -13,6 +13,7 @@ "name" "Dragon" "method" "breakable" "trigger" "tr_dragonaddhp:OnStartTouch" + "hurttrigger" "pbox_dragon:OnTakeDamage" "multitrigger" "1" "breakable" "pbox_dragon" @@ -22,6 +23,7 @@ "name" "Revived Dragon" "method" "counter" "trigger" "tr_addeschp:OnStartTouch" + "hurttrigger" "br_escdragon:OnHealthChanged" "counter" "counter_eschp" } diff --git a/BossHP/configs/bosshp/ze_moltentemple_a5.cfg b/BossHP/configs/bosshp/ze_moltentemple_a5.cfg new file mode 100644 index 00000000..7891419d --- /dev/null +++ b/BossHP/configs/bosshp/ze_moltentemple_a5.cfg @@ -0,0 +1,34 @@ +"bosses" +{ + "-1" // NPC's + { + "name" "Enslaved Ember" + "method" "breakable" + "trigger" "caves_add_temp:OnEntitySpawned" + "showtrigger" "caves_add_hbox:OnDamaged" + "hurttrigger" "caves_add_hbox:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" + "timeout" "3" + + "breakable" "caves_add_hbox" + } + "0" + { + "name" "Toasted Golem" + "method" "breakable" + "trigger" "temple_mboss_hitbox:OnHealthChanged" + "hurttrigger" "temple_mboss_hitbox:OnTakeDamage" + + "breakable" "temple_mboss_hitbox" + } + "1" + { + "name" "Fire Crystal" + "method" "breakable" + "trigger" "caves_mboss_hitbox:OnHealthChanged" + "hurttrigger" "caves_mboss_hitbox:OnTakeDamage" + + "breakable" "caves_mboss_hitbox" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_moltentemple_p1t2.cfg b/BossHP/configs/bosshp/ze_moltentemple_p1t2.cfg new file mode 100644 index 00000000..6f3b6113 --- /dev/null +++ b/BossHP/configs/bosshp/ze_moltentemple_p1t2.cfg @@ -0,0 +1,11 @@ +"bosses" +{ + "0" + { + "name" "Toasted Golem" + "method" "breakable" + "trigger" "temple_mboss_cell1:OnFullyClosed" + + "breakable" "temple_mboss_hitbox" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_naruto_v2_6e.cfg b/BossHP/configs/bosshp/ze_naruto_v2_6e.cfg new file mode 100644 index 00000000..a50857d8 --- /dev/null +++ b/BossHP/configs/bosshp/ze_naruto_v2_6e.cfg @@ -0,0 +1,48 @@ +"bosses" +{ + "0" // Stage 4 + { + "name" "Sasuke" + "method" "counter" + "trigger" "heal_boss:OnStartTouch" + + "counter" "health_boss" + } + + "1" + { + "name" "Sasuke Clone" + "method" "counter" + "trigger" "naruto_multi_spawner:OnEntitySpawned" + "killtrigger" "multi_2_d:OnPass" + + "counter" "health_multi_1" + } + "2" + { + "name" "Sasuke Clone" + "method" "counter" + "trigger" "naruto_multi_spawner:OnEntitySpawned" + "killtrigger" "multi_2_c:OnPass" + + "counter" "health_multi_2" + } + "3" + { + "name" "Sasuke Clone" + "method" "counter" + "trigger" "naruto_multi_spawner:OnEntitySpawned" + "killtrigger" "multi_2_b:OnPass" + + "counter" "health_multi_3" + } + "4" + { + "name" "Sasuke Clone" + "method" "counter" + "trigger" "naruto_multi_spawner:OnEntitySpawned" + "killtrigger" "multi_2_a:OnPass" + + "counter" "health_multi_4" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_necromanteion_v3_1s_fix.cfg b/BossHP/configs/bosshp/ze_necromanteion_v3_1s_fix.cfg new file mode 100644 index 00000000..315b7a5c --- /dev/null +++ b/BossHP/configs/bosshp/ze_necromanteion_v3_1s_fix.cfg @@ -0,0 +1,12 @@ +"bosses" +{ + "0" + { + "name" "Hades" + "method" "counter" + "trigger" "trigger_human_arrive:OnTrigger" + "hurttrigger" "boss_Hades:OnHealthChanged" + + "counter" "hp_counter25" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_notredame_v1_3.cfg b/BossHP/configs/bosshp/ze_notredame_v1_3.cfg deleted file mode 100644 index 21a9ce25..00000000 --- a/BossHP/configs/bosshp/ze_notredame_v1_3.cfg +++ /dev/null @@ -1,10 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Great Jack" - "method" "counter" - "trigger" "hp_to_boss:OnStartTouch" - "counter" "boss_hp" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_nuke_v2.cfg b/BossHP/configs/bosshp/ze_nuke_v2.cfg new file mode 100644 index 00000000..b671924e --- /dev/null +++ b/BossHP/configs/bosshp/ze_nuke_v2.cfg @@ -0,0 +1,30 @@ +"bosses" +{ + "0" + { + "name" "Generator 1" + "method" "breakable" + "trigger" "#3536:OnStartTouch" + "hurttrigger" "#3538:OnTakeDamage" + + "breakable" "#3538" + } + "1" + { + "name" "Generator 2" + "method" "breakable" + "trigger" "#3521:OnDamaged" + "hurttrigger" "#3540:OnTakeDamage" + + "breakable" "#3540" + } + "2" + { + "name" "Generator 3" + "method" "breakable" + "trigger" "#3524:OnDamaged" + "hurttrigger" "#3542:OnTakeDamage" + + "breakable" "#3542" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_onahole_v3s_fix.cfg b/BossHP/configs/bosshp/ze_onahole_v3s_fix.cfg new file mode 100644 index 00000000..70f1816e --- /dev/null +++ b/BossHP/configs/bosshp/ze_onahole_v3s_fix.cfg @@ -0,0 +1,103 @@ +"bosses" +{ + "-1" // NPC's + { + "name" "Barry Bee" + "method" "breakable" + "trigger" "barry_temp2:OnEntitySpawned" + "showtrigger" "barry_health2:OnDamaged" + "hurttrigger" "barry_health2:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" + "timeout" "3" + + "breakable" "barry_health2" + } + "-2" // NPC's + { + "name" "Barry Bee" + "method" "breakable" + "trigger" "barry_temp1:OnEntitySpawned" + "showtrigger" "barry_health1:OnDamaged" + "hurttrigger" "barry_health1:OnTakeDamage" + "multitrigger" "1" + "namefixup" "1" + "timeout" "3" + + "breakable" "barry_health1" + } + "0" // Stage 1 + { + "name" "Onabox" + "method" "breakable" + "trigger" "bossshield:OnBreak" + "hurttrigger" "Onabox:OnTakeDamage" + + "breakable" "Onabox" + } + "1" // Extreme 1 + { + "name" "Hank Hill" + "method" "breakable" + "trigger" "Hank_hitbox:OnHealthChanged" + "hurttrigger" "Hank_hitbox":OnTakeDamage" + + "breakable" "Hank_hitbox" + } + "2" // Stage 2 + { + "name" "Penis" + "method" "breakable" + "trigger" "boss_health2:OnHealthChanged" + "showtrigger" "invisboss2:OnBreak" + "hurttrigger" "boss_health2:OnTakeDamage" + + "breakable" "boss_health2" + } + "3" // Extreme 2 + { + "name" "Penis" + "method" "breakable" + "trigger" "boss_health2_ex:OnHealthChanged" + "showtrigger" "invisboss2:OnBreak" + "hurttrigger" "boss_health2_ex:OnTakeDamage" + + "breakable" "boss_health2_ex" + } + "4" // Extreme 2 + { + "name" "Kazoo" + "method" "breakable" + "trigger" "ex2_boss2_health:OnHealthChanged" + "hurttrigger" "ex2_boss2_health:OnTakeDamage" + + "breakable" "ex2_boss2_health" + } + "5" // Extreme 3 + { + "name" "Hank Hill" + "method" "breakable" + "trigger" "hank_bahamut_hp:OnHealthChanged" + "hurttrigger" "hank_bahamut_hp:OnTakeDamage" + + "breakable" "hank_bahamut_hp" + } + "6" // Extreme 3 + { + "name" "Barry Bee" + "method" "counter" + "trigger" "final_lasers:OnTrigger" + "hurttrigger" "barry_final_health:OnTakeDamage" + + "counter" "barry_final_health" + } + "7" // Stage 3 + { + "name" "Vagene" + "method" "breakable" + "trigger" "boss3_hitbox_health:OnHealthChanged" + "hurttrigger" "boss3_hitbox_health:OnTakeDamage" + + "breakable" "boss3_hitbox_health" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_otakuroom_v5_6fs.cfg b/BossHP/configs/bosshp/ze_otakuroom_v5_6fs.cfg index c7fb84a6..faf0d553 100644 --- a/BossHP/configs/bosshp/ze_otakuroom_v5_6fs.cfg +++ b/BossHP/configs/bosshp/ze_otakuroom_v5_6fs.cfg @@ -5,6 +5,7 @@ "name" "Tenshi" "method" "counter" "trigger" "lv3_boss_hpup:OnStartTouch" + "hurttrigger" "ts_hitbox:OnHealthChanged" "counter" "ts_hp" } @@ -13,6 +14,7 @@ "name" "Tenshi" "method" "counter" "trigger" "lv3_laser_hpup:OnStartTouch" + "hurttrigger" "lv3_ts_hitbox:OnHealthChanged" "counter" "lv3_ts_hp" } diff --git a/BossHP/configs/bosshp/ze_paper_escaper_v7.cfg b/BossHP/configs/bosshp/ze_paper_escaper_v7.cfg deleted file mode 100644 index 6d86d725..00000000 --- a/BossHP/configs/bosshp/ze_paper_escaper_v7.cfg +++ /dev/null @@ -1,53 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Defensive Robot" - "method" "counter" - "trigger" "ExtBossStart:OnStartTouch" - - "counter" "BossExtHitP" - } - "1" - { - "name" "Defensive Robot" - "method" "counter" - "trigger" "MassacreBossStart:OnStartTouch" - - "counter" "BossMassHitP" - } - "2" - { - "name" "Defensive Robot Ulti" - "method" "counter" - "trigger" "RageFaceShowDoor:OnOpen" - "killtrigger" "BossMassHitP:OnHitMin" - - "counter" "BossRageHitP" - } - "3" - { - "name" "Defensive Robot" - "method" "counter" - "trigger" "#447365:OnStartTouch" - - "counter" "PanicHPCounter" - } - "4" - { - "name" "Sacrifice" - "method" "counter" - "trigger" "#382723:OnStartTouch:22" - "killtrigger" "#382723:OnStartTouch:34" - - "counter" "HeroSaviors" - } - "5" - { - "name" "Defensive Robot" - "method" "counter" - "trigger" "HeliStart5:OnPass" - - "counter" "BossRageHitP" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_pidaras_v1_4fix3.cfg b/BossHP/configs/bosshp/ze_pidaras_v1_4fix3.cfg new file mode 100644 index 00000000..d2aabc7b --- /dev/null +++ b/BossHP/configs/bosshp/ze_pidaras_v1_4fix3.cfg @@ -0,0 +1,51 @@ +"bosses" +{ + "0" + { + "name" "Pyramigay" + "method" "counter" + "trigger" "trigger_pyramid_1:OnStartTouch" + "hurttrigger" "jugg_physbox:OnHealthChanged" + "counter" "trigger_pyramid_counter" + } + "1" + { + "name" "Eye - Phase 1/2" + "method" "counter" + "trigger" "space_boss_trigger:OnStartTouch" + "hurttrigger" "space_physbox:OnHealthChanged" + "counter" "space_counter1" + } + "2" + { + "name" "Eye - Phase 2/2" + "method" "counter" + "trigger" "space_boss_trigger:OnStartTouch" + "hurttrigger" "space_physbox2:OnHealthChanged" + "counter" "space_counter2" + } + "3" + { + "name" "Roshi" + "method" "counter" + "trigger" "roshi_counter:OutValue" + "hurttrigger" "laser_physbox:OnHealthChanged" + "counter" "roshi_counter" + } + "4" + { + "name" "Bahatard" + "method" "counter" + "trigger" "trig_bahamut_vie:OnStartTouch" + "hurttrigger" "npc_bahamut_physbox:OnHealthChanged" + "counter" "npc_bahamut_counter" + } + "5" + { + "name" "Meshlem" + "method" "counter" + "trigger" "Meshlem_Boss_Hp_To_Boss:OnStartTouch" + "hurttrigger" "Meshlem_Boss_Break:OnHealthChanged" + "counter" "Boss_Health" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_pirates_port_royal_v3_6.cfg b/BossHP/configs/bosshp/ze_pirates_port_royal_v3_6.cfg index 531fd28e..de72701c 100644 --- a/BossHP/configs/bosshp/ze_pirates_port_royal_v3_6.cfg +++ b/BossHP/configs/bosshp/ze_pirates_port_royal_v3_6.cfg @@ -5,6 +5,7 @@ "name" "Cannon" "method" "hpbar" "trigger" "delo_boss_hity:OnStartTouch" + "hurttrigger" "delo_counter:OutValue" "iterator" "boss_hp_iterations" "counter" "delo_counter" @@ -15,6 +16,7 @@ "name" "Pirate" "method" "hpbar" "trigger" "pirate_add_hit:OnStartTouch" + "hurttrigger" "pirate_hitbox:OnHealthChanged" "iterator" "pirate_hp_iterations" "counter" "pirate_counter" @@ -25,6 +27,7 @@ "name" "Barbossa" "method" "hpbar" "trigger" "barbossa2_pocty:OnStartTouch" + "hurttrigger" "barbossa_hit:OnHealthChanged" "iterator" "barbossa_hp_iterations" "counter" "barbossa_counter" @@ -35,6 +38,7 @@ "name" "Kraken" "method" "hpbar" "trigger" "kraken_multipl:OnStartTouch" + "hurttrigger" "kraken_box:OnHealthChanged" "iterator" "kraken_hp_iterations" "counter" "kraken_counter" @@ -45,6 +49,7 @@ "name" "Barbossa" "method" "counter" "trigger" "final_barbossa_hity:OnStartTouch" + "hurttrigger" "final_barbossa_hit:OnHealthChanged" "counter" "final_barbossa_counter" } diff --git a/BossHP/configs/bosshp/ze_pirates_port_royal_v5_4s2.cfg b/BossHP/configs/bosshp/ze_pirates_port_royal_v5_4s2.cfg index 531fd28e..de72701c 100644 --- a/BossHP/configs/bosshp/ze_pirates_port_royal_v5_4s2.cfg +++ b/BossHP/configs/bosshp/ze_pirates_port_royal_v5_4s2.cfg @@ -5,6 +5,7 @@ "name" "Cannon" "method" "hpbar" "trigger" "delo_boss_hity:OnStartTouch" + "hurttrigger" "delo_counter:OutValue" "iterator" "boss_hp_iterations" "counter" "delo_counter" @@ -15,6 +16,7 @@ "name" "Pirate" "method" "hpbar" "trigger" "pirate_add_hit:OnStartTouch" + "hurttrigger" "pirate_hitbox:OnHealthChanged" "iterator" "pirate_hp_iterations" "counter" "pirate_counter" @@ -25,6 +27,7 @@ "name" "Barbossa" "method" "hpbar" "trigger" "barbossa2_pocty:OnStartTouch" + "hurttrigger" "barbossa_hit:OnHealthChanged" "iterator" "barbossa_hp_iterations" "counter" "barbossa_counter" @@ -35,6 +38,7 @@ "name" "Kraken" "method" "hpbar" "trigger" "kraken_multipl:OnStartTouch" + "hurttrigger" "kraken_box:OnHealthChanged" "iterator" "kraken_hp_iterations" "counter" "kraken_counter" @@ -45,6 +49,7 @@ "name" "Barbossa" "method" "counter" "trigger" "final_barbossa_hity:OnStartTouch" + "hurttrigger" "final_barbossa_hit:OnHealthChanged" "counter" "final_barbossa_counter" } diff --git a/BossHP/configs/bosshp/ze_pkmn_adventure_v7_2s.cfg b/BossHP/configs/bosshp/ze_pkmn_adventure_v7_2s.cfg index 2823402e..c3586c50 100644 --- a/BossHP/configs/bosshp/ze_pkmn_adventure_v7_2s.cfg +++ b/BossHP/configs/bosshp/ze_pkmn_adventure_v7_2s.cfg @@ -6,6 +6,7 @@ "name" "Nidoqueen" "method" "breakable" "trigger" "nidoqueen_template:OnEntitySpawned" + "hurttrigger" "nidoqueen:OnTakeDamage" "breakable" "nidoqueen" } @@ -16,6 +17,7 @@ "method" "counter" "trigger" "addhealth_regi:OnStartTouch:3" "killtrigger" "regiiceboss:OnBreak" + "hurttrigger" "regicehealth:OnHealthChanged" "counter" "regicehealth" } @@ -25,6 +27,7 @@ "name" "Kirlia" "method" "breakable" "trigger" "KirliaSpawn:OnEntitySpawned" + "hurttrigger" "kirlia:OnTakeDamage" "breakable" "kirlia" } @@ -33,6 +36,7 @@ "name" "Crobat" "method" "breakable" "trigger" "CrobatSpawn:OnEntitySpawned" + "hurttrigger" "Crobat:OnTakeDamage" "breakable" "Crobat" } @@ -42,6 +46,7 @@ "method" "counter" "trigger" "groudonaddhealth:OnStartTouch" "killtrigger" "Groudon:OnBreak" + "hurttrigger" "Groudon:OnHealthChanged" "counter" "groudonhp" } @@ -51,6 +56,7 @@ "method" "counter" "trigger" "crobatfinalbossspawn:OnEntitySpawned" "killtrigger" "CrobatFinalboss:OnBreak" + "hurttrigger" "CrobatFinalboss:OnHealthChanged" "counter" "finalkirlia_hp" } @@ -60,6 +66,7 @@ "method" "counter" "trigger" "skuntank_spawn:OnEntitySpawned" "killtrigger" "Skuntank:OnBreak" + "hurttrigger" "Skuntank:OnHealthChanged" "counter" "skuntankhealth" } @@ -69,6 +76,7 @@ "method" "counter" "trigger" "purugly_spawn:OnEntitySpawned" "killtrigger" "Purugly:OnBreak" + "hurttrigger" "Purugly:OnHealthChanged" "counter" "puruglyhealth" } @@ -78,6 +86,7 @@ "method" "counter" "trigger" "HonchkrowSpawn:OnEntitySpawned" "killtrigger" "Honchkrow:OnBreak" + "hurttrigger" "Honchkrow:OnHealthChanged" "counter" "honchkrowhp" } @@ -87,6 +96,7 @@ "method" "counter" "trigger" "CrobatSpawnCyrus:OnEntitySpawned" "killtrigger" "CrobatCyrus:OnBreak" + "hurttrigger" "CrobatCyrus:OnHealthChanged" "counter" "crobatcyrushp" } @@ -96,6 +106,7 @@ "method" "counter" "trigger" "WaevileSpawn:OnEntitySpawned" "killtrigger" "Weavile:OnBreak" + "hurttrigger" "Weavile:OnHealthChanged" "counter" "weavilehp" } @@ -105,6 +116,7 @@ "method" "counter" "trigger" "addhealth_gira:OnStartTouch" "killtrigger" "Giratina:OnBreak" + "hurttrigger" "Giratina:OnHealthChanged" "counter" "giratinahp" } @@ -114,6 +126,7 @@ "method" "counter" "trigger" "bottom_2_medium:OnStartTouch:1" "killtrigger" "CrobatFinalPart2:OnBreak" + "hurttrigger" "CrobatFinalPart2:OnHealthChanged" "counter" "crobatfinal2_health" } @@ -123,6 +136,7 @@ "method" "counter" "trigger" "cyrusfinalspawner:OnEntitySpawned" "killtrigger" "WeavileFinal:OnBreak" + "hurttrigger" "WeavileFinal:OnHealthChanged" "counter" "weavilefinalhp" } diff --git a/BossHP/configs/bosshp/ze_pkmn_adventure_v8_6s_fix2.cfg b/BossHP/configs/bosshp/ze_pkmn_adventure_v8_6s_fix2.cfg new file mode 100644 index 00000000..e0037988 --- /dev/null +++ b/BossHP/configs/bosshp/ze_pkmn_adventure_v8_6s_fix2.cfg @@ -0,0 +1,175 @@ +"bosses" +{ + // Stage 1 - Bosses + "0" + { + "name" "Kirlia Phase 1/4" + "method" "counter" + "trigger" "Level1_KirliaBreakable:OnHealthChanged" + + "counter" "KirliaHP_1" + } + "-1" + { + "name" "Kirlia Phase 2/4" + "method" "counter" + "trigger" "KirliaHP_1:OnHitMin" + + "counter" "KirliaHP_2" + } + "-2" + { + "name" "Kirlia Phase 3/4" + "method" "counter" + "trigger" "KirliaHP_2:OnHitMin" + + "counter" "KirliaHP_3" + } + "-3" + { + "name" "Kirlia Phase 4/4" + "method" "counter" + "trigger" "KirliaHP_3:OnHitMin" + + "counter" "KirliaHP_4" + } + // Stage 2 - Bosses + "-4" + { + "name" "Noctowl" + "method" "counter" + "trigger" "#837716:OnStartTouch" + + "counter" "NoctowlHP" + } + "-5" + { + "name" "Pidgeot" + "method" "counter" + "trigger" "NoctowlHP:OnHitMin" + + "counter" "PidgeotHP" + } + "-6" + { + "name" "Miltank" + "method" "counter" + "trigger" "#836660:OnStartTouch" + + "counter" "MiltankHP" + } + // Stage 3 - Bosses + "-7" + { + "name" "Kirlia" + "method" "breakable" + "trigger" "vsWally:OnStartTouch" + + "breakable" "kirlia" + } + "-8" + { + "name" "Crobat" + "method" "breakable" + "trigger" "CrobatSpawn:OnEntitySpawned" + + "breakable" "Crobat" + } + "-9" + { + "name" "Groudon" + "method" "counter" + "trigger" "#206793:OnStartTouch" + + "counter" "groudonhp" + } + "-10" + { + "name" "Kirlia" + "method" "counter" + "trigger" "#186056:OnStartTouch" + + "counter" "finalkirlia_hp" + } + "-11" + { + "name" "Primal Groudon" + "method" "counter" + "trigger" "Primal_Groudon_Eruption_Relay:OnTrigger" + + "counter" "PrimalGroudonHP" + } + "-12" // Stage 4 - Bosses + { + "name" "Skuntank" + "method" "counter" + "trigger" "skuntank_spawn:OnEntitySpawned" + "killtrigger" "Skuntank:OnBreak" + + "counter" "skuntankhealth" + } + "-13" + { + "name" "Purugly" + "method" "counter" + "trigger" "purugly_spawn:OnEntitySpawned" + "killtrigger" "Purugly:OnBreak" + + "counter" "puruglyhealth" + } + "-14" + { + "name" "Honchkrow" + "method" "counter" + "trigger" "HonchkrowSpawn:OnEntitySpawned" + "killtrigger" "Honchkrow:OnBreak" + + "counter" "honchkrowhp" + } + "-15" + { + "name" "Crobat" + "method" "counter" + "trigger" "CrobatSpawnCyrus:OnEntitySpawned" + "killtrigger" "CrobatCyrus:OnBreak" + + "counter" "crobatcyrushp" + } + "-16" + { + "name" "Weavile" + "method" "counter" + "trigger" "WaevileSpawn:OnEntitySpawned" + "killtrigger" "Weavile:OnBreak" + + "counter" "weavilehp" + } + "-17" + { + "name" "Giratina" + "method" "counter" + "trigger" "addhealth_gira:OnStartTouch" + "killtrigger" "Giratina:OnBreak" + + "counter" "giratinahp" + } + "-18" + { + "name" "Crobat" + "method" "counter" + "trigger" "bottom_2_medium:OnStartTouch:1" + "killtrigger" "CrobatFinalPart2:OnBreak" + + "counter" "crobatfinal2_health" + } + "-19" + { + "name" "Weavile" + "method" "counter" + "trigger" "cyrusfinalspawner:OnEntitySpawned" + "killtrigger" "WeavileFinal:OnBreak" + + "counter" "weavilefinalhp" + } + +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_pkmn_adventure_v9s.cfg b/BossHP/configs/bosshp/ze_pkmn_adventure_v9s.cfg new file mode 100644 index 00000000..f5f00519 --- /dev/null +++ b/BossHP/configs/bosshp/ze_pkmn_adventure_v9s.cfg @@ -0,0 +1,223 @@ +"bosses" +{ + // Stage 1 - Bosses + "0" + { + "name" "Kirlia Phase 1/4" + "method" "counter" + "trigger" "Level1_KirliaBreakable:OnHealthChanged" + + "counter" "KirliaHP_1" + } + "-1" + { + "name" "Kirlia Phase 2/4" + "method" "counter" + "trigger" "KirliaHP_1:OnHitMin" + + "counter" "KirliaHP_2" + } + "-2" + { + "name" "Kirlia Phase 3/4" + "method" "counter" + "trigger" "KirliaHP_2:OnHitMin" + + "counter" "KirliaHP_3" + } + "-3" + { + "name" "Kirlia Phase 4/4" + "method" "counter" + "trigger" "KirliaHP_3:OnHitMin" + + "counter" "KirliaHP_4" + } + // Stage 2 - Bosses + "-4" + { + "name" "Noctowl" + "method" "counter" + "trigger" "#837716:OnStartTouch" + + "counter" "NoctowlHP" + } + "-5" + { + "name" "Pidgeot" + "method" "counter" + "trigger" "NoctowlHP:OnHitMin" + + "counter" "PidgeotHP" + } + "-6" + { + "name" "Miltank" + "method" "counter" + "trigger" "#836660:OnStartTouch" + + "counter" "MiltankHP" + } + // Stage 3 - Bosses + "-7" + { + "name" "Kirlia" + "method" "breakable" + "trigger" "vsWally:OnStartTouch" + + "breakable" "kirlia" + } + "-8" + { + "name" "Crobat" + "method" "breakable" + "trigger" "CrobatSpawn:OnEntitySpawned" + + "breakable" "Crobat" + } + "-9" + { + "name" "Groudon" + "method" "counter" + "trigger" "#206793:OnStartTouch" + + "counter" "groudonhp" + } + "-10" + { + "name" "Kirlia" + "method" "counter" + "trigger" "#186056:OnStartTouch" + + "counter" "finalkirlia_hp" + } + "-11" + { + "name" "Primal Groudon" + "method" "counter" + "trigger" "Primal_Groudon_Eruption_Relay:OnTrigger" + + "counter" "PrimalGroudonHP" + } + "-12" // Stage 4 - Bosses + { + "name" "Skuntank" + "method" "counter" + "trigger" "skuntank_spawn:OnEntitySpawned" + "killtrigger" "Skuntank:OnBreak" + + "counter" "skuntankhealth" + } + "-13" + { + "name" "Purugly" + "method" "counter" + "trigger" "purugly_spawn:OnEntitySpawned" + "killtrigger" "Purugly:OnBreak" + + "counter" "puruglyhealth" + } + "-14" + { + "name" "Honchkrow" + "method" "counter" + "trigger" "HonchkrowSpawn:OnEntitySpawned" + "killtrigger" "Honchkrow:OnBreak" + + "counter" "honchkrowhp" + } + "-15" + { + "name" "Crobat" + "method" "counter" + "trigger" "CrobatSpawnCyrus:OnEntitySpawned" + "killtrigger" "CrobatCyrus:OnBreak" + + "counter" "crobatcyrushp" + } + "-16" + { + "name" "Weavile" + "method" "counter" + "trigger" "WaevileSpawn:OnEntitySpawned" + "killtrigger" "Weavile:OnBreak" + + "counter" "weavilehp" + } + "-17" + { + "name" "Giratina" + "method" "counter" + "trigger" "addhealth_gira:OnStartTouch" + "killtrigger" "Giratina:OnBreak" + + "counter" "giratinahp" + } + "-18" + { + "name" "Crobat" + "method" "counter" + "trigger" "bottom_2_medium:OnStartTouch:1" + "killtrigger" "CrobatFinalPart2:OnBreak" + + "counter" "crobatfinal2_health" + } + "-19" + { + "name" "Weavile" + "method" "counter" + "trigger" "cyrusfinalspawner:OnEntitySpawned" + "killtrigger" "WeavileFinal:OnBreak" + + "counter" "weavilefinalhp" + } + + "-20" + { + "name" "Arceus Phase 1/4" + "method" "counter" + "trigger" "Arceus_Scale:OnStartTouch" + + "counter" "ArceusHP_1" + } + "-21" + { + "name" "Arceus Phase 2/4" + "method" "counter" + "trigger" "ArceusHP_1:OnHitMin" + + "counter" "ArceusHP_2" + } + "-22" + { + "name" "Arceus Phase 3/4" + "method" "counter" + "trigger" "ArceusHP_2:OnHitMin" + + "counter" "ArceusHP_3" + } + "-23" + { + "name" "Arceus Phase 4/4" + "method" "counter" + "trigger" "ArceusHP_3:OnHitMin" + + "counter" "ArceusHP_4" + } + "-24" + { + "name" "Darkray" + "method" "counter" + "trigger" "Level5_DarkraiAddHealth:OnStartTouch" + + "counter" "DarkraiHP" + } + "-25" + { + "name" "Gallade" + "method" "counter" + "trigger" "Level5_GalladeAddH:OnStartTouch" + + "counter" "Level5_GalladeHP" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_pkmn_adventure_v9s_fix.cfg b/BossHP/configs/bosshp/ze_pkmn_adventure_v9s_fix.cfg new file mode 100644 index 00000000..e99c0e8e --- /dev/null +++ b/BossHP/configs/bosshp/ze_pkmn_adventure_v9s_fix.cfg @@ -0,0 +1,216 @@ +"bosses" +{ + // Stage 1 - Bosses + "0" + { + "name" "Kirlia Phase 1/4" + "method" "counter" + "trigger" "Level1_KirliaBreakable:OnHealthChanged" + + "counter" "KirliaHP_1" + } + "-1" + { + "name" "Kirlia Phase 2/4" + "method" "counter" + "trigger" "KirliaHP_1:OnHitMin" + + "counter" "KirliaHP_2" + } + "-2" + { + "name" "Kirlia Phase 3/4" + "method" "counter" + "trigger" "KirliaHP_2:OnHitMin" + + "counter" "KirliaHP_3" + } + "-3" + { + "name" "Kirlia Phase 4/4" + "method" "counter" + "trigger" "KirliaHP_3:OnHitMin" + + "counter" "KirliaHP_4" + } + // Stage 2 - Bosses + "-4" + { + "name" "Noctowl" + "method" "counter" + "trigger" "#837716:OnStartTouch" + + "counter" "NoctowlHP" + } + "-5" + { + "name" "Pidgeot" + "method" "counter" + "trigger" "NoctowlHP:OnHitMin" + + "counter" "PidgeotHP" + } + "-6" + { + "name" "Miltank" + "method" "counter" + "trigger" "#836660:OnStartTouch" + + "counter" "MiltankHP" + } + // Stage 3 - Bosses + "-7" + { + "name" "Kirlia" + "method" "breakable" + "trigger" "vsWally:OnStartTouch" + + "breakable" "kirlia" + } + "-8" + { + "name" "Crobat" + "method" "breakable" + "trigger" "CrobatSpawn:OnEntitySpawned" + + "breakable" "Crobat" + } + "-9" + { + "name" "Groudon" + "method" "counter" + "trigger" "#206793:OnStartTouch" + + "counter" "groudonhp" + } + "-10" + { + "name" "Kirlia" + "method" "counter" + "trigger" "#186056:OnStartTouch" + + "counter" "finalkirlia_hp" + } + "-11" + { + "name" "Primal Groudon" + "method" "counter" + "trigger" "Primal_Groudon_Eruption_Relay:OnTrigger" + + "counter" "PrimalGroudonHP" + } + "-12" // Stage 4 - Bosses + { + "name" "Skuntank" + "method" "counter" + "trigger" "skuntank_spawn:OnEntitySpawned" + "killtrigger" "Skuntank:OnBreak" + + "counter" "skuntankhealth" + } + "-13" + { + "name" "Purugly" + "method" "counter" + "trigger" "purugly_spawn:OnEntitySpawned" + "killtrigger" "Purugly:OnBreak" + + "counter" "puruglyhealth" + } + "-14" + { + "name" "Honchkrow" + "method" "counter" + "trigger" "HonchkrowSpawn:OnEntitySpawned" + "killtrigger" "Honchkrow:OnBreak" + + "counter" "honchkrowhp" + } + "-15" + { + "name" "Crobat" + "method" "counter" + "trigger" "CrobatSpawnCyrus:OnEntitySpawned" + "killtrigger" "CrobatCyrus:OnBreak" + + "counter" "crobatcyrushp" + } + "-16" + { + "name" "Weavile" + "method" "counter" + "trigger" "WaevileSpawn:OnEntitySpawned" + "killtrigger" "Weavile:OnBreak" + + "counter" "weavilehp" + } + "-17" + { + "name" "Giratina" + "method" "counter" + "trigger" "addhealth_gira:OnStartTouch" + "killtrigger" "Giratina:OnBreak" + + "counter" "giratinahp" + } + "-18" + { + "name" "Crobat" + "method" "counter" + "trigger" "bottom_2_medium:OnStartTouch:1" + "killtrigger" "CrobatFinalPart2:OnBreak" + + "counter" "crobatfinal2_health" + } + "-19" + { + "name" "Weavile" + "method" "counter" + "trigger" "cyrusfinalspawner:OnEntitySpawned" + "killtrigger" "WeavileFinal:OnBreak" + + "counter" "weavilefinalhp" + } + + "-20" + { + "name" "Arceus Phase 1/4" + "method" "counter" + "trigger" "Arceus_Scale:OnStartTouch" + + "counter" "ArceusHP_1" + } + "-21" + { + "name" "Arceus Phase 2/4" + "method" "counter" + "trigger" "ArceusHP_1:OnHitMin" + + "counter" "ArceusHP_2" + } + "-22" + { + "name" "Arceus Phase 3/4" + "method" "counter" + "trigger" "ArceusHP_2:OnHitMin" + + "counter" "ArceusHP_3" + } + "-23" + { + "name" "Arceus Phase 4/4" + "method" "counter" + "trigger" "ArceusHP_3:OnHitMin" + + "counter" "ArceusHP_4" + } + "-24" + { + "name" "Darkray" + "method" "counter" + "trigger" "Level5_DarkraiAddHealth:OnStartTouch" + + "counter" "DarkraiHP" + } + +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_pokemon_adventure_v1_1s.cfg b/BossHP/configs/bosshp/ze_pokemon_adventure_v1_1s.cfg new file mode 100644 index 00000000..1176eea5 --- /dev/null +++ b/BossHP/configs/bosshp/ze_pokemon_adventure_v1_1s.cfg @@ -0,0 +1,45 @@ +"bosses" +{ + "0" + { + "name" "Pikachu" + "method" "counter" + "trigger" "PikachuBullets:OnHealthChanged" + + "counter" "CounterPikachuCTs" + } + "1" + { + "name" "Sigilyph" + "method" "counter" + "trigger" "SigilyphBullets:OnHealthChanged" + + "counter" "CounterSigilyphCTs" + } + "2" + { + "name" "Zapdos" + "method" "counter" + "trigger" "ZapdosBullets:OnHealthChanged" + + "counter" "CounterZapdosCTs" + } + "3" + { + "name" "Pokemons" + "method" "counter" + "trigger" "FinalBossBullets:OnHealthChanged" + + "counter" "CounterLastBoss" + } + "4" + { + "name" "Charizard" + "method" "hpbar" + "trigger" "CharizardBullets:OnHealthChanged" + "timeout" "3" + "iterator" "HPCounterIterator" + "counter" "HPCounter" + "backup" "HPCounterBackUp" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_portal_story_v3_2.cfg b/BossHP/configs/bosshp/ze_portal_story_v3_2.cfg index b76de3fe..262802f4 100644 --- a/BossHP/configs/bosshp/ze_portal_story_v3_2.cfg +++ b/BossHP/configs/bosshp/ze_portal_story_v3_2.cfg @@ -5,6 +5,7 @@ "name" "Glados" "method" "counter" "trigger" "lvl1_cts_counter_trigger:OnTrigger" + "hurttrigger" "glados_body:OnHealthChanged" "counter" "lvl1_health_counter" } diff --git a/BossHP/configs/bosshp/ze_predator_ultimate_v3.cfg b/BossHP/configs/bosshp/ze_predator_ultimate_v3.cfg index f0370f9f..ae55d816 100644 --- a/BossHP/configs/bosshp/ze_predator_ultimate_v3.cfg +++ b/BossHP/configs/bosshp/ze_predator_ultimate_v3.cfg @@ -5,6 +5,7 @@ "name" "Predator" "method" "counter" "trigger" "aztecboss_math_health:OutValue" + "hurttrigger" "aztecboss_hurt_1:OnTrigger" "counter" "aztecboss_math_health" } @@ -13,6 +14,7 @@ "name" "Predator" "method" "counter" "trigger" "aztecboss_math_health:OnHitMin" + "hurttrigger" "aztecboss_hurt_2:OnTrigger" "counter" "aztecboss_math_health_2" } @@ -21,6 +23,7 @@ "name" "Predator" "method" "counter" "trigger" "endboss_healthpush:OnStartTouch" + "hurttrigger" "mob_grudge_phys:OnDamaged" "counter" "mob_grudge_counter" } @@ -29,6 +32,7 @@ "name" "Predator" "method" "counter" "trigger" "cboss_INIT_TRIGGER:OnStartTouch" + "hurttrigger" "cboss_hit:OnDamaged" "counter" "cboss_predatorhealth_counter" } @@ -67,6 +71,7 @@ "name" "Predator" "method" "counter" "trigger" "fboss_start_trigger:OnStartTouch" + "hurttrigger" "fboss_relay_hurter:OnTrigger" "counter" "fboss_math_2" } @@ -75,6 +80,7 @@ "name" "Predator" "method" "counter" "trigger" "fboss_math_2:OnHitMin" + "hurttrigger" "fboss_relay_hurter2:OnTrigger" "counter" "fboss_math_1" } @@ -83,6 +89,7 @@ "name" "Alien" "method" "counter" "trigger" "fboss_ee_tem:OnEntitySpawned" + "hurttrigger" "fboss_ee_phys:OnDamaged" "counter" "fboss_ee_math" } diff --git a/BossHP/configs/bosshp/ze_prototype_v2.cfg b/BossHP/configs/bosshp/ze_prototype_v2.cfg new file mode 100644 index 00000000..e516ee62 --- /dev/null +++ b/BossHP/configs/bosshp/ze_prototype_v2.cfg @@ -0,0 +1,12 @@ +"bosses" +{ + "0" + { + "name" "Helicopter" + "method" "breakable" + "trigger" "ZM_disable2:OnStartTouch" + "hurttrigger" "Break_helicopter:OnDamaged" + + "breakable" "Monstruo_Breakable" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_rizomata_s1_3.cfg b/BossHP/configs/bosshp/ze_rizomata_s1_3.cfg index b848e9a3..ce239e38 100644 --- a/BossHP/configs/bosshp/ze_rizomata_s1_3.cfg +++ b/BossHP/configs/bosshp/ze_rizomata_s1_3.cfg @@ -6,6 +6,7 @@ "method" "counter" "trigger" "2_boss_hptrigger:OnStartTouch" "showtrigger" "2_boss_hptrigger:OnStartTouch" + "hurttrigger" "2_boss_target:OnHealthChanged" "counter" "2_boss_hpcounter" } @@ -24,6 +25,7 @@ "method" "counter" "trigger" "3_boss_hptrigger:OnStartTouch" "showtrigger" "3_boss_hptrigger:OnStartTouch" + "hurttrigger" "3_boss_target:OnHealthChanged" "counter" "3_boss_hpcounter" } @@ -42,6 +44,7 @@ "method" "counter" "trigger" "4_boss_hptrigger:OnStartTouch" "showtrigger" "4_boss_hptrigger:OnStartTouch" + "hurttrigger" "4_boss_target:OnHealthChanged" "counter" "4_boss_hpcounter" } @@ -60,6 +63,7 @@ "method" "counter" "trigger" "5_boss_hptrigger:OnStartTouch" "showtrigger" "5_boss_hptrigger:OnStartTouch" + "hurttrigger" "5_boss_target:OnHealthChanged" "counter" "5_boss_hpcounter" } @@ -77,6 +81,7 @@ "name" "Salamander - Enrage" "method" "counter" "trigger" "5_boss_teraflare_hurt2:OnStartTouch" + "hurttrigger" "5_boss_target:OnHealthChanged" "counter" "5_boss_enragehpcounter" } @@ -85,6 +90,7 @@ "name" "Philia" "method" "breakable" "trigger" "5_master_temp:OnEntitySpawned" + "hurttrigger" "5_master_target:OnTakeDamage" "breakable" "5_master_target" } diff --git a/BossHP/configs/bosshp/ze_rizomata_z33s.cfg b/BossHP/configs/bosshp/ze_rizomata_z33s.cfg deleted file mode 100644 index dd29b81d..00000000 --- a/BossHP/configs/bosshp/ze_rizomata_z33s.cfg +++ /dev/null @@ -1,33 +0,0 @@ -"bosses" -{ - "0" // Stage 2 - { - "name" "Gnone" - "method" "counter" - "trigger" "2_boss_hptrigger:OnStartTouch" - - "iterator" "2_boss_hpmasscounter" - "counter" "2_boss_hpcounter" - "backup" "2_boss_attackchangecounter" - } - "1" // Stage 3 - { - "name" "Undine" - "method" "counter" - "trigger" "3_boss_hptrigger:OnStartTouch" - - "iterator" "3_boss_hpmasscounter" - "counter" "3_boss_hpcounter" - "backup" "3_boss_attackchangecounter" - } - "2" // Stage 4 - { - "name" "Slyph" - "method" "counter" - "trigger" "4_boss_hptrigger:OnStartTouch" - - "iterator" "4_boss_hpmasscounter" - "counter" "4_boss_hpcounter" - "backup" "4_boss_attackchangecounter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_roof_adventure_v5s.cfg b/BossHP/configs/bosshp/ze_roof_adventure_v5s.cfg deleted file mode 100644 index 667cbeb3..00000000 --- a/BossHP/configs/bosshp/ze_roof_adventure_v5s.cfg +++ /dev/null @@ -1,12 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Rock Head" - "method" "counter" - "trigger" "trigger_bosshp:OnStartTouch" - - "iterator" "boss_hpcounter" - "counter" "counter_bosshp" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_sandstorm_f1.cfg b/BossHP/configs/bosshp/ze_sandstorm_f1.cfg index 61cbbe9e..30ded9ee 100644 --- a/BossHP/configs/bosshp/ze_sandstorm_f1.cfg +++ b/BossHP/configs/bosshp/ze_sandstorm_f1.cfg @@ -5,6 +5,7 @@ "name" "UFO" "method" "hpbar" "trigger" "mutant_add_hit1:OnStartTouch" + "hurttrigger" "mutant_hitbox1:OnHealthChanged" "iterator" "mutant_hp_iterations1" "counter" "mutant_counter1" @@ -15,6 +16,7 @@ "name" "Gargantua" "method" "hpbar" "trigger" "grg_add_hit:OnStartTouch" + "hurttrigger" "grg_hitbox:OnHealthChanged" "iterator" "grg_hp_iterations" "counter" "grg_counter" @@ -25,6 +27,7 @@ "name" "Gargantua" "method" "hpbar" "trigger" "add_hp_garg:OnStartTouch" + "hurttrigger" "garg_hitbox:OnHealthChanged" "iterator" "garg_hp_iterations" "counter" "garg_counter" @@ -35,6 +38,7 @@ "name" "Mutant" "method" "hpbar" "trigger" "mutant_add_hit:OnStartTouch" + "hurttrigger" "mutant_hitbox:OnHealthChanged" "iterator" "mutant_hp_iterations" "counter" "mutant_counter" @@ -45,6 +49,7 @@ "name" "Crystal" "method" "breakable" "trigger" "level_relay5:OnTrigger" + "hurttrigger" "ph_crystal_ph:OnTakeDamage" "breakable" "ph_crystal_ph" } diff --git a/BossHP/configs/bosshp/ze_santassination_css2.cfg b/BossHP/configs/bosshp/ze_santassination_css2.cfg index 4120992c..7cc14b58 100644 --- a/BossHP/configs/bosshp/ze_santassination_css2.cfg +++ b/BossHP/configs/bosshp/ze_santassination_css2.cfg @@ -6,6 +6,7 @@ "method" "breakable" "trigger" "s_npc_beaver:OnEntitySpawned" "showtrigger" "npc_phys2gg:OnDamaged" + "hurttrigger" "npc_phys2gg:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -18,6 +19,7 @@ "method" "breakable" "trigger" "s_npc_elv:OnEntitySpawned" "showtrigger" "npc_phys2gg1:OnDamaged" + "hurttrigger" "npc_phys2gg1:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -30,6 +32,7 @@ "method" "breakable" "trigger" "s_npc_present:OnEntitySpawned" "showtrigger" "npc_phys2gg2:OnDamaged" + "hurttrigger" "npc_phys2gg2:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -42,6 +45,7 @@ "method" "breakable" "trigger" "s_npc_bender:OnEntitySpawned" "showtrigger" "npc_phys2gg3:OnDamaged" + "hurttrigger" "npc_phys2gg3:OnTakeDamage" "multitrigger" "1" "namefixup" "1" "timeout" "3" @@ -53,6 +57,7 @@ "name" "Mufasa" "method" "breakable" "trigger" "lionking_mufasaskip_tem:OnEntitySpawned" + "hurttrigger" "lionking_mufasaskip:OnTakeDamage" "breakable" "lionking_mufasaskip" } @@ -61,6 +66,7 @@ "name" "Santa Claus" "method" "breakable" "trigger" "bosss_start:OnStartTouch" + "hurttrigger" "bosss_hp:OnTakeDamage" "breakable" "bosss_hp" } @@ -69,6 +75,7 @@ "name" "Santa Claus" "method" "breakable" "trigger" "bosss_start1:OnStartTouch" + "hurttrigger" "bosss_hp1:OnTakeDamage" "breakable" "bosss_hp1" } @@ -77,6 +84,7 @@ "name" "Socrates" "method" "breakable" "trigger" "bosss_start2:OnStartTouch" + "hurttrigger" "bosss_hp2:OnTakeDamage" "breakable" "bosss_hp2" } diff --git a/BossHP/configs/bosshp/ze_shaurma_v3_b06.cfg b/BossHP/configs/bosshp/ze_shaurma_v3_b06.cfg index 711db7cf..58c6cbe3 100644 --- a/BossHP/configs/bosshp/ze_shaurma_v3_b06.cfg +++ b/BossHP/configs/bosshp/ze_shaurma_v3_b06.cfg @@ -5,6 +5,7 @@ "name" "APC" "method" "hpbar" "trigger" "boss_health_trigger:OnStartTouch" + "hurttrigger" "boss_level1_hitbox4:OnHealthChanged" "iterator" "level1_boss_health_counter" "counter" "level1_boss_health" @@ -16,6 +17,7 @@ "name" "Barricade" "method" "hpbar" "trigger" "level2_police_barricade_hp_add:OnStartTouch" + "hurttrigger" "level2_police_barricade_physbox:OnHealthChanged" "iterator" "level2_boss_health_counter" "counter" "level2_boss_health" @@ -26,6 +28,7 @@ "name" "Putin" "method" "hpbar" "trigger" "boss_health_trigger:OnStartTouch" + "hurttrigger" "level3_boss_hitbox:OnHealthChanged" "iterator" "level3_boss_health_counter" "counter" "level3_boss_health" @@ -37,6 +40,7 @@ "name" "Putin" "method" "counter" "trigger" "level3_end_hp_add:OnStartTouch" + "hurttrigger" "level3_end_putin_physbox:OnHealthChanged" "counter" "level3_end_putin_health" } diff --git a/BossHP/configs/bosshp/ze_shroomforest2_v1.cfg b/BossHP/configs/bosshp/ze_shroomforest2_v1.cfg index 1d52a2c9..e3a43ba3 100644 --- a/BossHP/configs/bosshp/ze_shroomforest2_v1.cfg +++ b/BossHP/configs/bosshp/ze_shroomforest2_v1.cfg @@ -5,6 +5,7 @@ "name" "Groke" "method" "hpbar" "trigger" "Lvl1_Boss_Tr:OnStartTouch" + "hurttrigger" "Boss_Health:OutValue" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "TV heart" "method" "hpbar" "trigger" "Lvl2_Boss_Tr:OnStartTouch" + "hurttrigger" "B2a_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -25,6 +27,7 @@ "name" "GOD" "method" "hpbar" "trigger" "Lvl3_Boss_Tr:OnStartTouch" + "hurttrigger" "Boss_Health:OutValue" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -35,6 +38,7 @@ "name" "Spider" "method" "hpbar" "trigger" "Ext2_Boss_Tr:OnStartTouch" + "hurttrigger" "Lvl2_S_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -42,9 +46,10 @@ } "4" { - "name" "FALLEN ANGEL" + "name" "Fallen Angel" "method" "hpbar" "trigger" "Ext3_Boss_Tr:OnStartTouch" + "hurttrigger" "B3b_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -52,9 +57,10 @@ } "5" { - "name" "DRAGON" + "name" "Dragon" "method" "hpbar" "trigger" "Rescue_B_Path4:OnPass" + "hurttrigger" "Dragon_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -62,12 +68,24 @@ } "6" { - "name" "SATAN" + "name" "Satan" "method" "hpbar" "trigger" "Part3_Relay:OnTrigger" + "hurttrigger" "Part2_Satan_Phys:OnDamaged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" "backup" "Boss_HealthInit" } + "7" + { + "name" "Satan" + "method" "hpbar" + "trigger" "Part2_Tr:OnStartTouch" + "hurttrigger" "Part3_SatanPhys:OnHealthChanged" + + "iterator" "Satan_HealthCount" + "counter" "Satan_Health" + "backup" "Satan_HealthInit" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_shroomforest3_b6_2.cfg b/BossHP/configs/bosshp/ze_shroomforest3_b6_2.cfg index ca0b06a2..d7c0b976 100644 --- a/BossHP/configs/bosshp/ze_shroomforest3_b6_2.cfg +++ b/BossHP/configs/bosshp/ze_shroomforest3_b6_2.cfg @@ -5,6 +5,7 @@ "name" "Snorlax" "method" "hpbar" "trigger" "Lvl3_Trigger5:OnStartTouch" + "hurttrigger" "Snorlax_Boss_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "Knight" "method" "hpbar" "trigger" "Knight_Boss_Path1:OnPass" + "hurttrigger" "Boss_Health:OutValue" "iterator" "Boss_HealthCount" "counter" "Boss_Health" @@ -25,6 +27,7 @@ "name" "Skeleton 1" "method" "hpbar" "trigger" "Lvl2_Trigger3:OnStartTouch" + "hurttrigger" "Skeleton_Boss_Phys1:OnHealthChanged" "iterator" "Skeleton_Boss_HealthCount1" "counter" "Skeleton_Boss_Health1" @@ -35,6 +38,7 @@ "name" "Skeleton 2" "method" "hpbar" "trigger" "Lvl2_Trigger3:OnStartTouch" + "hurttrigger" "Skeleton_Boss_Phys2:OnHealthChanged" "iterator" "Skeleton_Boss_HealthCount2" "counter" "Skeleton_Boss_Health2" @@ -45,6 +49,7 @@ "name" "Skeleton 3" "method" "hpbar" "trigger" "Lvl2_Trigger3:OnStartTouch" + "hurttrigger" "Skeleton_Boss_Phys3:OnHealthChanged" "iterator" "Skeleton_Boss_HealthCount3" "counter" "Skeleton_Boss_Health3" @@ -56,6 +61,7 @@ "method" "breakable" "trigger" "Spider_Break1:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break1:OnTakeDamage" "breakable" "Spider_Break1" } @@ -65,6 +71,7 @@ "method" "breakable" "trigger" "Spider_Break2:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break2:OnTakeDamage" "breakable" "Spider_Break2" } @@ -74,6 +81,7 @@ "method" "breakable" "trigger" "Spider_Break3:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break3:OnTakeDamage" "breakable" "Spider_Break3" } @@ -83,6 +91,7 @@ "method" "breakable" "trigger" "Spider_Break4:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break4:OnTakeDamage" "breakable" "Spider_Break4" } @@ -92,6 +101,7 @@ "method" "breakable" "trigger" "Spider_Break5:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break5:OnTakeDamage" "breakable" "Spider_Break5" } @@ -101,6 +111,7 @@ "method" "breakable" "trigger" "Spider_Break6:OnTakeDamage" "timeout" "3" + "hurttrigger" "Spider_Break6:OnTakeDamage" "breakable" "Spider_Break6" } @@ -108,52 +119,68 @@ { "name" "Battery" "method" "breakable" - "trigger" "House_ClockBattery_Break:OnTakeDamage" + "trigger" "House_ClockBattery_Break1:OnTakeDamage" "timeout" "3" + "hurttrigger" "House_ClockBattery_Break1:OnTakeDamage" - "breakable" "House_ClockBattery_Break" + "breakable" "House_ClockBattery_Break1" } "12" + { + "name" "Battery" + "method" "breakable" + "trigger" "House_ClockBattery_Break2:OnTakeDamage" + "timeout" "3" + "hurttrigger" "House_ClockBattery_Break2:OnTakeDamage" + + "breakable" "House_ClockBattery_Break2" + } + "13" { "name" "Pikachu Nazi" "method" "hpbar" "trigger" "Template_HitlerBoss:OnEntitySpawned" + "hurttrigger" "Hitler_Boss_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" "backup" "Boss_HealthInit" } - "13" - { - "name" "Tank" - "method" "breakable" - "trigger" "Template_HitlerBoss:OnEntitySpawned" - - "breakable" "Hitler_Boss_Tank1_Break" - } "14" { "name" "Tank" "method" "breakable" "trigger" "Template_HitlerBoss:OnEntitySpawned" + "hurttrigger" "Hitler_Boss_Tank1_Break:OnTakeDamage" - "breakable" "Hitler_Boss_Tank2_Break" + "breakable" "Hitler_Boss_Tank1_Break" } "15" { - "name" "Satan" - "method" "hpbar" - "trigger" "Satan_Boss_MoveUp:OnClose" + "name" "Tank" + "method" "breakable" + "trigger" "Template_HitlerBoss:OnEntitySpawned" + "hurttrigger" "Hitler_Boss_Tank2_Break:OnTakeDamage" - "iterator" "Boss_HealthCount" - "counter" "Boss_Health" - "backup" "Boss_HealthInit" + "breakable" "Hitler_Boss_Tank2_Break" } "16" + { + "name" "Satan" + "method" "hpbar" + "trigger" "Satan_Boss_MoveUp:OnClose" + "hurttrigger" "Satan_Boss_Break:OnHealthChanged" + + "iterator" "Boss_HealthCount" + "counter" "Boss_Health" + "backup" "Boss_HealthInit" + } + "17" { "name" "Satan" "method" "hpbar" "trigger" "Satan_Laser_Start:OnTrigger" + "hurttrigger" "Satan_Laser_Phys:OnHealthChanged" "iterator" "Boss_HealthCount" "counter" "Boss_Health" diff --git a/BossHP/configs/bosshp/ze_shroomforest_v4_5.cfg b/BossHP/configs/bosshp/ze_shroomforest_v4_5.cfg index 5ae0cdd0..63e7bd8f 100644 --- a/BossHP/configs/bosshp/ze_shroomforest_v4_5.cfg +++ b/BossHP/configs/bosshp/ze_shroomforest_v4_5.cfg @@ -5,6 +5,7 @@ "name" "Butterfly" "method" "hpbar" "trigger" "Lvl1_EvilButt_P2:OnPass" + "hurttrigger" "dynamic_HP:OutValue" "iterator" "dynamic_HP_output" "counter" "dynamic_HP" @@ -15,6 +16,7 @@ "name" "Pikachu" "method" "hpbar" "trigger" "Lvl2_Boss_Tr:OnStartTouch" + "hurttrigger" "Lvl2_Boss_Phys:OnDamaged" "iterator" "dynamic_HP_output" "counter" "dynamic_HP" @@ -25,6 +27,7 @@ "name" "Satan" "method" "hpbar" "trigger" "Lvl3_Boss_Tr:OnStartTouch" + "hurttrigger" "Satan_Boss_Phys:OnDamaged" "iterator" "dynamic_HP_output" "counter" "dynamic_HP" @@ -35,6 +38,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Ext3_Boss_Tr:OnStartTouch" + "hurttrigger" "Ext3_D_Phys:OnDamaged" "iterator" "dynamic_HP_output" "counter" "dynamic_HP" @@ -45,15 +49,17 @@ "name" "Pokemons" "method" "counter" "trigger" "Ditto_Phys:OnDamaged" + "hurttrigger" "Ditto_Phys:OnDamaged" "counter" "dynamic_HP" } - "5" + "5" { "name" "Pikachu" "method" "counter" "trigger" "Lvl7_Boss_Phys:OnDamaged" + "hurttrigger" "Pikachu_Phys:OnDamaged" "counter" "dynamic_HP" } -} \ No newline at end of file +} diff --git a/BossHP/configs/bosshp/ze_sit_caelum_paradisus_b7s.cfg b/BossHP/configs/bosshp/ze_sit_caelum_paradisus_b7s.cfg index 5912d76d..dddd6283 100644 --- a/BossHP/configs/bosshp/ze_sit_caelum_paradisus_b7s.cfg +++ b/BossHP/configs/bosshp/ze_sit_caelum_paradisus_b7s.cfg @@ -1,17 +1,19 @@ "bosses" { - "1" + "0" { - "name" "Iron Knight" + "name" "Boss" "method" "breakable" - "trigger" "slash_hurt_mid:OnHurtPlayer" - "breakable" "zangeki_health" - } - "1" - { - "name" "Dragon" - "method" "breakable" - "trigger" "boss_health_adder:OnStartTouch" + "trigger" "#801803:OnStartTouch" + "breakable" "boss_health" } -} + "1" + { + "name" "Boss" + "method" "breakable" + "trigger" "#1877195:OnStartTouch" + + "breakable" "zangeki_health" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_sky_athletic_adv_v9_12s.cfg b/BossHP/configs/bosshp/ze_sky_athletic_adv_v9_12s.cfg new file mode 100644 index 00000000..c58c654c --- /dev/null +++ b/BossHP/configs/bosshp/ze_sky_athletic_adv_v9_12s.cfg @@ -0,0 +1,21 @@ +"bosses" +{ + "0" + { + "name" "Naraka" + "method" "hpbar" + "trigger" "nrk1_count_player:OnStartTouch" + + "iterator" "nrk1_hp_iterations" + "counter" "nrk1_counter" + "backup" "nrk1_hp_backup" + } + "1" + { + "name" "Naraka" + "method" "breakable" + "trigger" "nrk1_room6_spawner2:OnEntitySpawned" + + "breakable" "nrk1_laserboss_2_break" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_sky_athletic_v5_final.cfg b/BossHP/configs/bosshp/ze_sky_athletic_v5_final.cfg deleted file mode 100644 index f209c9cb..00000000 --- a/BossHP/configs/bosshp/ze_sky_athletic_v5_final.cfg +++ /dev/null @@ -1,30 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Crasher" - "method" "counter" - "trigger" "lvfinal boss hp setting:OnStartTouch" - "timeout" "3" - - "counter" "crasher angry count" - } - "1" - { - "name" "Crasher" - "method" "counter" - "trigger" "lvfinal boss trigger:OnStartTouch" - "timeout" "3" - - "counter" "crasher angry count quick" - } - "2" - { - "name" "Crasher" - "method" "counter" - "trigger" "lvfinal boss trigger extra:OnStartTouch" - "timeout" "3" - - "counter" "crasher hp" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_slender_escape_b4.cfg b/BossHP/configs/bosshp/ze_slender_escape_b4.cfg deleted file mode 100644 index c8cd13c6..00000000 --- a/BossHP/configs/bosshp/ze_slender_escape_b4.cfg +++ /dev/null @@ -1,35 +0,0 @@ -"bosses" -{ - "0" - { - "name" "BarrelBoss" - "method" "counter" - "trigger" "Item_Barrelboss_Stripper:OnStartTouch" - - "counter" "Item_Barrelboss_Count" - } - "1" - { - "name" "Spider" - "method" "counter" - "trigger" "Item_Spider_Stripper:OnStartTouch" - - "counter" "Item_Spider_Count" - } - "2" - { - "name" "Slender" - "method" "counter" - "trigger" "Item_Slenderzombie_Stripper:OnStartTouch" - - "counter" "Item_Slenderzombie_Count" - } - "2" - { - "name" "Skin" - "method" "counter" - "trigger" "P_Trigger:OnStartTouch" - - "counter" "P_Counter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_starwars_v2fix.cfg b/BossHP/configs/bosshp/ze_starwars_v2fix.cfg index c451a5f7..dccaf600 100644 --- a/BossHP/configs/bosshp/ze_starwars_v2fix.cfg +++ b/BossHP/configs/bosshp/ze_starwars_v2fix.cfg @@ -5,6 +5,7 @@ "name" "Dart Maul" "method" "counter" "trigger" "Trigger_heal_maul:OnStartTouch" + "hurttrigger" "Dart_maul_box_heal:OnHealthChanged" "counter" "Boss_heal_dart_maul" } @@ -13,6 +14,7 @@ "name" "Dart Maul" "method" "hpbar" "trigger" "Trigger_boss_heal_lvl4:OnStartTouch" + "hurttrigger" "Dart_Maul_phybox:OnHealthChanged" "iterator" "darth_mol_3" "counter" "darth_mol_1" @@ -23,6 +25,7 @@ "name" "Dart Maul" "method" "counter" "trigger" "Trgger_boss_heal:OnStartTouch" + "hurttrigger" "Break_lvl_hard:OnHealthChanged" "counter" "Lvl_hard_heal" } @@ -31,53 +34,59 @@ "name" "Dart Vader" "method" "counter" "trigger" "trigger_boss_heal_1:OnStartTouch" + "hurttrigger" "Dart_Vader_physbox_lvl_2:OnHealthChanged" "counter" "Boss_heal_dart_vader" } - "4" // lvl3_2 + "3" // lvl3_2 { "name" "Darth Sidius" "method" "hpbar" "trigger" "lvl4_Boss_Push_HP:OnStartTouch" + "hurttrigger" "Dart_Raven_Phys_Body:OnHealthChanged" "iterator" "darth_sid_3" "counter" "darth_sid_1" "backup" "darth_sid_2" } - "5" // lvl3_2 + "3" // lvl3_2 { "name" "Boss_Tank" "method" "counter" "trigger" "Boss_Tank_start:OnStartTouch" + "hurttrigger" "Boss_tank:OnHealthChanged" "counter" "Boss_heal_tank" } - "6" // lvl3_2 + "3" // lvl3_2 { "name" "Reactor" "method" "hpbar" "trigger" "Station_heal_boss:OnStartTouch" + "hurttrigger" "Reactor:OnHealthChanged" "iterator" "darth_sphere_3" "counter" "darth_sphere_1" "backup" "darth_sphere_2" } - "7" // lvl3_2 + "3" // lvl3_2 { "name" "Dart Vader" "method" "hpbar" "trigger" "Trigger_boss_fight_1:OnStartTouch" + "hurttrigger" "boss:OnDamaged" "iterator" "darth_vader_3" "counter" "darth_vader_1" "backup" "darth_vader_2" } - "8" // lvl3_2 + "3" // lvl3_2 { "name" "Station" "method" "counter" "trigger" "Heal_station:OnStartTouch" + "hurttrigger" "Station:OnHealthChanged" "counter" "Math_conter_station" } -} \ No newline at end of file +} diff --git a/BossHP/configs/bosshp/ze_sunkentemple_v3_1s.cfg b/BossHP/configs/bosshp/ze_sunkentemple_v3_1s.cfg deleted file mode 100644 index c2557c61..00000000 --- a/BossHP/configs/bosshp/ze_sunkentemple_v3_1s.cfg +++ /dev/null @@ -1,10 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Deathstroke" - "method" "counter" - "trigger" "Boss_health_counter:OnStartTouch" - "counter" "Boss_Health" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_sunlight_v2_0.cfg b/BossHP/configs/bosshp/ze_sunlight_v2_0.cfg index d1eb313d..86190d80 100644 --- a/BossHP/configs/bosshp/ze_sunlight_v2_0.cfg +++ b/BossHP/configs/bosshp/ze_sunlight_v2_0.cfg @@ -2,7 +2,7 @@ { "0" { - "name" "Boss" + "name" "Scorched Demon" "method" "counter" "trigger" "tr_boss_healthscale:OnStartTouch" diff --git a/BossHP/configs/bosshp/ze_super_mario_64_v2_b5.cfg b/BossHP/configs/bosshp/ze_super_mario_64_v2_b5.cfg index a7a29c34..27814e87 100644 --- a/BossHP/configs/bosshp/ze_super_mario_64_v2_b5.cfg +++ b/BossHP/configs/bosshp/ze_super_mario_64_v2_b5.cfg @@ -67,4 +67,40 @@ "counter" "chomp_health" } + "8" + { + "name" "Yoshi" + "method" "breakable" + "trigger" "yoshi_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "yoshi_char_hbox" + } + "9" + { + "name" "Toad" + "method" "breakable" + "trigger" "toad_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "toad_char_hbox" + } + "10" + { + "name" "Mario" + "method" "breakable" + "trigger" "mario_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "mario_char_hbox" + } + "11" + { + "name" "Boomb" + "method" "breakable" + "trigger" "boomb_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "boomb_char_hbox" + } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_super_mario_64_v2_b9.cfg b/BossHP/configs/bosshp/ze_super_mario_64_v2_b9.cfg new file mode 100644 index 00000000..27814e87 --- /dev/null +++ b/BossHP/configs/bosshp/ze_super_mario_64_v2_b9.cfg @@ -0,0 +1,106 @@ +"bosses" +{ + "0" + { + "name" "EyeRok Right" + "method" "counter" + "trigger" "eyerok_addhealth:OnStartTouch" + + "counter" "eyehealthr" + } + "1" + { + "name" "EyeRok Left" + "method" "counter" + "trigger" "eyerok_addhealth:OnStartTouch" + + "counter" "eyehealthl" + } + "2" + { + "name" "Bowser" + "method" "hpbar" + "trigger" "bowser_addhealth:OnStartTouch" + + "iterator" "bowser_counter" + "counter" "bowser_health" + "backup" "bowser_health_backup" + } + "3" + { + "name" "King Bob-omb" + "method" "counter" + "trigger" "kingboomb_init:OnStartTouch" + + "counter" "kingboomb_health" + } + "4" + { + "name" "Boo" + "method" "breakable" + "trigger" "small_boo_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "small_boo_hbox" + } + "5" + { + "name" "King Boo" + "method" "counter" + "trigger" "kingboo_add:OnStartTouch" + + "counter" "kingboo_health" + } + "6" + { + "name" "Boo" + "method" "counter" + "trigger" "merrygoround_health:OnStartTouch" + + "counter" "merrygoround_counter" + } + "7" + { + "name" "Boo" + "method" "counter" + "trigger" "chomp_start:OnTrigger" + + "counter" "chomp_health" + } + "8" + { + "name" "Yoshi" + "method" "breakable" + "trigger" "yoshi_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "yoshi_char_hbox" + } + "9" + { + "name" "Toad" + "method" "breakable" + "trigger" "toad_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "toad_char_hbox" + } + "10" + { + "name" "Mario" + "method" "breakable" + "trigger" "mario_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "mario_char_hbox" + } + "11" + { + "name" "Boomb" + "method" "breakable" + "trigger" "boomb_char_hbox:OnTakeDamage" + "timeout" "3" + + "breakable" "boomb_char_hbox" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_surf_froyo_css3.cfg b/BossHP/configs/bosshp/ze_surf_froyo_css3.cfg new file mode 100644 index 00000000..b021420d --- /dev/null +++ b/BossHP/configs/bosshp/ze_surf_froyo_css3.cfg @@ -0,0 +1,33 @@ +"bosses" +{ + "0" // BossStar1 + { + "name" "Boss Star -- First Encounter" + "method" "hpbar" + "trigger" "boss_star_hp_trigger:OnStartTouch" + + "iterator" "boss_star_hpcounter" + "counter" "boss_star_hp" + "backup" "boss_star_healthbackup" + } + "1" // Froyo + { + "name" "Boss Froyo" + "method" "hpbar" + "trigger" "boss_froyo_hp_trigger:OnStartTouch" + + "iterator" "boss_froyo_hpcounter" + "counter" "boss_froyo_hp" + "backup" "boss_froyo_healthbackup" + } + "2" // BossStar2 + { + "name" "Boss Star -- Second Encounter" + "method" "hpbar" + "trigger" "boss_star_ii_hp_trigger:OnStartTouch" + + "iterator" "boss_star_ii_hpcounter" + "counter" "boss_star_ii_hp" + "backup" "boss_star_ii_healthbackup" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_temple_raider_b4.cfg b/BossHP/configs/bosshp/ze_temple_raider_b4.cfg index 48b01272..87572562 100644 --- a/BossHP/configs/bosshp/ze_temple_raider_b4.cfg +++ b/BossHP/configs/bosshp/ze_temple_raider_b4.cfg @@ -5,6 +5,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Boss_Add_Hp:OnStartTouch" + "hurttrigger" "Boss_Armor_Break:OnHealthChanged" "iterator" "Boss_Health_Overlay_Counter" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "End Boss" "method" "counter" "trigger" "End_Boss_AddHP:OnStartTouch" + "hurttrigger" "End_Boss_Armor:OnHealthChanged" "counter" "End_Boss_Health" } @@ -23,6 +25,7 @@ "name" "Boxes" "method" "counter" "trigger" "B_Trigger2:OnStartTouch" + "hurttrigger" "B_Wooddoor:OnHealthChanged" "counter" "B_Wooddoor_Counter" } diff --git a/BossHP/configs/bosshp/ze_tesv_skyrim_v4fix.cfg b/BossHP/configs/bosshp/ze_tesv_skyrim_v4fix.cfg index bcd296f8..5161dc54 100644 --- a/BossHP/configs/bosshp/ze_tesv_skyrim_v4fix.cfg +++ b/BossHP/configs/bosshp/ze_tesv_skyrim_v4fix.cfg @@ -5,6 +5,7 @@ "name" "Alduin" "method" "hpbar" "trigger" "boss_hp:OnStartTouch" + "hurttrigger" "st1_dragonphysbox:OnHealthChanged" "iterator" "BossHpIterations4" "counter" "counter_1" @@ -15,6 +16,7 @@ "name" "Alduin" "method" "hpbar" "trigger" "boss_hp_2:OnStartTouch" + "hurttrigger" "boss_2_break:OnHealthChanged" "iterator" "BossHpIterations3" "counter" "counter_2" @@ -25,6 +27,7 @@ "name" "Dwarven Centurion" "method" "hpbar" "trigger" "stage_4_bosshp:OnStartTouch" + "hurttrigger" "dw_boss_break:OnHealthChanged" "iterator" "BossHpIterations2" "counter" "dw_hp" @@ -35,6 +38,7 @@ "name" "Dwarven Sphere" "method" "breakable" "trigger" "smalldwboss_template1:OnEntitySpawned" + "hurttrigger" "smalldwboss_physbox2:OnTakeDamage" "multitrigger" "1" "breakable" "smalldwboss_physbox2" @@ -44,6 +48,7 @@ "name" "Dragonpriest" "method" "breakable" "trigger" "phbox:OnAwakened" + "hurttrigger" "phbox:OnTakeDamage" "breakable" "phbox" } @@ -52,6 +57,7 @@ "name" "Alduin" "method" "hpbar" "trigger" "boss_hp_3_ex:OnStartTouch" + "hurttrigger" "sovng_boss_break:OnHealthChanged" "iterator" "BossHpIterations" "counter" "counter_3" @@ -62,6 +68,7 @@ "name" "Nightingale" "method" "breakable" "trigger" "night_phbox:OnTakeDamage" + "hurttrigger" "st1_dragonphysbox:OnTakeDamage" "timeout" "3" "breakable" "night_phbox" @@ -107,6 +114,7 @@ "name" "Dragonpriest" "method" "breakable" "trigger" "dr_phbox:OnTakeDamage" + "hurttrigger" "st1_dragonphysbox:OnTakeDamage" "timeout" "3" "breakable" "dr_phbox" diff --git a/BossHP/configs/bosshp/ze_three_eyes_b1s.cfg b/BossHP/configs/bosshp/ze_three_eyes_b1s.cfg new file mode 100644 index 00000000..2042a776 --- /dev/null +++ b/BossHP/configs/bosshp/ze_three_eyes_b1s.cfg @@ -0,0 +1,27 @@ +"bosses" +{ + "0" + { + "name" "Blue Eyes" + "method" "counter" + "trigger" "L1_BlueEyes_AddHP:OnEndTouch" + + "counter" "L1_BlueEyes_HP" + } + "1" + { + "name" "Green Eyes" + "method" "counter" + "trigger" "L2_GreenEyes_AddHP:OnEndTouch" + + "counter" "L2_GreenEyes_HP" + } + "2" + { + "name" "Red Eyes" + "method" "counter" + "trigger" "L3_RedEyes_AddHP:OnEndTouch" + + "counter" "L3_BlueEyes_HP" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_three_eyes_v0_7s_fix.cfg b/BossHP/configs/bosshp/ze_three_eyes_v0_7s_fix.cfg new file mode 100644 index 00000000..c13acc27 --- /dev/null +++ b/BossHP/configs/bosshp/ze_three_eyes_v0_7s_fix.cfg @@ -0,0 +1,35 @@ +"bosses" +{ + "0" // Blue Eyes + { + "name" "Blue Eyes" + "method" "counter" + "trigger" "L1_BlueEyes_AddHP:OnStartTouch" + + "counter" "L1_BlueEyes_HP" + } + "1" // Green Eyes + { + "name" "Green Eyes" + "method" "counter" + "trigger" "L2_GreenEyes_AddHP:OnStartTouch" + + "counter" "L2_GreenEyes_HP" + } + "3" // Red Eyes + { + "name" "Red Eyes" + "method" "counter" + "trigger" "L3_RedEyes_AddHP:OnStartTouch" + + "counter" "L3_RedEyes_HP" + } + "4" // White Eyes + { + "name" "White Eyes" + "method" "counter" + "trigger" "L4_WhiteEyes_AddHP:OnStartTouch" + + "counter" "L4_WhiteEyes_HP" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_tilex_escape_sakura_v1_4.cfg b/BossHP/configs/bosshp/ze_tilex_escape_sakura_v1_4.cfg deleted file mode 100644 index 988e0230..00000000 --- a/BossHP/configs/bosshp/ze_tilex_escape_sakura_v1_4.cfg +++ /dev/null @@ -1,11 +0,0 @@ -"bosses" -{ - "1" - { - "name" "Ball" - "method" "counter" - "trigger" "lastboss_hptrigger:OnStartTouch" - - "counter" "lastboss_hpcounter" - } -} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_tilex_ultimate_v2_13s_fix3.cfg b/BossHP/configs/bosshp/ze_tilex_ultimate_v2_13s_fix3.cfg new file mode 100644 index 00000000..bac33130 --- /dev/null +++ b/BossHP/configs/bosshp/ze_tilex_ultimate_v2_13s_fix3.cfg @@ -0,0 +1,27 @@ +"bosses" +{ + "0" + { + "name" "Holy" + "method" "counter" + "trigger" "ex_relay:OnTrigger" + + "counter" "exholy_hpcounter" + } + "1" + { + "name" "Dark" + "method" "counter" + "trigger" "ex_relay:OnTrigger" + + "counter" "exdark_hpcounter" + } + "2" + { + "name" "The Fallen One" + "method" "counter" + "trigger" "lastboss_hptrigger:OnStartTouch" + + "counter" "lastboss_hpcounter" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_timesplitters_v1_2.cfg b/BossHP/configs/bosshp/ze_timesplitters_v1_2.cfg index 598fb3ef..3cca64c9 100644 --- a/BossHP/configs/bosshp/ze_timesplitters_v1_2.cfg +++ b/BossHP/configs/bosshp/ze_timesplitters_v1_2.cfg @@ -4,8 +4,9 @@ { "name" "REAPER SPLITTER" "method" "counter" - "trigger" "HeDetectorTrigger:OnStartTouch" - + "trigger" "BossZoneCountFix:OnStartTouch" + "hurttrigger" "ReaperBossHealth:OnHealthChanged" + "counter" "BossHPCounter" } } \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_totally_new_wester.cfg b/BossHP/configs/bosshp/ze_totally_new_wester.cfg index 9e22494b..e3a33abb 100644 --- a/BossHP/configs/bosshp/ze_totally_new_wester.cfg +++ b/BossHP/configs/bosshp/ze_totally_new_wester.cfg @@ -5,6 +5,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Boss_Temp:OnEntitySpawned" + "hurttrigger" "Boss_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -15,6 +16,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "Ehe_Dragon_Temp:OnEntitySpawned" + "hurttrigger" "Ehe_Dragon_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -25,6 +27,7 @@ "name" "Belias" "method" "hpbar" "trigger" "Belias_Temp:OnEntitySpawned" + "hurttrigger" "Belias_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -35,6 +38,7 @@ "name" "Gabranth" "method" "hpbar" "trigger" "Judge_Temp:OnEntitySpawned" + "hurttrigger" "Judge_Armor:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -45,6 +49,7 @@ "name" "Gabranth" "method" "hpbar" "trigger" "Guard_Temp_Boss:OnEntitySpawned" + "hurttrigger" "Guard_Boss_Break:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -55,6 +60,7 @@ "name" "Chaos" "method" "hpbar" "trigger" "Chaos_Hp_To_Boss:OnStartTouch" + "hurttrigger" "Chaos_Armor:OnHealthChanged" "iterator" "Boss_Overlay_Counter" "counter" "Boss_Health" @@ -66,6 +72,7 @@ "method" "counter" "trigger" "Espers_Temp_Belias:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Belias_Physbox:OnHealthChanged" "counter" "Espers_Belias_Counter" } @@ -75,6 +82,7 @@ "method" "counter" "trigger" "Espers_Temp_Chaos:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Chaos_Physbox:OnHealthChanged" "counter" "Espers_Chaos_Counter" } @@ -84,6 +92,7 @@ "method" "counter" "trigger" "Espers_Temp_Mateus:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Espers_Mateus_Physbox:OnHealthChanged" "counter" "Espers_Mateus_Counter" } @@ -94,6 +103,7 @@ "method" "breakable" "trigger" "Summon_Belias_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Belias_Summon_Physbox:OnTakeDamage" "breakable" "Belias_Summon_Physbox" } @@ -103,6 +113,7 @@ "method" "breakable" "trigger" "Summon_Chaos_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Chaos_Summon_Physbox:OnTakeDamage" "breakable" "Chaos_Summon_Physbox" } @@ -112,6 +123,7 @@ "method" "breakable" "trigger" "Summon_Mateus_Temp:OnEntitySpawned" "multitrigger" "1" + "hurttrigger" "Mateus_Summon_Physbox:OnTakeDamage" "breakable" "Mateus_Summon_Physbox" } diff --git a/BossHP/configs/bosshp/ze_tyranny_v5fix.cfg b/BossHP/configs/bosshp/ze_tyranny_v5fix.cfg index cd1aed15..6ce0a3f1 100644 --- a/BossHP/configs/bosshp/ze_tyranny_v5fix.cfg +++ b/BossHP/configs/bosshp/ze_tyranny_v5fix.cfg @@ -5,6 +5,7 @@ "name" "Spider" "method" "hpbar" "trigger" "bosslvl1_trigger:OnStartTouch" + "hurttrigger" "bosslvl1_hit:OnDamaged" "iterator" "bosslvl1_counter3" "counter" "bosslvl1_counter1" @@ -15,6 +16,7 @@ "name" "Troll" "method" "hpbar" "trigger" "bosslvl2_trigger:OnStartTouch" + "hurttrigger" "bosslvl2_hit:OnHealthChanged" "iterator" "bosslvl2_counter3" "counter" "bosslvl2_counter1" @@ -25,6 +27,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "bosslvl2_end_health_trigger:OnStartTouch" + "hurttrigger" "bosslvl2_end_hit:OnHealthChanged" "iterator" "bosslvl2_end_counter3" "counter" "bosslvl2_end_counter1" @@ -35,6 +38,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "bosslvl3_trigger:OnStartTouch" + "hurttrigger" "bosslvl3_hit:OnHealthChanged" "iterator" "bosslvl3_counter3" "counter" "bosslvl3_counter1" @@ -45,6 +49,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "bosslvl3_end_trigger_2:OnStartTouch" + "hurttrigger" "bosslvl3_end_dragon_hit:OnHealthChanged" "iterator" "bosslvl3_end_counter3" "counter" "bosslvl3_end_counter1" @@ -55,6 +60,7 @@ "name" "Gargantua" "method" "hpbar" "trigger" "bosslvl4_trigger:OnStartTouch" + "hurttrigger" "bosslvl4_hit:OnHealthChanged" "iterator" "bosslvl4_counter3" "counter" "bosslvl4_counter1" @@ -65,6 +71,7 @@ "name" "Balrog" "method" "hpbar" "trigger" "tele_bosslvl5_1_2:OnStartTouch" + "hurttrigger" "bosslvl5_hit:OnHealthChanged" "iterator" "bosslvl5_counter3" "counter" "bosslvl5_counter1" @@ -75,6 +82,7 @@ "name" "Dragon" "method" "hpbar" "trigger" "bosslvl5_end_trigger_push:OnStartTouch" + "hurttrigger" "bosslvl5_end_hit:OnHealthChanged" "iterator" "bosslvl5_end_counter3" "counter" "bosslvl5_end_counter1" @@ -85,6 +93,7 @@ "name" "Gargantua" "method" "hpbar" "trigger" "bosslvl5_garg_trigger:OnStartTouch" + "hurttrigger" "bosslvl5_garg_hit:OnHealthChanged" "iterator" "bosslvl5_garg_counter3" "counter" "bosslvl5_garg_counter1" @@ -95,23 +104,8 @@ "name" "Balrog" "method" "counter" "trigger" "bosslvl5_laser_push:OnStartTouch" + "hurttrigger" "bosslvl5_laser_hit:OnHealthChanged" "counter" "bosslvl5_laser_counter" } - "10" // Stage 4_statu - { - "name" "Statue 1" - "method" "breakable" - "trigger" "commandtrigger1:OnStartTouch" - - "breakable" "lvl5_shield_hit_t" - } - "11" // Stage 4_statu - { - "name" "Statue 2" - "method" "breakable" - "trigger" "commandtrigger1:OnStartTouch" - - "breakable" "lvl5_shield_hit_ct" - } } diff --git a/BossHP/configs/bosshp/ze_ut2004_convoy_v2_2_1.cfg b/BossHP/configs/bosshp/ze_ut2004_convoy_v2_2_1.cfg new file mode 100644 index 00000000..d315e3cc --- /dev/null +++ b/BossHP/configs/bosshp/ze_ut2004_convoy_v2_2_1.cfg @@ -0,0 +1,19 @@ +"bosses" +{ + "0" + { + "name" "Driver" + "method" "counter" + "trigger" "final_boss_relay:OnTrigger" + "hurttrigger" "boss_hitbox:OnHealthChanged" + "counter" "boss_counter1" + } + "1" + { + "name" "Engine" + "method" "counter" + "trigger" "boss_CTs_trigger:OnStartTouch" + "hurttrigger" "boss_hitbox:OnHealthChanged" + "counter" "boss_counter2" + } +} \ No newline at end of file diff --git a/BossHP/configs/bosshp/ze_v0u0v_a5.cfg b/BossHP/configs/bosshp/ze_v0u0v_a5.cfg deleted file mode 100644 index 71f94d45..00000000 --- a/BossHP/configs/bosshp/ze_v0u0v_a5.cfg +++ /dev/null @@ -1,137 +0,0 @@ -"bosses" -{ - "0" - { - "name" "Octopus" - "method" "hpbar" - "trigger" "bosslvl1_trigger:OnStartTouch" - - "iterator" "bosslvl1_4_counter3" - "counter" "bosslvl1_4_counter1" - "backup" "bosslvl1_4_counter2" - } - "1" - { - "name" "Octopus" - "method" "hpbar" - "trigger" "bosslvl4_trigger:OnStartTouch" - - "iterator" "bosslvl1_4_counter3" - "counter" "bosslvl1_4_counter1" - "backup" "bosslvl1_4_counter2" - } - "2" - { - "name" "Sonic" - "method" "hpbar" - "trigger" "bosslvl3_trigger:OnStartTouch" - - "iterator" "bosslvl3_6_counter3" - "counter" "bosslvl3_6_counter1" - "backup" "bosslvl3_6_counter2" - } - "3" - { - "name" "Sonic 2" - "method" "hpbar" - "trigger" "bosslvl3_trigger:OnStartTouch" - - "iterator" "bosslvl3_6_counter6" - "counter" "bosslvl3_6_counter4" - "backup" "bosslvl3_6_counter5" - } - "4" - { - "name" "Sonic the Bike" - "method" "hpbar" - "trigger" "bosslvl6_trigger:OnStartTouch" - - "iterator" "bosslvl6_counter3" - "counter" "bosslvl6_counter1" - "backup" "bosslvl6_counter2" - } - "5" - { - "name" "Sun" - "method" "hpbar" - "trigger" "bosslvl2_trigger:OnStartTouch" - - "iterator" "bosslvl2_5_counter3" - "counter" "bosslvl2_5_counter1" - "backup" "bosslvl2_5_counter2" - } - "6" - { - "name" "Sun" - "method" "hpbar" - "trigger" "bosslvl5_trigger:OnStartTouch" - - "iterator" "bosslvl2_5_counter3" - "counter" "bosslvl2_5_counter1" - "backup" "bosslvl2_5_counter2" - } - "7" - { - "name" "Priest" - "method" "hpbar" - "trigger" "bosslvl3_2_trigger_lvl3:OnStartTouch" - - "iterator" "bosslvl3_2_counter3" - "counter" "bosslvl3_2_counter1" - "backup" "bosslvl3_2_counter2" - } - "8" - { - "name" "Priest" - "method" "hpbar" - "trigger" "bosslvl3_2_trigger_lvl6:OnStartTouch" - - "iterator" "bosslvl3_2_counter3" - "counter" "bosslvl3_2_counter1" - "backup" "bosslvl3_2_counter2" - } - "9" - { - "name" "Flamethrower Soldier" - "method" "breakable" - "trigger" "npc1_temp1:OnEntitySpawned" - "showtrigger" "npc1_body:OnTakeDamage" - "multitrigger" "1" - "timeout" "3" - - "breakable" "npc1_body" - } - "10" - { - "name" "Freezer Soldier" - "method" "breakable" - "trigger" "npc2_temp1:OnEntitySpawned" - "showtrigger" "npc2_body:OnTakeDamage" - "multitrigger" "1" - "timeout" "3" - - "breakable" "npc2_body" - } - "11" - { - "name" "Minigun Soldier" - "method" "breakable" - "trigger" "npc3_temp1:OnEntitySpawned" - "showtrigger" "npc3_body:OnTakeDamage" - "multitrigger" "1" - "timeout" "3" - - "breakable" "npc3_body" - } - "12" - { - "name" "Twin Sword Soldier" - "method" "breakable" - "trigger" "npc4_temp1:OnEntitySpawned" - "showtrigger" "npc4_body:OnTakeDamage" - "multitrigger" "1" - "timeout" "3" - - "breakable" "npc4_body" - } -} \ No newline at end of file diff --git a/BossHP/scripting/BossHP.sp b/BossHP/scripting/BossHP.sp index 501ece20..ccd40c1f 100644 --- a/BossHP/scripting/BossHP.sp +++ b/BossHP/scripting/BossHP.sp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "CConfig.inc" @@ -16,6 +17,12 @@ ArrayList g_aConfig; ArrayList g_aBoss; StringMap g_aHadOnce; +Handle g_hFwd_OnBossInitialized; +Handle g_hFwd_OnBossDamaged; +Handle g_hFwd_OnBossKilled; + +ConVar g_hCvar_DebugMode; + char g_sHUDText[256]; public Plugin myinfo = @@ -29,10 +36,27 @@ public Plugin myinfo = public void OnPluginStart() { + g_hFwd_OnBossInitialized = CreateGlobalForward("OnBossInitialized", ET_Ignore, Param_Any, Param_Any); + g_hFwd_OnBossDamaged = CreateGlobalForward("OnBossDamaged", ET_Ignore, Param_Any, Param_Any, Param_Cell, Param_Float); + g_hFwd_OnBossKilled = CreateGlobalForward("OnBossKilled", ET_Ignore, Param_Any, Param_Any, Param_Cell); + + g_hCvar_DebugMode = CreateConVar("bosshp_debug", "0", _, _, true, 0.0, true, 1.0); + HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy); HookEntityOutput("env_entity_maker", "OnEntitySpawned", OnEnvEntityMakerEntitySpawned); } +void LogDebugMessage(const char[] message, any ...) +{ + if(g_hCvar_DebugMode.BoolValue) + { + char buffer[1024]; + VFormat(buffer, sizeof(buffer), message, 2); + + LogMessage(buffer); + } +} + public void OnPluginEnd() { Cleanup(); @@ -40,6 +64,23 @@ public void OnPluginEnd() void Cleanup() { + if(g_aBoss) + { + for(int i = 0; i < g_aBoss.Length; i++) + { + CBoss Boss = g_aBoss.Get(i); + + Call_StartForward(g_hFwd_OnBossKilled); + Call_PushCell(Boss); + Call_PushCell(Boss.dConfig); + Call_PushCell(0); + Call_Finish(); + + delete Boss; + } + delete g_aBoss; + } + if(g_aConfig) { for(int i = 0; i < g_aConfig.Length; i++) @@ -49,16 +90,6 @@ void Cleanup() } delete g_aConfig; } - - if(g_aBoss) - { - for(int i = 0; i < g_aBoss.Length; i++) - { - CBoss Boss = g_aBoss.Get(i); - delete Boss; - } - delete g_aBoss; - } } public void OnMapEnd() @@ -191,6 +222,19 @@ public void OnMapStart() } } + char sHurtTrigger[64 * 2]; + int iHurtTriggerDelim; + KvConfig.GetString("hurttrigger", sHurtTrigger, sizeof(sHurtTrigger)); + if(sHurtTrigger[0]) + { + if((iHurtTriggerDelim = FindCharInString(sHurtTrigger, ':')) == -1) + { + LogError("Delimiter ':' not found in \"hurttrigger\"(%s) in \"%s\"", sHurtTrigger, sSection); + continue; + } + sHurtTrigger[iHurtTriggerDelim] = 0; + } + bool bMultiTrigger = view_as(KvConfig.GetNum("multitrigger", 0)); bool bNameFixup = view_as(KvConfig.GetNum("namefixup", 0)); int iTimeout = KvConfig.GetNum("timeout", -1); @@ -288,6 +332,12 @@ public void OnMapStart() Config.fKillTriggerDelay = fKillTriggerDelay; } + if(sHurtTrigger[0]) + { + Config.SetHurtTrigger(sHurtTrigger); + Config.SetHurtOutput(sHurtTrigger[iHurtTriggerDelim + 1]); + } + g_aConfig.Push(Config); } while(KvConfig.GotoNextKey(false)); @@ -366,7 +416,7 @@ public void OnEntitySpawned(int entity) if(sTrigger[0] == '#') iTriggerHammerID = StringToInt(sTrigger[1]); - if((iTriggerHammerID == -1 && sTargetname[0] && StrEqual(sTargetname, sTrigger)) || iTriggerHammerID == iHammerID) + if((iTriggerHammerID == -1 && sTrigger[0] && StrEqual(sTargetname, sTrigger)) || iTriggerHammerID == iHammerID) { char sOutput[64]; Config.GetOutput(sOutput, sizeof(sOutput)); @@ -381,7 +431,7 @@ public void OnEntitySpawned(int entity) HookSingleEntityOutput(entity, sOutput, OnEntityOutput, Once); } - LogMessage("Hooked trigger %s:%s", sTrigger, sOutput); + LogDebugMessage("Hooked trigger %s:%s", sTrigger, sOutput); } char sShowTrigger[64]; @@ -406,7 +456,7 @@ public void OnEntitySpawned(int entity) HookSingleEntityOutput(entity, sShowOutput, OnEntityOutputShow, Once); } - LogMessage("Hooked showtrigger %s:%s", sShowTrigger, sShowOutput); + LogDebugMessage("Hooked showtrigger %s:%s", sShowTrigger, sShowOutput); } char sKillTrigger[64]; @@ -431,7 +481,31 @@ public void OnEntitySpawned(int entity) HookSingleEntityOutput(entity, sKillOutput, OnEntityOutputKill, Once); } - LogMessage("Hooked killtrigger %s:%s", sKillTrigger, sKillOutput); + LogDebugMessage("Hooked killtrigger %s:%s", sKillTrigger, sKillOutput); + } + + char sHurtTrigger[64]; + Config.GetHurtTrigger(sHurtTrigger, sizeof(sHurtTrigger)); + + int iHurtTriggerHammerID = -1; + if(sHurtTrigger[0] == '#') + iHurtTriggerHammerID = StringToInt(sHurtTrigger[1]); + + if((iHurtTriggerHammerID == -1 && sHurtTrigger[0] && StrEqual(sTargetname, sHurtTrigger)) || iHurtTriggerHammerID == iHammerID) + { + char sHurtOutput[64]; + Config.GetHurtOutput(sHurtOutput, sizeof(sHurtOutput)); + + if(StrEqual(sHurtOutput, "OnTakeDamage")) + { + SDKHook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePostHurt); + } + else + { + HookSingleEntityOutput(entity, sHurtOutput, OnEntityOutputHurt); + } + + LogDebugMessage("Hooked hurttrigger %s:%s", sHurtTrigger, sHurtOutput); } } } @@ -443,7 +517,7 @@ void OnTrigger(int entity, const char[] output, SDKHookType HookType = view_as(-1) && !Config.bMultiTrigger) { if(HookType == SDKHook_OnTakeDamagePost) - SDKUnhook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePost); + SDKUnhook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePostShow); } float fShowTriggerDelay = Config.fShowTriggerDelay; @@ -590,12 +664,12 @@ void OnShowTrigger(int entity, const char[] output, SDKHookType HookType = view_ if(fShowTriggerDelay > 0) { Boss.fShowAt = GetGameTime() + fShowTriggerDelay; - LogMessage("Scheduled show(%f) boss %d", fShowTriggerDelay, j); + LogDebugMessage("Scheduled show(%f) boss %d", fShowTriggerDelay, j); } else { Boss.bShow = true; - LogMessage("Showing boss %d", j); + LogDebugMessage("Showing boss %d", j); } } } @@ -644,14 +718,14 @@ void OnKillTrigger(int entity, const char[] output, SDKHookType HookType = view_ continue; if(iKillTriggerHammerID == -1) - LogMessage("Triggered kill boss %s(%d) from output %s", sTargetname, entity, output); + LogDebugMessage("Triggered kill boss %s(%d) from output %s", sTargetname, entity, output); else - LogMessage("Triggered kill boss #%d(%d) from output %s", iKillTriggerHammerID, entity, output); + LogDebugMessage("Triggered kill boss #%d(%d) from output %s", iKillTriggerHammerID, entity, output); if(HookType != view_as(-1) && !Config.bMultiTrigger) { if(HookType == SDKHook_OnTakeDamagePost) - SDKUnhook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePost); + SDKUnhook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePostKill); } float fKillTriggerDelay = Config.fKillTriggerDelay; @@ -669,19 +743,93 @@ void OnKillTrigger(int entity, const char[] output, SDKHookType HookType = view_ if(fKillTriggerDelay > 0) { Boss.fKillAt = GetGameTime() + fKillTriggerDelay; - LogMessage("Scheduled kill(%f) boss %d", fKillTriggerDelay, j); + LogDebugMessage("Scheduled kill(%f) boss %d", fKillTriggerDelay, j); } else { + LogDebugMessage("Killed boss %d", j); + + Call_StartForward(g_hFwd_OnBossKilled); + Call_PushCell(Boss); + Call_PushCell(Boss.dConfig); + Call_PushCell(1); + Call_Finish(); + delete Boss; g_aBoss.Erase(j); j--; - LogMessage("Killed boss %d", j + 1); } } } } +void OnHurtTrigger(int entity, const char[] output, int activator, float damage = 1.0) +{ + char sTargetname[64]; + GetEntPropString(entity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); + + int iHammerID = GetEntProp(entity, Prop_Data, "m_iHammerID"); + + int iTemplateNum = -1; + int iTemplateLoc = FindCharInString(sTargetname, '&', true); + if(iTemplateLoc != -1) + { + iTemplateNum = StringToInt(sTargetname[iTemplateLoc + 1]); + sTargetname[iTemplateLoc] = 0; + } + + for(int i = 0; i < g_aConfig.Length; i++) + { + CConfig Config = g_aConfig.Get(i); + + char sHurtTrigger[64]; + Config.GetHurtTrigger(sHurtTrigger, sizeof(sHurtTrigger)); + + if(!sHurtTrigger[0]) + continue; + + int iHurtTriggerHammerID = -1; + if(sHurtTrigger[0] == '#') + { + iHurtTriggerHammerID = StringToInt(sHurtTrigger[1]); + + if(iHurtTriggerHammerID != iHammerID) + continue; + } + else if(!sTargetname[0] || !StrEqual(sTargetname, sHurtTrigger)) + continue; + + char sHurtOutput[64]; + Config.GetHurtOutput(sHurtOutput, sizeof(sHurtOutput)); + + if(!StrEqual(output, sHurtOutput)) + continue; + + if(iHurtTriggerHammerID == -1) + LogDebugMessage("Triggered hurt boss %s(%d) from output %s", sTargetname, entity, output); + else + LogDebugMessage("Triggered hurt boss #%d(%d) from output %s", iHurtTriggerHammerID, entity, output); + + for(int j = 0; j < g_aBoss.Length; j++) + { + CBoss Boss = g_aBoss.Get(j); + + if(Boss.dConfig != Config) + continue; + + if(Boss.iTemplateNum != iTemplateNum) + continue; + + Call_StartForward(g_hFwd_OnBossDamaged); + Call_PushCell(Boss); + Call_PushCell(Boss.dConfig); + Call_PushCell(activator); + Call_PushFloat(damage); + Call_Finish(); + } + } +} + public void OnEnvEntityMakerEntitySpawned(const char[] output, int caller, int activator, float delay) { if(!g_aConfig) @@ -724,6 +872,11 @@ public void OnEntityOutputKill(const char[] output, int caller, int activator, f OnKillTrigger(caller, output); } +public void OnEntityOutputHurt(const char[] output, int caller, int activator, float delay) +{ + OnHurtTrigger(caller, output, activator); +} + public void OnTakeDamagePost(int victim, int attacker, int inflictor, float damage, int damagetype) { OnTrigger(victim, "OnTakeDamage", SDKHook_OnTakeDamagePost); @@ -739,6 +892,11 @@ public void OnTakeDamagePostKill(int victim, int attacker, int inflictor, float OnKillTrigger(victim, "OnTakeDamage", SDKHook_OnTakeDamagePost); } +public void OnTakeDamagePostHurt(int victim, int attacker, int inflictor, float damage, int damagetype) +{ + OnHurtTrigger(victim, "OnTakeDamage", attacker, damage); +} + public void OnGameFrame() { if(!g_aBoss) @@ -753,10 +911,18 @@ public void OnGameFrame() if(Boss.fKillAt && Boss.fKillAt < GetGameTime()) { // Delete Boss - LogMessage("Deleting boss %d (KillAt)", i); + LogDebugMessage("Deleting boss %d (KillAt)", i); + + Call_StartForward(g_hFwd_OnBossKilled); + Call_PushCell(Boss); + Call_PushCell(Boss.dConfig); + Call_PushCell(1); + Call_Finish(); + delete Boss; g_aBoss.Erase(i); i--; + continue; } @@ -773,12 +939,30 @@ public void OnGameFrame() continue; } - if(!BossProcess(Boss)) - { // Delete Boss - LogMessage("Deleting boss %d (dead)", i); - delete Boss; - g_aBoss.Erase(i); - i--; + if(!Boss.bProcessing) + { + // Mark boss as processing, this will stay true on errors, preventing spam due to OnGameFrame otherwise constantly trying again. + Boss.bProcessing = true; + + if(!BossProcess(Boss)) + { // Delete Boss + LogDebugMessage("Deleting boss %d (dead)", i); + + Call_StartForward(g_hFwd_OnBossKilled); + Call_PushCell(Boss); + Call_PushCell(Boss.dConfig); + Call_PushCell(2); + Call_Finish(); + + delete Boss; + g_aBoss.Erase(i); + i--; + + continue; + } + + // Unmark Boss as processing. + Boss.bProcessing = false; } } @@ -931,7 +1115,15 @@ bool BossInit(CBoss _Boss) int iCounterOnHitMinCount = GetOutputCount(iCounterEnt, "m_OnHitMin"); int iCounterOnHitMaxCount = GetOutputCount(iCounterEnt, "m_OnHitMax"); - Config.bCounterReverse = iCounterOnHitMaxCount > iCounterOnHitMinCount; + if(iCounterOnHitMinCount == iCounterOnHitMaxCount) + { + int iMinDiff = RoundFloat(GetOutputValueFloat(iCounterEnt, "m_OutValue") - GetEntPropFloat(iCounterEnt, Prop_Data, "m_flMin")); + int iMaxDiff = RoundFloat(GetEntPropFloat(iCounterEnt, Prop_Data, "m_flMax") - GetOutputValueFloat(iCounterEnt, "m_OutValue")); + + Config.bCounterReverse = iMaxDiff > iMinDiff; + } + else + Config.bCounterReverse = iCounterOnHitMaxCount > iCounterOnHitMinCount; } else if(_Boss.IsHPBar) { @@ -1018,12 +1210,28 @@ bool BossInit(CBoss _Boss) int iIteratorOnHitMinCount = GetOutputCount(iIteratorEnt, "m_OnHitMin"); int iIteratorOnHitMaxCount = GetOutputCount(iIteratorEnt, "m_OnHitMax"); - Config.bIteratorReverse = iIteratorOnHitMaxCount > iIteratorOnHitMinCount; + if(iIteratorOnHitMinCount == iIteratorOnHitMaxCount) + { + int iMinDiff = RoundFloat(GetOutputValueFloat(iIteratorEnt, "m_OutValue") - GetEntPropFloat(iIteratorEnt, Prop_Data, "m_flMin")); + int iMaxDiff = RoundFloat(GetEntPropFloat(iIteratorEnt, Prop_Data, "m_flMax") - GetOutputValueFloat(iIteratorEnt, "m_OutValue")); + + Config.bIteratorReverse = iMaxDiff > iMinDiff; + } + else + Config.bIteratorReverse = iIteratorOnHitMaxCount > iIteratorOnHitMinCount; int iCounterOnHitMinCount = GetOutputCount(iCounterEnt, "m_OnHitMin"); int iCounterOnHitMaxCount = GetOutputCount(iCounterEnt, "m_OnHitMax"); - Config.bCounterReverse = iCounterOnHitMaxCount > iCounterOnHitMinCount; + if(iCounterOnHitMinCount == iCounterOnHitMaxCount) + { + int iMinDiff = RoundFloat(GetOutputValueFloat(iCounterEnt, "m_OutValue") - GetEntPropFloat(iCounterEnt, Prop_Data, "m_flMin")); + int iMaxDiff = RoundFloat(GetEntPropFloat(iCounterEnt, Prop_Data, "m_flMax") - GetOutputValueFloat(iCounterEnt, "m_OutValue")); + + Config.bCounterReverse = iMaxDiff > iMinDiff; + } + else + Config.bCounterReverse = iCounterOnHitMaxCount > iCounterOnHitMinCount; } _Boss.bActive = true; @@ -1051,10 +1259,11 @@ bool BossInit(CBoss _Boss) } else { - HookSingleEntityOutput(entity, sShowOutput, OnEntityOutputShow, true); + bool Once = !_Config.bMultiTrigger; + HookSingleEntityOutput(entity, sShowOutput, OnEntityOutputShow, Once); } - LogMessage("Hooked showtrigger %s:%s", sShowTrigger, sShowOutput); + LogDebugMessage("Hooked showtrigger %s:%s", sShowTrigger, sShowOutput); } } @@ -1077,17 +1286,49 @@ bool BossInit(CBoss _Boss) } else { - HookSingleEntityOutput(entity, sKillOutput, OnEntityOutputKill, true); + bool Once = !_Config.bMultiTrigger; + HookSingleEntityOutput(entity, sKillOutput, OnEntityOutputKill, Once); } - LogMessage("Hooked killtrigger %s:%s", sKillTrigger, sKillOutput); + LogDebugMessage("Hooked killtrigger %s:%s", sKillTrigger, sKillOutput); + } + } + + char sHurtTrigger[64]; + _Config.GetHurtTrigger(sHurtTrigger, sizeof(sHurtTrigger)); + + if(sHurtTrigger[0]) + { + Format(sHurtTrigger, sizeof(sHurtTrigger), "%s&%04d", sHurtTrigger, iTemplateNum); + + char sHurtOutput[64]; + _Config.GetHurtOutput(sHurtOutput, sizeof(sHurtOutput)); + + int entity = INVALID_ENT_REFERENCE; + while((entity = FindEntityByTargetname(entity, sHurtTrigger)) != INVALID_ENT_REFERENCE) + { + if(StrEqual(sHurtOutput, "OnTakeDamage")) + { + SDKHook(entity, SDKHook_OnTakeDamagePost, OnTakeDamagePostHurt); + } + else + { + HookSingleEntityOutput(entity, sHurtOutput, OnEntityOutputHurt); + } + + LogDebugMessage("Hooked hurttrigger %s:%s", sHurtTrigger, sHurtOutput); } } } char sBoss[64]; _Config.GetName(sBoss, sizeof(sBoss)); - LogMessage("Initialized boss %s (template = %d)", sBoss, iTemplateNum); + LogDebugMessage("Initialized boss %s (template = %d)", sBoss, iTemplateNum); + + Call_StartForward(g_hFwd_OnBossInitialized); + Call_PushCell(_Boss); + Call_PushCell(_Boss.dConfig); + Call_Finish(); return true; } diff --git a/BossHP/scripting/BossHP_Ranking.sp b/BossHP/scripting/BossHP_Ranking.sp new file mode 100644 index 00000000..1ee3ff73 --- /dev/null +++ b/BossHP/scripting/BossHP_Ranking.sp @@ -0,0 +1,345 @@ +#include +#include +#include +#include + +#include +#include "CConfig.inc" +#include "CBoss.inc" + +ArrayList g_hStats[MAXPLAYERS+1]; + +bool g_bZRLoaded; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "BossHP - Ranking", + author = "Neon & zaCade", + description = "", + version = "1.0.0", +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + HookEvent("player_death", EventHook_PlayerDeath, EventHookMode_Pre); + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client)) + continue; + + OnClientPutInServer(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnAllPluginsLoaded() +{ + g_bZRLoaded = LibraryExists("zombiereloaded"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryAdded(const char[] sName) +{ + if (strcmp(sName, "zombiereloaded", false) == 0) + g_bZRLoaded = true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryRemoved(const char[] sName) +{ + if (strcmp(sName, "zombiereloaded", false) == 0) + g_bZRLoaded = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPutInServer(int client) +{ + g_hStats[client] = new ArrayList(64); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + delete g_hStats[client]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnBossDamaged(any Boss, any Config, int client, float damage) +{ + if (!IsValidClient(client)) + return; + + SetEntProp(client, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") + 1); + + bool bBreakable; + CConfig _Config = view_as(Config); + + if (_Config.IsBreakable) + bBreakable = true; + else + bBreakable = false; + + delete _Config; + + for (int index = 0; index < g_hStats[client].Length; index++) + { + any BossDamage[2]; + g_hStats[client].GetArray(index, BossDamage, sizeof(BossDamage)); + + if (BossDamage[0] == Boss) + { + if (bBreakable) + BossDamage[1] += RoundToNearest(damage); + else + BossDamage[1] += 1; + + g_hStats[client].SetArray(index, BossDamage, sizeof(BossDamage)); + return; + } + } + + any BossDamage[2]; + BossDamage[0] = Boss; + + if (bBreakable) + BossDamage[1] = RoundToNearest(damage); + else + BossDamage[1] = 1; + + g_hStats[client].PushArray(BossDamage, sizeof(BossDamage)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnBossKilled(any Boss, any Config, int reason) +{ + if (reason == 0) + { + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client)) + continue; + + for (int index = 0; index < g_hStats[client].Length; index++) + { + any BossDamage[2]; + g_hStats[client].GetArray(index, BossDamage, sizeof(BossDamage)); + + if (BossDamage[0] == Boss) + { + g_hStats[client].Erase(index); + break; + } + } + } + } + else + { + int iSortedList[MAXPLAYERS+1][2]; + int iSortedCount; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client)) + continue; + + for (int index = 0; index < g_hStats[client].Length; index++) + { + any BossDamage[2]; + g_hStats[client].GetArray(index, BossDamage, sizeof(BossDamage)); + + if (BossDamage[0] == Boss) + { + iSortedList[iSortedCount][0] = client; + iSortedList[iSortedCount][1] = BossDamage[1]; + iSortedCount++; + + g_hStats[client].Erase(index); + break; + } + } + } + + SortCustom2D(iSortedList, iSortedCount, SortBossHitsList); + + if (iSortedCount) + { + CConfig _Config = view_as(Config); + + char sBossName[64]; + _Config.GetName(sBossName, sizeof(sBossName)); + + char sBuffer[512]; + char sType[16]; + if (_Config.IsBreakable) + { + sType = "damage" + Format(sBuffer, sizeof(sBuffer), "BOSS DAMAGE [%s]:", sBossName); + } + else + { + sType = "hits" + Format(sBuffer, sizeof(sBuffer), "BOSS HITS [%s]:", sBossName); + } + delete _Config; + + Format(sBuffer, sizeof(sBuffer), "%s\n*************************", sBuffer); + + if (iSortedList[0][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n1. %N - %d %s", sBuffer, iSortedList[0][0], iSortedList[0][1], sType); + + LH_LogPlayerEvent(iSortedList[0][0], "triggered", "ze_boss_damage_first", true); + } + if (iSortedList[1][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n2. %N - %d %s", sBuffer, iSortedList[1][0], iSortedList[1][1], sType); + + LH_LogPlayerEvent(iSortedList[1][0], "triggered", "ze_boss_damage_second", true); + } + if (iSortedList[2][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n3. %N - %d %s", sBuffer, iSortedList[2][0], iSortedList[2][1], sType); + + LH_LogPlayerEvent(iSortedList[2][0], "triggered", "ze_boss_damage_third", true); + } + + Format(sBuffer, sizeof(sBuffer), "%s\n*************************", sBuffer); + + Handle hMessage = StartMessageAll("HudMsg"); + if (hMessage) + { + if (GetUserMessageType() == UM_Protobuf) + { + PbSetInt(hMessage, "channel", 50); + PbSetInt(hMessage, "effect", 0); + PbSetColor(hMessage, "clr1", {255, 255, 255, 255}); + PbSetColor(hMessage, "clr2", {255, 255, 255, 255}); + PbSetVector2D(hMessage, "pos", Float:{0.02, 0.45}); + PbSetFloat(hMessage, "fade_in_time", 0.1); + PbSetFloat(hMessage, "fade_out_time", 0.1); + PbSetFloat(hMessage, "hold_time", 7.0); + PbSetFloat(hMessage, "fx_time", 0.0); + PbSetString(hMessage, "text", sBuffer); + EndMessage(); + } + else + { + BfWriteByte(hMessage, 50); + BfWriteFloat(hMessage, 0.02); + BfWriteFloat(hMessage, 0.25); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 0); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 255); + BfWriteByte(hMessage, 0); + BfWriteFloat(hMessage, 0.1); + BfWriteFloat(hMessage, 0.1); + BfWriteFloat(hMessage, 7.0); + BfWriteFloat(hMessage, 0.0); + BfWriteString(hMessage, sBuffer); + EndMessage(); + } + } + + if(GetEngineVersion() == Engine_CSGO) + { + int iSplits + char sSplits[16][512]; + + if((iSplits = ExplodeString(sBuffer, "\n", sSplits, sizeof(sSplits), sizeof(sSplits[]))) != 0) + { + for (int iSplit; iSplit < iSplits; iSplit++) + { + PrintToChatAll(sSplits[iSplit]); + } + } + } + else + PrintToChatAll(sBuffer); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action EventHook_PlayerDeath(Event hEvent, const char[] sEventName, bool bDontBroadcast) +{ + if (!g_bZRLoaded) + return Plugin_Continue; + + int iClient = GetClientOfUserId(hEvent.GetInt("userid")); + + if (!IsValidClient(iClient)) + return Plugin_Continue; + + if (IsPlayerAlive(iClient) && !ZR_IsClientHuman(iClient)) + return Plugin_Continue; + + int iPacked = (iClient<<16) | (GetEntProp(iClient, Prop_Send, "m_iAccount")&0xFFFF); + + RequestFrame(RequestFrame_Callback, iPacked); + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void RequestFrame_Callback(int iPacked) +{ + int iOldCash = iPacked&0xFFFF; + int iClient = iPacked>>16; + + if (!IsValidEntity(iClient) || !IsValidClient(iClient)) + return; + + SetEntProp(iClient, Prop_Send, "m_iAccount", iOldCash); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int SortBossHitsList(int[] elem1, int[] elem2, const int[][] array, Handle hndl) +{ + if (elem1[1] > elem2[1]) return -1; + if (elem1[1] < elem2[1]) return 1; + + return 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} diff --git a/BossHP/scripting/CBoss.inc b/BossHP/scripting/CBoss.inc index feecce01..577539b7 100644 --- a/BossHP/scripting/CBoss.inc +++ b/BossHP/scripting/CBoss.inc @@ -10,6 +10,7 @@ methodmap CBoss < Basic Basic myclass = new Basic(); myclass.SetHandle("dConfig", INVALID_HANDLE); + myclass.SetBool("bProcessing", false); myclass.SetBool("bActive", false); myclass.SetBool("bShow", true); myclass.SetInt("iTemplateNum", -1); @@ -34,6 +35,18 @@ methodmap CBoss < Basic } } + property bool bProcessing + { + public get() + { + return this.GetBool("bProcessing"); + } + public set(bool value) + { + this.SetBool("bProcessing", value); + } + } + property bool bActive { public get() diff --git a/BossHP/scripting/CConfig.inc b/BossHP/scripting/CConfig.inc index b2079793..03013f5e 100644 --- a/BossHP/scripting/CConfig.inc +++ b/BossHP/scripting/CConfig.inc @@ -28,6 +28,8 @@ methodmap CConfig < Basic myclass.SetString("sKillTrigger", ""); myclass.SetString("sKillOutput", ""); myclass.SetFloat("fKillTriggerDelay", 0.0); + myclass.SetString("sHurtTrigger", ""); + myclass.SetString("sHurtOutput", ""); myclass.SetBool("bMultiTrigger", false); myclass.SetBool("bNameFixup", false); myclass.SetInt("iTimeout", -1); @@ -153,6 +155,26 @@ methodmap CConfig < Basic } } + public bool GetHurtTrigger(char[] buffer, int length) + { + return this.GetString("sHurtTrigger", buffer, length); + } + + public void SetHurtTrigger(const char[] buffer) + { + this.SetString("sHurtTrigger", buffer); + } + + public bool GetHurtOutput(char[] buffer, int length) + { + return this.GetString("sHurtOutput", buffer, length); + } + + public void SetHurtOutput(const char[] buffer) + { + this.SetString("sHurtOutput", buffer); + } + property bool bMultiTrigger { public get() @@ -189,9 +211,6 @@ methodmap CConfig < Basic } } - - - property bool IsBreakable { public get() { return (this.iMethod == eConfigMethod_Breakable); diff --git a/BossHP/scripting/include/BossHP.inc b/BossHP/scripting/include/BossHP.inc new file mode 100644 index 00000000..45560946 --- /dev/null +++ b/BossHP/scripting/include/BossHP.inc @@ -0,0 +1,11 @@ +#if defined BossHP_included + #endinput +#endif + +#define BossHP_included + +forward void OnBossIntialized(any Boss, any Config); + +forward void OnBossDamaged(any Boss, any Config, int activator, float damage); + +forward void OnBossKilled(any Boss, any Config, int reason);//reason: 0 = RoundEnd/MapEnd, 1 = KillTrigger, 2 = Death. diff --git a/CTimer/scripting/ctimer.sp b/CTimer/scripting/ctimer.sp new file mode 100644 index 00000000..0781577e --- /dev/null +++ b/CTimer/scripting/ctimer.sp @@ -0,0 +1,188 @@ +#pragma semicolon 1 + +#define PLUGIN_AUTHOR "TRANSLUCENT" +#define PLUGIN_VERSION "0.62wtf" +#define MAXLENGTH_MESSAGE 256 + +#define STARTZONE 0 +#define ENDZONE 1 + +#define FRAMEINTERVAL 330 +#define REPLAYS_PATH "data/ctimer" // Path to where replays are stored +#define BACKUP_REPLAYS +#define MAXVELOCITY 280.0 +#define MAX_DIST 1536.0 +#define MAX_DIST_SQ MAX_DIST * MAX_DIST + +#include +#include +#include +#include +#include + +/* Global variables */ +enum +{ + RUNDATA_POSITION_X, + RUNDATA_POSITION_Y, + RUNDATA_POSITION_Z, + RUNDATA_PITCH, + RUNDATA_YAW, + RUNDATA_BUTTONS, + RUNDATA_IMPULSE, + RUNDATA_WEAPONID, + RUNDATA_MAX +} + +///TIMER HANDLES +Handle g_hDrawFullZone = INVALID_HANDLE; +Handle g_hDrawZone = INVALID_HANDLE; +Handle g_hHudLoop = INVALID_HANDLE; +Handle g_hSideHudLoop = INVALID_HANDLE; + +///DATABASE +Database g_hDatabase = null; + +///PLAYERS +float g_fMapTime[MAXPLAYERS + 1]; +float g_fStartTime[MAXPLAYERS + 1]; +int g_iActivity[MAXPLAYERS + 1] = -1; //-1 - Inactive, 0 - Running, 1 - StartZone, 2 - EndZone + +///BOTS AND RECORDING +//ArrayList g_arrayGhost; +ArrayList g_arrayRun[MAXPLAYERS + 1]; //Record array +//char g_sGhostNames[MAX_NAME_LENGTH]; +//int g_iGhost = -1; +//int g_iGhostFrame = -1; +//int g_fGhostVel = -1; +float g_fTickrate; + +///ZONEMAP INFO +int g_iSnapToClient = -1; +bool g_bEditorComesFromMenu; +float g_fStartOrigins[2][3]; +float g_fEndOrigins[2][3]; +int g_iEditor = -1; +int g_iTriggerEnt[2] = -1; + +///MAP INFO +bool g_bActive = false; +int g_iTier = 1; +int g_iMapID = -1; +float g_fWrTime = -1.0; +char g_sMapName[64]; +char g_sWrHolder[MAX_NAME_LENGTH]; + +///OTHERS +bool g_bLateLoad = false; +int g_iBeam; +ConVar g_hCvarLasers = null; +bool g_bLasers = false; + +// Offsets (netprops) +int m_vecOrigin; // CBaseEntity::m_vecOrigin +int m_hActiveWeapon; // CBaseCombatCharacter::m_hActiveWeapon + +public Plugin myinfo = +{ + name = "Under Average Timer", + author = PLUGIN_AUTHOR, + description = "", + version = PLUGIN_VERSION, + url = "" +}; + +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + CreateNative("CTimer_Stop", Native_StopTime); + + RegPluginLibrary("ctimer"); + + g_bLateLoad = late; + return APLRes_Success; +} + +public void OnPluginStart() +{ + LoadTranslations("ctimer.phrases"); + + HookEvent("round_start", Event_RoundStart); + HookEvent("player_death", Event_PlayerDeath); + + RegAdminCmd("sm_timeradmin", Command_TimerAdmin, ADMFLAG_CHEATS, "Your one stop for timer management"); + RegAdminCmd("sm_zones", Command_Zones, ADMFLAG_CHEATS, "Create zones"); + + RegConsoleCmd("sm_stop", Command_Stop, "Stops your timer"); + RegConsoleCmd("sm_time", Command_Time, "Get a players time"); + RegConsoleCmd("sm_top", Command_Top, "Get a maps top times"); + RegConsoleCmd("sm_wr", Command_WR, "Get a maps best time"); + + RegAdminCmd("sm_origins", Command_Origins, ADMFLAG_CHEATS); + + g_hCvarLasers = CreateConVar("ctimer_zone_lazers", "1", "Lazors", FCVAR_NONE, true, 0.0, true, 1.0); + + if(g_hCvarLasers != null) + { + g_hCvarLasers.AddChangeHook(OnLazorsChange); + } + + g_hDrawFullZone = CreateTimer(0.2, DrawFullZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hDrawZone = CreateTimer(1.0, DrawZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hHudLoop = CreateTimer(0.2, HudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hSideHudLoop = CreateTimer(1.0, SideHudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + + for (new i = 1; i <= MaxClients; i++) + { + g_arrayRun[i] = new ArrayList(RUNDATA_MAX); + } + + m_vecOrigin = FindSendPropInfo("CBaseEntity", "m_vecOrigin"); + + if (m_vecOrigin == -1) + { + SetFailState("Couldn't find CBaseEntity::m_vecOrigin"); + } + if (m_vecOrigin == 0) + { + SetFailState("No offset available for CBaseEntity::m_vecOrigin"); + } + + m_hActiveWeapon = FindSendPropInfo("CBaseCombatCharacter", "m_hActiveWeapon"); + + if (m_hActiveWeapon == -1) + { + SetFailState("Couldn't find CBaseCombatCharacter::m_hActiveWeapon"); + } + if (m_hActiveWeapon == 0) + { + SetFailState("No offset available for CBaseCombatCharacter::m_hActiveWeapon"); + } + + //g_arrayGhost = new ArrayList(9, 0); + + g_fTickrate = (1.0 / GetTickInterval()); + + EstablishConnection(); +} + +#include "ctimer/actions.sp" +#include "ctimer/bots.sp" +#include "ctimer/commands.sp" +#include "ctimer/menus.sp" +#include "ctimer/timers.sp" +#include "ctimer/utility.sp" +#include "ctimer/sql.sp" +#include "ctimer/zones.sp" + +public Action Command_Origins(int client, int args) +{ + PrintToChatAll("Start: %f|%f|%f %f|%f|%f", g_fStartOrigins[0][0], g_fStartOrigins[0][1], g_fStartOrigins[0][2], g_fEndOrigins[0][0], g_fEndOrigins[0][1], g_fEndOrigins[0][2]); + PrintToChatAll("End: %f|%f|%f %f|%f|%f", g_fStartOrigins[1][0], g_fStartOrigins[1][1], g_fStartOrigins[1][2], g_fEndOrigins[1][0], g_fEndOrigins[1][1], g_fEndOrigins[1][2]); + PrintToChatAll("MapID: %i", g_iMapID); + PrintToChatAll("Active: %s", g_bActive ? "active":"inactive"); + PrintToChatAll("Tier: %i", g_iTier); + PrintToChatAll("Wr: %.2f, %s", g_fWrTime, g_sWrHolder); + PrintToChatAll("Speccount: %i", GetSpecCount(client)); + return Plugin_Handled; +} + diff --git a/CTimer/scripting/ctimer/actions.sp b/CTimer/scripting/ctimer/actions.sp new file mode 100644 index 00000000..30b1cfdf --- /dev/null +++ b/CTimer/scripting/ctimer/actions.sp @@ -0,0 +1,219 @@ +public void OnMapStart() +{ + PrecacheModel("models/error.mdl", true); + g_iBeam = PrecacheModel("materials/sprites/physbeam.vmt"); + + AddFileToDownloadsTable("sound/unl1/disco.wav"); + PrecacheSound("unl1/disco.wav"); + + AddFileToDownloadsTable("sound/unl1/steamedyes.mp3"); + PrecacheSound("unl1/steamedyes.mp3"); + + GetCurrentMap(g_sMapName, sizeof(g_sMapName)); + LowerString(g_sMapName, sizeof(g_sMapName)); + + RestartTimers(); + ClearMapInfo(); + CheckDirectories(); + + if (g_hDatabase != null) + { + LoadMapInfo(); + } + +} + +public void OnConfigsExecuted() +{ + g_bLasers = g_hCvarLasers.BoolValue; +} + +public void OnLazorsChange(ConVar convar, char[] oldValue, char[] newValue) +{ + g_bLasers = g_hCvarLasers.BoolValue; +} + +public void OnClientPostAdminCheck(int client) +{ + if (isValidClient(client)) + { + ClearPlayerCache(client); + GetPlayerInfo(client); + } +} + +public void OnClientDisconnect(int client) +{ + if (client == g_iEditor) + { + g_iEditor = -1; + g_bEditorComesFromMenu = false; + } +} + +public void Event_RoundStart(Handle event, char[] name, bool dontBroadcast) +{ + for (int i = 0; i <= 1; i++) + { + CreateTrigger(i); + } + for (int i = 0; i <= MAXPLAYERS; i++) + { + g_iActivity[i] = -1; + } +} + +/*public Action CS_OnTerminateRound(float& delay, CSRoundEndReason& reason) +{ + +}*/ + +public void Event_PlayerDeath(Handle event, char[] name, bool dontBroadcast) +{ + int client = GetClientOfUserId(GetEventInt(event, "userid")); + g_iActivity[client] = -1; +} + +void CheckDirectories() +{ + char path[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, path, sizeof(path), REPLAYS_PATH); + + if (!DirExists(path)) + CreateDirectory(path, 711); + + BuildPath(Path_SM, path, sizeof(path), "%s/%s", REPLAYS_PATH, g_sMapName); + + if (!DirExists(path)) + CreateDirectory(path, 711); + +} + +public void RestartTimers() +{ + delete g_hDrawFullZone; + delete g_hDrawZone; + delete g_hHudLoop; + delete g_hSideHudLoop; + + g_hDrawFullZone = CreateTimer(0.2, DrawFullZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hDrawZone = CreateTimer(1.0, DrawZoneTimer, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hHudLoop = CreateTimer(0.2, HudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); + g_hSideHudLoop = CreateTimer(1.0, SideHudLoop, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +public void ClearMapInfo() +{ + for (int i = 0; i <= 1; i++) + { + g_iTriggerEnt[i] = -1; + for (int f = 0; f <= 2; f++) + { + g_fStartOrigins[i][f] = 0.0; + g_fEndOrigins[i][f] = 0.0; + } + } + g_iTier = 1; + g_iMapID = -1; + g_bActive = false; + g_iEditor = -1; + g_bEditorComesFromMenu = false; + g_iSnapToClient = -1; + g_fWrTime = -1.0; + + Format(g_sWrHolder, sizeof(g_sWrHolder), "\0"); +} + +public void ProcessFinish(int client) +{ + float fTime, fTimeToWR; + char name[MAX_NAME_LENGTH], cTime[16], cTimeToWR[16]; + + GetClientName(client, name, sizeof(name)); + fTime = GetEngineTime() - g_fStartTime[client]; + fTimeToWR = fTime - g_fWrTime; + TimerFormat(fTime, cTime, sizeof(cTime), true, false); + + if (fTimeToWR == fTime) + Format(cTimeToWR, sizeof(cTimeToWR), "WR"); + + else + TimerFormat(fTimeToWR, cTimeToWR, sizeof(cTimeToWR), true, true); + + if (g_fMapTime[client] > fTime) + { + float fTimeDif; + char cTimeDif[16]; + + fTimeDif = g_fMapTime[client] - fTime; + g_fMapTime[client] = fTime; + TimerFormat(fTimeDif, cTimeDif, sizeof(cTimeDif), true, false); + + TimerPrintToChat(client, true, "%T", "FinishedImproved", LANG_SERVER, name, cTime, cTimeToWR, cTimeDif); + UpdateTime(client); + + if (fTimeToWR < 0.0) + UpdateWR(client, fTime, name); + } + else + { + TimerPrintToChat(client, true, "%T", "Finished", LANG_SERVER, name, cTime, cTimeToWR); + + if (g_fMapTime[client] == 0.0) + { + g_fMapTime[client] = fTime; + + UpdateTime(client); + if (fTimeToWR < 0.0 || g_fWrTime == 0.0) + { + UpdateWR(client, fTime, name); + } + + } + else + { + AddCompletion(client); + } + } +} + +public void UpdateWR(int client, float time, char[] name) +{ + if (g_fWrTime == -1.0) + { + LogError("WR never loaded, reload map"); + return; + } + + if (g_fWrTime < time && g_fWrTime != 0.0) + { + LogError("Time submitted is not faster"); + return; + } + + SaveRecord(client); + + g_fWrTime = time; + + strcopy(g_sWrHolder, sizeof(g_sWrHolder), name); +} + +public void ProcessRankMessage(int client, int rank, int total) +{ + char name[MAX_NAME_LENGTH]; + GetClientName(client, name, sizeof(name)); + if (rank > 10) + TimerPrintToChat(client, false, "%T", "Rank", LANG_SERVER, name, rank, total); + + else if (rank <= 10 && rank != 1) + { + TimerPrintToChat(client, true, "%T", "RankTop10", LANG_SERVER, name, rank, total); + EmitSoundToAll("unl1/steamedyes.mp3"); + } + + else if (rank == 1) + { + TimerPrintToChat(client, true, "%T", "RankWR", LANG_SERVER, name, rank, total); + EmitSoundToAll("unl1/disco.wav"); + } +} \ No newline at end of file diff --git a/CTimer/scripting/ctimer/bots.sp b/CTimer/scripting/ctimer/bots.sp new file mode 100644 index 00000000..9b2d32af --- /dev/null +++ b/CTimer/scripting/ctimer/bots.sp @@ -0,0 +1,152 @@ + + +/*public void LoadMainGhost() +{ + //Something went wrong, escape. + if (!g_iGhost) + return; + + char path[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, path, sizeof(path), "data/ctimer/replay/%s.bin", g_sMapName); + if (!FileExists(path)) + { + Format(g_sGhostNames, MAX_NAME_LENGTH, "No replay available"); + g_iGhostFrame = -1; + return; + } + File file = OpenFile(path, "rb", false, "GAME"); + if (file) + { + g_arrayGhost.Clear(); + float pos[3], ang[2], vel[3]; + int currentframe, buttons; + while (!file.EndOfFile()) + { + currentframe = g_arrayGhost.Length; + currentframe++; + g_arrayGhost.Resize(currentframe); + file.Read(view_as(pos), 3, 4); + file.Read(view_as(ang), 2, 4); + file.Read(view_as(vel), 3, 4); + file.ReadInt32(buttons); + SetArrayCell(g_arrayGhost, currentframe, pos[0], 0); + SetArrayCell(g_arrayGhost, currentframe, pos[1], 1); + SetArrayCell(g_arrayGhost, currentframe, pos[2], 2); + SetArrayCell(g_arrayGhost, currentframe, ang[0], 3); + SetArrayCell(g_arrayGhost, currentframe, ang[1], 4); + SetArrayCell(g_arrayGhost, currentframe, vel[0], 5); + SetArrayCell(g_arrayGhost, currentframe, vel[1], 6); + SetArrayCell(g_arrayGhost, currentframe, vel[2], 7); + SetArrayCell(g_arrayGhost, currentframe, buttons, 8); + + } + file.Close(); + PrintToServer("Main replay loaded"); + g_iGhostFrame = -2; + pos[0] = GetArrayCell(g_arrayGhost, 0, 0); + pos[1] = GetArrayCell(g_arrayGhost, 0, 1); + pos[2] = GetArrayCell(g_arrayGhost, 0, 2); + TeleportEntity(g_iGhost, pos, NULL_VECTOR, NULL_VECTOR); + } +}*/ + +bool SaveRecord(int client) +{ + if ( !isValidClient(client) ) + { + LogError("Client %d is not valid", client); + return false; + } + + char path[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, path, sizeof(path), "%s/%s/%s.steamedhams", REPLAYS_PATH, g_sMapName, g_sMapName); + + if (FileExists(path)) + { + #if defined BACKUP_REPLAYS + BackupRecord(path); + #endif + + DeleteFile(path); // Kinda unnecessary? Opening the file later will truncate it. + } + + File file = OpenFile(path, "wb"); + if (file) + { + int size = g_arrayRun[client].Length; + if (!size) + { + LogError("Couldn't save record. Run array is empty."); + return false; + } + + int values[RUNDATA_MAX]; + + for (int i = 0; i < size; ++i) + { + g_arrayRun[client].GetArray(i, values, RUNDATA_MAX); + + file.Write(values, RUNDATA_MAX-1, 4); + file.WriteInt8(values[RUNDATA_WEAPONID]); + + } + file.Close(); + return true; + } + LogError("Could not open the file \"%s\" for writing.", path); + return false; +} + +void BackupRecord(char[] recordPath) +{ + char sPath[PLATFORM_MAX_PATH]; + FormatEx(sPath, sizeof(sPath), "%s_old", recordPath); + + // Delete the last backup + if (FileExists(sPath)) + { + DeleteFile(sPath); + } + + RenameFile(sPath, recordPath); +} + +public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) +{ + // Handle humans + if (isValidClient(client)) + { + if (IsPlayerAlive(client)) + { + // Is the player running? + if (g_iActivity[client] == 0) + { + if(GetEntityMoveType(client) != MOVETYPE_NOCLIP) + { + // Record run data + int values[RUNDATA_MAX]; + + float origin[3]; + GetEntDataVector(client, m_vecOrigin, origin); + + values[RUNDATA_POSITION_X] = view_as(origin[0]); + values[RUNDATA_POSITION_Y] = view_as(origin[1]); + values[RUNDATA_POSITION_Z] = view_as(origin[2]); + values[RUNDATA_PITCH] = view_as(angles[0]); + values[RUNDATA_YAW] = view_as(angles[1]); + values[RUNDATA_BUTTONS] = buttons; + values[RUNDATA_IMPULSE] = impulse; + values[RUNDATA_WEAPONID] = view_as( GetWeaponID(client) ); + + g_arrayRun[client].PushArray(values, RUNDATA_MAX); + } + + else + { + g_iActivity[client] = -1; + TimerPrintToChat(client, false, "%T", "TimerCheatStopped", LANG_SERVER); + } + } + } + } +} \ No newline at end of file diff --git a/CTimer/scripting/ctimer/commands.sp b/CTimer/scripting/ctimer/commands.sp new file mode 100644 index 00000000..3dca91cc --- /dev/null +++ b/CTimer/scripting/ctimer/commands.sp @@ -0,0 +1,137 @@ +public Action Command_Time(int client, int args) +{ + if (!g_bActive) + return Plugin_Handled; + + if (g_fMapTime[client] != 0.0) + { + char cTime[16]; + TimerFormat(g_fMapTime[client], cTime, sizeof(cTime), true, false); + TimerPrintToChat(client, false, "%T", "PlayerTime", LANG_SERVER, cTime); + } + else + TimerPrintToChat(client, false, "%T", "PlayerNoTime", LANG_SERVER); + return Plugin_Handled; +} + +public Action Command_Stop(int client, int args) +{ + if (!g_bActive) + return Plugin_Handled; + + if (g_iActivity[client] == 0) + { + g_iActivity[client] = -1; + TimerPrintToChat(client, false, "%T", "TimerStopped", LANG_SERVER); + } + else if (g_iActivity[client] == 1) + { + TimerPrintToChat(client, false, "%T", "TimerCantBeStopped", LANG_SERVER); + } + else if (g_iActivity[client] == -1) + { + TimerPrintToChat(client, false, "%T", "TimerNotRunning", LANG_SERVER); + } + return Plugin_Handled; +} + +public Action Command_Zones(int client, int args) +{ + if (g_iEditor != -1) + { + TimerPrintToChat(client, false, "%T", "ZoneMenuUnavailable", LANG_SERVER); + //PrintToChat(client, "Zone menu currently unavailable"); + return Plugin_Handled; + } + g_iEditor = client; + g_iActivity[client] = -1; + g_bEditorComesFromMenu = false; + ZoneMenu(client, g_bEditorComesFromMenu); + return Plugin_Handled; +} + +public Action Command_Top(int client, int args) +{ + char sMapName[129]; + if (args > 0) + { + GetCmdArg(1, sMapName, sizeof(sMapName)); + if (strlen(sMapName) > 64) + { + TimerPrintToChat(client, false, "%T", "MapNameTooLong", LANG_SERVER); + return Plugin_Handled; + } + g_hDatabase.Escape(sMapName, sMapName, sizeof(sMapName)); + } + else + { + if (!g_bActive) + return Plugin_Handled; + strcopy(sMapName, sizeof(sMapName), g_sMapName); + } + int userid = GetClientUserId(client); + RequestTop(userid, sMapName, 10); + return Plugin_Handled; +} + +public Action Command_TimerAdmin(int client, int args) +{ + TimerAdminMenu(client); + return Plugin_Handled; +} + +public Action Command_WR(int client, int args) +{ + if (args == 0) + { + if (!g_bActive) + return Plugin_Handled; + + if (g_fWrTime == 0.0) + { + TimerPrintToChat(client, false, "%T", "TimesNotFound", LANG_SERVER, g_sMapName); + return Plugin_Handled; + } + else + { + char cWRTime[16]; + TimerFormat(g_fWrTime, cWRTime, sizeof(cWRTime), true, false); + TimerPrintToChat(client, false, "%T", "WR", LANG_SERVER, g_sWrHolder, g_sMapName, cWRTime); + return Plugin_Handled; + } + } + + else + { + char sMapName[129]; + GetCmdArg(1, sMapName, sizeof(sMapName)); + if (strlen(sMapName) > 64) + { + TimerPrintToChat(client, false, "%T", "MapNameTooLong", LANG_SERVER); + return Plugin_Handled; + } + g_hDatabase.Escape(sMapName, sMapName, sizeof(sMapName)); + + int userid = GetClientUserId(client); + RequestWR(userid, sMapName); + } + return Plugin_Handled; +} + +public int Native_StopTime(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + + if (!isValidClient(client)) + return; + + if (g_iActivity[client] == -1) + return; + + g_iActivity[client] = -1; + TimerPrintToChat(client, false, "%T", "TimerCheatStopped", LANG_SERVER); + return; +} + + + diff --git a/CTimer/scripting/ctimer/menus.sp b/CTimer/scripting/ctimer/menus.sp new file mode 100644 index 00000000..4ceebac2 --- /dev/null +++ b/CTimer/scripting/ctimer/menus.sp @@ -0,0 +1,281 @@ +public void TimerAdminMenu(int client) +{ + char buffer[16]; + Menu menu = new Menu(TimerAdminMenuHandler); + menu.SetTitle("Timer Control Panel"); + if (g_iEditor != -1) + menu.AddItem("zone", "Zones (Currently in use)", ITEMDRAW_DISABLED); + else + menu.AddItem("zone", "Zones"); + menu.AddItem("tier", "Set Map Tier"); + Format(buffer, sizeof(buffer), "%s map", g_bActive ? "Deactivate":"Activate"); + menu.AddItem("active", buffer); + menu.ExitButton = true; + menu.Display(client, MENU_TIME_FOREVER); +} + +public int TimerAdminMenuHandler(Handle menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + switch(choice) + { + case 0: + { + if (g_iEditor != -1) + { + PrintToChat(client, "Zone menu currently unavailable"); + TimerAdminMenu(client); + } + else + { + g_iEditor = client; + g_iActivity[client] = -1; + g_bEditorComesFromMenu = true; + ZoneMenu(client, g_bEditorComesFromMenu); + } + + } + case 1: + { + TierMenu(client); + } + case 2: + { + g_bActive = !g_bActive; + SetMapState(view_as(g_bActive)); + PrintToChat(client, "%s the map...", g_bActive ? "Activating":"Deactivating"); + CS_TerminateRound(1.0, CSRoundEnd_Draw, true); + TimerAdminMenu(client); + } + } + } + case MenuAction_End: + { + delete menu; + } + } +} + +public void ZoneMenu(int client, bool comesFromMenu) +{ + Menu menu = new Menu(ZoneMenuHandler); + menu.SetTitle("Zone Menu"); + menu.AddItem("start", "Set Start Zone"); + menu.AddItem("end", "Set End Zone"); + menu.AddItem("rr", "Respawn Zones"); + menu.AddItem("save", "Save Zones"); + menu.ExitButton = true; + if (comesFromMenu) + menu.ExitBackButton = true; + menu.Display(client, MENU_TIME_FOREVER); +} + +public int ZoneMenuHandler(Handle menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + switch(choice) + { + case 0: + CreateZoneMenu(client, STARTZONE, false); + + case 1: + CreateZoneMenu(client, ENDZONE, false); + + case 2: + { + CS_TerminateRound(1.0, CSRoundEnd_Draw, true); + ZoneMenu(client, g_bEditorComesFromMenu); + } + case 3: + { + SaveZones(client); + ZoneMenu(client, g_bEditorComesFromMenu); + } + } + } + + case MenuAction_Cancel: + { + g_iEditor = -1; + g_bEditorComesFromMenu = false; + if (choice == MenuCancel_ExitBack) + { + TimerAdminMenu(client); + } + } + + case MenuAction_End: + { + delete menu; + } + } +} + +public void CreateZoneMenu(int client, int zone, bool point) +{ + char buffer[32], zonePoint[5]; + Menu menu = new Menu(CreateZoneMenuHandler); + Format(buffer, sizeof(buffer), "Set the %s position", point ? "second":"first"); + //Format(zonePoint, sizeof(zonePoint), "%i|%s", zone, view_as(point)); + Format(zonePoint, sizeof(zonePoint), "%i|%s", zone, point ? "1":"0"); + menu.AddItem(zonePoint, buffer); + menu.ExitBackButton = false; + menu.ExitButton = false; + menu.Display(client, MENU_TIME_FOREVER); +} + +public int CreateZoneMenuHandler(Menu menu, MenuAction action, int client, int choice) +{ + if (action == MenuAction_Select) + { + char buffer[5], array[2][2]; + int zone, point; + menu.GetItem(0, buffer, sizeof(buffer)); + ExplodeString(buffer, "|", array, 2, 2); + zone = StringToInt(array[0]); + point = StringToInt(array[1]); + //PrintToChatAll("%s - %s %s - %i %i", buffer, array[0], array[1], zone, point); + + if (point == 0) + { + GetClientAbsOrigin(client, g_fStartOrigins[zone]); + g_iSnapToClient = zone; + CreateZoneMenu(client, zone, true); + } + if (point == 1) + { + GetClientAbsOrigin(client, g_fEndOrigins[zone]); + g_iSnapToClient = -1; + CreateTrigger(zone); + ZoneMenu(client, g_bEditorComesFromMenu); + } + } + if (action == MenuAction_End) + { + delete menu; + } +} + +public void TierMenu(int client) +{ + Menu menu = new Menu(TierMenuHandler); + menu.SetTitle("Choose a tier"); + menu.AddItem("1", "Tier 1"); + menu.AddItem("2", "Tier 2"); + menu.AddItem("3", "Tier 3"); + menu.AddItem("4", "Tier 4"); + menu.AddItem("5", "Tier 5"); + menu.AddItem("6", "Tier 6"); + menu.ExitButton = true; + menu.ExitBackButton = true; + menu.Display(client, MENU_TIME_FOREVER); +} + +public int TierMenuHandler(Handle menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + g_iTier = choice + 1; + SetMapTier(g_iTier); + PrintToChat(client, "Setting the maps tier to %i", g_iTier); + TimerAdminMenu(client); + } + case MenuAction_Cancel: + { + if (choice == MenuCancel_ExitBack) + { + TimerAdminMenu(client); + } + } + + case MenuAction_End: + { + delete menu; + } + } +} + +public void SQL_RequestTop(Database db, int userid, int numQueries, DBResultSet[] results, any[] queryData) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + int client = GetClientOfUserId(userid); + + if (!isValidClient(client)) + return; + + if (results[0].RowCount == 0) + { + TimerPrintToChat(client, false, "%T", "MapNotFound", LANG_SERVER); + return; + } + + char cMap[64]; + results[0].FetchRow(); + results[0].FetchString(0, cMap, sizeof(cMap)); + + if (results[1].RowCount == 0) + { + TimerPrintToChat(client, false, "%T", "TimesNotFound", LANG_SERVER, cMap); + return; + } + + char cBuffer[128], cTime[16], cTimeToWR[16], cName[64]; + float fTime, fTimeToWR, fWR; + int timescompleted; + + Menu menu = new Menu(TopTimeMenuHandler); + + Format(cBuffer, sizeof(cBuffer), "Top Times for %s", cMap); + menu.SetTitle(cBuffer); + + results[1].FetchRow(); + results[1].FetchString(0, cName, sizeof(cName)); + fTime = fWR = results[1].FetchFloat(1); + timescompleted = results[1].FetchInt(2); + + TimerFormat(fTime, cTime, sizeof(cTime), true, false); + Format(cBuffer, sizeof(cBuffer), "%s\n%s (+00:00.00) (%i)", cName, cTime, timescompleted); + + menu.AddItem("", cBuffer); + + while (results[1].FetchRow()) + { + results[1].FetchString(0, cName, sizeof(cName)); + fTime = results[1].FetchFloat(1); + fTimeToWR = fTime - fWR; + timescompleted = results[1].FetchInt(2); + + TimerFormat(fTime, cTime, sizeof(cTime), true, false); + TimerFormat(fTimeToWR, cTimeToWR, sizeof(cTimeToWR), true, true); + Format(cBuffer, sizeof(cBuffer), "%s\n%s (%s) (%i)", cName, cTime, cTimeToWR, timescompleted); + + menu.AddItem("", cBuffer); + } + menu.ExitButton = true; + menu.Display(client, MENU_TIME_FOREVER); + +} + +public int TopTimeMenuHandler(Handle menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_End: + { + delete menu; + } + } +} \ No newline at end of file diff --git a/CTimer/scripting/ctimer/sql.sp b/CTimer/scripting/ctimer/sql.sp new file mode 100644 index 00000000..35198bc1 --- /dev/null +++ b/CTimer/scripting/ctimer/sql.sp @@ -0,0 +1,504 @@ +public void EstablishConnection() +{ + if (SQL_CheckConfig("ctimer")) + Database.Connect(ConnectionCallback, "ctimer"); + else + SetFailState("'ctimer' not found in 'sourcemod/configs/databases.cfg'"); +} + +public void ConnectionCallback(Database db, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Failed to connect to the database, will attempt to reconnect on map change"); + return; + } + + g_hDatabase = db; + + LoadMapInfo(); +} + +public void GetPlayerInfo(client) +{ + int steamid = GetTimerSteamId(client); + char query[512], username[65], ip[16]; + + GetClientName(client, username, sizeof(username)); + g_hDatabase.Escape(username, username, sizeof(username)); + GetClientIP(client, ip, sizeof(ip)); + + Format(query, sizeof(query), "INSERT INTO ctimer_users (userid, name, ip, lastconnected) values ('%i', '%s', INET_ATON('%s'), CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE name = VALUES(name), ip = VALUES(ip), lastconnected = CURRENT_TIMESTAMP;", steamid, username, ip); + g_hDatabase.Query(SQL_InsertUser, query, DBPrio_High); + + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid, can't load players time %N<%i>", client, client); + return; + } + + int userid = GetClientUserId(client); + Format(query, sizeof(query), "SELECT time FROM ctimer_times WHERE mapid = %i AND userid = %i;", g_iMapID, GetTimerSteamId(client)); + g_hDatabase.Query(SQL_GetUserTime, query, userid); +} + +public void SQL_InsertUser(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on inserting user: %s", error); + return; + } +} + +public void SQL_GetUserTime(Database db, DBResultSet results, const char[] error, int userid) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on getting user time: %s", error); + return; + } + + int client = GetClientOfUserId(userid); + + if (!isValidClient(client)) + return; + + if (results.RowCount == 0) + { + g_fMapTime[client] = 0.0; + return; + } + + if (results.RowCount > 1) + { + LogError("Unexpected amount of rows: %i", results.RowCount); + return; + } + + results.FetchRow(); + g_fMapTime[client] = results.FetchFloat(0); + +} + +public void LoadMapInfo() +{ + char query[512]; + Format(query, sizeof(query), "INSERT INTO ctimer_maps (mapname, lastplayed) values ('%s', CURRENT_TIMESTAMP) ON DUPLICATE KEY UPDATE lastplayed = CURRENT_TIMESTAMP", g_sMapName); + g_hDatabase.Query(SQL_InsertMap, query, DBPrio_High); ///Insert map or update lastplayed + Format(query, sizeof(query), "SELECT mapid, tier, enabled FROM ctimer_maps WHERE mapname = '%s'", g_sMapName); + g_hDatabase.Query(SQL_GetMapInfo, query); +} + +public void SQL_InsertMap(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on inserting map: %s", error); + return; + } + +} + +public void SQL_GetMapInfo(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on inserting map: %s", error); + return; + } + + if (results.RowCount == 0) + { + LogError("Map not found"); + return; + } + + if (results.RowCount > 1) + { + LogError("Unexpected amount of rows: %i", results.RowCount); + return; + } + + results.FetchRow(); + g_iMapID = results.FetchInt(0); + g_iTier = results.FetchInt(1); + g_bActive = view_as(results.FetchInt(2)); + + LoadZones(); + GetWRInfo(); + + if (g_bLateLoad) + { + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientConnected(i) && IsClientInGame(i)) + { + OnClientPostAdminCheck(i); + } + } + } +} + +public void GetWRInfo() +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512]; + Format(query, sizeof(query), "SELECT u.name , wr.time FROM ctimer_users u, ctimer_times wr WHERE u.userid = wr.userid AND wr.mapid = %i AND u.userid = getWrUserId(%i);", g_iMapID, g_iMapID); + g_hDatabase.Query(SQL_GetWRInfo, query); +} + +public void SQL_GetWRInfo(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on getting map WR info: %s", error); + return; + } + + if (results.RowCount == 0) + { + g_fWrTime = 0.0; + return; + } + + if (results.RowCount > 2) + { + LogError("Unexpected amount of rows: %i", results.RowCount); + return; + } + results.FetchRow(); + results.FetchString(0, g_sWrHolder, sizeof(g_sWrHolder)); + g_fWrTime = results.FetchFloat(1); +} + + +public void SaveZones(int client) +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512], startcord[42], endcord[42]; + for (int i = 0; i <= 1; i++) + { + VectorToString(startcord, sizeof(startcord), g_fStartOrigins[i]); + VectorToString(endcord, sizeof(endcord), g_fEndOrigins[i]); + Format(query, sizeof(query), "INSERT INTO ctimer_zones(mapid, zonetype, startcord, endcord) VALUES (%i, %i, '%s', '%s') ON DUPLICATE KEY UPDATE startcord = values(startcord), endcord = values(endcord)", g_iMapID, i, startcord, endcord); + g_hDatabase.Query(SQL_SaveZones, query); + } + PrintToChat(client, "Zones Saved"); +} + +public void SQL_SaveZones(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on saving zones: %s", error); + return; + } +} + +public void LoadZones() +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + + char query[512]; + Format(query, sizeof(query), "SELECT zonetype, startcord, endcord from ctimer_zones where mapid = %i ORDER BY zonetype", g_iMapID); + g_hDatabase.Query(SQL_LoadZones, query); + +} + +public void SQL_LoadZones(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on inserting map: %s", error); + return; + } + + if (results.RowCount == 0) + { + return; + } + + if (results.RowCount > 2) + { + LogError("Unexpected amount of rows: %i", results.RowCount); + return; + } + + int zonetype; + char startcord[42], endcord[42]; + float vec[3]; + + while (results.FetchRow()) + { + zonetype = results.FetchInt(0); + results.FetchString(1, startcord, sizeof(startcord)); + results.FetchString(2, endcord, sizeof(endcord)); + StringToVector(vec, startcord); + g_fStartOrigins[zonetype] = vec; + StringToVector(vec, endcord); + g_fEndOrigins[zonetype] = vec; + CreateTrigger(zonetype); + //CreateTimer(1.0, Timer_CreateTrigger, zonetype); + } + //CS_TerminateRound(0.0, CSRoundEnd_Draw, true); +} + +public void SetMapTier(int tier) +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512]; + Format(query, sizeof(query), "UPDATE ctimer_maps SET tier = %i WHERE mapname = '%s'", tier, g_sMapName); + g_hDatabase.Query(SQL_SetMapTier, query); +} + +public void SQL_SetMapTier(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on setting map tier: %s", error); + return; + } +} + +public void SetMapState(int state) +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512]; + Format(query, sizeof(query), "UPDATE ctimer_maps SET enabled = %i WHERE mapname = '%s'", state, g_sMapName); + g_hDatabase.Query(SQL_SetMapState, query); +} + +public void SQL_SetMapState(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on setting map active state: %s", error); + return; + } +} + +public void UpdateTime(int client) +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512]; + int userid = GetClientUserId(client); + Format(query, sizeof(query), "SELECT updateTime(%i, %i, %f), getTimeRank(%i, %i), getTimeComps(%i);", g_iMapID, GetTimerSteamId(client), g_fMapTime[client], g_iMapID, GetTimerSteamId(client), g_iMapID); + g_hDatabase.Query(SQL_UpdateTime, query, userid); +} + +public void SQL_UpdateTime(Database db, DBResultSet results, const char[] error, int userid) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on updating time: %s", error); + return; + } + + int client = GetClientOfUserId(userid); + + if (!isValidClient(client)) + return; + + results.FetchRow(); + int rank = results.FetchInt(1); + int total = results.FetchInt(2); + + ProcessRankMessage(client, rank, total); +} + +public void AddCompletion(int client) +{ + if (g_iMapID == -1) + { + LogError("Error, map ID is invalid"); + return; + } + char query[512]; + Format(query, sizeof(query), "UPDATE ctimer_times SET timescompleted = timescompleted + 1 where mapid = %i AND userid = %i", g_iMapID, GetTimerSteamId(client)); + g_hDatabase.Query(SQL_AddCompletion, query); +} + +public void SQL_AddCompletion(Database db, DBResultSet results, const char[] error, any data) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + if (results == null) + { + LogError("Error on setting map active state: %s", error); + return; + } +} + +public void RequestTop(int userid, char[] mapname, int limit) +{ + Transaction transaction = new Transaction(); + char query[512]; + Format(query, sizeof(query), "SELECT mapname FROM ctimer_maps WHERE enabled = 1 AND mapname LIKE '%%%s%%' ORDER BY mapname LIMIT 1", mapname); + transaction.AddQuery(query); + Format(query, sizeof(query), "SELECT u.name , times.time, times.timescompleted FROM ctimer_users u, ctimer_times times, ctimer_maps maps WHERE u.userid = times.userid AND times.mapid = maps.mapid AND maps.mapid = (SELECT mapid FROM ctimer_maps WHERE enabled = 1 AND mapname LIKE '%%%s%%' ORDER BY mapname LIMIT 1) ORDER BY time, runid LIMIT %i;", mapname, limit); + transaction.AddQuery(query); + g_hDatabase.Execute(transaction, SQL_RequestTop, SQL_RequestTopError, userid); +} + +public void SQL_RequestTopError(Database db, int userid, int numQueries, const char[] error, int failIndex, any[] queryData) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + LogError("Error on requesting top time records on query %i: %s", failIndex, error); +} + +public void RequestWR(int userid, char[] mapname) +{ + Transaction transaction = new Transaction(); + char query[512]; + Format(query, sizeof(query), "SELECT mapname FROM ctimer_maps WHERE enabled = 1 AND mapname LIKE '%%%s%%' ORDER BY mapname LIMIT 1", mapname); + transaction.AddQuery(query); + Format(query, sizeof(query), "SELECT name, time FROM ctimer_times times INNER JOIN ctimer_users u ON u.userid = times.userid WHERE mapid=(SELECT mapid FROM ctimer_maps WHERE enabled = 1 AND mapname LIKE '%%%s%%' ORDER BY mapname LIMIT 1) ORDER BY time, runid LIMIT 1;", mapname); + transaction.AddQuery(query); + g_hDatabase.Execute(transaction, SQL_RequestWR, SQL_RequestWRError, userid); +} + +public void SQL_RequestWRError(Database db, int userid, int numQueries, const char[] error, int failIndex, any[] queryData) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + LogError("Error on requesting world record time on query %i: %s", failIndex, error); +} + +public void SQL_RequestWR(Database db, int userid, int numQueries, DBResultSet[] results, any[] queryData) +{ + if (db == null) + { + SetFailState("Lost connection to the database, will attempt to reconnect on map change"); + return; + } + + int client = GetClientOfUserId(userid); + + if (!isValidClient(client)) + return; + + if (results[0].RowCount == 0) + { + TimerPrintToChat(client, false, "%T", "MapNotFound", LANG_SERVER); + return; + } + + char cMap[64]; + results[0].FetchRow(); + results[0].FetchString(0, cMap, sizeof(cMap)); + + if (results[1].RowCount == 0) + { + TimerPrintToChat(client, false, "%T", "TimesNotFound", LANG_SERVER, cMap); + return; + } + + char cTime[16], cName[64]; + float fTime; + + results[1].FetchRow(); + results[1].FetchString(0, cName, sizeof(cName)); + fTime = results[1].FetchFloat(1); + + TimerFormat(fTime, cTime, sizeof(cTime), true, false); + + TimerPrintToChat(client, false, "%T", "WR", LANG_SERVER, cName, cMap, cTime); +} \ No newline at end of file diff --git a/CTimer/scripting/ctimer/timers.sp b/CTimer/scripting/ctimer/timers.sp new file mode 100644 index 00000000..98b6209c --- /dev/null +++ b/CTimer/scripting/ctimer/timers.sp @@ -0,0 +1,210 @@ +public Action DrawFullZoneTimer(Handle timer) +{ + int colorarray[][] = { { 124, 252, 0, 255 }, { 255, 0, 0, 255 } }; + + if (!g_bLasers || g_iEditor == -1) + return Plugin_Continue; + + for (int i = 0; i <= 1; i++) + { + if (g_iSnapToClient == i) + { + float vec[3]; + GetClientAbsOrigin(g_iEditor, vec); + DrawFullZone(vec, g_fStartOrigins[i], colorarray[i], 0.1); + continue; + } + DrawFullZone(g_fEndOrigins[i], g_fStartOrigins[i], colorarray[i], 0.2); + } + return Plugin_Continue; +} + +public Action DrawZoneTimer(Handle timer) +{ + if (!g_bLasers || !g_bActive) + return Plugin_Continue; + + int colorarray[][] = { { 124, 252, 0, 255 }, { 255, 0, 0, 255 } }; + + if (g_iEditor != -1) + return Plugin_Continue; + + float pos[3], eye[3]; + + int[] clients = new int[MaxClients]; + int nClients = 0; + + for (int i = 0; i <= 1; i++) + { + for (int j = 1; j <= MaxClients; j++) + { + if (isValidClient(j)) + { + //https://github.com/InfluxTimer/sm-timer/blob/master/addons/sourcemod/scripting/influx_zones_beams.sp + GetClientEyePosition(j, eye); + + GetMiddleOfABox(g_fEndOrigins[i], g_fStartOrigins[i], pos); + + if (GetVectorDistance(eye, pos, true) < MAX_DIST_SQ) + { + clients[nClients++] = j; + } + else + { + TR_TraceRayFilter(eye, pos, CONTENTS_SOLID, RayType_EndPoint, TraceFilter_WorldOnly); + + if (!TR_DidHit()) + { + clients[nClients++] = j; + } + } + } + } + DrawZone(clients, nClients, g_fEndOrigins[i], g_fStartOrigins[i], colorarray[i], 1.0); + } + return Plugin_Continue; +} + +public bool TraceFilter_WorldOnly( int ent, int mask ) +{ + return ( ent == 0 ); +} + +public Action HudLoop(Handle timer) +{ + if (g_iMapID != -1 && g_bActive) + { + for (int i = 1; i <= MaxClients; i++) + { + if (isValidClient(i)) + { + UpdateHUD(i); + } + } + return Plugin_Continue; + } + return Plugin_Continue; +} + +public void UpdateHUD(int client) +{ + int target = client; + if (IsClientObserver(client)) + { + int mode = GetEntProp(client, Prop_Send, "m_iObserverMode"); + if (mode == 4 || mode == 5) + { + target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget"); + if (!isValidClient(target)) + return; + } + else + return; + } + + if (g_iActivity[target] == -1) + { + return; + } + + char HintTextBuffer[256]; + + if (client != target) + Format(HintTextBuffer, sizeof(HintTextBuffer), "Player: %N\n \n", target); + + if (g_iActivity[target] == 1) + Format(HintTextBuffer, sizeof(HintTextBuffer), "%sIn Start Zone\n \n", HintTextBuffer); + + if (g_iActivity[target] == 0) + { + char cTime[16]; + float fTime; + fTime = GetEngineTime() - g_fStartTime[target]; + TimerFormat(fTime, cTime, sizeof(cTime), true, false); + Format(HintTextBuffer, sizeof(HintTextBuffer), "%sTime: %s\n \n", HintTextBuffer, cTime); + } + + Format(HintTextBuffer, sizeof(HintTextBuffer), "%sSpeed: %i u/s", HintTextBuffer, Get2VecVelocity(target)); + + PrintHintText(client, HintTextBuffer); +} + +public Action SideHudLoop(Handle timer) +{ + if (g_iMapID != -1 && g_bActive) + { + for (int i = 1; i <= MaxClients; i++) + { + if (isValidClient(i)) + { + UpdateSideHUD(i); + } + } + return Plugin_Continue; + } + return Plugin_Continue; +} + +public void UpdateSideHUD(int client) +{ + int target = client; + if (IsClientObserver(client)) + { + int mode = GetEntProp(client, Prop_Send, "m_iObserverMode"); + if (mode == 4 || mode == 5) + { + target = GetEntPropEnt(client, Prop_Send, "m_hObserverTarget"); + if (!isValidClient(target)) + return; + } + else + return; + } + + if (g_iActivity[target] == -1) + { + return; + } + + char KeyHintBuffer[254]; + char cTimeLeft[16]; + GetTimerTimeLeft(cTimeLeft, sizeof(cTimeLeft)); + + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "Timeleft: %s\n \n", cTimeLeft); + + if (g_fMapTime[target] <= 0.0) + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "%sPR: None\n", KeyHintBuffer); + + else + { + char cTime[16], cTimeToWR[16]; + float fTimeToWR; + fTimeToWR = g_fMapTime[target] - g_fWrTime; + if (fTimeToWR == 0) + Format(cTimeToWR, sizeof(cTimeToWR), "WR"); + else + TimerFormat(fTimeToWR, cTimeToWR, sizeof(cTimeToWR), true, true); + + TimerFormat(g_fMapTime[target], cTime, sizeof(cTime), true, false); + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "%sPR: %s (%s)\n", KeyHintBuffer, cTime, cTimeToWR); + } + + if (g_fWrTime <= 0.0) + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "%sWR: None\n \n", KeyHintBuffer); + + else + { + char cWR[16]; + TimerFormat(g_fWrTime, cWR, sizeof(cWR), true, false); + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "%sWR: %s (%s)\n \n", KeyHintBuffer, cWR, g_sWrHolder); + } + + Format(KeyHintBuffer, sizeof(KeyHintBuffer), "%sSpectators: %i", KeyHintBuffer, GetSpecCount(target)); + + PrintKeyHintText(client, KeyHintBuffer); +} + +/*public Action Timer_CreateTrigger(Handle timer, int zonetype) +{ + CreateTrigger(zonetype); +}*/ \ No newline at end of file diff --git a/CTimer/scripting/ctimer/utility.sp b/CTimer/scripting/ctimer/utility.sp new file mode 100644 index 00000000..0471f0a5 --- /dev/null +++ b/CTimer/scripting/ctimer/utility.sp @@ -0,0 +1,433 @@ +public bool isValidClient(int client) { + if (client <= 0 + || client > MaxClients + || !IsValidEntity(client) + || !IsClientConnected(client) + || IsFakeClient(client) + || !IsClientInGame(client) + || !PM_IsPlayerSteam(client)){ + return false; + } + return true; +} + +public int GetTimerSteamId(int client) +{ + char steamid[32]; + GetClientAuthId(client, AuthId_Steam3, steamid, sizeof(steamid)); + ReplaceString(steamid, sizeof(steamid), "[U:1:", "\0"); + ReplaceString(steamid, sizeof(steamid), "]", "\0"); + return StringToInt(steamid); +} + +public void ClearPlayerCache(int client) +{ + g_iActivity[client] = -1; + g_fStartTime[client] = -1.0; + g_fMapTime[client] = 0.0; + if (g_arrayRun[client] != INVALID_HANDLE) + g_arrayRun[client].Clear(); + else + g_arrayRun[client] = new ArrayList(RUNDATA_MAX); +} + +public void LowerString(char[] sString, int len) +{ + char sTemp[PLATFORM_MAX_PATH]; + Format(sTemp, sizeof(sTemp), "%s", sString); + for (int i = 0; i < len; i++) + { + if (!IsCharLower(sTemp[i])) + { + sTemp[i] = CharToLower(sTemp[i]); + } + } + Format(sString, len, "%s", sTemp); +} + +public void DrawFullZone(float fMin[3], float fMax[3], int color[4], float life) +{ + float point[8][3]; + float size = 3.0; + + point[0][0] = fMin[0]; + point[0][1] = fMin[1]; + point[0][2] = fMax[2]; + + point[1][0] = fMax[0]; + point[1][1] = fMin[1]; + point[1][2] = fMax[2]; + + point[2][0] = fMin[0]; + point[2][1] = fMax[1]; + point[2][2] = fMax[2]; + + point[3][0] = fMax[0]; + point[3][1] = fMax[1]; + point[3][2] = fMax[2]; + + point[4][0] = fMin[0]; + point[4][1] = fMin[1]; + point[4][2] = fMin[2]+100; + + point[5][0] = fMax[0]; + point[5][1] = fMin[1]; + point[5][2] = fMin[2]+100; + + point[6][0] = fMin[0]; + point[6][1] = fMax[1]; + point[6][2] = fMin[2]+100; + + point[7][0] = fMax[0]; + point[7][1] = fMax[1]; + point[7][2] = fMin[2]+100; + + if (g_iEditor == -1) + return; + + TE_SetupBeamPoints(point[4],point[5],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[4],point[6],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[7],point[6],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[7],point[5],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[0],point[1],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[0],point[2],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[0],point[4],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[3],point[2],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[3],point[1],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[3],point[7],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[1],point[5],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); + TE_SetupBeamPoints(point[2],point[6],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_SendToClient(g_iEditor, 0.0); +} + +public void DrawZone(int[] clients, int numClients, float fMin[3], float fMax[3], int color[4], float life) +{ + float point[4][3]; + float size = 6.0; + + point[0][0] = fMin[0]; + point[0][1] = fMin[1]; + + point[1][0] = fMax[0]; + point[1][1] = fMin[1]; + + point[2][0] = fMin[0]; + point[2][1] = fMax[1]; + + point[3][0] = fMax[0]; + point[3][1] = fMax[1]; + + if (fMax[2] <= fMin[2] + 100) + { + point[0][2] = fMax[2] + 2; + point[1][2] = fMax[2] + 2; + point[2][2] = fMax[2] + 2; + point[3][2] = fMax[2] + 2; + } + else + { + point[0][2] = fMin[2] + 102; + point[1][2] = fMin[2] + 102; + point[2][2] = fMin[2] + 102; + point[3][2] = fMin[2] + 102; + } + + TE_SetupBeamPoints(point[0],point[1],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_Send(clients, numClients); + TE_SetupBeamPoints(point[0],point[2],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_Send(clients, numClients); + TE_SetupBeamPoints(point[3],point[2],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_Send(clients, numClients); + TE_SetupBeamPoints(point[3],point[1],g_iBeam, 0, 0, 30, life, size, size, 1, 0.0, color, 0);TE_Send(clients, numClients); +} + +public void VectorToString(char[] buffer, int maxlength, float vector[3]) +{ + Format(buffer, maxlength, "%f|%f|%f", vector[0], vector[1], vector[2]); +} + +public float StringToVector(float vector[3], char[] buffer){ + char cords[3][24]; + + ExplodeString(buffer, "|", cords, sizeof cords, sizeof cords[]); + + for (int i = 0; i < 3; i++) + vector[i] = StringToFloat(cords[i]); +} + +public void TimerFormat(float fTime, char[] sBuffer, int len, bool showMS, bool addsymbol) +{ + Format(sBuffer, len, ""); + + int Min, Sec; + float Ms; + + if(fTime < 0) + { + fTime *= -1; + if (addsymbol) + Format(sBuffer, len, "-"); + } + else + if (addsymbol) + Format(sBuffer, len, "+"); + + Min = RoundToFloor(fTime) / 60; + Sec = RoundToFloor(fTime) - (Min * 60); + if (showMS) + Ms = fTime - ((Min * 60) + Sec); + + char Mins[3], Secs[3], MiliSecond[16]; + if (Min < 10) + Format(Mins, sizeof(Mins), "0%i", Min); + else + Format(Mins, sizeof(Mins), "%i", Min); + + if (Sec < 10) + Format(Secs, sizeof(Secs), "0%i", Sec); + else + Format(Secs, sizeof(Secs), "%i", Sec); + + if (Ms < 10 && showMS) + Format(MiliSecond, sizeof(MiliSecond), "0%.2f", Ms); + else + Format(MiliSecond, sizeof(MiliSecond), "%.2f", Ms); + + if (!showMS) + Format(sBuffer, len, "%s%s:%s", sBuffer, Mins, Secs); + else + Format(sBuffer, len, "%s%s:%s.%s", sBuffer, Mins, Secs, MiliSecond[3]); +} + +public void GetTimerTimeLeft(char[] buffer, int maxlength) +{ + int timeleft; + + GetMapTimeLeft(timeleft); + + if (timeleft <= 60) + { + if (timeleft < 1) + Format(buffer, maxlength, "Map ending", timeleft); + else if (timeleft == 1) + Format(buffer, maxlength, "1 second", timeleft); + else + Format(buffer, maxlength, "%i seconds", timeleft); + } + + + else + { + int iMinutes = (timeleft / 60); + + Format(buffer, maxlength, "%i", iMinutes); + + if (iMinutes == 1) + Format(buffer, maxlength, "%s minute", buffer); + else + Format(buffer, maxlength, "%s minutes", buffer); + + } +} + +public void TimerPrintToChat(int client, bool toall, char[] sText, any:...) +{ + int[] targets = new int[MaxClients]; + int numTargets; + if (toall) + { + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientInGame(i)) + { + targets[numTargets] = i; + numTargets++; + } + } + } + else + { + targets[0] = client; + numTargets = 1; + } + + char finalmessage[MAXLENGTH_MESSAGE], cBuffer[MAXLENGTH_MESSAGE]; + strcopy(cBuffer, sizeof(cBuffer), sText); + VFormat(finalmessage, MAXLENGTH_MESSAGE, cBuffer, 4); + Format(cBuffer, MAXLENGTH_MESSAGE, "%T", "Tag", LANG_SERVER); + CFormat(finalmessage, MAXLENGTH_MESSAGE, "%s%s", cBuffer, finalmessage); + + SayText2(targets, numTargets, client, finalmessage); + +} + +//forums.alliedmods.net/showpost.php?p=1709517&postcount=35?p=1709517&postcount=35 +public void CFormat(char[] buffer, int maxlength, char[] sText, any:...) +{ + char cBuffer[MAXLENGTH_MESSAGE]; + + strcopy(cBuffer, sizeof(cBuffer), sText); + VFormat(buffer, maxlength, cBuffer, 4); + + ReplaceString(buffer, maxlength, "{default}", "\x01", false); + + int iStart, iEnd, iTotal; + char sHex[9], sCodeBefore[12], sCodeAfter[10]; + + while ((iStart = StrContains(buffer[(iTotal)], "{#")) != -1) + { + if ((iEnd = StrContains(buffer[iTotal+iStart+2], "}")) != -1) + { + if (iEnd == 6 || iEnd == 8) + { + strcopy(sHex, iEnd+1, buffer[iTotal+iStart+2]); + Format(sCodeBefore, sizeof(sCodeBefore), "{#%s}", sHex); + Format(sCodeAfter, sizeof(sCodeAfter), (iEnd == 6 ? "\x07%s" : "\x08%s"), sHex); + ReplaceString(buffer, maxlength, sCodeBefore, sCodeAfter); + iTotal += iStart + iEnd + 1; + } + else { + iTotal += iStart + iEnd + 3; + } + } + else { + break; + } + } +} + +public void SayText2(int[] targets, int numTargets, int author, char[] szMessage) +{ + Handle hBuffer = StartMessage("SayText2", targets, numTargets, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS); + + if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) + { + PbSetInt(hBuffer, "ent_idx", author); + PbSetBool(hBuffer, "chat", true); + PbSetString(hBuffer, "msg_name", szMessage); + PbAddString(hBuffer, "params", ""); + PbAddString(hBuffer, "params", ""); + PbAddString(hBuffer, "params", ""); + PbAddString(hBuffer, "params", ""); + } + else + { + BfWriteByte(hBuffer, author); + BfWriteByte(hBuffer, true); + BfWriteString(hBuffer, szMessage); + } + + EndMessage(); +} + +public void PrintKeyHintText(int client, char[] format, any:...) +{ + Handle userMessage = StartMessageOne("KeyHintText", client); + + if (userMessage == INVALID_HANDLE) { + return; + } + + char buffer[254]; + + SetGlobalTransTarget(client); + VFormat(buffer, sizeof(buffer), format, 3); + + if (GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available + && GetUserMessageType() == UM_Protobuf) { + + PbSetString(userMessage, "hints", buffer); + } + else { + BfWriteByte(userMessage, 1); + BfWriteString(userMessage, buffer); + } + + EndMessage(); +} + +public int Get2VecVelocity(int client) +{ + float vel[3]; + GetEntPropVector(client, Prop_Data, "m_vecVelocity", vel); + + for(int i = 0; i <= 2; i++) + vel[i] *= vel[i]; + + return RoundToFloor(SquareRoot(vel[0] + vel[1])); +} + +//https://github.com/InfluxTimer/sm-timer/blob/master/addons/sourcemod/scripting/influx_prespeed.sp +public void CheckSpeed(int client) +{ + float vel[3]; + GetEntPropVector(client, Prop_Data, "m_vecVelocity", vel); + + + /*for(int i = 0; i <= 2; i++) + vel[i] *= vel[i];*/ + + float speed = SquareRoot(vel[0] * vel[0] + vel[1] * vel[1]); + + //PrintToChatAll("Exit Vel: %.2f", speed); + + if (speed > MAXVELOCITY) + { + float m = speed / MAXVELOCITY; + + //PrintToChatAll("Max Velocity. Factor: %.2f", m); + + vel[0] /= m; + vel[1] /= m; + vel[2] /= m; + + TimerPrintToChat(client, false, "%T", "MaxVelocityWarning", LANG_SERVER); + + //PrintToChatAll("Velocity reduced to: %i", RoundToFloor(SquareRoot(vel[0] * vel[0] + vel[1] * vel[1]))); + + TeleportEntity(client, NULL_VECTOR, NULL_VECTOR, vel); + } +} + +public int GetSpecCount(int client) +{ + int count; + for (int i = 1; i <= MaxClients; i++) + { + if (isValidClient(i) && IsClientObserver(i)) + { + int mode = GetEntProp( i, Prop_Send, "m_iObserverMode" ); + if ( mode == 4 || mode == 5 ) + { + int target = GetEntPropEnt( i, Prop_Send, "m_hObserverTarget"); + if (target == client) + count++; + } + } + } + return count; +} + +public void GetMiddleOfABox(float vec1[3], float vec2[3], float buffer[3]) +{ + float mid[3]; + MakeVectorFromPoints(vec1, vec2, mid); + mid[0] = mid[0] / 2.0; + mid[1] = mid[1] / 2.0; + mid[2] = mid[2] / 2.0; + AddVectors(vec1, mid, buffer); +} + +CSWeaponID GetWeaponID(int client) +{ + CSWeaponID weaponID = CSWeapon_NONE; + + int weaponIndex = GetEntDataEnt2(client, m_hActiveWeapon); + if (weaponIndex != -1) + { + static char classname[64]; + GetEdictClassname(weaponIndex, classname, sizeof(classname)); + ReplaceString(classname, sizeof(classname), "weapon_", ""); + + static char wepAlias[64]; + CS_GetTranslatedWeaponAlias(classname, wepAlias, sizeof(wepAlias)); + weaponID = CS_AliasToWeaponID(wepAlias); + } + return weaponID; +} \ No newline at end of file diff --git a/CTimer/scripting/ctimer/zones.sp b/CTimer/scripting/ctimer/zones.sp new file mode 100644 index 00000000..99782137 --- /dev/null +++ b/CTimer/scripting/ctimer/zones.sp @@ -0,0 +1,151 @@ +public void CreateTrigger(int zone) +{ + if ((g_fStartOrigins[zone][0] == 0.0) && (g_fStartOrigins[zone][1] == 0.0) && (g_fStartOrigins[zone][2] == 0.0) && (g_fEndOrigins[zone][0] == 0.0) && (g_fEndOrigins[zone][1] == 0.0) && (g_fEndOrigins[zone][2] == 0.0)) + return; + + if (g_iTriggerEnt[zone] > -1) + { + if (IsValidEntity(g_iTriggerEnt[zone])) + { + AcceptEntityInput(g_iTriggerEnt[zone], "Kill"); + } + g_iTriggerEnt[zone] = -1; + } + + float max[3]; + float min[3]; + + min = g_fStartOrigins[zone]; + max = g_fEndOrigins[zone]; + + char name[12]; + if (zone == 0) + Format(name, sizeof name, "start"); + if (zone == 1) + Format(name, sizeof name, "end"); + + float mid[3] = 0.0; + max[2]+=100; + + GetMiddleOfABox(max, min, mid); + min[0] = min[0] - mid[0]; + if(min[0] > 0.0) + min[0] *= -1.0; + min[1] = min[1] - mid[1]; + if(min[1] > 0.0) + min[1] *= -1.0; + min[2] = min[2] - mid[2]; + if(min[2] > 0.0) + min[2] *= -1.0; + + max[0] = max[0] - mid[0]; + if(max[0] < 0.0) + max[0] *= -1.0; + max[1] = max[1] - mid[1]; + if(max[1] < 0.0) + max[1] *= -1.0; + max[2] = max[2] - mid[2]; + if(max[2] < 0.0) + max[2] *= -1.0; + + g_iTriggerEnt[zone] = CreateEntityByName("trigger_multiple"); + + DispatchKeyValue(g_iTriggerEnt[zone], "spawnflags", "1"); + DispatchKeyValue(g_iTriggerEnt[zone], "targetname", name); + + DispatchKeyValue(g_iTriggerEnt[zone], "wait", "0"); + + DispatchSpawn(g_iTriggerEnt[zone]); + ActivateEntity(g_iTriggerEnt[zone]); + + //PrintToServer("Dispatched and activated %s", name); + + TeleportEntity(g_iTriggerEnt[zone], mid, NULL_VECTOR, NULL_VECTOR); + SetEntityModel(g_iTriggerEnt[zone], "models/error.mdl"); + + //PrintToServer("Teleported and set model %s", name); + + SetEntPropVector(g_iTriggerEnt[zone], Prop_Send, "m_vecMins", min); + SetEntPropVector(g_iTriggerEnt[zone], Prop_Send, "m_vecMaxs", max); + SetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_nSolidType", 2); + + //PrintToServer("Set vecs and solidtype %s", name); + + int iEffects = GetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_fEffects"); + iEffects |= 0x020; + SetEntProp(g_iTriggerEnt[zone], Prop_Send, "m_fEffects", iEffects); + + //PrintToServer("Set effects %s", name); + + SDKHook(g_iTriggerEnt[zone], SDKHook_StartTouch, zoneStartTouch); + SDKHook(g_iTriggerEnt[zone], SDKHook_EndTouch, zoneEndTouch); + + //PrintToServer("Hooks Hooked %s", name); +} + +public Action zoneEndTouch (int caller, int client) +{ + if (!isValidClient(client) || client == g_iEditor || !g_bActive) + return; + + + char trigName[16]; + GetEntPropString(caller, Prop_Data, "m_iName", trigName, sizeof trigName); + + //Player is Exiting Start Zone + if (StrEqual(trigName, "start")) + { + //Player is on starzone state, start run + if (g_iActivity[client] == 1) + { + CheckSpeed(client); + g_iActivity[client] = 0; + g_fStartTime[client] = GetEngineTime(); + g_arrayRun[client].Clear(); + } + } + + //Player is Exiting End Zone + if (StrEqual(trigName, "end")) + { + //Set Player Inactive + g_iActivity[client] = -1; + //EndZoneRoutine(client); + } +} + +public Action zoneStartTouch (int caller, int client) +{ + if (!isValidClient(client) || client == g_iEditor || !g_bActive) + return; + + char trigName[16]; + GetEntPropString(caller, Prop_Data, "m_iName", trigName, sizeof trigName); + + //Player is Entering Start Zone + if (StrEqual(trigName, "start")) + { + //Player teleported from endzone, exec endzoneroutine before reset + if (g_iActivity[client] == 2) + { + //EndZoneRoutine(client); + } + //TODO: Reset record array; + g_iActivity[client] = 1; + } + + if (StrEqual(trigName, "end")) + { + if (g_iActivity[client] == 0) + { + ProcessFinish(client); + g_iActivity[client] = 2; + } + } +} + +/*public void EndZoneRoutine(int client) +{ + //TODO: Save Bot if needed + +}*/ \ No newline at end of file diff --git a/ChatFilter/scripting/ChatFilter.sp b/ChatFilter/scripting/ChatFilter.sp new file mode 100644 index 00000000..d8d7f870 --- /dev/null +++ b/ChatFilter/scripting/ChatFilter.sp @@ -0,0 +1,240 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include +#include + +bool g_bHideLennies[MAXPLAYERS + 1] = { false, ... }; +Handle g_hCookieHideLennies = null; + +bool g_bBlockCommands[MAXPLAYERS + 1] = { false, ... }; +Handle g_hCookieBlockCommands = null; + +bool g_bBlockChat[MAXPLAYERS + 1] = { false, ...}; +Handle g_hCookieBlockChat = null; + +#define NUMBEROFLENNIES 23 + +char g_cLennies[NUMBEROFLENNIES][] = {"( ͡° ͜ʖ ͡°)", "͜ʖ", "(° ͜ʖ °)", "( Í͠°͜لÍ͠°)", "( ͡° Íœ ͡°)", "( ͡°╭͜ʖ╮͡° )", "( ͠° ͜ʖ ͡°)", "( ° ͜ʖ °)", "(╯°□°)╯", "_(ツ)_", "_ツ_", "( ̿°̿ ͜ل͜ ̿°̿ )", "( Í¡", "( Í ", "( Í", "( °", "(Í¡", "ಠ_ಠ", "͡°", "°͡", "Ê–", "Í¡", "Íœ"}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ChatFilter", + author = "Dogan", + description = "Makes it possible to selfmute several things in chat", + version = "2.1.0", + url = "" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + RegConsoleCmd("sm_hide_lennies", OnToggleLennies, "Toggle blocking Lennies"); + g_hCookieHideLennies = RegClientCookie("lennies_blocked", "are lennies blocked", CookieAccess_Protected); + + RegConsoleCmd("sm_hide_commands", OnToggleCommands, "Toggle blocking Commands"); + g_hCookieBlockCommands = RegClientCookie("commands_blocked", "are commands blocked", CookieAccess_Protected); + + RegConsoleCmd("sm_hide_chat", OnToggleChat, "Toggle blocking other players Messages"); + g_hCookieBlockChat = RegClientCookie("chat_blocked", "are messages from others players blocked", CookieAccess_Protected); + + SetCookieMenuItem(MenuHandler_CookieMenu, 0, "ChatFilter"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleLennies(int client, int args) +{ + ToggleLennies(client); + return Plugin_Handled; +} + +public Action OnToggleCommands(int client, int args) +{ + ToggleCommands(client); + return Plugin_Handled; +} + +public Action OnToggleChat(int client, int args) +{ + ToggleChat(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ShowSettingsMenu(int client) +{ + Menu menu = new Menu(MenuHandler_MainMenu); + + menu.SetTitle("ChatFilter Settings", client); + + char sBuffer[128]; + + Format(sBuffer, sizeof(sBuffer), "Hiding Lennies: %s", g_bHideLennies[client] ? "Enabled" : "Disabled"); + menu.AddItem("0", sBuffer); + + Format(sBuffer, sizeof(sBuffer), "Hiding Commands: %s", g_bBlockCommands[client] ? "Enabled" : "Disabled"); + menu.AddItem("1", sBuffer); + + Format(sBuffer, sizeof(sBuffer), "Hiding all Messages: %s", g_bBlockChat[client] ? "Enabled" : "Disabled"); + menu.AddItem("2", sBuffer); + + menu.ExitBackButton = true; + + menu.Display(client, MENU_TIME_FOREVER); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info, char[] buffer, int maxlen) +{ + switch(action) + { + case(CookieMenuAction_DisplayOption): + { + Format(buffer, maxlen, "ChatFilter", client); + } + case(CookieMenuAction_SelectOption): + { + ShowSettingsMenu(client); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection) +{ + switch(action) + { + case(MenuAction_Select): + { + switch(selection) + { + case(0): ToggleLennies(client); + case(1): ToggleCommands(client); + case(2): ToggleChat(client); + } + + ShowSettingsMenu(client); + } + case(MenuAction_Cancel): + { + ShowCookieMenu(client); + } + case(MenuAction_End): + { + delete menu; + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CCC_OnChatMessage(int client, int author, const char[] message) +{ + int index = FindCharInString(message, '!', false); + int lennies = 0; + + for(int i = 0; i < NUMBEROFLENNIES; i++) + { + if(g_bHideLennies[client] && StrContains(message, g_cLennies[i], false) != -1) + { + lennies = 1; + } + } + + if(lennies == 1 || (g_bBlockCommands[client] && (index == 0 || index == 7)) || g_bBlockChat[client]) + return Plugin_Handled; + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleLennies(int client) +{ + g_bHideLennies[client] = !g_bHideLennies[client]; + + SetClientCookie(client, g_hCookieHideLennies, g_bHideLennies[client] ? "1" : ""); + CPrintToChat(client, "{cyan}[ChatFilter] {white}%s", g_bHideLennies[client] ? "Lennies are now hidden." : "Lennies are not hidden anymore."); +} + +public void ToggleCommands(int client) +{ + g_bBlockCommands[client] = !g_bBlockCommands[client]; + + SetClientCookie(client, g_hCookieBlockCommands, g_bBlockCommands[client] ? "1" : ""); + CPrintToChat(client, "{cyan}[ChatFilter] {white}%s", g_bBlockCommands[client] ? "Commands are now hidden." : "Commands are not hidden anymore."); +} + +public void ToggleChat(int client) +{ + g_bBlockChat[client] = !g_bBlockChat[client]; + + SetClientCookie(client, g_hCookieBlockChat, g_bBlockChat[client] ? "1" : ""); + CPrintToChat(client, "{cyan}[ChatFilter] {white}%s", g_bBlockChat[client] ? "Messages from all Players are now hidden." : "Messages from all Players are not hidden anymore."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientCookiesCached(int client) +{ + char sBuffer[2]; + + GetClientCookie(client, g_hCookieHideLennies, sBuffer, sizeof(sBuffer)); + if(sBuffer[0] != '\0') + { + g_bHideLennies[client] = true; + } + else + { + g_bHideLennies[client] = false; + } + + GetClientCookie(client, g_hCookieBlockCommands, sBuffer, sizeof(sBuffer)); + if(sBuffer[0] != '\0') + { + g_bBlockCommands[client] = true; + } + else + { + g_bBlockCommands[client] = false; + } + + GetClientCookie(client, g_hCookieBlockChat, sBuffer, sizeof(sBuffer)); + if(sBuffer[0] != '\0') + { + g_bBlockChat[client] = true; + } + else + { + g_bBlockChat[client] = false; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bHideLennies[client] = false; + g_bBlockCommands[client] = false; + g_bBlockChat[client] = false; +} \ No newline at end of file diff --git a/ConnectAnnounce/scripting/ConnectAnnounce.sp b/ConnectAnnounce/scripting/ConnectAnnounce.sp index 2d31e5a0..49e8e355 100644 --- a/ConnectAnnounce/scripting/ConnectAnnounce.sp +++ b/ConnectAnnounce/scripting/ConnectAnnounce.sp @@ -1,9 +1,10 @@ #pragma semicolon 1 #include -#include #include #include +#include +#include #pragma newdecls required @@ -15,6 +16,10 @@ Database g_hDatabase; Handle g_hCustomMessageFile; Handle g_hCustomMessageFile2; +bool g_bHideCsays[MAXPLAYERS + 1] = { false, ... }; +Handle g_hCookieHideCsays = null; + +ConVar g_cvHlstatsServerName; #define MSGLENGTH 100 @@ -22,11 +27,11 @@ Handle g_hCustomMessageFile2; // Purpose: //---------------------------------------------------------------------------------------------------- public Plugin myinfo = { - name = "Connect Announce", - author = "Neon + Botox", - description = "Connect Announcer", - version = "2.0", - url = "" + name = "Connect Announce", + author = "Neon + Botox + Dogan", + description = "Connect Announcer with special features for VIPS", + version = "3.0", + url = "" } //---------------------------------------------------------------------------------------------------- @@ -34,23 +39,147 @@ public Plugin myinfo = { //---------------------------------------------------------------------------------------------------- public void OnPluginStart() { + g_cvHlstatsServerName = CreateConVar("sm_connectannounce_hlstats_server_name", "css-ze", "Hlstats server name to check the rank for"); + AutoExecConfig(true); + BuildPath(Path_SM, g_sCustomMessageFile, sizeof(g_sCustomMessageFile), "configs/connect_announce/custom-messages.cfg"); BuildPath(Path_SM, g_sDataFile, sizeof(g_sDataFile), "configs/connect_announce/settings.cfg"); - char error[255]; - - if (SQL_CheckConfig("hlstatsx")) - { - g_hDatabase = SQL_Connect("hlstatsx", true, error, sizeof(error)); - } - - if (g_hDatabase == null) - { - LogError("Could not connect to database: %s", error); - } + Database.Connect(OnDatabaseConnect, "hlstatsx"); RegAdminCmd("sm_joinmsg", Command_JoinMsg, ADMFLAG_CUSTOM1, "Sets a custom message which will be shown upon connecting to the server"); RegAdminCmd("sm_resetjoinmsg", Command_ResetJoinMsg, ADMFLAG_CUSTOM1, "Resets your custom connect message"); + + RegConsoleCmd("sm_hide_connect_csays", OnToggleHideCsays, "Toggle blocking connect csay messages"); + + g_hCookieHideCsays = RegClientCookie("csays_blocked", "are csays blocked", CookieAccess_Protected); + + SetCookieMenuItem(MenuHandler_CookieMenu, 0, "Hide Connect Csays"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnDatabaseConnect(Database db, const char[] error, any data) +{ + if(db == INVALID_HANDLE || strlen(error) > 0) + { + LogError("Error connecting to database: %s", error); + return; + } + + g_hDatabase = db; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleHideCsays(int client) +{ + g_bHideCsays[client] = !g_bHideCsays[client]; + + SetClientCookie(client, g_hCookieHideCsays, g_bHideCsays[client] ? "1" : ""); + CPrintToChat(client, "{cyan}[ConnectAnnounce] {white}%s", g_bHideCsays[client] ? "You hid Connect Csay Messages." : "You unhid Connect Csay Messages."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientCookiesCached(int client) +{ + char sBuffer[2]; + + GetClientCookie(client, g_hCookieHideCsays, sBuffer, sizeof(sBuffer)); + + if(sBuffer[0] != '\0') + { + g_bHideCsays[client] = true; + } + else + { + g_bHideCsays[client] = false; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bHideCsays[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleHideCsays(int client, int args) +{ + ToggleHideCsays(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ShowSettingsMenu(int client) +{ + Menu menu = new Menu(MenuHandler_MainMenu); + + menu.SetTitle("ConnectCsay Settings", client); + + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "Hiding Connect Csays: %s", g_bHideCsays[client] ? "Enabled" : "Disabled"); + + menu.AddItem("0", sBuffer); + + menu.ExitBackButton = true; + + menu.Display(client, MENU_TIME_FOREVER); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info, char[] buffer, int maxlen) +{ + switch(action) + { + case(CookieMenuAction_DisplayOption): + { + Format(buffer, maxlen, "ConnectAnnounce", client); + } + case(CookieMenuAction_SelectOption): + { + ShowSettingsMenu(client); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection) +{ + switch(action) + { + case(MenuAction_Select): + { + switch(selection) + { + case(0): ToggleHideCsays(client); + } + + ShowSettingsMenu(client); + } + case(MenuAction_Cancel): + { + ShowCookieMenu(client); + } + case(MenuAction_End): + { + delete menu; + } + } } //---------------------------------------------------------------------------------------------------- @@ -67,8 +196,7 @@ public Action Command_JoinMsg(int client, int args) char sAuth[32]; GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - if (g_hCustomMessageFile != null) - CloseHandle(g_hCustomMessageFile); + delete g_hCustomMessageFile; g_hCustomMessageFile = CreateKeyValues("custom_messages"); @@ -108,6 +236,7 @@ public Action Command_JoinMsg(int client, int args) return Plugin_Handled; } + StripQuotes(sArg); if (KvJumpToKey(g_hCustomMessageFile, sAuth, true)) KvSetString(g_hCustomMessageFile, "message", sArg); @@ -140,8 +269,7 @@ public Action Command_ResetJoinMsg(int client, int args) char sAuth[32]; GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - if (g_hCustomMessageFile != null) - CloseHandle(g_hCustomMessageFile); + delete g_hCustomMessageFile; g_hCustomMessageFile = CreateKeyValues("custom_messages"); @@ -167,7 +295,7 @@ public Action Command_ResetJoinMsg(int client, int args) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) +public void TQueryCB(Handle owner, Handle rs, const char[] error, any data) { int client = 0; @@ -184,8 +312,8 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) SQL_FetchRow(rs); SQL_FieldNameToNum(rs, "rank", iField); iRank = SQL_FetchInt(rs, iField); + iRank += 1; } - Handle hFile = OpenFile(g_sDataFile, "r"); static char sRawMsg[301]; @@ -193,7 +321,7 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) { ReadFileLine(hFile, sRawMsg, sizeof(sRawMsg)); TrimString(sRawMsg); - CloseHandle(hFile); + delete hFile; } else { @@ -219,22 +347,10 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) { ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "Admin"); } - else if(GetAdminFlag(aid, Admin_Custom4)) - { - ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "Top25"); - } else if(GetAdminFlag(aid, Admin_Custom1)) { ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "VIP"); } - else if(GetAdminFlag(aid, Admin_Custom3)) - { - ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "Top50"); - } - else if(GetAdminFlag(aid, Admin_Custom5)) - { - ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "Supporter"); - } else if(GetAdminFlag(aid, Admin_Custom6)) { ReplaceString(sRawMsg, sizeof(sRawMsg), "{PLAYERTYPE}", "Member"); @@ -257,7 +373,7 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) if(StrContains(sRawMsg, "{NOSTEAM}")) { - if(!SteamClientAuthenticated(sAuth)) + if(!PM_IsPlayerSteam(client)) ReplaceString(sRawMsg, sizeof(sRawMsg), "{NOSTEAM}", " "); else ReplaceString(sRawMsg, sizeof(sRawMsg), "{NOSTEAM}", ""); @@ -293,8 +409,7 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) return; } - if (g_hCustomMessageFile2 != null) - CloseHandle(g_hCustomMessageFile2); + delete g_hCustomMessageFile2; g_hCustomMessageFile2 = CreateKeyValues("custom_messages"); @@ -310,60 +425,47 @@ public void TQueryCB2(Handle owner, Handle rs, const char[] error, any data) char sFinalMessage[512]; char sCustomMessage[256]; - - if (KvJumpToKey(g_hCustomMessageFile2, sAuth)) { KvGetString(g_hCustomMessageFile2, "banned", sBanned, sizeof(sBanned), ""); - - KvGetString(g_hCustomMessageFile2, "message", sCustomMessage, sizeof(sCustomMessage), ""); - if (StrEqual(sCustomMessage, "reset") || StrEqual(sBanned, "true")) + if(StrEqual(sCustomMessage, "reset") || StrEqual(sBanned, "true")) + { CPrintToChatAll(sRawMsg); + for(int i = 1; i <= MaxClients; i++) + { + if(!g_bHideCsays[i] && IsClientInGame(i)) + { + PrintCenterText(i, "%s %s %s", "[VIP]", sName, "connected"); + } + } + } else { Format(sFinalMessage, sizeof(sFinalMessage), "%s %s", sRawMsg, sCustomMessage); CPrintToChatAll(sFinalMessage); + for(int i = 1; i <= MaxClients; i++) + { + if(!g_bHideCsays[i] && IsClientInGame(i)) + { + CRemoveTags(sCustomMessage, 256); + PrintCenterText(i, "%s %s %s %s", "[VIP]", sName, "connected", sCustomMessage); + } + } } } else + { CPrintToChatAll(sRawMsg); - + for(int i = 1; i <= MaxClients; i++) + { + if(!g_bHideCsays[i] && IsClientInGame(i)) + { + PrintCenterText(i, "%s %s %s", "[VIP]", sName, "connected"); + } + } + } } - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void TQueryCB(Handle owner, Handle rs, const char[] error, any data) -{ - int client = 0; - - if ((client = GetClientOfUserId(data)) == 0) - { - return; - } - - if (rs == null) - { - LogError("Database Error: null result"); - return; - } - - int iPlayerId = -1; - if (SQL_GetRowCount(rs) > 0) - { - int iField; - SQL_FetchRow(rs); - SQL_FieldNameToNum(rs, "playerId", iField); - iPlayerId = SQL_FetchInt(rs, iField); - - } - char sQuery[1024]; - Format(sQuery, sizeof(sQuery), "SELECT T1.playerid, T1.skill, T2.rank FROM hlstats_Players T1 LEFT JOIN (SELECT skill, (@v_id := @v_Id + 1) AS rank FROM (SELECT DISTINCT skill FROM hlstats_Players WHERE game = 'css-ze' ORDER BY skill DESC) t, (SELECT @v_id := 0) r) T2 ON T1.skill = T2.skill WHERE game = 'css-ze' AND playerId = %d ORDER BY skill DESC" ,iPlayerId); - SQL_TQuery(g_hDatabase, TQueryCB2, sQuery, GetClientUserId(client)); - -} - //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -372,15 +474,18 @@ public void OnClientPostAdminCheck(int client) if(IsFakeClient(client)) return; - char error[255]; + if(g_hDatabase == INVALID_HANDLE) + return; + static char sAuth[32]; GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); strcopy(sAuth, sizeof(sAuth), sAuth[8]); + char sServer[16]; + g_cvHlstatsServerName.GetString(sServer, sizeof(sServer)); - char sQuery[255]; - Format(sQuery, sizeof(sQuery), "SELECT * FROM hlstats_PlayerUniqueIds WHERE uniqueId = '%s' AND game = 'css-ze'", sAuth); - //PrintToChatAll(sQuery); - SQL_TQuery(g_hDatabase, TQueryCB, sQuery, GetClientUserId(client)); -} + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = '%s' AND hideranking = 0 AND skill > (SELECT skill from hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId WHERE uniqueId = '%s' AND hlstats_PlayerUniqueIds.game = '%s')", sServer, sAuth, sServer); + g_hDatabase.Query(TQueryCB, sQuery, GetClientUserId(client)); +} \ No newline at end of file diff --git a/ConnectAnnounce/scripting/ConnectAnnounceNewPlayers.sp b/ConnectAnnounce/scripting/ConnectAnnounceNewPlayers.sp new file mode 100644 index 00000000..e1283235 --- /dev/null +++ b/ConnectAnnounce/scripting/ConnectAnnounceNewPlayers.sp @@ -0,0 +1,217 @@ +#pragma semicolon 1 + +#include +#include +#include + +bool g_bNewPlayer[MAXPLAYERS + 1] = { false, ... }; +bool g_bNewPlayerChatBlock[MAXPLAYERS + 1] = { false, ...}; + +ConVar g_cvServerType; +char g_cServerMessage[128]; + +Database g_hDatabase; + +public Plugin myinfo = +{ + name = "ConnectAnnounceNewPlayers", + author = "Dogan", + description = "Connect Announcer for new Players", + version = "1.3.0", + url = "" +} + +public void OnPluginStart() +{ + Database.Connect(SQL_OnDatabaseConnect, "unloze_newplayers"); + + g_cvServerType = CreateConVar("sm_server_type", "1", "Server related private message for new players: 1 = ze; 2 = mg; 3 = zr; any other value = neutral"); + + AddMultiTargetFilter("@newplayer", Filter_NewPlayers, "New Players", false); + RegConsoleCmd("sm_newplayer", Command_DisplayNewPlayers, "Shows the number of new players"); + + AutoExecConfig(true, "plugin.ConnectAnnounceNewPlayers"); + GetConVars(); +} + +public void OnPluginEnd() +{ + RemoveMultiTargetFilter("@newplayer", Filter_NewPlayers); +} + +public void GetConVars() +{ + if(g_cvServerType.IntValue == 1) + { + g_cServerMessage = "Zombie Escape"; + } + else if(g_cvServerType.IntValue == 2) + { + g_cServerMessage = "Minigames"; + } + else if(g_cvServerType.IntValue == 3) + { + g_cServerMessage = "Zombie Riot"; + } + else + { + g_cServerMessage = ""; + } +} + +public void ConVarChange(ConVar convar, char[] oldValue, char[] newValue) +{ + GetConVars(); +} + +public bool Filter_NewPlayers(const char[] sPattern, Handle hClients) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(g_bNewPlayer[i]) + PushArrayCell(hClients, i); + } + } + return true; +} + +public Action Command_DisplayNewPlayers(int client, int args) +{ + char aBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(g_bNewPlayer[i]) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + } + } + + if(strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + ReplyToCommand(client, "[SM] New Players online: %s", aBuf); + } + else + ReplyToCommand(client, "[SM] New Players online: none"); + + return Plugin_Handled; +} + +public void OnClientPostAdminCheck(int client) +{ + if(IsFakeClient(client) || IsClientSourceTV(client)) + return; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM connections WHERE auth='%s'", sAuthID); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, GetClientSerial(client), DBPrio_Low); +} + +public void SQL_OnDatabaseConnect(Database db, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Database error: %s", error); + return; + } + + g_hDatabase = db; + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS connections (`auth` varchar(32))"); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low); +} + +public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Query error: %s", error); + return; + } + + int client; + if ((client = GetClientFromSerial(data)) == 0) + return; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(results.RowCount && results.FetchRow()) + { + int iFieldNum; + char sResultAddress[32]; + results.FieldNameToNum("auth", iFieldNum); + results.FetchString(iFieldNum, sResultAddress, sizeof(sResultAddress)); + + if(StrEqual(sAuthID, sResultAddress, true)) + return; + } + + g_bNewPlayer[client] = true; + g_bNewPlayerChatBlock[client] = true; + NewPlayerMessage(client); + CreateTimer(10.0, BlockChat, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "INSERT INTO connections (auth) VALUES ('%s')" , sAuthID); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low); +} + +public Action NewPlayerMessage(int client) +{ + CPrintToChatAll("{cyan}Player {lightgreen}%N {cyan}has just connected to an UNLOZE Server for the first time! Welcome!", client); + if(g_cvServerType.IntValue >= 1 && g_cvServerType.IntValue <= 3) + { + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{cyan}Hi {lightgreen}%N{cyan}. Welcome to the {blueviolet}Unloze %s Server{cyan}! We hope you enjoy your stay here and add our server to your favorites. Make sure to check out our website at {blueviolet}www.unloze.com{cyan}.", client, g_cServerMessage); + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{purple}****************************************************"); + } + else + { + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{cyan}Hi {lightgreen}%N. Welcome to this {blueviolet}Unloze Server{cyan}! We hope you enjoy your stay here and add our server to your favorites. Make sure to check out our website at {blueviolet}www.unloze.com{cyan}.", client); + CPrintToChat(client, "{purple}****************************************************"); + CPrintToChat(client, "{purple}****************************************************"); + } +} + +public void OnClientDisconnect(int client) +{ + g_bNewPlayer[client] = false; + g_bNewPlayerChatBlock[client] = false; +} + +public Action BlockChat(Handle timer, int serialid) +{ + int client; + if ((client = GetClientFromSerial(serialid)) == 0) + return; + + g_bNewPlayerChatBlock[client] = false; +} + +public Action CCC_OnChatMessage(int client, int author, const char[] message) +{ + if(g_bNewPlayerChatBlock[client]) + return Plugin_Handled; + + return Plugin_Continue; +} \ No newline at end of file diff --git a/CrowdSpawnAndFailNadeWarning/scripting/CrowdSpawnAndFailNadeWarning.sp b/CrowdSpawnAndFailNadeWarning/scripting/CrowdSpawnAndFailNadeWarning.sp index 4de8b65c..50628f01 100644 --- a/CrowdSpawnAndFailNadeWarning/scripting/CrowdSpawnAndFailNadeWarning.sp +++ b/CrowdSpawnAndFailNadeWarning/scripting/CrowdSpawnAndFailNadeWarning.sp @@ -71,9 +71,9 @@ public Action OnRoundStartPostCrowdSpawn(Handle timer) { if (!GetConVarBool(FindConVar("zr_infect_mzombie_respawn")) && GetConVarBool(g_cvCrowdSpawnWarningEnabled)) { - CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans!!!"); - CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans!!!"); - CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans!!!"); + CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans !!!"); + CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans !!!"); + CPrintToChatAll("{red}[WARNING] {white}Zombies will be spawning {red}inbetween {white}the humans !!!"); } } diff --git a/Discord/scripting/Discord.sp b/Discord/scripting/Discord.sp index c2b28dbc..c4f55a95 100644 --- a/Discord/scripting/Discord.sp +++ b/Discord/scripting/Discord.sp @@ -8,7 +8,6 @@ #include "sdktools_functions.inc" #include -#include #pragma newdecls required diff --git a/FakeMapname/scripting/FakeMapname.sp b/FakeMapname/scripting/FakeMapname.sp new file mode 100644 index 00000000..306f2402 --- /dev/null +++ b/FakeMapname/scripting/FakeMapname.sp @@ -0,0 +1,65 @@ +#include +#include + +#pragma semicolon 1 +#pragma newdecls required + +char g_sMapname[64]; + +public Plugin myinfo = +{ + name = "FakeMapname", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnGameFrame() +{ + SteamWorks_SetMapName(g_sMapname); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + RegAdminCmd("sm_fakemap", Command_FakeMap, ADMFLAG_RCON, ""); + RegAdminCmd("sm_resetfakemap", Command_ResetFakeMap, ADMFLAG_RCON, ""); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + GetCurrentMap(g_sMapname, sizeof(g_sMapname)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_FakeMap(int client, int argc) +{ + GetCmdArgString(g_sMapname, sizeof(g_sMapname)); + ReplyToCommand(client, "[SM] Changed Mapname to \"%s\".", g_sMapname); + PrintToChatAll("[SM] %N changed Mapname to \"%s\".", client, g_sMapname); + LogAction(client, -1, "\"%L\" changed Mapname to \"%s\".", client, g_sMapname); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ResetFakeMap(int client, int argc) +{ + GetCurrentMap(g_sMapname, sizeof(g_sMapname)); + ReplyToCommand(client, "[SM] Mapname got reset."); + PrintToChatAll("[SM] %N reset Mapname to \"%s\".", client, g_sMapname); + LogAction(client, -1, "\"%L\" reset Mapname to \"%s\".", client, g_sMapname); + return Plugin_Handled; +} \ No newline at end of file diff --git a/FixGloves/scripting/FixGloves.sp b/FixGloves/scripting/FixGloves.sp new file mode 100644 index 00000000..0c4d2e79 --- /dev/null +++ b/FixGloves/scripting/FixGloves.sp @@ -0,0 +1,83 @@ +#pragma newdecls required + +#include +#include +#include +#include + +#define ARMS_MODEL_T "models/weapons/v_models/arms/glove_hardknuckle/v_glove_hardknuckle_black.mdl" +#define ARMS_MODEL_CT "models/weapons/v_models/arms/glove_hardknuckle/v_glove_hardknuckle_black.mdl" + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Fix Invisible Gloves", + author = "zaCade", + description = "Feex more volvo bullshiet!", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + if(GetEngineVersion() != Engine_CSGO) + { + strcopy(error, err_max, "This plugin is only required on CS:GO!"); + return APLRes_Failure; + } + + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + for (int iClient = 1; iClient <= MaxClients; iClient++) + { + if (IsClientInGame(iClient)) + { + OnClientPutInServer(iClient); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + PrecacheModel(ARMS_MODEL_T); + PrecacheModel(ARMS_MODEL_CT); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPutInServer(int iClient) +{ + SDKHook(iClient, SDKHook_SpawnPost, OnSpawnPost); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnSpawnPost(int iClient) +{ + if(!IsClientInGame(iClient) || IsClientObserver(iClient) || !IsPlayerAlive(iClient)) + return; + + if (GetEntPropEnt(iClient, Prop_Send, "m_hMyWearables") == INVALID_ENT_REFERENCE) + { + switch(GetClientTeam(iClient)) + { + case CS_TEAM_T: SetEntPropString(iClient, Prop_Send, "m_szArmsModel", ARMS_MODEL_T); + case CS_TEAM_CT: SetEntPropString(iClient, Prop_Send, "m_szArmsModel", ARMS_MODEL_CT); + } + } +} \ No newline at end of file diff --git a/ForceConvars/scripting/ForceConvars.sp b/ForceConvars/scripting/ForceConvars.sp new file mode 100644 index 00000000..c7357dd5 --- /dev/null +++ b/ForceConvars/scripting/ForceConvars.sp @@ -0,0 +1,57 @@ +#pragma newdecls required + +#include + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Force ConVars", + author = "zaCade", + description = "Force ConVars to specific values.", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + if(GetEngineVersion() != Engine_CSGO) + { + strcopy(error, err_max, "This plugin is only required on CS:GO!"); + return APLRes_Failure; + } + + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + RegServerCmd("sm_forcevar", Command_ForceCVar); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ForceCVar(int args) +{ + char sArguments[2][128]; + GetCmdArg(1, sArguments[0], sizeof(sArguments[])); + GetCmdArg(2, sArguments[1], sizeof(sArguments[])); + + ConVar CVar; + if ((CVar = FindConVar(sArguments[0])) != null) + { + float fValue = StringToFloat(sArguments[1]); + + CVar.SetBounds(ConVarBound_Lower, true, fValue); + CVar.SetBounds(ConVarBound_Upper, true, fValue); + + CVar.SetFloat(fValue, true, false); + } +} \ No newline at end of file diff --git a/HappyHour/scripting/HappyHour.sp b/HappyHour/scripting/HappyHour.sp new file mode 100644 index 00000000..c6dff385 --- /dev/null +++ b/HappyHour/scripting/HappyHour.sp @@ -0,0 +1,226 @@ +#pragma semicolon 1 + +#include +#include +#include + +bool g_bHappyHour; +bool g_bHappyHourAdmin; + +int g_iMorningStart; +int g_iMorningEnd; +int g_iNightStart; +int g_iNightEnd; +float g_fMessageTimer; + +Handle g_h_MessageTimer; + +public Plugin myinfo = +{ + name = "Happy Hour", + author = "Dogan + Neon", + description = "Create an happy hour with more rank points", + version = "1.3.0", + url = "" +}; + +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + CreateNative("HH_IsItHappyHour", Native_IsItHappyHour); + RegPluginLibrary("HappyHour"); + + return APLRes_Success; +} + +public void OnPluginStart() +{ + g_bHappyHour = false; + g_bHappyHourAdmin = false; + + CreateTimer(15.0, Timer_CheckTime, _, TIMER_REPEAT); + + ConVar cvar; + HookConVarChange((cvar = CreateConVar("sm_happyhour_morning_start", "1000", "starttime of happy hour in the morning (timezone UTC+1 in summer, UTC+2 in winter)")), g_cvMorningStart); + g_iMorningStart = cvar.IntValue; + + HookConVarChange((cvar = CreateConVar("sm_happyhour_morning_end", "1400", "endtime of happy hour in the morning/afternoon (timezone UTC+1 in summer, UTC+2 in winter)")), g_cvMorningEnd); + g_iMorningEnd = cvar.IntValue; + + HookConVarChange((cvar = CreateConVar("sm_happyhour_night_start", "2300", "starttime of happy hour in the night (timezone UTC+1 in summer, UTC+2 in winter)")), g_cvNightStart); + g_iNightStart = cvar.IntValue; + + HookConVarChange((cvar = CreateConVar("sm_happyhour_night_end", "0300", "endtime of happy hour in the night (timezone UTC+1 in summer, UTC+2 in winter)")), g_cvNightEnd); + g_iNightEnd = cvar.IntValue; + + HookConVarChange((cvar = CreateConVar("sm_happyhour_message_interval", "60.0", "interval for repetetive message of happy hour in chat")), g_cvMessageTimer); + g_fMessageTimer = cvar.FloatValue; + delete cvar; + + RegConsoleCmd("sm_hh", Command_DisplayHappyHour, "Shows if happy hour is currently enabled or not"); + + RegAdminCmd("sm_forcehh", AdminCommand_HappyHour, ADMFLAG_GENERIC, "Toggle to enable/disable Happy Hour. Resets after Mapswitch."); + + AutoExecConfig(true, "plugin.HappyHour"); +} + +public void g_cvMorningStart(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iMorningStart = convar.IntValue; +} + +public void g_cvMorningEnd(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iMorningEnd = convar.IntValue; +} + +public void g_cvNightStart(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iNightStart = convar.IntValue; +} + +public void g_cvNightEnd(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iNightEnd = convar.IntValue; +} + +public void g_cvMessageTimer(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fMessageTimer = convar.FloatValue; + + delete g_h_MessageTimer; + + g_h_MessageTimer = CreateTimer(g_fMessageTimer, MessageHappyHour, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +public Action Timer_CheckTime(Handle timer) +{ + if(g_bHappyHourAdmin) + return Plugin_Continue; + + if((InsideTimeFrame(g_iMorningStart, g_iMorningEnd) == 0) || (InsideTimeFrame(g_iNightStart, g_iNightEnd) == 0)) + { + g_bHappyHour = true; + } + else + { + g_bHappyHour = false; + } + + return Plugin_Continue; +} + +public int InsideTimeFrame(int MinTime, int MaxTime) +{ + char sTime[8]; + FormatTime(sTime, sizeof(sTime), "%H%M"); + + int CurTime = StringToInt(sTime); + + //Wrap around. + CurTime = (CurTime <= MinTime) ? CurTime + 2400 : CurTime; + MaxTime = (MaxTime <= MinTime) ? MaxTime + 2400 : MaxTime; + + if (MinTime <= CurTime <= MaxTime) + { + return 0; + } + else + { + //Wrap around. + MinTime = (MinTime <= CurTime) ? MinTime + 2400 : MinTime; + MinTime = (MinTime <= MaxTime) ? MinTime + 2400 : MinTime; + + // Convert our 'time' to minutes. + CurTime = (RoundToFloor(float(CurTime / 100)) * 60) + (CurTime % 100); + MinTime = (RoundToFloor(float(MinTime / 100)) * 60) + (MinTime % 100); + MaxTime = (RoundToFloor(float(MaxTime / 100)) * 60) + (MaxTime % 100); + + return MinTime - CurTime; + } +} + +public void OnMapStart() +{ + if(g_bHappyHourAdmin) + { + g_bHappyHourAdmin = false; + } + + g_h_MessageTimer = CreateTimer(g_fMessageTimer, MessageHappyHour, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +public Action Command_DisplayHappyHour(int client, int args) +{ + if(g_bHappyHour) + { + ReplyToCommand(client, "[SM] Happy Hour is currently active."); + } + else + { + int iTimeleftMorning = InsideTimeFrame(g_iMorningStart, g_iMorningEnd); + int iTimeleftNight = InsideTimeFrame(g_iNightStart, g_iNightEnd); + int iTimeleft; + char sTimeleft[32]; + + if(iTimeleftMorning >= iTimeleftNight) + iTimeleft = iTimeleftNight; + else + iTimeleft = iTimeleftMorning; + + int iHours = (iTimeleft / 60) % 24; + int iMinutes = (iTimeleft % 60); + + if(iHours) + Format(sTimeleft, sizeof(sTimeleft), "%d Hours %02d Minutes", iHours, iMinutes); + else + Format(sTimeleft, sizeof(sTimeleft), "%d Minutes", iMinutes); + + ReplyToCommand(client, "[SM] Happy Hour is currently not active. Timeleft: %s.", sTimeleft); + } + + return Plugin_Handled; +} + +public Action AdminCommand_HappyHour(int client, int args) +{ + ToggleHappyHour(client); + return Plugin_Handled; +} + +public void ToggleHappyHour(int client) +{ + g_bHappyHourAdmin = !g_bHappyHourAdmin; + + if(g_bHappyHour) + { + g_bHappyHour = false; + + ReplyToCommand(client, "[SM] Deactivated Happy Hour."); + CPrintToChatAll("[SM] %N deactivated Happy Hour!", client); + LogAction(client, -1, "\"%L\" deactivated Happy Hour.", client); + } + else + { + g_bHappyHour = true; + + ReplyToCommand(client, "[SM] Activated Happy Hour."); + CPrintToChatAll("[SM] %N activated Happy Hour!", client); + LogAction(client, -1, "\"%L\" activated Happy Hour.", client); + } +} + +public Action MessageHappyHour(Handle timer) +{ + if(g_bHappyHour) + CPrintToChatAll("{cyan}[UNLOZE] {red}Happy Hour {cyan}is currently active! Everyone gets 50%% Bonus on most rank points!"); + + return Plugin_Continue; +} + +public int Native_IsItHappyHour(Handle hPlugin, int numParams) +{ + if(g_bHappyHour) + return true; + + return false; +} \ No newline at end of file diff --git a/HappyHour/scripting/include/HappyHour.inc b/HappyHour/scripting/include/HappyHour.inc new file mode 100644 index 00000000..729fc3db --- /dev/null +++ b/HappyHour/scripting/include/HappyHour.inc @@ -0,0 +1,33 @@ +#if defined _HappyHour_included + #endinput +#endif + +#define _HappyHour_included + +/** + * Check if it is Happy Hour or not + * + * + * @return True if yes, false if no. + */ +native bool HH_IsItHappyHour(); + + +public SharedPlugin __pl_HappyHour = +{ + name = "HappyHour", + file = "HappyHour.smx", + + #if defined REQUIRE_PLUGIN + required = 1 + #else + required = 0 + #endif +}; + +#if !defined REQUIRE_PLUGIN + public void __pl_HappyHour_SetNTVOptional() + { + MarkNativeAsOptional("HH_IsItHappyHour"); + } +#endif diff --git a/Hide/scripting/Hide.sp b/Hide/scripting/Hide.sp new file mode 100644 index 00000000..3be3bf82 --- /dev/null +++ b/Hide/scripting/Hide.sp @@ -0,0 +1,203 @@ +#include +#include +#include +#include + +/* BOOLS */ +bool g_bHideEnabled; +bool g_bHidePlayers[MAXPLAYERS+1][MAXPLAYERS+1]; + +/* INTEGERS */ +int g_iHideDistance[MAXPLAYERS+1]; + +/* CONVARS */ +ConVar g_hCVar_HideEnabled; +ConVar g_hCVar_HideMinimumDistance; +ConVar g_hCVar_HideMaximumDistance; +ConVar g_hCVar_HideDefaultDistance; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Hide Teammates", + author = "Neon", + description = "A plugin that can !hide teammates with individual distances", + version = "1.0.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + + g_hCVar_HideEnabled = CreateConVar("sm_hide_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_HideMinimumDistance = CreateConVar("sm_hide_minimum_distance", "10", "", FCVAR_NONE, true, 1.0); + g_hCVar_HideMaximumDistance = CreateConVar("sm_hide_maximum_distance", "50000", "", FCVAR_NONE, true, 1.0); + g_hCVar_HideDefaultDistance = CreateConVar("sm_hide_default_distance", "10000", "", FCVAR_NONE, true, 1.0); + g_bHideEnabled = g_hCVar_HideEnabled.BoolValue; + g_hCVar_HideEnabled.AddChangeHook(OnConVarChanged); + + + RegAdminCmd("sm_hide", Command_Hide, ADMFLAG_RCON); + + for(int client = 1; client <= MaxClients; client++) + { + if(IsClientInGame(client)) + OnClientPutInServer(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + CreateTimer(0.3, UpdateHide, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_bHideEnabled = convar.BoolValue; + + for(int client = 1; client <= MaxClients; client++) + { + for(int target = 1; target <= MaxClients; target++) + g_bHidePlayers[client][target] = false; + + if(IsClientInGame(client)) + { + if(g_bHideEnabled) + SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit); + else + SDKUnhook(client, SDKHook_SetTransmit, Hook_SetTransmit); + } + } + + if(g_bHideEnabled) + CPrintToChatAll("{cyan}[Hide] {white}has been allowed."); + else + CPrintToChatAll("{cyan}[Hide] {white}has been disabled."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPutInServer(int client) +{ + if(!g_bHideEnabled) + return; + + SDKHook(client, SDKHook_SetTransmit, Hook_SetTransmit); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_iHideDistance[client] = 0; + for(int target = 1; target <= MaxClients; target++) + { + g_bHidePlayers[client][target] = false; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Hide(int client, int args) +{ + if(!g_bHideEnabled) + { + ReplyToCommand(client, "[Hide] is currently not allowed."); + return Plugin_Handled; + } + + int iDistance; + + if(args == 0) + { + if(g_iHideDistance[client]) + { + g_iHideDistance[client] = 0; + ReplyToCommand(client, "[Hide] is now disabled."); + return Plugin_Handled; + } + else + iDistance = g_hCVar_HideDefaultDistance.IntValue; + } + else + { + char sArgs[8]; + GetCmdArg(1, sArgs, sizeof(sArgs)); + iDistance = StringToInt(sArgs); + } + + if((iDistance == 0) || (iDistance < g_hCVar_HideMinimumDistance.IntValue) || (iDistance > g_hCVar_HideMaximumDistance.IntValue)) + { + ReplyToCommand(client, "[Hide] Wrong input! Allowed range: %d-%d", g_hCVar_HideMinimumDistance.IntValue, g_hCVar_HideMaximumDistance.IntValue); + return Plugin_Handled; + } + + g_iHideDistance[client] = iDistance; + ReplyToCommand(client, "[Hide] Humans within range %d are now hidden.", g_iHideDistance[client]); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action UpdateHide(Handle timer) +{ + if(!g_bHideEnabled) + return Plugin_Continue; + + for(int client = 1; client <= MaxClients; client++) + { + if(!g_iHideDistance[client]) + continue; + + if(!IsClientInGame(client) || !IsPlayerAlive(client) || !ZR_IsClientHuman(client)) + continue; + + float fOriginClient[3]; + float fOriginTarget[3]; + + for(int target = 1; target <= MaxClients; target++) + { + if(target != client && IsClientInGame(target) && IsPlayerAlive(target) && ZR_IsClientHuman(target)) + { + GetClientAbsOrigin(target, fOriginTarget); + GetClientAbsOrigin(client, fOriginClient); + if(GetVectorDistance(fOriginTarget, fOriginClient, true) < float(g_iHideDistance[client])) + g_bHidePlayers[client][target] = true; + else + g_bHidePlayers[client][target] = false; + } + else + g_bHidePlayers[client][target] = false; + } + } + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Hook_SetTransmit(int target, int client) +{ + if(!g_bHideEnabled) + return Plugin_Continue; + + if(g_bHidePlayers[client][target]) + return Plugin_Handled; + + return Plugin_Continue; +} \ No newline at end of file diff --git a/HostnameManager/scripting/HostnameManager.sp b/HostnameManager/scripting/HostnameManager.sp new file mode 100644 index 00000000..d1b9163e --- /dev/null +++ b/HostnameManager/scripting/HostnameManager.sp @@ -0,0 +1,154 @@ +#pragma semicolon 1 + +#include + +#undef REQUIRE_PLUGIN +#include +#include +#define REQUIRE_PLUGIN + +#pragma newdecls required + +ConVar g_cvClasses; +ConVar g_cvHostname; +ConVar g_cvFormattedHostname; + +bool g_bHHLoaded; +bool g_bNemesis; +bool g_bSDLoaded; + + +public Plugin myinfo = +{ + name = "HostnameManager", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- + +public void OnPluginStart() +{ + g_cvHostname = FindConVar("hostname"); + g_cvFormattedHostname = CreateConVar("sm_hostname_format", "{HH}UNLOZE | {GM} | NoSteam{SD}", "HH = HappyHour, , GM = GameMode, SD = StageDisplay"); + + CreateTimer(60.0, TimerRepeat, INVALID_HANDLE, TIMER_REPEAT); + + HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnAllPluginsLoaded() +{ + g_bHHLoaded = LibraryExists("HappyHour"); + g_bSDLoaded = LibraryExists("StageDisplay"); + + if((g_cvClasses = FindConVar("zr_config_path_playerclasses")) == INVALID_HANDLE) + SetFailState("Failed to find zr_config_path_playerclasses cvar."); + + char sFile[PLATFORM_MAX_PATH]; + g_cvClasses.GetString(sFile, sizeof(sFile)); + OnClassesPathChange(g_cvClasses, "", sFile); + + HookConVarChange(g_cvClasses, OnClassesPathChange); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryAdded(const char[] sName) +{ + if (strcmp(sName, "HappyHour", false) == 0) + g_bHHLoaded = true; + + if (strcmp(sName, "StageDisplay", false) == 0) + g_bSDLoaded = true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryRemoved(const char[] sName) +{ + if (strcmp(sName, "HappyHour", false) == 0) + g_bHHLoaded = false; + + if (strcmp(sName, "StageDisplay", false) == 0) + g_bSDLoaded = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + CreateTimer(5.0, TimerRoundStart, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action TimerRoundStart(Handle timer) +{ + RefreshHostname(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action TimerRepeat(Handle timer) +{ + RefreshHostname(); + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void RefreshHostname() +{ + char sFormattedHostname[128]; + g_cvFormattedHostname.GetString(sFormattedHostname, sizeof(sFormattedHostname)); + + if (g_bHHLoaded && HH_IsItHappyHour()) + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{HH}", "[HappyHour] ", true); + else + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{HH}", "", true); + + char sStage[64]; + if (g_bSDLoaded && SD_GetStage(sStage, sizeof(sStage))) + { + Format(sStage, sizeof(sStage), " | Stage: [%s]", sStage); + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{SD}", sStage, true); + } + else + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{SD}", "", true); + + if (g_bNemesis) + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{GM}", "Nemesis Zombie Escape", true); + else + ReplaceString(sFormattedHostname, sizeof(sFormattedHostname), "{GM}", "Zombie Escape", true); + + g_cvHostname.SetString(sFormattedHostname, false, false); +} + + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClassesPathChange(ConVar convar, const char[] oldValue, const char[] newValue) +{ + char sFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sFile, sizeof(sFile), "%s", newValue); + + if (StrContains(sFile, "nemesis", false) != -1) + g_bNemesis = true; + else + g_bNemesis = false; +} diff --git a/entWatch/cfg/sourcemod/entwatch/colors/color_classic.cfg b/ItemSpawn/cfg/sourcemod/entwatch/colors/color_classic.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/color_classic.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/colors/color_classic.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/colors/color_crayon.cfg b/ItemSpawn/cfg/sourcemod/entwatch/colors/color_crayon.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/color_crayon.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/colors/color_crayon.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/colors/color_css.cfg b/ItemSpawn/cfg/sourcemod/entwatch/colors/color_css.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/color_css.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/colors/color_css.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/colors/color_fairyfloss.cfg b/ItemSpawn/cfg/sourcemod/entwatch/colors/color_fairyfloss.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/color_fairyfloss.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/colors/color_fairyfloss.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/colors/color_midnight.cfg b/ItemSpawn/cfg/sourcemod/entwatch/colors/color_midnight.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/color_midnight.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/colors/color_midnight.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/colors/template.txt b/ItemSpawn/cfg/sourcemod/entwatch/colors/template.txt similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/colors/template.txt rename to ItemSpawn/cfg/sourcemod/entwatch/colors/template.txt diff --git a/entWatch/cfg/sourcemod/entwatch/maps/template.txt b/ItemSpawn/cfg/sourcemod/entwatch/maps/template.txt similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/template.txt rename to ItemSpawn/cfg/sourcemod/entwatch/maps/template.txt diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_FFVII_temple_ancient_v3_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_FFVII_temple_ancient_v3_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_FFVII_temple_ancient_v3_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_FFVII_temple_ancient_v3_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_Genso_Of_Last_v2_2fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_Genso_Of_Last_v2_2fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_Genso_Of_Last_v2_2fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_Genso_Of_Last_v2_2fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_Infected_Sewers_v6_5.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_Infected_Sewers_v6_5.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_Infected_Sewers_v6_5.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_Infected_Sewers_v6_5.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_LOTR_Isengard_v2_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_LOTR_Isengard_v2_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_LOTR_Isengard_v2_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_LOTR_Isengard_v2_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_S_A_M_a40_css.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_S_A_M_a40_css.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_S_A_M_a40_css.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_S_A_M_a40_css.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_abandoned_project_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_abandoned_project_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_abandoned_project_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_abandoned_project_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_alien_shooter_v5_4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_alien_shooter_v5_4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_alien_shooter_v5_4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_alien_shooter_v5_4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_alien_vs_predator_v5.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_alien_vs_predator_v5.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_alien_vs_predator_v5.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_alien_vs_predator_v5.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test25.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test25.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test25.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test25.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test27.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test27.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test27.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ancient_wrath_v2_test27.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_antartika_b2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_antartika_b2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_antartika_b2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_antartika_b2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ashen_keep_v0_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ashen_keep_v0_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ashen_keep_v0_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ashen_keep_v0_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_atix_extinction_b7.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_atix_extinction_b7.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_atix_extinction_b7.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_atix_extinction_b7.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_avalanche_reboot_beta7.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_avalanche_reboot_beta7.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_avalanche_reboot_beta7.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_avalanche_reboot_beta7.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_avp_v2si20.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_avp_v2si20.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_avp_v2si20.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_avp_v2si20.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_bathroom_v2_5s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_bathroom_v2_5s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_bathroom_v2_5s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_bathroom_v2_5s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard2_rpd_v4e_004.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard2_rpd_v4e_004.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard2_rpd_v4e_004.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard2_rpd_v4e_004.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard_manor_v4a_004.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard_manor_v4a_004.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard_manor_v4a_004.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard_manor_v4a_004.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard_v2b_004.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard_v2b_004.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_biohazard_v2b_004.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_biohazard_v2b_004.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_boredom_v543656.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_boredom_v543656.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_boredom_v543656.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_boredom_v543656.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_bowser_in_the_fire_sea_v1e.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_bowser_in_the_fire_sea_v1e.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_bowser_in_the_fire_sea_v1e.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_bowser_in_the_fire_sea_v1e.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_castlevania_v1_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_castlevania_v1_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_castlevania_v1_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_castlevania_v1_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_christmas_beta3f.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_christmas_beta3f.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_christmas_beta3f.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_christmas_beta3f.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_christmas_infection_v2_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_christmas_infection_v2_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_christmas_infection_v2_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_christmas_infection_v2_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_chroma_v0_4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_chroma_v0_4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_chroma_v0_4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_chroma_v0_4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_crashbandicoot_v1fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_crashbandicoot_v1fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_crashbandicoot_v1fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_crashbandicoot_v1fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_cyberderp_v1_4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_cyberderp_v1_4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_cyberderp_v1_4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_cyberderp_v1_4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_dark_souls_ptd_v0_4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dark_souls_ptd_v0_4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_dark_souls_ptd_v0_4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dark_souls_ptd_v0_4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_deadcore_s6.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_deadcore_s6.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_deadcore_s6.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_deadcore_s6.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_death_star_escape_v4_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_death_star_escape_v4_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_death_star_escape_v4_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_death_star_escape_v4_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_doom3_v1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom3_v1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_doom3_v1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom3_v1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_doom_v1_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom_v1_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_doom_v1_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom_v1_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_doom_v1_1_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom_v1_1_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_doom_v1_1_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doom_v1_1_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v4_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v4_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v4_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v4_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v5_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v5_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v5_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_doorhug_and_solo_v5_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_dreamin_v1_8s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dreamin_v1_8s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_dreamin_v1_8s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dreamin_v1_8s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_dreamin_v2_1s_fix4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dreamin_v2_1s_fix4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_dreamin_v2_1s_fix4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_dreamin_v2_1s_fix4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_eden_a3s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_eden_a3s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_eden_a3s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_eden_a3s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_evernight_a3_4_css2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_evernight_a3_4_css2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_evernight_a3_4_css2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_evernight_a3_4_css2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_fapescape_rote_v1_3f.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_fapescape_rote_v1_3f.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_fapescape_rote_v1_3f.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_fapescape_rote_v1_3f.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_fapescape_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_fapescape_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_fapescape_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_fapescape_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v5fix_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v5fix_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v5fix_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_cosmo_canyon_v5fix_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v1_4_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v1_4_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v1_4_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v1_4_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v3_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v3_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v3_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v3_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v5_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v5_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v5_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v5_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v6_b08.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v6_b08.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v6_b08.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_reactor_v6_b08.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_russianversion18.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_russianversion18.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_russianversion18.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffvii_mako_russianversion18.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_a2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_a2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_a2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_a2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_b3_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_b3_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_b3_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_feywood_b3_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_paramina_rift_v1_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_paramina_rift_v1_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_paramina_rift_v1_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_paramina_rift_v1_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_ridorana_cataract_t3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_ridorana_cataract_t3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_ridorana_cataract_t3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_ridorana_cataract_t3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v2d.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v2d.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v2d.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v2d.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v5_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v5_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v5_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v5_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v7_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v7_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v7_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v7_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v8beta6_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v8beta6_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v8beta6_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxii_westersand_v8beta6_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v4_5s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v4_5s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v4_5s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v4_5s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_1t2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_2f.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_2f.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_2f.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ffxiv_wanderers_palace_v5_2f.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_gods_wrath_v3_8b.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_gods_wrath_v3_8b.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_gods_wrath_v3_8b.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_gods_wrath_v3_8b.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_got_the_north_b2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_got_the_north_b2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_got_the_north_b2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_got_the_north_b2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_harry_potter_v1_3_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_harry_potter_v1_3_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_harry_potter_v1_3_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_harry_potter_v1_3_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_harry_potter_v2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_harry_potter_v2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_harry_potter_v2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_harry_potter_v2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_horizon_sky_escape_b1s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_horizon_sky_escape_b1s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_horizon_sky_escape_b1s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_horizon_sky_escape_b1s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_icecap_derp_unloze_v420.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_icecap_derp_unloze_v420.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_icecap_derp_unloze_v420.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_icecap_derp_unloze_v420.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_industrial_dejavu_v3_3_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_industrial_dejavu_v3_3_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_industrial_dejavu_v3_3_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_industrial_dejavu_v3_3_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_infected_tramway_v3_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_infected_tramway_v3_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_infected_tramway_v3_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_infected_tramway_v3_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_isla_nublar_v2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_isla_nublar_v2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_isla_nublar_v2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_isla_nublar_v2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_italy_town_v3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_italy_town_v3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_italy_town_v3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_italy_town_v3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_johnny_nukem_beta5.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_johnny_nukem_beta5.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_johnny_nukem_beta5.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_johnny_nukem_beta5.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_journey_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_journey_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_journey_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_journey_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_jungle_escape_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_jungle_escape_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_jungle_escape_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_jungle_escape_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_jurassic_park_story_v1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_jurassic_park_story_v1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_jurassic_park_story_v1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_jurassic_park_story_v1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_last_man_standing_b6.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_last_man_standing_b6.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_last_man_standing_b6.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_last_man_standing_b6.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_legoland_crackheads_v2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_legoland_crackheads_v2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_legoland_crackheads_v2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_legoland_crackheads_v2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lila_panic_escape_v3_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lila_panic_escape_v3_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lila_panic_escape_v3_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lila_panic_escape_v3_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_helms_deep_v5.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_helms_deep_v5.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_helms_deep_v5.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_helms_deep_v5.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v2_2fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v2_2fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v2_2fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v2_2fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_5.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_5.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_5.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_minas_tirith_v3_5.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mines_of_moria_v6_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mines_of_moria_v6_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mines_of_moria_v6_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mines_of_moria_v6_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v4_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v4_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v4_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_lotr_mount_doom_v4_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_m0w0m_a2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_m0w0m_a2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_m0w0m_a2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_m0w0m_a2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_madness_v2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_madness_v2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_madness_v2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_madness_v2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_meatropolis_v1_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_meatropolis_v1_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_meatropolis_v1_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_meatropolis_v1_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_a5_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_a5_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_a5_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_a5_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_a6_override.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_a6_override.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_a6_override.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_a6_override.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_override_a6.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_override_a6.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_megaman_override_a6.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_megaman_override_a6.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_memehell_test1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_memehell_test1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_memehell_test1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_memehell_test1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_minecraft_adventure_v1_2c.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_minecraft_adventure_v1_2c.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_minecraft_adventure_v1_2c.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_minecraft_adventure_v1_2c.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_mist_v1_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mist_v1_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_mist_v1_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mist_v1_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_moltentemple_a1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_moltentemple_a1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_moltentemple_a1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_moltentemple_a1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_moltentemple_p1t2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_moltentemple_p1t2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_moltentemple_p1t2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_moltentemple_p1t2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_bbo_v1fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_12a.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_12a.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_12a.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_12a.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_zy.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_zy.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_zy.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_mountain_escape_v5_zy.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v6_6c2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v6_6c2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v6_6c2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v6_6c2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v7_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v7_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v7_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paper_escaper_v7_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_paranoid_rezurrection_v11_9.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paranoid_rezurrection_v11_9.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_paranoid_rezurrection_v11_9.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_paranoid_rezurrection_v11_9.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pidaras_v1_4fix3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pidaras_v1_4fix3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pidaras_v1_4fix3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pidaras_v1_4fix3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pirates_port_royal_v3_6.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pirates_port_royal_v3_6.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pirates_port_royal_v3_6.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pirates_port_royal_v3_6.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v7_2s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v7_2s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v7_2s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v7_2s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v8_6s_fix2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v8_6s_fix2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v8_6s_fix2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v8_6s_fix2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9_1s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9_1s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9_1s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9_1s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9s_fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9s_fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9s_fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pkmn_adventure_v9s_fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_pokemon_adventure_v1_1s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pokemon_adventure_v1_1s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_pokemon_adventure_v1_1s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_pokemon_adventure_v1_1s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_portal_story_v3_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_portal_story_v3_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_portal_story_v3_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_portal_story_v3_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_potc_v3_4fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_potc_v3_4fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_potc_v3_4fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_potc_v3_4fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v1_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v1_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v1_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v1_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_predator_ultimate_v3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ravenholm_v035fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ravenholm_v035fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ravenholm_v035fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ravenholm_v035fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_rizomata_s1_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rizomata_s1_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_rizomata_s1_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rizomata_s1_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_7.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_7.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_7.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_7.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_8.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_8.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_8.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_8.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_9.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_9.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_9.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rooftop_madness_v1_9.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_rtcw_ominous_rumors_v1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rtcw_ominous_rumors_v1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_rtcw_ominous_rumors_v1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_rtcw_ominous_rumors_v1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_santassination_css2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_santassination_css2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_santassination_css2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_santassination_css2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_serpentis_escape_a12.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_serpentis_escape_a12.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_serpentis_escape_a12.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_serpentis_escape_a12.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_sg1_missions_v2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sg1_missions_v2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_sg1_missions_v2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sg1_missions_v2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_shaurma_v3_b06.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_shaurma_v3_b06.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_shaurma_v3_b06.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_shaurma_v3_b06.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_sit_caelum_paradisus_b7s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sit_caelum_paradisus_b7s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_sit_caelum_paradisus_b7s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sit_caelum_paradisus_b7s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_slender_escape_b4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_slender_escape_b4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_slender_escape_b4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_slender_escape_b4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v2_3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v2_3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v2_3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v2_3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v3c.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v3c.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v3c.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_stalker_ultimate_v3c.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_starwars_v2fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_starwars_v2fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_starwars_v2fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_starwars_v2fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_sunkentemple_v3_1s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sunkentemple_v3_1s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_sunkentemple_v3_1s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sunkentemple_v3_1s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_sunlight_v2_0.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sunlight_v2_0.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_sunlight_v2_0.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_sunlight_v2_0.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_super_mario64_a1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_super_mario64_a1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_super_mario64_a1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_super_mario64_a1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_surf_vortex_v1_9s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_surf_vortex_v1_9s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_surf_vortex_v1_9s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_surf_vortex_v1_9s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_temple_raider_b4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_temple_raider_b4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_temple_raider_b4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_temple_raider_b4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v2_2fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v2_2fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v2_2fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v2_2fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v4fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v4fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v4fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tesv_skyrim_v4fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix3.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix3.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix3.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix3.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tilex_ultimate_v2_13s_fix4.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_timesplitters_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_timesplitters_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_timesplitters_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_timesplitters_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_toaster_v1_2.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_toaster_v1_2.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_toaster_v1_2.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_toaster_v1_2.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_trials_v1fs.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_trials_v1fs.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_trials_v1fs.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_trials_v1fs.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_tyranny_v5fix.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tyranny_v5fix.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_tyranny_v5fix.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_tyranny_v5fix.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_ut2004_convoy_v2_2_1.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ut2004_convoy_v2_2_1.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_ut2004_convoy_v2_2_1.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_ut2004_convoy_v2_2_1.cfg diff --git a/entWatch/cfg/sourcemod/entwatch/maps/ze_v0u0v_a4.cfg b/ItemSpawn/cfg/sourcemod/entwatch/maps/ze_v0u0v_a4.cfg similarity index 100% rename from entWatch/cfg/sourcemod/entwatch/maps/ze_v0u0v_a4.cfg rename to ItemSpawn/cfg/sourcemod/entwatch/maps/ze_v0u0v_a4.cfg diff --git a/ItemSpawn/content/materials/models/Staff/staffofmagnus.vmt b/ItemSpawn/content/materials/models/Staff/staffofmagnus.vmt new file mode 100644 index 00000000..c8d5a5a7 --- /dev/null +++ b/ItemSpawn/content/materials/models/Staff/staffofmagnus.vmt @@ -0,0 +1,6 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/Staff/staffofmagnus" + "$nofog" 1 + "$model" "1" +} \ No newline at end of file diff --git a/ItemSpawn/content/materials/models/Staff/staffofmagnus.vtf b/ItemSpawn/content/materials/models/Staff/staffofmagnus.vtf new file mode 100644 index 00000000..a1dfc9b0 Binary files /dev/null and b/ItemSpawn/content/materials/models/Staff/staffofmagnus.vtf differ diff --git a/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vmt b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vmt new file mode 100644 index 00000000..45e4106a --- /dev/null +++ b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vmt @@ -0,0 +1,11 @@ +"VertexLitGeneric" +{ + + "$baseTexture" "models/barrel01b/Wood_Barrel01b" + "$surfaceprop" "wood_barrel" + + + + //"$basealphaenvmapmask" 1 + +} diff --git a/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vtf b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vtf new file mode 100644 index 00000000..cb6fbe65 Binary files /dev/null and b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b.vtf differ diff --git a/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_broken.vmt b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_broken.vmt new file mode 100644 index 00000000..7c4ddb16 --- /dev/null +++ b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_broken.vmt @@ -0,0 +1,10 @@ +"VertexLitGeneric" +{ + + "$baseTexture" "models/barrel01b/Wood_Barrel01b_No_Metal" + "$surfaceprop" "wood_barrel" + + + //"$basealphaenvmapmask" 1 + +} diff --git a/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_no_metal.vtf b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_no_metal.vtf new file mode 100644 index 00000000..40368ff1 Binary files /dev/null and b/ItemSpawn/content/materials/models/barrel01b/wood_barrel01b_no_metal.vtf differ diff --git a/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vmt b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vmt new file mode 100644 index 00000000..d5710245 --- /dev/null +++ b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vmt @@ -0,0 +1,22 @@ +"VertexLitGeneric" +{ + "$baseTexture" "Models/Dog_gondor/dog_sheet" + "$phong" "1" + "$phongboost" "5" + "$halflambert" "1" + + "$envmap" "env_cubemap" + "$envmaptint" "[.05 .05 .05]" + "$normalmapalphaenvmapmask" "1" + "$envmapfresnel" "1" + //"$phongexponent" "5" + "$phongexponenttexture" "Models/Dog_gondor/dog_sheet_phong" + "$phongalbedotint" "1" + "$phongfresnelranges" "[.1 .5 1.0]" + + + "$detail" "detail\metal_detail_01" + "$detailscale" "6.283" + "$detailblendfactor" "1.2" + "$detailblendmode" "0" +} diff --git a/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vtf b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vtf new file mode 100644 index 00000000..4c6be512 Binary files /dev/null and b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet.vtf differ diff --git a/ItemSpawn/content/materials/models/dog_gondor/dog_sheet_phong.vtf b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet_phong.vtf new file mode 100644 index 00000000..8d91b36d Binary files /dev/null and b/ItemSpawn/content/materials/models/dog_gondor/dog_sheet_phong.vtf differ diff --git a/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vmt b/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vmt new file mode 100644 index 00000000..cf2c389a --- /dev/null +++ b/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vmt @@ -0,0 +1,7 @@ +"VertexLitGeneric" +{ + "$baseTexture" "Models/Dog_gondor/eyeglass" + "$translucent" "1" + "$envmap" "env_cubemap" + "$envcontrast" "1" +} diff --git a/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vtf b/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vtf new file mode 100644 index 00000000..ed865285 Binary files /dev/null and b/ItemSpawn/content/materials/models/dog_gondor/eyeglass.vtf differ diff --git a/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vmt b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vmt new file mode 100644 index 00000000..546f9512 --- /dev/null +++ b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vmt @@ -0,0 +1,13 @@ +"vertexlitgeneric" +{ + "$basetexture" "Models/Dog_gondor/weapon107_000_001" + "$bumpmap" "Models/Dog_gondor/weapon107_000_002" + "$translucent" "1" + "$envmap" "env_cubemap" + "$normalmapalphaenvmapmask" 1 + "$selfillum" "1" + "$phong" "1" + "$phongexponent" 35 + "$phongboost" "2" + "$phongfresnelranges" "[0.05 0.5 1]" +} \ No newline at end of file diff --git a/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vtf b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vtf new file mode 100644 index 00000000..821a6936 Binary files /dev/null and b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_001.vtf differ diff --git a/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_002.vtf b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_002.vtf new file mode 100644 index 00000000..3ea18599 Binary files /dev/null and b/ItemSpawn/content/materials/models/dog_gondor/weapon107_000_002.vtf differ diff --git a/ItemSpawn/content/materials/models/ffxii/earthmodel1/rockwall01.vmt b/ItemSpawn/content/materials/models/ffxii/earthmodel1/rockwall01.vmt new file mode 100644 index 00000000..360845f9 --- /dev/null +++ b/ItemSpawn/content/materials/models/ffxii/earthmodel1/rockwall01.vmt @@ -0,0 +1,6 @@ +"vertexlitgeneric" +{ + "$basetexture" "de_dust/rockwall01" + "$surfaceprop" "concrete" + "%keywords" "cstrike" +} diff --git a/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vmt b/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vmt new file mode 100644 index 00000000..9b4bad78 --- /dev/null +++ b/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vmt @@ -0,0 +1,4 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\pil\re1\dog\0000a" +} diff --git a/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vtf b/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vtf new file mode 100644 index 00000000..4d8f17df Binary files /dev/null and b/ItemSpawn/content/materials/models/player/pil/re1/dog/0000a.vtf differ diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vmt new file mode 100644 index 00000000..29f4ae73 --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vmt @@ -0,0 +1,7 @@ +"VertexlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_body" + + "$selfillum" 1 + +} diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vtf b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vtf new file mode 100644 index 00000000..b1a7da65 Binary files /dev/null and b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vtf differ diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body_2.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body_2.vmt new file mode 100644 index 00000000..299786dd --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_body_2.vmt @@ -0,0 +1,9 @@ +"VertexlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_body" + + + "$selfillum" 1 + + +} diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_eyes.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_eyes.vmt new file mode 100644 index 00000000..75d643bd --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_eyes.vmt @@ -0,0 +1,13 @@ +"VertexlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_body" + "$bumpmap" "models/player/slow/amberlyn/lotr/balrog/slow_body_bump" + + "$selfillum" 1 + + "$envmap" "env_cubemap" + "$normalmapalphaenvmapmask" 1 + "$envmaptint" "[1 1 1]" + "$envmapcontrast" .25 + "$envmapsaturation" 1 +} \ No newline at end of file diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vmt new file mode 100644 index 00000000..06c872a4 --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vmt @@ -0,0 +1,10 @@ +"VertexlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_weapon" + "$bumpmap" "models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump" + + "$phong" "1" + "$phongexponent" "25" + "$phongboost" "1" + "$phongfresnelranges" "[.15 .5 1]" +} \ No newline at end of file diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vtf b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vtf new file mode 100644 index 00000000..0d13c105 Binary files /dev/null and b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vtf differ diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_blade.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_blade.vmt new file mode 100644 index 00000000..a516bc21 --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_blade.vmt @@ -0,0 +1,13 @@ +"UnlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_weapon" + + "$model" 1 + "$additive" 1 + + "$envmap" "env_cubemap" + "$normalmapalphaenvmapmask" 1 + "$envmaptint" "{230 200 36}" + "$envmapcontrast" 1 + "$envmapsaturation" 1 +} \ No newline at end of file diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump.vtf b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump.vtf new file mode 100644 index 00000000..f4e5a525 Binary files /dev/null and b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump.vtf differ diff --git a/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_wings.vmt b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_wings.vmt new file mode 100644 index 00000000..2ae14cb6 --- /dev/null +++ b/ItemSpawn/content/materials/models/player/slow/amberlyn/lotr/balrog/slow_wings.vmt @@ -0,0 +1,20 @@ +"VertexlitGeneric" +{ + "$basetexture" "models/player/slow/amberlyn/lotr/balrog/slow_body" + + "$selfillum" 1 + + + + "Proxies" + { + "Sine" + { + + "resultVar" "$alpha" + "sineperiod" 0 + "sinemin" .75 + "sinemax" .75 + } + } +} diff --git a/ItemSpawn/content/materials/models/poo/curlypoo.vmt b/ItemSpawn/content/materials/models/poo/curlypoo.vmt new file mode 100644 index 00000000..752da266 --- /dev/null +++ b/ItemSpawn/content/materials/models/poo/curlypoo.vmt @@ -0,0 +1,4 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models/poo/curlypoo" +} diff --git a/ItemSpawn/content/materials/models/poo/curlypoo.vtf b/ItemSpawn/content/materials/models/poo/curlypoo.vtf new file mode 100644 index 00000000..eb56a4b1 Binary files /dev/null and b/ItemSpawn/content/materials/models/poo/curlypoo.vtf differ diff --git a/ItemSpawn/content/models/dog_jugger.dx80.vtx b/ItemSpawn/content/models/dog_jugger.dx80.vtx new file mode 100644 index 00000000..c1af383c Binary files /dev/null and b/ItemSpawn/content/models/dog_jugger.dx80.vtx differ diff --git a/ItemSpawn/content/models/dog_jugger.dx90.vtx b/ItemSpawn/content/models/dog_jugger.dx90.vtx new file mode 100644 index 00000000..a90d7300 Binary files /dev/null and b/ItemSpawn/content/models/dog_jugger.dx90.vtx differ diff --git a/ItemSpawn/content/models/dog_jugger.mdl b/ItemSpawn/content/models/dog_jugger.mdl new file mode 100644 index 00000000..6af63343 Binary files /dev/null and b/ItemSpawn/content/models/dog_jugger.mdl differ diff --git a/ItemSpawn/content/models/dog_jugger.sw.vtx b/ItemSpawn/content/models/dog_jugger.sw.vtx new file mode 100644 index 00000000..41d3c521 Binary files /dev/null and b/ItemSpawn/content/models/dog_jugger.sw.vtx differ diff --git a/ItemSpawn/content/models/dog_jugger.vvd b/ItemSpawn/content/models/dog_jugger.vvd new file mode 100644 index 00000000..74e618a9 Binary files /dev/null and b/ItemSpawn/content/models/dog_jugger.vvd differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.dx80.vtx b/ItemSpawn/content/models/ffxii/earthmodel1.dx80.vtx new file mode 100644 index 00000000..3e1317f4 Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.dx80.vtx differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.dx90.vtx b/ItemSpawn/content/models/ffxii/earthmodel1.dx90.vtx new file mode 100644 index 00000000..53ca9465 Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.dx90.vtx differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.mdl b/ItemSpawn/content/models/ffxii/earthmodel1.mdl new file mode 100644 index 00000000..d2d05e6d Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.mdl differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.phy b/ItemSpawn/content/models/ffxii/earthmodel1.phy new file mode 100644 index 00000000..290689b3 Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.phy differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.sw.vtx b/ItemSpawn/content/models/ffxii/earthmodel1.sw.vtx new file mode 100644 index 00000000..948df962 Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.sw.vtx differ diff --git a/ItemSpawn/content/models/ffxii/earthmodel1.vvd b/ItemSpawn/content/models/ffxii/earthmodel1.vvd new file mode 100644 index 00000000..3a631f7c Binary files /dev/null and b/ItemSpawn/content/models/ffxii/earthmodel1.vvd differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx80.vtx b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx80.vtx new file mode 100644 index 00000000..fd958b30 Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx80.vtx differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx90.vtx b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx90.vtx new file mode 100644 index 00000000..cd602ddb Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.dx90.vtx differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.mdl b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.mdl new file mode 100644 index 00000000..9ce56ec7 Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.mdl differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.phy b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.phy new file mode 100644 index 00000000..b0570232 Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.phy differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.sw.vtx b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.sw.vtx new file mode 100644 index 00000000..04a57459 Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.sw.vtx differ diff --git a/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.vvd b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.vvd new file mode 100644 index 00000000..f1a12703 Binary files /dev/null and b/ItemSpawn/content/models/player/pil/re1/dog/dog_pil.vvd differ diff --git a/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx80.vtx b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx80.vtx new file mode 100644 index 00000000..770996fd Binary files /dev/null and b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx80.vtx differ diff --git a/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx90.vtx b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx90.vtx new file mode 100644 index 00000000..c5aa7671 Binary files /dev/null and b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx90.vtx differ diff --git a/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl new file mode 100644 index 00000000..e5eac0a3 Binary files /dev/null and b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl differ diff --git a/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.sw.vtx b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.sw.vtx new file mode 100644 index 00000000..0b514188 Binary files /dev/null and b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.sw.vtx differ diff --git a/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.vvd b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.vvd new file mode 100644 index 00000000..f8d9cf05 Binary files /dev/null and b/ItemSpawn/content/models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.vvd differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.dx80.vtx b/ItemSpawn/content/models/poo/curlygpoo.dx80.vtx new file mode 100644 index 00000000..ffff4991 Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.dx80.vtx differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.dx90.vtx b/ItemSpawn/content/models/poo/curlygpoo.dx90.vtx new file mode 100644 index 00000000..580fe578 Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.dx90.vtx differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.mdl b/ItemSpawn/content/models/poo/curlygpoo.mdl new file mode 100644 index 00000000..4ee4d92b Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.mdl differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.phy b/ItemSpawn/content/models/poo/curlygpoo.phy new file mode 100644 index 00000000..b8a18119 Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.phy differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.sw.vtx b/ItemSpawn/content/models/poo/curlygpoo.sw.vtx new file mode 100644 index 00000000..a57dba2f Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.sw.vtx differ diff --git a/ItemSpawn/content/models/poo/curlygpoo.vvd b/ItemSpawn/content/models/poo/curlygpoo.vvd new file mode 100644 index 00000000..31f80010 Binary files /dev/null and b/ItemSpawn/content/models/poo/curlygpoo.vvd differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx80.vtx b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx80.vtx new file mode 100644 index 00000000..a780135b Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx80.vtx differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx90.vtx b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx90.vtx new file mode 100644 index 00000000..b4bfbed5 Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.dx90.vtx differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.mdl b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.mdl new file mode 100644 index 00000000..37236086 Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.mdl differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.phy b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.phy new file mode 100644 index 00000000..6abbed33 Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.phy differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.sw.vtx b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.sw.vtx new file mode 100644 index 00000000..690588a7 Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.sw.vtx differ diff --git a/ItemSpawn/content/models/props/furnitures/humans/barrel01b.vvd b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.vvd new file mode 100644 index 00000000..7fcd6583 Binary files /dev/null and b/ItemSpawn/content/models/props/furnitures/humans/barrel01b.vvd differ diff --git a/ItemSpawn/content/models/staff/staff.dx80.vtx b/ItemSpawn/content/models/staff/staff.dx80.vtx new file mode 100644 index 00000000..4f92013f Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.dx80.vtx differ diff --git a/ItemSpawn/content/models/staff/staff.dx90.vtx b/ItemSpawn/content/models/staff/staff.dx90.vtx new file mode 100644 index 00000000..9752a05b Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.dx90.vtx differ diff --git a/ItemSpawn/content/models/staff/staff.mdl b/ItemSpawn/content/models/staff/staff.mdl new file mode 100644 index 00000000..2ac7674a Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.mdl differ diff --git a/ItemSpawn/content/models/staff/staff.phy b/ItemSpawn/content/models/staff/staff.phy new file mode 100644 index 00000000..0dd6b8df Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.phy differ diff --git a/ItemSpawn/content/models/staff/staff.sw.vtx b/ItemSpawn/content/models/staff/staff.sw.vtx new file mode 100644 index 00000000..cf7a4beb Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.sw.vtx differ diff --git a/ItemSpawn/content/models/staff/staff.vvd b/ItemSpawn/content/models/staff/staff.vvd new file mode 100644 index 00000000..af7a1f9a Binary files /dev/null and b/ItemSpawn/content/models/staff/staff.vvd differ diff --git a/ItemSpawn/content/sound/unloze/balrog_scream.mp3 b/ItemSpawn/content/sound/unloze/balrog_scream.mp3 new file mode 100644 index 00000000..b917afbf Binary files /dev/null and b/ItemSpawn/content/sound/unloze/balrog_scream.mp3 differ diff --git a/entWatch/gamedata/plugin.entWatch.txt b/ItemSpawn/gamedata/plugin.ItemSpawn.txt similarity index 79% rename from entWatch/gamedata/plugin.entWatch.txt rename to ItemSpawn/gamedata/plugin.ItemSpawn.txt index 7eef7cf1..83cdbfe9 100644 --- a/entWatch/gamedata/plugin.entWatch.txt +++ b/ItemSpawn/gamedata/plugin.ItemSpawn.txt @@ -19,10 +19,6 @@ "windows" "300" "linux" "301" } - "CBaseButton_m_toggle_state" - { - "linux" "848" - } } } } diff --git a/ItemSpawn/scripting/ItemSpawn.sp b/ItemSpawn/scripting/ItemSpawn.sp new file mode 100644 index 00000000..fc74a326 --- /dev/null +++ b/ItemSpawn/scripting/ItemSpawn.sp @@ -0,0 +1,443 @@ +#pragma newdecls required + +#include +#include +#include +#include +#include + +#pragma semicolon 1 + +int g_iCounter = 0; + +bool g_bClientHasItem[MAXPLAYERS+1] = false; + +Handle g_hGetSlot; +Handle g_hBumpWeapon; +Handle g_hOnPickedUp; + +#include "items/balrog.inc" +#include "items/doghuman.inc" +#include "items/earth.inc" +#include "items/jumper.inc" +#include "items/tnt.inc" +#include "items/vortigaunt.inc" +#include "items/whiteknight.inc" + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ItemSpawn", + author = "Neon", + description = "", + version = "1.1", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + HookEvent("round_start", OnRoundStart, EventHookMode_Post); + + RegAdminCmd("sm_balrog", Command_Balrog, ADMFLAG_KICK); + RegAdminCmd("sm_humandog", Command_HumanDog, ADMFLAG_KICK); + RegAdminCmd("sm_earth", Command_Earth, ADMFLAG_KICK); + RegAdminCmd("sm_jumper", Command_Jumper, ADMFLAG_KICK); + RegAdminCmd("sm_tnt", Command_TNT, ADMFLAG_KICK); + RegAdminCmd("sm_vortigaunt", Command_Vortigaunt, ADMFLAG_KICK); + RegAdminCmd("sm_whiteknight", Command_WhiteKnight, ADMFLAG_KICK); + + LoadTranslations("common.phrases"); + + Handle hGameConf = LoadGameConfigFile("plugin.entWatch"); + if(hGameConf == INVALID_HANDLE) + { + SetFailState("Couldn't load plugin.ItemSpawn game config!"); + return; + } + if(GameConfGetOffset(hGameConf, "GetSlot") == -1) + { + delete hGameConf; + SetFailState("Couldn't get GetSlot offset from game config!"); + return; + } + if(GameConfGetOffset(hGameConf, "BumpWeapon") == -1) + { + delete hGameConf; + SetFailState("Couldn't get BumpWeapon offset from game config!"); + return; + } + if(GameConfGetOffset(hGameConf, "OnPickedUp") == -1) + { + delete hGameConf; + SetFailState("Couldn't get OnPickedUp offset from game config!"); + return; + } + + // 320 CBaseCombatWeapon::GetSlot(void)const + StartPrepSDKCall(SDKCall_Entity); + if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "GetSlot")) + { + delete hGameConf; + SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"GetSlot\" failed!"); + return; + } + PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); + g_hGetSlot = EndPrepSDKCall(); + + // 397 CCSPlayer::BumpWeapon(CBaseCombatWeapon *) + StartPrepSDKCall(SDKCall_Player); + if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "BumpWeapon")) + { + delete hGameConf; + SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"BumpWeapon\" failed!"); + return; + } + PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain); + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hBumpWeapon = EndPrepSDKCall(); + + // 300 CBaseCombatWeapon::OnPickedUp(CBaseCombatCharacter *) + StartPrepSDKCall(SDKCall_Entity); + if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "OnPickedUp")) + { + delete hGameConf; + SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"OnPickedUp\" failed!"); + return; + } + PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); + g_hOnPickedUp = EndPrepSDKCall(); + + if(g_hGetSlot == INVALID_HANDLE) + { + SetFailState("Couldn't prepare GetSlot SDKCall!"); + return; + } + if(g_hGetSlot == INVALID_HANDLE) + { + SetFailState("Couldn't prepare BumpWeapon SDKCall!"); + return; + } + if(g_hOnPickedUp == INVALID_HANDLE) + { + SetFailState("Couldn't prepare OnPickedUp SDKCall!"); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + // Yeeaass (Physbox model) + PrecacheModel("models/props/cs_militia/crate_extrasmallmill.mdl"); + + // Balrog + PrecacheModel("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx80.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.dx90.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.sw.vtx"); + AddFileToDownloadsTable("models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.vvd"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_body_2.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_eyes.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_blade.vmt"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_weapon_bump.vtf"); + AddFileToDownloadsTable("materials/models/player/slow/amberlyn/lotr/balrog/slow_wings.vmt"); + AddFileToDownloadsTable("sound/unloze/balrog_scream.mp3"); + + // Dog + PrecacheModel("models/player/pil/re1/dog/dog_pil.mdl"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.dx80.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.dx90.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.mdl"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.phy"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.sw.vtx"); + AddFileToDownloadsTable("models/player/pil/re1/dog/dog_pil.vvd"); + AddFileToDownloadsTable("materials/models/player/pil/re1/dog/0000a.vmt"); + AddFileToDownloadsTable("materials/models/player/pil/re1/dog/0000a.vtf"); + + // Dog Poo + PrecacheModel("models/poo/curlygpoo.mdl"); + AddFileToDownloadsTable("models/poo/curlygpoo.dx80.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.dx90.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.mdl"); + AddFileToDownloadsTable("models/poo/curlygpoo.phy"); + AddFileToDownloadsTable("models/poo/curlygpoo.sw.vtx"); + AddFileToDownloadsTable("models/poo/curlygpoo.vvd"); + AddFileToDownloadsTable("materials/models/poo/curlypoo.vmt"); + AddFileToDownloadsTable("materials/models/poo/curlypoo.vtf"); + + // Earth Staff + PrecacheModel("models/staff/staff.mdl"); + AddFileToDownloadsTable("models/staff/staff.dx80.vtx"); + AddFileToDownloadsTable("models/staff/staff.dx90.vtx"); + AddFileToDownloadsTable("models/staff/staff.mdl"); + AddFileToDownloadsTable("models/staff/staff.phy"); + AddFileToDownloadsTable("models/staff/staff.sw.vtx"); + AddFileToDownloadsTable("models/staff/staff.vvd"); + AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vmt"); + AddFileToDownloadsTable("materials/models/Staff/staffofmagnus.vtf"); + + // Earth Prop + PrecacheModel("models/ffxii/earthmodel1.mdl"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.dx80.vtx"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.dx90.vtx"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.mdl"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.phy"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.sw.vtx"); + AddFileToDownloadsTable("models/ffxii/earthmodel1.vvd"); + AddFileToDownloadsTable("materials/models/ffxii/earthmodel1/rockwall01.vmt"); + + // TNT + PrecacheModel("models/props/furnitures/humans/barrel01b.mdl"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.dx80.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.dx90.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.mdl"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.phy"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.sw.vtx"); + AddFileToDownloadsTable("models/props/furnitures/humans/barrel01b.vvd"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b.vmt"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b.vtf"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b_broken.vmt"); + AddFileToDownloadsTable("materials/models/barrel01b/wood_barrel01b_no_metal.vtf"); + + // Vortigaunt + PrecacheModel("models/vortigaunt_slave.mdl"); + + // WhiteKnight + PrecacheModel("models/dog_jugger.mdl"); + AddFileToDownloadsTable("models/dog_jugger.dx80.vtx"); + AddFileToDownloadsTable("models/dog_jugger.dx90.vtx"); + AddFileToDownloadsTable("models/dog_jugger.mdl"); + AddFileToDownloadsTable("models/dog_jugger.sw.vtx"); + AddFileToDownloadsTable("models/dog_jugger.vvd"); + AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet.vmt"); + AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet.vtf"); + AddFileToDownloadsTable("materials/models/dog_gondor/dog_sheet_phong.vtf"); + AddFileToDownloadsTable("materials/models/dog_gondor/eyeglass.vmt"); + AddFileToDownloadsTable("materials/models/dog_gondor/eyeglass.vtf"); + AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_001.vmt"); + AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_001.vtf"); + AddFileToDownloadsTable("materials/models/dog_gondor/weapon107_000_002.vtf"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int CreateEntityAtOrigin(const char[] classname, const float origin[3]) +{ + int entity = CreateEntityByName(classname); + + TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR); + + return entity; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...) +{ + char buffer[1024]; + VFormat(buffer, sizeof(buffer), value, 4); + + DispatchKeyValue(entity, key, buffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SpawnAndActivate(int entity) +{ + DispatchSpawn(entity); + ActivateEntity(entity); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void ParentToEntity(int entity, int parent) +{ + SetVariantString("!activator"); + AcceptEntityInput(entity, "SetParent", parent, parent); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityBBox(int entity, const float mins[3], const float maxs[3]) +{ + SetEntPropVector(entity, Prop_Send, "m_vecMins", mins); + SetEntPropVector(entity, Prop_Send, "m_vecMaxs", maxs); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityProps(int entity) +{ + SetEntProp(entity, Prop_Send, "m_nSolidType", 3); + SetEntProp(entity, Prop_Send, "m_fEffects", 32); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void AddItemFilter(int entity) +{ + SDKHook(entity, SDKHook_StartTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_EndTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_Touch, OnTriggerTouch); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnTriggerTouch(int trigger, int client) +{ + return (IsValidClient(client) && g_bClientHasItem[client]) ? Plugin_Handled : Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action EquipWeapons(Handle timer, any userid) +{ + int client = GetClientOfUserId(userid); + + if (client != 0) + { + GivePlayerItem(client, "weapon_p90"); + GivePlayerItem(client, "weapon_elite"); + GivePlayerItem(client, "item_kevlar"); + GivePlayerItem(client, "weapon_hegrenade"); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool IsValidClient(int client) +{ + if (client <= 0) + return false; + + if (client > GetMaxClients()) + return false; + + if (!IsClientInGame(client)) + return false; + + if (!IsClientAuthorized(client)) + return false; + + return true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bClientHasItem[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + for (int client = 1; client <= MaxClients; client++) + { + g_bClientHasItem[client] = false; + } + + g_iCounter = 0; + + // player_weaponstrip. + int iPlayerStrip = CreateEntityByName("player_weaponstrip"); + DispatchKeyFormat(iPlayerStrip, "targetname", "item_spawn_weaponstrip"); + SpawnAndActivate(iPlayerStrip); + + // player_speedmod. + int iPlayerSpeed = CreateEntityByName("player_speedmod"); + DispatchKeyFormat(iPlayerSpeed, "targetname", "item_spawn_speedmod"); + SpawnAndActivate(iPlayerSpeed); + + // filter_activator_class nodamage. + int iNoDamageFilter = CreateEntityByName("filter_activator_class"); + DispatchKeyFormat(iNoDamageFilter, "targetname", "item_filter_nodamage"); + DispatchKeyFormat(iNoDamageFilter, "Negated", "0"); + DispatchKeyFormat(iNoDamageFilter, "filterclass", "light"); + SpawnAndActivate(iNoDamageFilter); + + // filter_activator_team human. + int iHumanFilter1 = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iHumanFilter1, "targetname", "item_filter_human"); + DispatchKeyFormat(iHumanFilter1, "Negated", "0"); + DispatchKeyFormat(iHumanFilter1, "filterteam", "3"); + SpawnAndActivate(iHumanFilter1); + + // filter_activator_team human ignored. + int iHumanFilter2 = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iHumanFilter2, "targetname", "item_filter_human_ignored"); + DispatchKeyFormat(iHumanFilter2, "Negated", "1"); + DispatchKeyFormat(iHumanFilter2, "filterteam", "3"); + SpawnAndActivate(iHumanFilter2); + + // filter_damage_type human items. + int iHumanFilter3 = CreateEntityByName("filter_damage_type"); + DispatchKeyFormat(iHumanFilter3, "targetname", "item_filter_human_items"); + DispatchKeyFormat(iHumanFilter3, "Negated", "0"); + DispatchKeyFormat(iHumanFilter3, "damagetype", "512"); + SpawnAndActivate(iHumanFilter3); + + // filter_multi humans. + int iHumanFilter4 = CreateEntityByName("filter_multi"); + DispatchKeyFormat(iHumanFilter4, "targetname", "item_filter_humans"); + DispatchKeyFormat(iHumanFilter4, "Negated", "0"); + DispatchKeyFormat(iHumanFilter4, "filtertype", "1"); + DispatchKeyFormat(iHumanFilter4, "filter01", "item_filter_human"); + DispatchKeyFormat(iHumanFilter4, "filter02", "item_filter_human_items"); + SpawnAndActivate(iHumanFilter4); + + // filter_activator_team zombie. + int iZombieFilter1 = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iZombieFilter1, "targetname", "item_filter_zombie"); + DispatchKeyFormat(iZombieFilter1, "Negated", "0"); + DispatchKeyFormat(iZombieFilter1, "filterteam", "2"); + SpawnAndActivate(iZombieFilter1); + + // filter_activator_team zombie ignored. + int iZombieFilter2 = CreateEntityByName("filter_activator_team"); + DispatchKeyFormat(iZombieFilter2, "targetname", "item_filter_zombie_ignored"); + DispatchKeyFormat(iZombieFilter2, "Negated", "1"); + DispatchKeyFormat(iZombieFilter2, "filterteam", "2"); + SpawnAndActivate(iZombieFilter2); + + // filter_damage_type zombie items. + int iZombieFilter3 = CreateEntityByName("filter_damage_type"); + DispatchKeyFormat(iZombieFilter3, "targetname", "item_filter_zombie_items"); + DispatchKeyFormat(iZombieFilter3, "Negated", "0"); + DispatchKeyFormat(iZombieFilter3, "damagetype", "128"); + SpawnAndActivate(iZombieFilter3); + + // filter_multi zombies. + int iZombieFilter4 = CreateEntityByName("filter_multi"); + DispatchKeyFormat(iZombieFilter4, "targetname", "item_filter_zombies"); + DispatchKeyFormat(iZombieFilter4, "Negated", "0"); + DispatchKeyFormat(iZombieFilter4, "filtertype", "1"); + DispatchKeyFormat(iZombieFilter4, "filter01", "item_filter_zombie"); + DispatchKeyFormat(iZombieFilter4, "filter02", "item_filter_zombie_items"); + SpawnAndActivate(iZombieFilter4); +} diff --git a/ItemSpawn/scripting/items/balrog.inc b/ItemSpawn/scripting/items/balrog.inc new file mode 100644 index 00000000..7ad281c8 --- /dev/null +++ b/ItemSpawn/scripting/items/balrog.inc @@ -0,0 +1,376 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Balrog(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnBalrog(fOrigin); + LogAction(client, -1, "\"%L\" spawned Balrog at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnBalrog(fOrigin); + LogAction(client, -1, "\"%L\" gave Balrog to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnBalrog(float fOrigin[3]) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iKnife = CreateEntityAtOrigin("weapon_knife", fOrigin); + DispatchKeyFormat(iKnife, "targetname", "item_balrog_knife_%d", g_iCounter); + DispatchKeyFormat(iKnife, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iKnife, "spawnflags", "1"); + DispatchKeyFormat(iKnife, "angles", "0 0 0"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!self,AddOutput,renderfx 6,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_model_%d,SetAnimation,balrog_attack1,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_model_%d,SetDefaultAnimation,crouch_walk_lower,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_health_%d,FireUser1,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_health_%d,FireUser2,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_health_%d,FireUser3,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_balrog_controls_%d,Activate,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!activator,AddOutput,health 50000,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_spawn_speedmod,ModifySpeed,0.8,0,1"); + SpawnAndActivate(iKnife); + + HookSingleEntityOutput(iKnife, "OnPlayerPickup", BalrogPickup, true); + + // model origin. + fOriginTemp[0] = fOrigin[0] + 4.5; + fOriginTemp[1] = fOrigin[1] + 1.26; + fOriginTemp[2] = fOrigin[2] - 28.9; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp); + DispatchKeyFormat(iModel, "targetname", "item_balrog_model_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/player/slow/amberlyn/lotr/balrog/balrog_rafuron_hannibal.mdl"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + DispatchKeyFormat(iModel, "defaultanim", "crouch_idle_lower"); + DispatchKeyFormat(iModel, "angles", "0 2 0"); + DispatchKeyFormat(iModel, "solid", "0"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iKnife); + + // trigger_once strip. + int iTriggerStrip = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerStrip, "targetname", "item_balrog_strip_%d", g_iCounter); + DispatchKeyFormat(iTriggerStrip, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerStrip, "spawnflags", "1"); + DispatchKeyFormat(iTriggerStrip, "startdisabled", "1"); + DispatchKeyFormat(iTriggerStrip, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + SpawnAndActivate(iTriggerStrip); + ParentToEntity(iTriggerStrip, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerStrip, view_as({-8.0, -8.0, -8.0}), view_as({8.0, 8.0, 8.0})); + SetEntityProps(iTriggerStrip); + + // walk origin. + fOriginTemp[0] = fOrigin[0] + 28.5; + fOriginTemp[1] = fOrigin[1] - 2.74; + fOriginTemp[2] = fOrigin[2] - 4.9; + + // trigger_hurt walk. + int iTriggerWalk = CreateEntityAtOrigin("trigger_hurt", fOriginTemp); + DispatchKeyFormat(iTriggerWalk, "targetname", "item_balrog_walk_%d", g_iCounter); + DispatchKeyFormat(iTriggerWalk, "filtername", "item_filter_zombie_ignored"); + DispatchKeyFormat(iTriggerWalk, "spawnflags", "9"); + DispatchKeyFormat(iTriggerWalk, "startdisabled", "1"); + DispatchKeyFormat(iTriggerWalk, "damagetype", "128"); + DispatchKeyFormat(iTriggerWalk, "damagemodel", "0"); + DispatchKeyFormat(iTriggerWalk, "damagecap", "20"); + DispatchKeyFormat(iTriggerWalk, "damage", "190"); + SpawnAndActivate(iTriggerWalk); + ParentToEntity(iTriggerWalk, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerWalk, view_as({-32.0, -72.0, -84.0}), view_as({32.0, 72.0, 84.0})); + SetEntityProps(iTriggerWalk); + + // roar origin. + fOriginTemp[0] = fOrigin[0] - 15.5; + fOriginTemp[1] = fOrigin[1] + 5.0; + fOriginTemp[2] = fOrigin[2] + 31.0; + + // trigger_hurt roar. + int iTriggerRoar = CreateEntityAtOrigin("trigger_hurt", fOriginTemp); + DispatchKeyFormat(iTriggerRoar, "targetname", "item_balrog_roar_%d", g_iCounter); + DispatchKeyFormat(iTriggerRoar, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerRoar, "spawnflags", "1"); + DispatchKeyFormat(iTriggerRoar, "startdisabled", "1"); + DispatchKeyFormat(iTriggerRoar, "damagetype", "0"); + DispatchKeyFormat(iTriggerRoar, "damagemodel", "0"); + DispatchKeyFormat(iTriggerRoar, "damagecap", "20"); + DispatchKeyFormat(iTriggerRoar, "damage", "-20000"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "!activator,AddOutput,max_health 10000,0,-1"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "!activator,AddOutput,max_health 100,0.02,-1"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "!activator,AddOutput,rendercolor 255 0 0,0,-1"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "!activator,AddOutput,rendercolor 255 255 255,10,-1"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,1.5,0,-1"); + DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,1.0,10,-1"); + SpawnAndActivate(iTriggerRoar); + ParentToEntity(iTriggerRoar, iKnife); + AddItemFilter(iTriggerRoar); + + // make the trigger work. + SetEntityBBox(iTriggerRoar, view_as({-736.0, -736.0, -560.0}), view_as({736.0, 736.0, 560.0})); + SetEntityProps(iTriggerRoar); + + // attack origin. + fOriginTemp[0] = fOrigin[0] + 360.5; + fOriginTemp[1] = fOrigin[1] - 58.74; + fOriginTemp[2] = fOrigin[2] + 35.6; + + // trigger_hurt attack. + int iTriggerAttack = CreateEntityAtOrigin("trigger_hurt", fOriginTemp); + DispatchKeyFormat(iTriggerAttack, "targetname", "item_balrog_attack_%d", g_iCounter); + DispatchKeyFormat(iTriggerAttack, "filtername", "item_filter_zombie_ignored"); + DispatchKeyFormat(iTriggerAttack, "spawnflags", "9"); + DispatchKeyFormat(iTriggerAttack, "startdisabled", "1"); + DispatchKeyFormat(iTriggerAttack, "damagetype", "128"); + DispatchKeyFormat(iTriggerAttack, "damagemodel", "0"); + DispatchKeyFormat(iTriggerAttack, "damagecap", "20"); + DispatchKeyFormat(iTriggerAttack, "damage", "500"); + SpawnAndActivate(iTriggerAttack); + ParentToEntity(iTriggerAttack, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerAttack, view_as({-152.0, -256.0, -71.5}), view_as({152.0, 256.0, 71.5})); + SetEntityProps(iTriggerAttack); + + // ambient_generic walk. + int iSoundWalk = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundWalk, "targetname", "item_balrog_walk_sound_%d", g_iCounter); + DispatchKeyFormat(iSoundWalk, "spawnflags", "48"); + DispatchKeyFormat(iSoundWalk, "radius", "8250"); + DispatchKeyFormat(iSoundWalk, "sourceentityname", "item_balrog_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundWalk, "message", "npc/strider/strider_step2.wav"); + DispatchKeyFormat(iSoundWalk, "volume", "10"); + DispatchKeyFormat(iSoundWalk, "health", "10"); + DispatchKeyFormat(iSoundWalk, "pitch", "100"); + DispatchKeyFormat(iSoundWalk, "pitchstart", "100"); + SpawnAndActivate(iSoundWalk); + ParentToEntity(iSoundWalk, iKnife); + + // ambient_generic roar. + int iSoundRoar = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundRoar, "targetname", "item_balrog_roar_sound_%d", g_iCounter); + DispatchKeyFormat(iSoundRoar, "spawnflags", "49"); + DispatchKeyFormat(iSoundRoar, "radius", "8250"); + DispatchKeyFormat(iSoundRoar, "sourceentityname", "item_balrog_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundRoar, "message", "unloze/balrog_scream.mp3"); + DispatchKeyFormat(iSoundRoar, "volume", "10"); + DispatchKeyFormat(iSoundRoar, "health", "10"); + DispatchKeyFormat(iSoundRoar, "pitch", "100"); + DispatchKeyFormat(iSoundRoar, "pitchstart", "100"); + SpawnAndActivate(iSoundRoar); + ParentToEntity(iSoundRoar, iKnife); + + // ambient_generic attack. + int iSoundAttack = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundAttack, "targetname", "item_balrog_attack_sound_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack, "spawnflags", "48"); + DispatchKeyFormat(iSoundAttack, "radius", "8250"); + DispatchKeyFormat(iSoundAttack, "sourceentityname", "item_balrog_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack, "message", "npc/strider/strider_skewer1.wav"); + DispatchKeyFormat(iSoundAttack, "volume", "10"); + DispatchKeyFormat(iSoundAttack, "health", "10"); + DispatchKeyFormat(iSoundAttack, "pitch", "100"); + DispatchKeyFormat(iSoundAttack, "pitchstart", "100"); + SpawnAndActivate(iSoundAttack); + ParentToEntity(iSoundAttack, iKnife); + + // logic_compare roar. + int iCompareRoar = CreateEntityAtOrigin("logic_compare", fOrigin); + DispatchKeyFormat(iCompareRoar, "targetname", "item_balrog_roar_compare_%d", g_iCounter); + DispatchKeyFormat(iCompareRoar, "spawnflags", "0"); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "!self,SetValue,1,0,-1"); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "!self,SetValue,0,25,-1"); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_attack_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_attack_compare_%d,SetCompareValue,0,4,-1", g_iCounter); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0.8,4,-1"); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_model_%d,SetAnimation,balrog_groar,0,-1", g_iCounter); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_roar_sound_%d,PlaySound,,1,-1", g_iCounter); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_roar_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iCompareRoar, "OnEqualTo", "item_balrog_roar_%d,Disable,,4,-1", g_iCounter); + SpawnAndActivate(iCompareRoar); + ParentToEntity(iCompareRoar, iKnife); + + // logic_compare attack. + int iCompareAttack = CreateEntityAtOrigin("logic_compare", fOrigin); + DispatchKeyFormat(iCompareAttack, "targetname", "item_balrog_attack_compare_%d", g_iCounter); + DispatchKeyFormat(iCompareAttack, "spawnflags", "0"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "!self,SetValue,1,0,-1"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "!self,SetValue,0,4,-1"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_roar_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_roar_compare_%d,SetCompareValue,0,4,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0.8,4,-1"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_model_%d,SetAnimation,balrog_attack1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_attack_sound_%d,PlaySound,,1,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_attack_%d,Enable,,1.75,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_balrog_attack_%d,Disable,,2.2,-1", g_iCounter); + SpawnAndActivate(iCompareAttack); + ParentToEntity(iCompareAttack, iKnife); + + // logic_relay death. + int iRelayDeath = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayDeath, "targetname", "item_balrog_death_%d", g_iCounter); + DispatchKeyFormat(iRelayDeath, "spawnflags", "0"); + DispatchKeyFormat(iRelayDeath, "OnTrigger", "!self,FireUser1,,0.1,-1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_knife_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_strip_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_walk_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_roar_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_attack_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_walk_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_roar_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_attack_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_roar_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_attack_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_balrog_controls_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,AddOutput,rendermode 0,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,AddOutput,renderfx 0,0,1"); +// DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,AddOutput,gravity 1,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,SetDamageFilter,,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,SetHealth,0,0.02,-1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!self,Kill,,0,1"); + SpawnAndActivate(iRelayDeath); + ParentToEntity(iRelayDeath, iKnife); + + // health origin. + fOriginTemp[0] = fOrigin[0] + 44.0; + fOriginTemp[1] = fOrigin[1] - 18.74; + fOriginTemp[2] = fOrigin[2] + 126.89; + + // func_physbox_multiplayer health. + int iHealth = CreateEntityAtOrigin("func_physbox_multiplayer", fOriginTemp); + DispatchKeyFormat(iHealth, "targetname", "item_balrog_health_%d", g_iCounter); + DispatchKeyFormat(iHealth, "model", "models/props/cs_militia/crate_extrasmallmill.mdl"); + DispatchKeyFormat(iHealth, "spawnflags", "8713216"); + DispatchKeyFormat(iHealth, "rendermode", "0"); + DispatchKeyFormat(iHealth, "renderfx", "0"); + DispatchKeyFormat(iHealth, "rendercolor", "255 255 255"); + DispatchKeyFormat(iHealth, "renderamt", "255 255 255"); + DispatchKeyFormat(iHealth, "propdata", "0"); + DispatchKeyFormat(iHealth, "pressuredelay", "0"); + DispatchKeyFormat(iHealth, "preferredcarryangles", "0 0 0"); + DispatchKeyFormat(iHealth, "performancemode", "1"); + DispatchKeyFormat(iHealth, "notsolid", "0"); + DispatchKeyFormat(iHealth, "nodamageforces", "0"); + DispatchKeyFormat(iHealth, "material", "0"); + DispatchKeyFormat(iHealth, "massScale", "0"); + DispatchKeyFormat(iHealth, "health", "32500"); + DispatchKeyFormat(iHealth, "gibdir", "0 0 0"); + DispatchKeyFormat(iHealth, "forcetoenablemotion", "0"); + DispatchKeyFormat(iHealth, "explosion", "0"); + DispatchKeyFormat(iHealth, "exploderadius", "0"); + DispatchKeyFormat(iHealth, "explodemagnitude", "0"); + DispatchKeyFormat(iHealth, "explodedamage", "0"); + DispatchKeyFormat(iHealth, "disableshadows", "1"); + DispatchKeyFormat(iHealth, "disablereceiveshadows", "1"); + DispatchKeyFormat(iHealth, "damagetype", "0"); + DispatchKeyFormat(iHealth, "damagetoenablemotion", "0"); + DispatchKeyFormat(iHealth, "damagefilter", "item_filter_humans"); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_knife_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_strip_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_walk_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_roar_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_attack_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_walk_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_roar_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_attack_sound_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_roar_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_attack_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_controls_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_model_%d,ClearParent,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_model_%d,SetAnimation,balrog_death,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_balrog_model_%d,SetDefaultAnimation,balrog_death_idle,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,SetDamageFilter,item_filter_human_ignored,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,AddOutput,rendermode 10,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,AddOutput,renderfx 6,0,-1"); +// DispatchKeyFormat(iHealth, "OnUser1", "!activator,AddOutput,gravity 2,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!self,FireUser1,,1,-1"); + DispatchKeyFormat(iHealth, "OnUser2", "item_balrog_walk_sound_%d,PlaySound,,0,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser2", "item_balrog_walk_%d,Disable,,0,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser2", "item_balrog_walk_%d,Enable,,0.1,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser2", "!self,FireUser2,,0.95,-1"); + DispatchKeyFormat(iHealth, "OnUser3", "item_balrog_death_%d,CancelPending,,0,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser3", "item_balrog_death_%d,Trigger,,0.05,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser3", "!self,FireUser3,,0.1,-1"); + SpawnAndActivate(iHealth); + ParentToEntity(iHealth, iKnife); + + // make the physbox work. + SetEntityBBox(iHealth, view_as({-124.0, -120.0, -188.2}), view_as({124.0, 120.0, 188.2})); + SetEntityProps(iHealth); + + HookSingleEntityOutput(iHealth, "OnBreak", BalrogKill, true); + + // game_ui. + int iControls = CreateEntityAtOrigin("game_ui", fOrigin); + DispatchKeyFormat(iControls, "targetname", "item_balrog_controls_%d", g_iCounter); + DispatchKeyFormat(iControls, "spawnflags", "0"); + DispatchKeyFormat(iControls, "fieldofview", "-1.0"); + DispatchKeyFormat(iControls, "PressedAttack", "item_balrog_attack_compare_%d,Compare,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedAttack2", "item_balrog_roar_compare_%d,Compare,,0,-1", g_iCounter); + SpawnAndActivate(iControls); + ParentToEntity(iControls, iKnife); + + AcceptEntityInput(iTriggerStrip, "Enable"); + g_iCounter++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void BalrogPickup(const char[] output, int caller, int activator, float delay) +{ + if (IsValidClient(activator)) + { + ServerCommand("say ** %N has picked up Balrog **", activator); + + PrintToChat(activator, "RIGHT CLICK = MOTIVATE ZOMBIES and LEFT CLICK = ATTACK."); + g_bClientHasItem[activator] = true; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void BalrogKill(const char[] output, int caller, int activator, float delay) +{ + if (IsValidClient(activator)) + ServerCommand("say ** %N has killed the Balrog **", activator); +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/doghuman.inc b/ItemSpawn/scripting/items/doghuman.inc new file mode 100644 index 00000000..05e229e7 --- /dev/null +++ b/ItemSpawn/scripting/items/doghuman.inc @@ -0,0 +1,220 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_HumanDog(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnHumanDog(fOrigin); + LogAction(client, -1, "\"%L\" spawned Human Dog at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientHuman(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnHumanDog(fOrigin); + LogAction(client, -1, "\"%L\" gave Human Dog to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnHumanDog(float fOrigin[3]) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iKnife = CreateEntityAtOrigin("weapon_knife", fOrigin); + DispatchKeyFormat(iKnife, "targetname", "human_dog_knife_%d", g_iCounter); + DispatchKeyFormat(iKnife, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iKnife, "spawnflags", "1"); + DispatchKeyFormat(iKnife, "angles", "0 0 0"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!self,AddOutput,renderfx 6,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_human_dog_controls_%d,Activate,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!activator,AddOutput,health 50000,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_spawn_speedmod,ModifySpeed,0.8,0,1"); + SpawnAndActivate(iKnife); + + HookSingleEntityOutput(iKnife, "OnPlayerPickup", HumanDogPickup, true); + + + // model origin. + fOriginTemp[0] = fOrigin[0] + 10.4; + fOriginTemp[1] = fOrigin[1] - 2.0; + fOriginTemp[2] = fOrigin[2] - 40.32; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp); + DispatchKeyFormat(iModel, "targetname", "item_human_dog_model_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/player/pil/re1/dog/dog_pil.mdl"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + DispatchKeyFormat(iModel, "defaultanim", "Run_lower"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "solid", "0"); + DispatchKeyFormat(iModel, "skin", "1"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iKnife); + + // trigger_once strip. + int iTriggerStrip = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerStrip, "targetname", "item_human_dog_strip_%d", g_iCounter); + DispatchKeyFormat(iTriggerStrip, "filtername", "item_filter_human"); + DispatchKeyFormat(iTriggerStrip, "spawnflags", "1"); + DispatchKeyFormat(iTriggerStrip, "startdisabled", "1"); + DispatchKeyFormat(iTriggerStrip, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + SpawnAndActivate(iTriggerStrip); + ParentToEntity(iTriggerStrip, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerStrip, view_as({-8.0, -8.0, -8.0}), view_as({8.0, 8.0, 8.0})); + SetEntityProps(iTriggerStrip); + + // Relay Trigger + int iRelayTrigger = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayTrigger, "targetname", "human_dog_relay_trigger_%d", g_iCounter); + DispatchKeyFormat(iRelayTrigger, "spawnflags", "0"); + DispatchKeyFormat(iRelayTrigger, "OnTrigger", "human_dog_relay_trigger2_%d,Trigger,,0,4", g_iCounter); + SpawnAndActivate(iRelayTrigger); + ParentToEntity(iRelayTrigger, iKnife); + + // Relay Trigger2 + int iRelayTrigger2 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayTrigger2, "targetname", "human_dog_relay_trigger2_%d", g_iCounter); + DispatchKeyFormat(iRelayTrigger2, "spawnflags", "0"); + SpawnAndActivate(iRelayTrigger2); + ParentToEntity(iRelayTrigger2, iKnife); + + HookSingleEntityOutput(iRelayTrigger2, "OnTrigger", HumanDogUse, false); + + + // game_ui. + int iControls = CreateEntityAtOrigin("game_ui", fOrigin); + DispatchKeyFormat(iControls, "targetname", "item_human_dog_controls_%d", g_iCounter); + DispatchKeyFormat(iControls, "spawnflags", "0"); + DispatchKeyFormat(iControls, "fieldofview", "-1.0"); + DispatchKeyFormat(iControls, "PressedAttack2", "human_dog_relay_trigger_%d,Trigger,,0,-1", g_iCounter); + SpawnAndActivate(iControls); + ParentToEntity(iControls, iKnife); + + // enable pickup trigger + AcceptEntityInput(iTriggerStrip, "Enable"); + + g_iCounter++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HumanDogPickup(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has picked up Human Dog **", activator); + PrintToChat(activator, " RIGHT CLICK with your KNIFE to leave a present for the Zombies (max 4)"); + CreateTimer(2.0, EquipWeapons, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HumanDogUse(const char[] output, int caller, int activator, float delay) +{ + float fOrigin[3]; + float fAngles[3]; + GetClientEyeAngles(activator, fAngles); + GetClientEyePosition(activator, fOrigin); + fAngles[0] = 0.0; + fAngles[2] = 0.0; + fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * -50.0; + fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * -50.0; + fOrigin[2] = fOrigin[2] - 62.00; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOrigin); + DispatchKeyFormat(iModel, "targetname", "human_dog_poo_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/poo/curlygpoo.mdl"); + DispatchKeyFormat(iModel, "spawnflags", "0"); + DispatchKeyFormat(iModel, "PerformanceMode", "0"); + DispatchKeyFormat(iModel, "solid", "0"); + SpawnAndActivate(iModel); + + // trigger the explosion. + int iTriggerExplosion = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerExplosion, "targetname", "human_dog_poo_trigger_%d", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerExplosion, "spawnflags", "1"); + DispatchKeyFormat(iTriggerExplosion, "startdisabled", "0"); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_poo_%d,Kill,,1,1", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_poo_hurt_%d,Enable,,0,1", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_poo_hurt_%d,Disable,,0.25,1", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_particles_%d,Start,,0,-1", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_particles_%d,Kill,,1,-1", g_iCounter); + DispatchKeyFormat(iTriggerExplosion, "OnStartTouch", "human_dog_sound_%d,PlaySound,,0,-1", g_iCounter); + SpawnAndActivate(iTriggerExplosion); + ParentToEntity(iTriggerExplosion, iModel); + + // make the trigger work. + SetEntityBBox(iTriggerExplosion, view_as({-12.0, -12.0, -7.5}), view_as({12.0, 12.0, 7.5})); + SetEntityProps(iTriggerExplosion); + + // trigger poo damage. + int iTriggerExplosionDamage = CreateEntityAtOrigin("trigger_hurt", fOrigin); + DispatchKeyFormat(iTriggerExplosionDamage, "targetname", "human_dog_poo_hurt_%d", g_iCounter); + DispatchKeyFormat(iTriggerExplosionDamage, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerExplosionDamage, "spawnflags", "1"); + DispatchKeyFormat(iTriggerExplosionDamage, "startdisabled", "1"); + DispatchKeyFormat(iTriggerExplosionDamage, "damagetype", "0"); + DispatchKeyFormat(iTriggerExplosionDamage, "damagemodel", "0"); + DispatchKeyFormat(iTriggerExplosionDamage, "damagecap", "20"); + DispatchKeyFormat(iTriggerExplosionDamage, "damage", "8000"); + SpawnAndActivate(iTriggerExplosionDamage); + ParentToEntity(iTriggerExplosionDamage, iModel); + + // make the trigger work. + SetEntityBBox(iTriggerExplosionDamage, view_as({-96.0, -112.0, -142.0}), view_as({96.0, 112.0, 142.0})); + SetEntityProps(iTriggerExplosionDamage); + + // particles. + int iParticles = CreateEntityAtOrigin("info_particle_system", fOrigin); + DispatchKeyFormat(iParticles, "targetname", "human_dog_particles_%d", g_iCounter); + DispatchKeyFormat(iParticles, "effect_name", "fire_small_01"); + DispatchKeyFormat(iParticles, "start_active", "0"); + SpawnAndActivate(iParticles); + ParentToEntity(iParticles, iModel); + + // sound. + int iSound = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSound, "targetname", "human_dog_sound_%d", g_iCounter); + DispatchKeyFormat(iSound, "spawnflags", "49"); + DispatchKeyFormat(iSound, "radius", "1250"); + DispatchKeyFormat(iSound, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyFormat(iSound, "volume", "10"); + DispatchKeyFormat(iSound, "health", "10"); + DispatchKeyFormat(iSound, "pitch", "100"); + DispatchKeyFormat(iSound, "pitchstart", "100"); + SpawnAndActivate(iSound); + ParentToEntity(iSound, iModel); + + g_iCounter ++; +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/earth.inc b/ItemSpawn/scripting/items/earth.inc new file mode 100644 index 00000000..5fba7a19 --- /dev/null +++ b/ItemSpawn/scripting/items/earth.inc @@ -0,0 +1,175 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Earth(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnEarthStaff(fOrigin); + LogAction(client, -1, "\"%L\" spawned Earth-Staff at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientHuman(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnEarthStaff(fOrigin, iTargets[i]); + LogAction(client, -1, "\"%L\" gave Earth-Staff to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void SpawnEarthStaff(float fOrigin[3], int client = -1) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iPistol = CreateEntityAtOrigin("weapon_elite", fOrigin); + DispatchKeyFormat(iPistol, "targetname", "item_earth_staff_pistol_%d", g_iCounter); + DispatchKeyFormat(iPistol, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iPistol, "spawnflags", "1"); + DispatchKeyFormat(iPistol, "angles", "0 0 0"); + DispatchKeyFormat(iPistol, "ammo", "999"); + DispatchKeyFormat(iPistol, "OnPlayerPickup", "item_earth_staff_controls_%d,Activate,,0,1", g_iCounter); + SpawnAndActivate(iPistol); + + HookSingleEntityOutput(iPistol, "OnPlayerPickup", EarthStaffPickup, false); + + // model origin. + fOriginTemp[0] = fOrigin[0] + 24.0; + fOriginTemp[1] = fOrigin[1] - 16.0; + fOriginTemp[2] = fOrigin[2] - 32.0; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp); + DispatchKeyFormat(iModel, "targetname", "item_earth_staff_model_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/staff/staff.mdl"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + DispatchKeyFormat(iModel, "defaultanim", "idle"); + DispatchKeyFormat(iModel, "angles", "0 270 0"); + DispatchKeyFormat(iModel, "solid", "0"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iPistol); + + + // ambient_generic earth. + int iSoundEarth = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundEarth, "targetname", "item_earth_staff_sound_%d", g_iCounter); + DispatchKeyFormat(iSoundEarth, "spawnflags", "48"); + DispatchKeyFormat(iSoundEarth, "radius", "1250"); + DispatchKeyFormat(iSoundEarth, "sourceentityname", "item_earth_staff_model_%d", g_iCounter); + DispatchKeyFormat(iSoundEarth, "message", "physics/concrete/boulder_impact_hard1.wav"); + DispatchKeyFormat(iSoundEarth, "volume", "10"); + DispatchKeyFormat(iSoundEarth, "health", "10"); + DispatchKeyFormat(iSoundEarth, "pitch", "100"); + DispatchKeyFormat(iSoundEarth, "pitchstart", "100"); + SpawnAndActivate(iSoundEarth); + ParentToEntity(iSoundEarth, iPistol); + + // logic_relay earth. + int iRelayEarth = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayEarth, "targetname", "item_earth_staff_relay_%d", g_iCounter); + DispatchKeyFormat(iRelayEarth, "spawnflags", "0"); + DispatchKeyFormat(iRelayEarth, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayEarth, "OnTrigger", "!self,Enable,,5,-1"); + DispatchKeyFormat(iRelayEarth, "OnTrigger", "item_earth_staff_sound_%d,PlaySound,,0.75,-1", g_iCounter); + DispatchKeyFormat(iRelayEarth, "OnTrigger", "item_earth_staff_model_%d,SetAnimation,Earth,0,-1", g_iCounter); + SpawnAndActivate(iRelayEarth); + ParentToEntity(iRelayEarth, iPistol); + + HookSingleEntityOutput(iRelayEarth, "OnTrigger", EarthStaffUse, false); + + // game_ui. + int iControls = CreateEntityAtOrigin("game_ui", fOrigin); + DispatchKeyFormat(iControls, "targetname", "item_earth_staff_controls_%d", g_iCounter); + DispatchKeyFormat(iControls, "spawnflags", "0"); + DispatchKeyFormat(iControls, "fieldofview", "-1.0"); + DispatchKeyFormat(iControls, "PressedAttack2", "item_earth_staff_relay_%d,Trigger,,0,-1", g_iCounter); + SpawnAndActivate(iControls); + ParentToEntity(iControls, iPistol); + + g_iCounter++; + + if (client > 0) + { + int iWeaponSlot = SDKCall(g_hGetSlot, iPistol); + int WeaponInSlot = GetPlayerWeaponSlot(client, iWeaponSlot); + if(WeaponInSlot != -1) + CS_DropWeapon(client, WeaponInSlot, false); + + if(SDKCall(g_hBumpWeapon, client, iPistol)) + SDKCall(g_hOnPickedUp, iPistol, client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EarthStaffPickup(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has picked up the Earth-Staff **", activator); + PrintToChat(activator, "Right Click with Knife = Use."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EarthStaffUse(const char[] output, int caller, int activator, float delay) +{ + CreateTimer(0.75, SpawnEarth, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action SpawnEarth(Handle timer, any userid) +{ + int activator = GetClientOfUserId(userid); + + float fOrigin[3]; + float fAngles[3]; + GetClientEyeAngles(activator, fAngles); + GetClientEyePosition(activator, fOrigin); + fAngles[0] = 0.0; + fAngles[2] = 0.0; + fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * 334.0; + fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * 334.0; + fOrigin[2] = fOrigin[2] - 23.00; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOrigin); + DispatchKeyFormat(iModel, "targetname", "item_earth_prop_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/ffxii/earthmodel1.mdl"); + DispatchKeyFormat(iModel, "spawnflags", "0"); + DispatchKeyFormat(iModel, "PerformanceMode", "0"); + DispatchKeyFormat(iModel, "solid", "6"); + DispatchKeyFormat(iModel, "OnUser1", "!self,Break,,6,-1"); + DispatchKeyFormat(iModel, "OnUser1", "!self,Kill,,6,-1"); + SpawnAndActivate(iModel); + AcceptEntityInput(iModel, "FireUser1"); + + g_iCounter ++; +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/jumper.inc b/ItemSpawn/scripting/items/jumper.inc new file mode 100644 index 00000000..a573a20d --- /dev/null +++ b/ItemSpawn/scripting/items/jumper.inc @@ -0,0 +1,156 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Jumper(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnJumper(fOrigin); + LogAction(client, -1, "\"%L\" spawned Jumper at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i])) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnJumper(fOrigin); + LogAction(client, -1, "\"%L\" gave Jumper to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnJumper(float fOrigin[3]) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iKnife = CreateEntityAtOrigin("weapon_knife", fOrigin); + DispatchKeyFormat(iKnife, "targetname", "item_jumper_knife_%d", g_iCounter); + DispatchKeyFormat(iKnife, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iKnife, "spawnflags", "1"); + DispatchKeyFormat(iKnife, "angles", "0 0 0"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_jumper_controls_%d,Activate,,0,1", g_iCounter); + + SpawnAndActivate(iKnife); + + HookSingleEntityOutput(iKnife, "OnPlayerPickup", JumperPickup, true); + + // light origin. + fOriginTemp[0] = fOrigin[0] + 0.0; + fOriginTemp[1] = fOrigin[1] + 0.0; + fOriginTemp[2] = fOrigin[2] + 6.0; + + // light. + int iLight = CreateEntityAtOrigin("light_dynamic", fOriginTemp); + DispatchKeyFormat(iLight, "targetname", "item_jumper_light_%d", g_iCounter); + DispatchKeyFormat(iLight, "style", "0"); + DispatchKeyFormat(iLight, "spotlight_radius", "180"); + DispatchKeyFormat(iLight, "spawnflags", "1"); + DispatchKeyFormat(iLight, "pitch", "-90"); + DispatchKeyFormat(iLight, "distance", "130"); + DispatchKeyFormat(iLight, "brightness", "10"); + DispatchKeyFormat(iLight, "angles", "0 0 0"); + DispatchKeyFormat(iLight, "_zero_percent_distance", "50"); + DispatchKeyFormat(iLight, "_quadratic_attn", "115"); + DispatchKeyFormat(iLight, "_linear_attn", "70"); + DispatchKeyFormat(iLight, "_lightHDR", "-1 -1 -1 1"); + DispatchKeyFormat(iLight, "_light", "255 128 0 1"); + DispatchKeyFormat(iLight, "_inner_cone", "0"); + DispatchKeyFormat(iLight, "_fifty_percent_distance", "42"); + DispatchKeyFormat(iLight, "_constant_attn", "50"); + DispatchKeyFormat(iLight, "_cone", "0"); + SpawnAndActivate(iLight); + ParentToEntity(iLight, iKnife); + + // trigger_once strip. + int iTriggerStrip = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerStrip, "targetname", "item_jumper_strip_%d", g_iCounter); + DispatchKeyFormat(iTriggerStrip, "spawnflags", "1"); + DispatchKeyFormat(iTriggerStrip, "startdisabled", "1"); + DispatchKeyFormat(iTriggerStrip, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + SpawnAndActivate(iTriggerStrip); + ParentToEntity(iTriggerStrip, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerStrip, view_as({-8.0, -8.0, -8.0}), view_as({8.0, 8.0, 8.0})); + SetEntityProps(iTriggerStrip); + + // logic_relay jump. + int iRelayJump = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayJump, "targetname", "item_jumper_relay_%d", g_iCounter); + DispatchKeyFormat(iRelayJump, "spawnflags", "0"); + DispatchKeyFormat(iRelayJump, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayJump, "OnTrigger", "!self,Enable,,5,-1"); + SpawnAndActivate(iRelayJump); + ParentToEntity(iRelayJump, iKnife); + + HookSingleEntityOutput(iRelayJump, "OnTrigger", JumperUse, false); + + + // game_ui. + int iControls = CreateEntityAtOrigin("game_ui", fOrigin); + DispatchKeyFormat(iControls, "targetname", "item_jumper_controls_%d", g_iCounter); + DispatchKeyFormat(iControls, "spawnflags", "0"); + DispatchKeyFormat(iControls, "fieldofview", "-1.0"); + DispatchKeyFormat(iControls, "PressedAttack2", "item_jumper_relay_%d,Trigger,,0,-1", g_iCounter); + SpawnAndActivate(iControls); + ParentToEntity(iControls, iKnife); + + AcceptEntityInput(iTriggerStrip, "Enable"); + g_iCounter++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void JumperPickup(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has picked up Jumper **", activator); + PrintToChat(activator, "RIGHT CLICK = Jump Boost"); + + if(ZR_IsClientHuman(activator)) + CreateTimer(2.0, EquipWeapons, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void JumperUse(const char[] output, int caller, int activator, float delay) +{ + float fPushVector[3]; + fPushVector[0] = 0.0; + fPushVector[1] = 0.0; + fPushVector[2] = 500.0; + + float fCurrentVector[3]; + GetEntPropVector(activator, Prop_Data, "m_vecVelocity", fCurrentVector); + + fPushVector[0] += fCurrentVector[0]; + fPushVector[1] += fCurrentVector[1]; + fPushVector[2] += fCurrentVector[2]; + + TeleportEntity(activator, NULL_VECTOR, NULL_VECTOR, fPushVector); +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/tnt.inc b/ItemSpawn/scripting/items/tnt.inc new file mode 100644 index 00000000..92f15a10 --- /dev/null +++ b/ItemSpawn/scripting/items/tnt.inc @@ -0,0 +1,401 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_TNT(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnTNT(fOrigin); + LogAction(client, -1, "\"%L\" spawned TNT at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnTNT(fOrigin); + LogAction(client, -1, "\"%L\" gave TNT to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnTNT(float fOrigin[3]) +{ + char sBuffer[256]; + float fOriginTemp[3]; + + // Knife + int iKnife = CreateEntityByName("weapon_knife"); + Format(sBuffer, sizeof(sBuffer), "tnt_knife_%d", g_iCounter); + DispatchKeyValue(iKnife, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "11051995%d", g_iCounter); + DispatchKeyValue(iKnife, "hammerid", sBuffer); + DispatchKeyValue(iKnife, "spawnflags", "1"); + DispatchKeyValue(iKnife, "angles", "0 0 0"); + DispatchKeyValueVector(iKnife, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_ui_%d,Activate,,0,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,0,1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + DispatchSpawn(iKnife); + ActivateEntity(iKnife); + HookSingleEntityOutput(iKnife, "OnPlayerPickup", TNTPickup, true); + + // Model + int iModel = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "tnt_model_%d", g_iCounter); + DispatchKeyValue(iModel, "targetname", sBuffer); + DispatchKeyValue(iModel, "model", "models/props/furnitures/humans/barrel01b.mdl"); + DispatchKeyValue(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValue(iModel, "angles", "0.432793 271.953 -12.4926"); + DispatchKeyValue(iModel, "solid", "0"); + DispatchKeyValue(iModel, "OnUser1", "!self,IgniteLifetime,0,0,-1"); + DispatchKeyValue(iModel, "OnUser1", "!self,FireUser1,,0.2,-1"); + fOriginTemp[0] = fOrigin[0] - 30.16; + fOriginTemp[1] = fOrigin[1] - 2.0; + fOriginTemp[2] = fOrigin[2] - 9.2; + DispatchKeyValueVector(iModel, "origin", fOriginTemp); + DispatchSpawn(iModel); + ActivateEntity(iModel); + SetVariantString("!activator"); + AcceptEntityInput(iModel, "SetParent", iKnife); + SetVariantString("9999999"); + AcceptEntityInput(iModel, "SetHealth"); + AcceptEntityInput(iModel, "FireUser1"); + + // pickup trigger_once + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "tnt_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "1"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTrigger, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-10.0, -10.0, -36.0}; + float fMaxbounds[3] = {10.0, 10.0, 36.0}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iKnife); + + // Sparks + int iSparksHolder = CreateEntityByName("env_spark"); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d", g_iCounter); + DispatchKeyValue(iSparksHolder, "targetname", sBuffer); + DispatchKeyValue(iSparksHolder, "TrailLength", "1"); + DispatchKeyValue(iSparksHolder, "spawnflags", "0"); + DispatchKeyValue(iSparksHolder, "angles", "0 0 0"); + DispatchKeyValue(iSparksHolder, "MaxDelay", "0"); + DispatchKeyValue(iSparksHolder, "Magnitude", "1"); + fOriginTemp[0] = fOrigin[0] - 22.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] + 36.0; + DispatchKeyValueVector(iSparksHolder, "origin", fOriginTemp); + DispatchSpawn(iSparksHolder); + ActivateEntity(iSparksHolder); + SetVariantString("!activator"); + AcceptEntityInput(iSparksHolder, "SetParent", iKnife); + + // Sprite + int iSprite = CreateEntityByName("env_sprite"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d", g_iCounter); + DispatchKeyValue(iSprite, "targetname", sBuffer); + DispatchKeyValue(iSprite, "spawnflags", "0"); + DispatchKeyValue(iSprite, "spawnflags", "0"); + DispatchKeyValue(iSprite, "scale", "0.1"); + DispatchKeyValue(iSprite, "rendermode", "5"); + DispatchKeyValue(iSprite, "renderfx", "0"); + DispatchKeyValue(iSprite, "model", "sprites/640_train.vmt"); + fOriginTemp[0] = fOrigin[0] + 31.0; + fOriginTemp[1] = fOrigin[1] + 1.73; + fOriginTemp[2] = fOrigin[2] + 4.3; + DispatchKeyValueVector(iSprite, "origin", fOriginTemp); + DispatchSpawn(iSprite); + ActivateEntity(iSprite); + SetVariantString("!activator"); + AcceptEntityInput(iSprite, "SetParent", iKnife); + + // Push + int iPush = CreateEntityByName("trigger_push"); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d", g_iCounter); + DispatchKeyValue(iPush, "targetname", sBuffer); + DispatchKeyValue(iPush, "spawnflags", "8"); + DispatchKeyValue(iPush, "startdisabled", "1"); + DispatchKeyValue(iPush, "speed", "18000"); + DispatchKeyValue(iPush, "pushdir", "-60 0 0"); + fOriginTemp[0] = fOrigin[0] + 79.46; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] + 15.76; + DispatchKeyValueVector(iPush, "origin", fOriginTemp); + DispatchSpawn(iPush); + ActivateEntity(iPush); + SetEntityModel(iPush, "models/vortigaunt_slave.mdl"); + float fMinbounds2[3] = {-36.0, -12.0, -25.0}; + float fMaxbounds2[3] = {36.0, 12.0, 25.0}; + SetEntPropVector(iPush, Prop_Send, "m_vecMins", fMinbounds2); + SetEntPropVector(iPush, Prop_Send, "m_vecMaxs", fMaxbounds2); + SetEntProp(iPush, Prop_Send, "m_nSolidType", 3); + int enteffects2 = GetEntProp(iPush, Prop_Send, "m_fEffects"); + enteffects2 |= 32; + SetEntProp(iPush, Prop_Send, "m_fEffects", enteffects2); + SetVariantString("!activator"); + AcceptEntityInput(iPush, "SetParent", iKnife); + + // Relay Trigger + int iRelayTrigger = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d", g_iCounter); + DispatchKeyValue(iRelayTrigger, "targetname", sBuffer); + DispatchKeyValue(iRelayTrigger, "spawnflags", "0"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iRelayTrigger, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iRelayTrigger, "OnTrigger", sBuffer); + DispatchSpawn(iRelayTrigger); + ActivateEntity(iRelayTrigger); + SetVariantString("!activator"); + AcceptEntityInput(iRelayTrigger, "SetParent", iKnife); + + // Launch Compare + int iLaunchCompare = CreateEntityByName("logic_compare"); + Format(sBuffer, sizeof(sBuffer), "tnt_compare_launch_%d", g_iCounter); + DispatchKeyValue(iLaunchCompare, "targetname", sBuffer); + DispatchKeyValue(iLaunchCompare, "InitialValue", "1"); + DispatchKeyValue(iLaunchCompare, "CompareValue", "0"); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", "!self,SetValue,1,0,-1"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d,HideSprite,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnEqualTo", sBuffer); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", "!self,SetValue,0,0,-1"); + Format(sBuffer, sizeof(sBuffer), "tnt_sprite_%d,ShowSprite,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iLaunchCompare, "OnNotEqualTo", sBuffer); + DispatchKeyValueVector(iLaunchCompare, "origin", fOrigin); + DispatchSpawn(iLaunchCompare); + ActivateEntity(iLaunchCompare); + SetVariantString("!activator"); + AcceptEntityInput(iLaunchCompare, "SetParent", iKnife); + + // Relay Launch + int iRelayLaunch = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_%d", g_iCounter); + DispatchKeyValue(iRelayLaunch, "targetname", sBuffer); + DispatchKeyValue(iRelayLaunch, "spawnflags", "0"); + DispatchKeyValue(iRelayLaunch, "StartDisabled", "0"); + DispatchKeyValueVector(iRelayLaunch, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Enable,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StopSpark,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunch, "OnTrigger", sBuffer); + DispatchSpawn(iRelayLaunch); + ActivateEntity(iRelayLaunch); + SetVariantString("!activator"); + AcceptEntityInput(iRelayLaunch, "SetParent", iKnife); + HookSingleEntityOutput(iRelayLaunch, "OnTrigger", TNTUse, false); + + // Relay Launch Up + int iRelayLaunchUp = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_launch_up_%d", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "targetname", sBuffer); + DispatchKeyValue(iRelayLaunchUp, "spawnflags", "0"); + DispatchKeyValue(iRelayLaunchUp, "StartDisabled", "1"); + DispatchKeyValueVector(iRelayLaunchUp, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d,Enable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_push_%d,Disable,,0.5,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Disable,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Enable,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StopSpark,,0,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_holder_sparks_%d,StartSpark,,20,-1", g_iCounter); + DispatchKeyValue(iRelayLaunchUp, "OnTrigger", sBuffer); + DispatchSpawn(iRelayLaunchUp); + ActivateEntity(iRelayLaunchUp); + SetVariantString("!activator"); + AcceptEntityInput(iRelayLaunchUp, "SetParent", iKnife); + HookSingleEntityOutput(iRelayLaunchUp, "OnTrigger", TNTUse, false); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "tnt_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "tnt_relay_trigger_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_compare_launch_%d,Compare,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack", sBuffer); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TNTPickup(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up TNT **", activator); + SetVariantString(sBuffer); + //AcceptEntityInput(g_iConsole, "Command"); + PrintToChat(activator, " RIGHT CLICK = Launch TNT and LEFT CLICK = Switch between 'put down' and 'throw'."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TNTUse(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[256]; + float fOrigin[3]; + float fAngles[3]; + + GetClientEyeAngles(activator, fAngles); + GetClientEyePosition(activator, fOrigin); + fAngles[0] = 0.0; + fAngles[2] = 0.0; + fOrigin[0] = fOrigin[0] + Cosine(DegToRad(fAngles[1])) * 46.63; + fOrigin[1] = fOrigin[1] + Sine(DegToRad(fAngles[1])) * 46.63; + fOrigin[2] = fOrigin[2] - 29.86; + + // Prop + int iProp = CreateEntityByName("prop_physics_multiplayer"); + Format(sBuffer, sizeof(sBuffer), "tnt_prop_%d", g_iCounter); + DispatchKeyValue(iProp, "targetname", sBuffer); + DispatchKeyValue(iProp, "model", "models/props/furnitures/humans/barrel01b.mdl"); + DispatchKeyValue(iProp, "spawnflags", "256"); + DispatchKeyValue(iProp, "physdamagescale", "0.1"); + DispatchKeyValue(iProp, "PerformanceMode", "0"); + DispatchKeyValue(iProp, "nodamageforces", "0"); + DispatchKeyValue(iProp, "solid", "6"); + DispatchKeyValue(iProp, "minhealthdmg", "999999"); + DispatchKeyValue(iProp, "health", "999999"); + DispatchKeyValueVector(iProp, "origin", fOrigin); + Format(sBuffer, sizeof(sBuffer), "tnt_fire_%d,StartFire,,3,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_explosion_%d,Explode,,6.5,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "tnt_sound_%d,PlaySound,,6.5,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + Format(sBuffer, sizeof(sBuffer), "!self,Kill,,6.6,1", g_iCounter); + DispatchKeyValue(iProp, "OnUser1", sBuffer); + DispatchSpawn(iProp); + ActivateEntity(iProp); + AcceptEntityInput(iProp, "FireUser1"); + + // Sparks + int iSparks = CreateEntityByName("env_spark"); + Format(sBuffer, sizeof(sBuffer), "tnt_sparks_%d", g_iCounter); + DispatchKeyValue(iSparks, "targetname", sBuffer); + DispatchKeyValue(iSparks, "TrailLength", "1"); + DispatchKeyValue(iSparks, "spawnflags", "64"); + DispatchKeyValue(iSparks, "angles", "0 0 0"); + DispatchKeyValue(iSparks, "MaxDelay", "0"); + DispatchKeyValue(iSparks, "Magnitude", "1"); + DispatchKeyValueVector(iSparks, "origin", fOrigin); + DispatchSpawn(iSparks); + ActivateEntity(iSparks); + SetVariantString("!activator"); + AcceptEntityInput(iSparks, "SetParent", iProp); + + // Fire + int iFire = CreateEntityByName("env_fire"); + Format(sBuffer, sizeof(sBuffer), "tnt_fire_%d", g_iCounter); + DispatchKeyValue(iFire, "targetname", sBuffer); + DispatchKeyValue(iFire, "ignitionpoint", "32"); + DispatchKeyValue(iFire, "spawnflags", "17"); + DispatchKeyValue(iFire, "health", "30"); + DispatchKeyValue(iFire, "firesize", "64"); + DispatchKeyValue(iFire, "fireattack", "4"); + DispatchKeyValue(iFire, "damagescale", "1.0"); + DispatchKeyValueVector(iFire, "origin", fOrigin); + DispatchSpawn(iFire); + ActivateEntity(iFire); + SetVariantString("!activator"); + AcceptEntityInput(iFire, "SetParent", iProp); + + // Explosion + int iExplosion = CreateEntityByName("env_explosion"); + Format(sBuffer, sizeof(sBuffer), "tnt_explosion_%d", g_iCounter); + DispatchKeyValue(iExplosion, "targetname", sBuffer); + DispatchKeyValue(iExplosion, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(iExplosion, "iMagnitude", "220"); + DispatchKeyValue(iExplosion, "iRadiusOverride", "1024"); + DispatchKeyValue(iExplosion, "rendermode", "5"); + DispatchKeyValue(iExplosion, "spawnflags", "16"); + DispatchKeyValueVector(iExplosion, "origin", fOrigin); + DispatchSpawn(iExplosion); + ActivateEntity(iExplosion); + SetVariantString("!activator"); + AcceptEntityInput(iExplosion, "SetParent", iProp); + + // Sound + int iSound = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "tnt_sound_%d", g_iCounter); + DispatchKeyValue(iSound, "targetname", sBuffer); + DispatchKeyValue(iSound, "spawnflags", "48"); + DispatchKeyValue(iSound, "radius", "9800"); + DispatchKeyValue(iSound, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(iSound, "volume", "10"); + DispatchKeyValue(iSound, "health", "10"); + DispatchKeyValue(iSound, "pitch", "100"); + DispatchKeyValue(iSound, "pitchstart", "100"); + DispatchKeyValueVector(iSound, "origin", fOrigin); + DispatchSpawn(iSound); + ActivateEntity(iSound); + SetVariantString("!activator"); + AcceptEntityInput(iSound, "SetParent", iProp); + + g_iCounter ++; +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/vortigaunt.inc b/ItemSpawn/scripting/items/vortigaunt.inc new file mode 100644 index 00000000..8e7cf40d --- /dev/null +++ b/ItemSpawn/scripting/items/vortigaunt.inc @@ -0,0 +1,269 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Vortigaunt(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnVortigaunt(fOrigin); + LogAction(client, -1, "\"%L\" spawned Vortigaunt at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientZombie(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnVortigaunt(fOrigin); + LogAction(client, -1, "\"%L\" gave Vortigaunt to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnVortigaunt(float fOrigin[3]) +{ + char sBuffer[256]; + float fOriginTemp[3]; + + // Knife + int iKnife = CreateEntityByName("weapon_knife"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d", g_iCounter); + DispatchKeyValue(iKnife, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "11051995%d", g_iCounter); + DispatchKeyValue(iKnife, "hammerid", sBuffer); + DispatchKeyValue(iKnife, "spawnflags", "1"); + DispatchKeyValue(iKnife, "angles", "0 0 0"); + DispatchKeyValueVector(iKnife, "origin", fOrigin); + DispatchKeyValue(iKnife, "OnPlayerPickUp", "!activator,AddOutput,renderfx 6,0,-1"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d,AddOutput,renderfx 6,0.03,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_ui_%d,Activate,,0,-1", g_iCounter); + DispatchKeyValue(iKnife, "OnPlayerPickup", sBuffer); + DispatchSpawn(iKnife); + ActivateEntity(iKnife); + HookSingleEntityOutput(iKnife, "OnPlayerPickup", VortigauntPickup, true); + + // Model + int iModel = CreateEntityByName("prop_dynamic"); + Format(sBuffer, sizeof(sBuffer), "vort_model_%d", g_iCounter); + DispatchKeyValue(iModel, "targetname", sBuffer); + DispatchKeyValue(iModel, "model", "models/vortigaunt_slave.mdl"); + DispatchKeyValue(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValue(iModel, "DefaultAnim", "Run_all"); + fOriginTemp[0] = fOrigin[0] + 7.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 34.24; + DispatchKeyValueVector(iModel, "origin", fOriginTemp); + DispatchSpawn(iModel); + ActivateEntity(iModel); + SetVariantString("!activator"); + AcceptEntityInput(iModel, "SetParent", iKnife); + + // pickup trigger_once + int iTrigger = CreateEntityByName("trigger_once"); + Format(sBuffer, sizeof(sBuffer), "vort_trigger_%d", g_iCounter); + DispatchKeyValue(iTrigger, "targetname", sBuffer); + DispatchKeyValue(iTrigger, "spawnflags", "1"); + DispatchKeyValue(iTrigger, "startdisabled", "1"); + DispatchKeyValue(iTrigger, "filtername", "item_spawn_zombie_filter"); + DispatchKeyValue(iTrigger, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + DispatchKeyValueVector(iTrigger, "origin", fOrigin); + DispatchSpawn(iTrigger); + ActivateEntity(iTrigger); + SetEntityModel(iTrigger, "models/vortigaunt_slave.mdl"); + float fMinbounds[3] = {-10.0, -10.0, -36.0}; + float fMaxbounds[3] = {10.0, 10.0, 36.0}; + SetEntPropVector(iTrigger, Prop_Send, "m_vecMins", fMinbounds); + SetEntPropVector(iTrigger, Prop_Send, "m_vecMaxs", fMaxbounds); + SetEntProp(iTrigger, Prop_Send, "m_nSolidType", 2); + int enteffects = GetEntProp(iTrigger, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(iTrigger, Prop_Send, "m_fEffects", enteffects); + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "SetParent", iKnife); + + // Sound + int iSound = CreateEntityByName("ambient_generic"); + Format(sBuffer, sizeof(sBuffer), "vort_sound_%d", g_iCounter); + DispatchKeyValue(iSound, "targetname", sBuffer); + DispatchKeyValue(iSound, "spawnflags", "48"); + DispatchKeyValue(iSound, "radius", "2250"); + Format(sBuffer, sizeof(sBuffer), "vort_knife_%d", g_iCounter); + DispatchKeyValue(iSound, "SourceEntityName", sBuffer); + DispatchKeyValue(iSound, "message", "ambient/energy/zap9.wav"); + DispatchKeyValue(iSound, "volume", "10"); + DispatchKeyValue(iSound, "health", "10"); + DispatchKeyValue(iSound, "pitch", "100"); + DispatchKeyValue(iSound, "pitchstart", "100"); + DispatchSpawn(iSound); + ActivateEntity(iSound); + SetVariantString("!activator"); + AcceptEntityInput(iSound, "SetParent", iKnife); + + // Push + int iPush = CreateEntityByName("trigger_push"); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d", g_iCounter); + DispatchKeyValue(iPush, "targetname", sBuffer); + DispatchKeyValue(iPush, "spawnflags", "1"); + DispatchKeyValue(iPush, "startdisabled", "1"); + DispatchKeyValue(iPush, "speed", "1800"); + DispatchKeyValue(iPush, "pushdir", "0 180 0"); + DispatchKeyValue(iPush, "filtername", "item_spawn_human_filter"); + fOriginTemp[0] = fOrigin[0] + 899.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iPush, "origin", fOriginTemp); + DispatchSpawn(iPush); + ActivateEntity(iPush); + SetEntityModel(iPush, "models/vortigaunt_slave.mdl"); + float fMinbounds2[3] = {-852.0, -16.0, -9.0}; + float fMaxbounds2[3] = {852.0, 16.0, 9.0}; + SetEntPropVector(iPush, Prop_Send, "m_vecMins", fMinbounds2); + SetEntPropVector(iPush, Prop_Send, "m_vecMaxs", fMaxbounds2); + SetEntProp(iPush, Prop_Send, "m_nSolidType", 3); + int enteffects2 = GetEntProp(iPush, Prop_Send, "m_fEffects"); + enteffects2 |= 32; + SetEntProp(iPush, Prop_Send, "m_fEffects", enteffects2); + SetVariantString("!activator"); + AcceptEntityInput(iPush, "SetParent", iKnife); + + // Relay + int iRelay = CreateEntityByName("logic_relay"); + Format(sBuffer, sizeof(sBuffer), "vort_relay_%d", g_iCounter); + DispatchKeyValueVector(iRelay, "origin", fOrigin); + DispatchKeyValue(iRelay, "targetname", sBuffer); + DispatchKeyValue(iRelay, "spawnflags", "0"); + DispatchKeyValue(iRelay, "startdisabled", "0"); + DispatchKeyValue(iRelay, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyValue(iRelay, "OnTrigger", "!self,Enable,,4,-1"); + Format(sBuffer, sizeof(sBuffer), "vort_model_%d,SetAnimation,zapattack1,0,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d,Enable,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_push_%d,Disable,,2,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_sound_%d,PlaySound,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d,TurnOn,,1.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d,TurnOff,,2.5,-1", g_iCounter); + DispatchKeyValue(iRelay, "OnTrigger", sBuffer); + DispatchKeyValue(iRelay, "OnTrigger", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyValue(iRelay, "OnTrigger", "item_spawn_speedmod,ModifySpeed,1.15,3.25,-1"); + DispatchSpawn(iRelay); + ActivateEntity(iRelay); + SetVariantString("!activator"); + AcceptEntityInput(iRelay, "SetParent", iKnife); + + // Game UI + int iUI = CreateEntityByName("game_ui"); + Format(sBuffer, sizeof(sBuffer), "vort_ui_%d", g_iCounter); + DispatchKeyValue(iUI, "targetname", sBuffer); + DispatchKeyValue(iUI, "spawnflags", "0"); + DispatchKeyValue(iUI, "FieldOfView", "-1.0"); + Format(sBuffer, sizeof(sBuffer), "vort_relay_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyValue(iUI, "PressedAttack2", sBuffer); + DispatchSpawn(iUI); + ActivateEntity(iUI); + SetVariantString("!activator"); + AcceptEntityInput(iUI, "SetParent", iKnife); + + // beam start + int iBeamStart = CreateEntityByName("prop_dynamic_override"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_start_%d", g_iCounter); + DispatchKeyValue(iBeamStart, "targetname", sBuffer); + DispatchKeyValue(iBeamStart, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(iBeamStart, "disableshadows", "1"); + DispatchKeyValue(iBeamStart, "disablereceiveshadows", "1"); + DispatchKeyValue(iBeamStart, "DisableBoneFollowers", "1"); + DispatchKeyValue(iBeamStart, "rendermode", "10"); + fOriginTemp[0] = fOrigin[0] + 29.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iBeamStart, "origin", fOriginTemp); + DispatchSpawn(iBeamStart); + ActivateEntity(iBeamStart); + SetVariantString("!activator"); + AcceptEntityInput(iBeamStart, "SetParent", iKnife); + + // beam end + int iBeamEnd = CreateEntityByName("prop_dynamic_override"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_end_%d", g_iCounter); + DispatchKeyValue(iBeamEnd, "targetname", sBuffer); + DispatchKeyValue(iBeamEnd, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(iBeamEnd, "disableshadows", "1"); + DispatchKeyValue(iBeamEnd, "disablereceiveshadows", "1"); + DispatchKeyValue(iBeamEnd, "DisableBoneFollowers", "1"); + DispatchKeyValue(iBeamEnd, "rendermode", "10"); + fOriginTemp[0] = fOrigin[0] + 1743.0; + fOriginTemp[1] = fOrigin[1] - 0.0; + fOriginTemp[2] = fOrigin[2] - 8.0; + DispatchKeyValueVector(iBeamEnd, "origin", fOriginTemp); + DispatchSpawn(iBeamEnd); + ActivateEntity(iBeamEnd); + SetVariantString("!activator"); + AcceptEntityInput(iBeamEnd, "SetParent", iKnife); + + // Beam + int iBeam = CreateEntityByName("env_beam"); + Format(sBuffer, sizeof(sBuffer), "vort_beam_%d", g_iCounter); + DispatchKeyValue(iBeam, "targetname", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_start_%d", g_iCounter); + DispatchKeyValue(iBeam, "LightningStart", sBuffer); + Format(sBuffer, sizeof(sBuffer), "vort_beam_end_%d", g_iCounter); + DispatchKeyValue(iBeam, "LightningEnd", sBuffer); + DispatchKeyValue(iBeam, "BoltWidth", "3"); + DispatchKeyValue(iBeam, "NoiseAmplitude", "1"); + DispatchKeyValue(iBeam, "decalname", "Bigshot"); + DispatchKeyValue(iBeam, "framerate", "0"); + DispatchKeyValue(iBeam, "framestart", "0"); + DispatchKeyValue(iBeam, "life", "1"); + DispatchKeyValue(iBeam, "spawnflags", "48"); + DispatchKeyValue(iBeam, "TouchType", "1"); + DispatchKeyValue(iBeam, "rendercolor", "0 200 0"); + DispatchKeyValue(iBeam, "texture", "sprites/laserbeam.spr"); + DispatchSpawn(iBeam); + SetVariantString("!activator"); + AcceptEntityInput(iBeam, "SetParent", iKnife); + + // enable pickup trigger + SetVariantString("!activator"); + AcceptEntityInput(iTrigger, "Enable"); + + g_iCounter ++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void VortigauntPickup(const char[] output, int caller, int activator, float delay) +{ + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "say ** %N has picked up Vortigaunt **", activator); + SetVariantString(sBuffer); + //AcceptEntityInput(g_iConsole, "Command"); + + PrintToChat(activator, "Right Click to Pull Humans in front of you."); +} \ No newline at end of file diff --git a/ItemSpawn/scripting/items/whiteknight.inc b/ItemSpawn/scripting/items/whiteknight.inc new file mode 100644 index 00000000..79037645 --- /dev/null +++ b/ItemSpawn/scripting/items/whiteknight.inc @@ -0,0 +1,589 @@ +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_WhiteKnight(int client, int argc) +{ + float fOrigin[3]; + + if (argc < 1) + { + GetClientEyePosition(client, fOrigin); + SpawnWhiteKnight(fOrigin); + LogAction(client, -1, "\"%L\" spawned WhiteKnight at <%f><%f><%f>.", client, fOrigin[0], fOrigin[1], fOrigin[2]); + return Plugin_Handled; + } + + char sArgs[64]; + char sTargetName[MAX_TARGET_LENGTH]; + int iTargets[MAXPLAYERS]; + int iTargetCount; + bool bIsML; + + GetCmdArg(1, sArgs, sizeof(sArgs)); + + if ((iTargetCount = ProcessTargetString(sArgs, client, iTargets, MAXPLAYERS, COMMAND_FILTER_CONNECTED, sTargetName, sizeof(sTargetName), bIsML)) <= 0) + { + ReplyToTargetError(client, iTargetCount); + return Plugin_Handled; + } + + for (int i = 0; i < iTargetCount; i++) + { + if(IsClientInGame(iTargets[i]) && IsPlayerAlive(iTargets[i]) && (ZR_IsClientHuman(iTargets[i]))) + { + GetClientEyePosition(iTargets[i], fOrigin); + SpawnWhiteKnight(fOrigin); + LogAction(client, -1, "\"%L\" gave WhiteKnight to \"%L\".", client, iTargets[i]); + } + } + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SpawnWhiteKnight(float fOrigin[3]) +{ + float fOriginTemp[3]; + + // weapon_knife. + int iKnife = CreateEntityAtOrigin("weapon_knife", fOrigin); + DispatchKeyFormat(iKnife, "targetname", "item_knight_knife_%d", g_iCounter); + DispatchKeyFormat(iKnife, "hammerid", "11051995%d", g_iCounter); + DispatchKeyFormat(iKnife, "spawnflags", "1"); + DispatchKeyFormat(iKnife, "angles", "0 0 0"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!self,AddOutput,renderfx 6,0,1"); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_knight_model_%d,SetAnimation,dog_run,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_knight_model_%d,SetDefaultAnimation,dog_run,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_knight_health_%d,FireUser1,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_knight_health_%d,FireUser2,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "item_knight_controls_%d,Activate,,0,1", g_iCounter); + DispatchKeyFormat(iKnife, "OnPlayerPickup", "!activator,AddOutput,health 50000,0,1"); + SpawnAndActivate(iKnife); + + HookSingleEntityOutput(iKnife, "OnPlayerPickup", WhiteKnightPickup, true); + + // model origin. + fOriginTemp[0] = fOrigin[0] + 6.0; + fOriginTemp[1] = fOrigin[1]; + fOriginTemp[2] = fOrigin[2] - 32.0; + + // prop_dynamic model. + int iModel = CreateEntityAtOrigin("prop_dynamic", fOriginTemp); + DispatchKeyFormat(iModel, "targetname", "item_knight_model_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/dog_jugger.mdl"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + DispatchKeyFormat(iModel, "defaultanim", "ragdoll"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "solid", "0"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iKnife); + + // trigger_once strip. + int iTriggerStrip = CreateEntityAtOrigin("trigger_once", fOrigin); + DispatchKeyFormat(iTriggerStrip, "targetname", "item_knight_strip_%d", g_iCounter); + DispatchKeyFormat(iTriggerStrip, "filtername", "item_filter_human"); + DispatchKeyFormat(iTriggerStrip, "spawnflags", "1"); + DispatchKeyFormat(iTriggerStrip, "startdisabled", "1"); + DispatchKeyFormat(iTriggerStrip, "OnStartTouch", "item_spawn_weaponstrip,StripWeaponsAndSuit,,0,1"); + SpawnAndActivate(iTriggerStrip); + ParentToEntity(iTriggerStrip, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerStrip, view_as({-8.0, -8.0, -8.0}), view_as({8.0, 8.0, 8.0})); + SetEntityProps(iTriggerStrip); + + // attack origin. + fOriginTemp[0] = fOrigin[0] + 112.0; + fOriginTemp[1] = fOrigin[1]; + fOriginTemp[2] = fOrigin[2] + 4.0; + + // trigger_push attack. + int iTriggerAttack1 = CreateEntityAtOrigin("trigger_push", fOriginTemp); + DispatchKeyFormat(iTriggerAttack1, "targetname", "item_knight_attack_1_%d", g_iCounter); + DispatchKeyFormat(iTriggerAttack1, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerAttack1, "spawnflags", "1"); + DispatchKeyFormat(iTriggerAttack1, "startdisabled", "1"); + DispatchKeyFormat(iTriggerAttack1, "pushdir", "-45 0 0"); + DispatchKeyFormat(iTriggerAttack1, "speed", "600"); + SpawnAndActivate(iTriggerAttack1); + ParentToEntity(iTriggerAttack1, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerAttack1, view_as({-70.0, -52.0, -36.0}), view_as({70.0, 52.0, 36.0})); + SetEntityProps(iTriggerAttack1); + + // trigger_push attack. + int iTriggerAttack2 = CreateEntityAtOrigin("trigger_push", fOriginTemp); + DispatchKeyFormat(iTriggerAttack2, "targetname", "item_knight_attack_2_%d", g_iCounter); + DispatchKeyFormat(iTriggerAttack2, "filtername", "item_filter_zombie"); + DispatchKeyFormat(iTriggerAttack2, "spawnflags", "1"); + DispatchKeyFormat(iTriggerAttack2, "startdisabled", "1"); + DispatchKeyFormat(iTriggerAttack2, "pushdir", "-45 0 0"); + DispatchKeyFormat(iTriggerAttack2, "speed", "1500"); + SpawnAndActivate(iTriggerAttack2); + ParentToEntity(iTriggerAttack2, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerAttack2, view_as({-70.0, -52.0, -36.0}), view_as({70.0, 52.0, 36.0})); + SetEntityProps(iTriggerAttack2); + + // attack origin. + fOriginTemp[0] = fOrigin[0] + 130.0; + fOriginTemp[1] = fOrigin[1]; + fOriginTemp[2] = fOrigin[2] + 4.0; + + // trigger_hurt attack. + int iTriggerAttack3 = CreateEntityAtOrigin("trigger_hurt", fOriginTemp); + DispatchKeyFormat(iTriggerAttack3, "targetname", "item_knight_attack_3_%d", g_iCounter); + DispatchKeyFormat(iTriggerAttack3, "filtername", "item_filter_human_ignored"); + DispatchKeyFormat(iTriggerAttack3, "spawnflags", "9"); + DispatchKeyFormat(iTriggerAttack3, "startdisabled", "1"); + DispatchKeyFormat(iTriggerAttack3, "damagetype", "512"); + DispatchKeyFormat(iTriggerAttack3, "damagemodel", "0"); + DispatchKeyFormat(iTriggerAttack3, "damagecap", "20"); + DispatchKeyFormat(iTriggerAttack3, "damage", "800"); + SpawnAndActivate(iTriggerAttack3); + ParentToEntity(iTriggerAttack3, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerAttack3, view_as({-52.0, -52.0, -36.0}), view_as({52.0, 52.0, 36.0})); + SetEntityProps(iTriggerAttack3); + + // nuke origin. + fOriginTemp[0] = fOrigin[0] + 6.0; + fOriginTemp[1] = fOrigin[1]; + fOriginTemp[2] = fOrigin[2] + 32.0; + + // trigger_hurt nuke. + int iTriggerNuke = CreateEntityAtOrigin("trigger_hurt", fOriginTemp); + DispatchKeyFormat(iTriggerNuke, "targetname", "item_knight_nuke_%d", g_iCounter); + DispatchKeyFormat(iTriggerNuke, "filtername", "item_filter_human_ignored"); + DispatchKeyFormat(iTriggerNuke, "spawnflags", "9"); + DispatchKeyFormat(iTriggerNuke, "startdisabled", "1"); + DispatchKeyFormat(iTriggerNuke, "damagetype", "512"); + DispatchKeyFormat(iTriggerNuke, "damagemodel", "0"); + DispatchKeyFormat(iTriggerNuke, "damagecap", "20"); + DispatchKeyFormat(iTriggerNuke, "damage", "20000"); + SpawnAndActivate(iTriggerNuke); + ParentToEntity(iTriggerNuke, iKnife); + + // make the trigger work. + SetEntityBBox(iTriggerNuke, view_as({-1024.0, -1024.0, -800.0}), view_as({1024.0, 1024.0, 800.0})); + SetEntityProps(iTriggerNuke); + + // ambient_generic attack. + int iSoundAttack1 = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundAttack1, "targetname", "item_knight_attack_sound_1_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack1, "spawnflags", "48"); + DispatchKeyFormat(iSoundAttack1, "radius", "1250"); + DispatchKeyFormat(iSoundAttack1, "sourceentityname", "item_knight_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack1, "message", "npc/roller/blade_out.wav"); + DispatchKeyFormat(iSoundAttack1, "volume", "10"); + DispatchKeyFormat(iSoundAttack1, "health", "10"); + DispatchKeyFormat(iSoundAttack1, "pitch", "100"); + DispatchKeyFormat(iSoundAttack1, "pitchstart", "100"); + SpawnAndActivate(iSoundAttack1); + ParentToEntity(iSoundAttack1, iKnife); + + // ambient_generic attack. + int iSoundAttack2 = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundAttack2, "targetname", "item_knight_attack_sound_2_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack2, "spawnflags", "48"); + DispatchKeyFormat(iSoundAttack2, "radius", "1250"); + DispatchKeyFormat(iSoundAttack2, "sourceentityname", "item_knight_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundAttack2, "message", "npc/strider/strider_skewer1.wav"); + DispatchKeyFormat(iSoundAttack2, "volume", "10"); + DispatchKeyFormat(iSoundAttack2, "health", "10"); + DispatchKeyFormat(iSoundAttack2, "pitch", "100"); + DispatchKeyFormat(iSoundAttack2, "pitchstart", "100"); + SpawnAndActivate(iSoundAttack2); + ParentToEntity(iSoundAttack2, iKnife); + + // ambient_generic nuke. + int iSoundNuke1 = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundNuke1, "targetname", "item_knight_nuke_sound_1_%d", g_iCounter); + DispatchKeyFormat(iSoundNuke1, "spawnflags", "49"); + DispatchKeyFormat(iSoundNuke1, "radius", "1250"); + DispatchKeyFormat(iSoundNuke1, "sourceentityname", "item_knight_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundNuke1, "message", "ambient/levels/citadel/portal_beam_shoot4.wav"); + DispatchKeyFormat(iSoundNuke1, "volume", "10"); + DispatchKeyFormat(iSoundNuke1, "health", "10"); + DispatchKeyFormat(iSoundNuke1, "pitch", "100"); + DispatchKeyFormat(iSoundNuke1, "pitchstart", "100"); + SpawnAndActivate(iSoundNuke1); + ParentToEntity(iSoundNuke1, iKnife); + + // ambient_generic nuke. + int iSoundNuke2 = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSoundNuke2, "targetname", "item_knight_nuke_sound_2_%d", g_iCounter); + DispatchKeyFormat(iSoundNuke2, "spawnflags", "49"); + DispatchKeyFormat(iSoundNuke2, "radius", "1250"); + DispatchKeyFormat(iSoundNuke2, "sourceentityname", "item_knight_knife_%d", g_iCounter); + DispatchKeyFormat(iSoundNuke2, "message", "ambient/explosions/explode_6.wav"); + DispatchKeyFormat(iSoundNuke2, "volume", "10"); + DispatchKeyFormat(iSoundNuke2, "health", "10"); + DispatchKeyFormat(iSoundNuke2, "pitch", "100"); + DispatchKeyFormat(iSoundNuke2, "pitchstart", "100"); + DispatchKeyFormat(iSoundNuke2, "fadein", "0"); + DispatchKeyFormat(iSoundNuke2, "fadeout", "0"); + SpawnAndActivate(iSoundNuke2); + ParentToEntity(iSoundNuke2, iKnife); + + // logic_branch attack. + int iBranchAttack = CreateEntityAtOrigin("logic_branch", fOrigin); + DispatchKeyFormat(iBranchAttack, "targetname", "item_knight_attack_branch_%d", g_iCounter); + DispatchKeyFormat(iBranchAttack, "spawnflags", "0"); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_case_1_%d,PickRandom,,0,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_sound_1_%d,PlaySound,,0.3,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_3_%d,AddOutput,damage 800,0.3,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_1_%d,Enable,,0.31,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_3_%d,Enable,,0.31,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_1_%d,Disable,,0.5,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_3_%d,Disable,,0.5,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_compare_%d,SetValue,0,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_attack_compare_%d,SetCompareValue,0,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_shield_compare_%d,SetCompareValue,0,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnFalse", "item_knight_nuke_compare_%d,SetCompareValue,0,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_case_2_%d,PickRandom,,0,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_sound_2_%d,PlaySound,,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_3_%d,AddOutput,damage 1500,1,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_2_%d,Enable,,1.01,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_3_%d,Enable,,1.01,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_2_%d,Disable,,1.2,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_3_%d,Disable,,1.2,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_attack_compare_%d,SetValue,0,2,-1", g_iCounter); + DispatchKeyFormat(iBranchAttack, "OnTrue", "item_knight_walk_%d,Trigger,,2,-1", g_iCounter); + SpawnAndActivate(iBranchAttack); + ParentToEntity(iBranchAttack, iKnife); + + // logic_case attack. + int iCaseAttack1 = CreateEntityAtOrigin("logic_case", fOrigin); + DispatchKeyFormat(iCaseAttack1, "targetname", "item_knight_attack_case_1_%d", g_iCounter); + DispatchKeyFormat(iCaseAttack1, "spawnflags", "0"); + DispatchKeyFormat(iCaseAttack1, "Case01", "1"); + DispatchKeyFormat(iCaseAttack1, "Case02", "2"); + DispatchKeyFormat(iCaseAttack1, "Case03", "3"); + DispatchKeyFormat(iCaseAttack1, "OnCase01", "item_knight_model_%d,SetAnimation,dog_sword1,0,-1", g_iCounter); + DispatchKeyFormat(iCaseAttack1, "OnCase02", "item_knight_model_%d,SetAnimation,dog_sword2,0,-1", g_iCounter); + DispatchKeyFormat(iCaseAttack1, "OnCase03", "item_knight_model_%d,SetAnimation,dog_sword3,0,-1", g_iCounter); + SpawnAndActivate(iCaseAttack1); + ParentToEntity(iCaseAttack1, iKnife); + + // logic_case attack. + int iCaseAttack2 = CreateEntityAtOrigin("logic_case", fOrigin); + DispatchKeyFormat(iCaseAttack2, "targetname", "item_knight_attack_case_2_%d", g_iCounter); + DispatchKeyFormat(iCaseAttack2, "spawnflags", "0"); + DispatchKeyFormat(iCaseAttack2, "Case01", "1"); + DispatchKeyFormat(iCaseAttack2, "Case02", "2"); + DispatchKeyFormat(iCaseAttack2, "OnCase01", "item_knight_model_%d,SetAnimation,dog_sword1heavy,0,-1", g_iCounter); + DispatchKeyFormat(iCaseAttack2, "OnCase02", "item_knight_model_%d,SetAnimation,dog_sword2heavy,0,-1", g_iCounter); + SpawnAndActivate(iCaseAttack2); + ParentToEntity(iCaseAttack2, iKnife); + + // logic_compare attack. + int iCompareAttack = CreateEntityAtOrigin("logic_compare", fOrigin); + DispatchKeyFormat(iCompareAttack, "targetname", "item_knight_attack_compare_%d", g_iCounter); + DispatchKeyFormat(iCompareAttack, "spawnflags", "0"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "!self,SetValue,1,0,-1"); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_knight_attack_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareAttack, "OnEqualTo", "item_knight_attack_branch_%d,Test,,0,-1", g_iCounter); + SpawnAndActivate(iCompareAttack); + ParentToEntity(iCompareAttack, iKnife); + + // logic_compare shield. + int iCompareShield = CreateEntityAtOrigin("logic_compare", fOrigin); + DispatchKeyFormat(iCompareShield, "targetname", "item_knight_shield_compare_%d", g_iCounter); + DispatchKeyFormat(iCompareShield, "spawnflags", "0"); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "!self,SetValue,1,0,-1"); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "!self,SetValue,0,6,-1"); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_attack_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_shield_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_model_%d,SetAnimation,dog_defense,0,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_model_%d,SetDefaultAnimation,dog_defense,0,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_health_%d,SetDamageFilter,item_filter_nodamage,0,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_health_%d,SetDamageFilter,item_filter_zombies,2,-1", g_iCounter); + DispatchKeyFormat(iCompareShield, "OnEqualTo", "item_knight_walk_%d,Trigger,,2,-1", g_iCounter); + SpawnAndActivate(iCompareShield); + ParentToEntity(iCompareShield, iKnife); + + // logic_compare nuke. + int iCompareNuke = CreateEntityAtOrigin("logic_compare", fOrigin); + DispatchKeyFormat(iCompareNuke, "targetname", "item_knight_nuke_compare_%d", g_iCounter); + DispatchKeyFormat(iCompareNuke, "spawnflags", "0"); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "!self,SetValue,1,0,-1"); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "!self,SetValue,0,150,-1"); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_spawn_speedmod,ModifySpeed,0,0,-1"); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_attack_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_shield_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_nuke_compare_%d,SetCompareValue,-1,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_model_%d,SetAnimation,dog_ultimated,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_walk_%d,Disable,,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_nuke_sound_1_%d,PlaySound,,0,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_nuke_sound_2_%d,PlaySound,,5.1,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_nuke_%d,Enable,,5.1,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_nuke_%d,Disable,,5.3,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_walk_%d,Enable,,5.5,-1", g_iCounter); + DispatchKeyFormat(iCompareNuke, "OnEqualTo", "item_knight_walk_%d,Trigger,,5.51,-1", g_iCounter); + SpawnAndActivate(iCompareNuke); + ParentToEntity(iCompareNuke, iKnife); + + // logic_relay combo 1. + int iRelayCombo1 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo1, "targetname", "item_knight_combo_1_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo1, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo1, "OnTrigger", "item_knight_combo_2_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo1, "OnTrigger", "item_knight_combo_2_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo1); + ParentToEntity(iRelayCombo1, iKnife); + + // logic_relay combo 2. + int iRelayCombo2 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo2, "targetname", "item_knight_combo_2_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo2, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo2, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo2, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo2, "OnTrigger", "item_knight_combo_3_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo2, "OnTrigger", "item_knight_combo_3_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo2); + ParentToEntity(iRelayCombo2, iKnife); + + // logic_relay combo 3. + int iRelayCombo3 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo3, "targetname", "item_knight_combo_3_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo3, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo3, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo3, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo3, "OnTrigger", "item_knight_combo_4_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo3, "OnTrigger", "item_knight_combo_4_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo3); + ParentToEntity(iRelayCombo3, iKnife); + + // logic_relay combo 4. + int iRelayCombo4 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo4, "targetname", "item_knight_combo_4_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo4, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo4, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo4, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo4, "OnTrigger", "item_knight_combo_5_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo4, "OnTrigger", "item_knight_combo_5_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo4); + ParentToEntity(iRelayCombo4, iKnife); + + // logic_relay combo 5. + int iRelayCombo5 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo5, "targetname", "item_knight_combo_5_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo5, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo5, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo5, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo5, "OnTrigger", "item_knight_combo_6_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo5, "OnTrigger", "item_knight_combo_6_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo5); + ParentToEntity(iRelayCombo5, iKnife); + + // logic_relay combo 6. + int iRelayCombo6 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo6, "targetname", "item_knight_combo_6_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo6, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo6, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo6, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo6, "OnTrigger", "item_knight_combo_7_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo6, "OnTrigger", "item_knight_combo_7_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo6); + ParentToEntity(iRelayCombo6, iKnife); + + // logic_relay combo 7. + int iRelayCombo7 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo7, "targetname", "item_knight_combo_7_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo7, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo7, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo7, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo7, "OnTrigger", "item_knight_combo_8_%d,Enable,,0,-1", g_iCounter); + DispatchKeyFormat(iRelayCombo7, "OnTrigger", "item_knight_combo_8_%d,Disable,,0.3,-1", g_iCounter); + SpawnAndActivate(iRelayCombo7); + ParentToEntity(iRelayCombo7, iKnife); + + // logic_relay combo 8. + int iRelayCombo8 = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayCombo8, "targetname", "item_knight_combo_8_%d", g_iCounter); + DispatchKeyFormat(iRelayCombo8, "spawnflags", "0"); + DispatchKeyFormat(iRelayCombo8, "startdisabled", "1"); + DispatchKeyFormat(iRelayCombo8, "OnTrigger", "!self,Disable,,0,-1"); + DispatchKeyFormat(iRelayCombo8, "OnTrigger", "item_knight_nuke_compare_%d,Compare,,0,-1", g_iCounter); + SpawnAndActivate(iRelayCombo8); + ParentToEntity(iRelayCombo8, iKnife); + + // logic_relay walk. + int iRelayWalk = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayWalk, "targetname", "item_knight_walk_%d", g_iCounter); + DispatchKeyFormat(iRelayWalk, "spawnflags", "0"); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_knight_model_%d,SetAnimation,dog_run,0,-1", g_iCounter); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_knight_model_%d,SetDefaultAnimation,dog_run,0,-1", g_iCounter); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_knight_attack_compare_%d,SetCompareValue,0,0,-1", g_iCounter); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_knight_shield_compare_%d,SetCompareValue,0,0,-1", g_iCounter); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_knight_nuke_compare_%d,SetCompareValue,0,0,-1", g_iCounter); + DispatchKeyFormat(iRelayWalk, "OnTrigger", "item_spawn_speedmod,ModifySpeed,1,0,-1"); + SpawnAndActivate(iRelayWalk); + ParentToEntity(iRelayWalk, iKnife); + + // logic_relay death. + int iRelayDeath = CreateEntityAtOrigin("logic_relay", fOrigin); + DispatchKeyFormat(iRelayDeath, "targetname", "item_knight_death_%d", g_iCounter); + DispatchKeyFormat(iRelayDeath, "spawnflags", "0"); + DispatchKeyFormat(iRelayDeath, "OnTrigger", "!self,FireUser1,,0.1,-1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_knife_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_strip_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_3_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_nuke_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_sound_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_sound_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_nuke_sound_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_nuke_sound_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_branch_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_case_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_case_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_attack_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_shield_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_nuke_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_3_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_4_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_5_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_6_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_7_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_combo_8_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_walk_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "item_knight_controls_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,AddOutput,rendermode 0,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,AddOutput,renderfx 0,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,SetDamageFilter,,0,1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!activator,SetHealth,0,0.02,-1"); + DispatchKeyFormat(iRelayDeath, "OnUser1", "!self,Kill,,0,1"); + SpawnAndActivate(iRelayDeath); + ParentToEntity(iRelayDeath, iKnife); + + // health origin. + fOriginTemp[0] = fOrigin[0] + 6.0; + fOriginTemp[1] = fOrigin[1]; + fOriginTemp[2] = fOrigin[2] - 80.0; + + // func_physbox_multiplayer health. + int iHealth = CreateEntityAtOrigin("func_physbox_multiplayer", fOriginTemp); + DispatchKeyFormat(iHealth, "targetname", "item_knight_health_%d", g_iCounter); + DispatchKeyFormat(iHealth, "model", "models/props/cs_militia/crate_extrasmallmill.mdl"); + DispatchKeyFormat(iHealth, "spawnflags", "9237504"); + DispatchKeyFormat(iHealth, "rendermode", "0"); + DispatchKeyFormat(iHealth, "renderfx", "0"); + DispatchKeyFormat(iHealth, "rendercolor", "255 255 255"); + DispatchKeyFormat(iHealth, "renderamt", "255 255 255"); + DispatchKeyFormat(iHealth, "propdata", "0"); + DispatchKeyFormat(iHealth, "pressuredelay", "0"); + DispatchKeyFormat(iHealth, "preferredcarryangles", "0 0 0"); + DispatchKeyFormat(iHealth, "performancemode", "1"); + DispatchKeyFormat(iHealth, "notsolid", "0"); + DispatchKeyFormat(iHealth, "nodamageforces", "0"); + DispatchKeyFormat(iHealth, "material", "2"); + DispatchKeyFormat(iHealth, "massScale", "0"); + DispatchKeyFormat(iHealth, "health", "750"); + DispatchKeyFormat(iHealth, "gibdir", "0 0 0"); + DispatchKeyFormat(iHealth, "forcetoenablemotion", "0"); + DispatchKeyFormat(iHealth, "explosion", "0"); + DispatchKeyFormat(iHealth, "exploderadius", "0"); + DispatchKeyFormat(iHealth, "explodemagnitude", "0"); + DispatchKeyFormat(iHealth, "explodedamage", "0"); + DispatchKeyFormat(iHealth, "disableshadows", "1"); + DispatchKeyFormat(iHealth, "disablereceiveshadows", "1"); + DispatchKeyFormat(iHealth, "damagetype", "0"); + DispatchKeyFormat(iHealth, "damagetoenablemotion", "0"); + DispatchKeyFormat(iHealth, "damagefilter", "item_filter_zombies"); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_knife_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_strip_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_3_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_nuke_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_sound_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_sound_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_nuke_sound_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_nuke_sound_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_branch_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_case_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_case_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_attack_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_shield_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_nuke_compare_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_1_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_2_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_3_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_4_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_5_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_6_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_7_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_combo_8_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_walk_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_controls_%d,Kill,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_model_%d,ClearParent,,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_model_%d,SetAnimation,dog_die,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnBreak", "item_knight_model_%d,SetDefaultAnimation,dog_die_loop,0,1", g_iCounter); + DispatchKeyFormat(iHealth, "OnPlayerUse", "item_knight_attack_branch_%d,Toggle,,0,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,SetDamageFilter,item_filter_zombie_ignored,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,AddOutput,rendermode 10,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!activator,AddOutput,renderfx 6,0,-1"); + DispatchKeyFormat(iHealth, "OnUser1", "!self,FireUser1,,1,-1"); + DispatchKeyFormat(iHealth, "OnUser2", "item_knight_death_%d,CancelPending,,0,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser2", "item_knight_death_%d,Trigger,,0.05,-1", g_iCounter); + DispatchKeyFormat(iHealth, "OnUser2", "!self,FireUser2,,0.1,-1"); + SpawnAndActivate(iHealth); + ParentToEntity(iHealth, iKnife); + + // make the physbox work. + SetEntityBBox(iHealth, view_as({-36.0, -52.0, 48.0}), view_as({36.0, 52.0, 160.0})); + SetEntityProps(iHealth); + + HookSingleEntityOutput(iHealth, "OnBreak", WhiteKnightKill, true); + + // game_ui. + int iControls = CreateEntityAtOrigin("game_ui", fOrigin); + DispatchKeyFormat(iControls, "targetname", "item_knight_controls_%d", g_iCounter); + DispatchKeyFormat(iControls, "spawnflags", "0"); + DispatchKeyFormat(iControls, "fieldofview", "-1.0"); + DispatchKeyFormat(iControls, "PressedAttack", "item_knight_attack_compare_%d,Compare,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedAttack2", "item_knight_shield_compare_%d,Compare,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedBack", "item_knight_combo_5_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedBack", "item_knight_combo_7_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedForward", "item_knight_combo_6_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedForward", "item_knight_combo_8_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedMoveLeft", "item_knight_combo_1_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedMoveLeft", "item_knight_combo_2_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedMoveRight", "item_knight_combo_3_%d,Trigger,,0,-1", g_iCounter); + DispatchKeyFormat(iControls, "PressedMoveRight", "item_knight_combo_4_%d,Trigger,,0,-1", g_iCounter); + SpawnAndActivate(iControls); + ParentToEntity(iControls, iKnife); + + AcceptEntityInput(iTriggerStrip, "Enable"); + g_iCounter++; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void WhiteKnightPickup(const char[] output, int caller, int activator, float delay) +{ + ServerCommand("say ** %N has picked up the White Knight **", activator); + PrintToChat(activator, " LEFT CLICK = ATTACK and RIGHT CLICK = SHIELD."); + CreateTimer(2.0, EquipWeapons, GetClientUserId(activator), TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void WhiteKnightKill(const char[] output, int caller, int activator, float delay) +{ + if (IsValidClient(activator)) + ServerCommand("say ** %N has killed the White Knight **", activator); +} \ No newline at end of file diff --git a/Leader2/configs/leader/leaders.ini b/Leader2/configs/leader/leaders.ini index 448c03a4..86b46900 100644 --- a/Leader2/configs/leader/leaders.ini +++ b/Leader2/configs/leader/leaders.ini @@ -1,14 +1,14 @@ -//"STEAM_0:0:22286324" // rogan +"STEAM_0:0:22286324" // rogan "STEAM_0:1:32247009" // neon "STEAM_0:1:39773416" // omar "STEAM_0:1:15222492" // shitsal -"STEAM_0:0:50822239" // banya -"STEAM_0:1:13348241" // juggernaut -"STEAM_0:1:49355699" // daniel-san -"STEAM_0:0:23670843" // monkey -"STEAM_0:1:12552642" // dad -"STEAM_0:1:52451965" // black dragon -"STEAM_0:1:79341741" // warped -"STEAM_0:1:107271710" // consolo -"STEAM_0:0:13007543" // anal sex by force -"STEAM_0:0:419740855" // phantom \ No newline at end of file +"STEAM_0:0:38786924" // tom +"STEAM_0:0:30963326" // kabzor +"STEAM_0:1:69650476" // william +"STEAM_0:1:23546931" // dejade +"STEAM_0:0:61503660" // silentbang +"STEAM_0:0:20936525" // baka +"STEAM_0:1:52451965" // Black Dragon +"STEAM_0:1:79535030" // Chivas +"STEAM_0:1:33769988" // Otonikak +"STEAM_0:1:24322623" // pivo \ No newline at end of file diff --git a/Leader2/scripting/Leader2.sp b/Leader2/scripting/Leader2.sp index 5c50fbce..492e88ac 100644 --- a/Leader2/scripting/Leader2.sp +++ b/Leader2/scripting/Leader2.sp @@ -495,18 +495,23 @@ public Action Leader(int client, int args) } else { - if(IsPlayerAlive(target)) + if(!IsPlayerAlive(target)) + { + ReplyToCommand(client, "[SM] The target has to be alive!"); + return Plugin_Handled; + } + else if(ZR_IsClientZombie(target)) + { + ReplyToCommand(client, "[SM] The target has to be a human!"); + return Plugin_Handled; + } + else { SetLeader(target); PrintToChatAll("[SM] %N is the new leader!", target); PrintToChat(target, "[SM] You are now the leader! Type !leader to open up the leader menu."); LeaderMenu(target); - return Plugin_Handled; - } - else - { - ReplyToCommand(client, "[SM] The target has to be alive!"); - return Plugin_Handled; + return Plugin_Handled; } } } @@ -517,18 +522,23 @@ public Action Leader(int client, int args) LeaderMenu(client); return Plugin_Handled; } - if(IsPlayerAlive(client)) + if(!IsPlayerAlive(client)) + { + ReplyToCommand(client, "[SM] The target has to be alive!"); + return Plugin_Handled; + } + else if(ZR_IsClientZombie(client)) + { + ReplyToCommand(client, "[SM] The target has to be a human!"); + return Plugin_Handled; + } + else { SetLeader(client); PrintToChatAll("[SM] %N is the new leader!", client); PrintToChat(client, "[SM] You are now the leader! Type !leader to open up the leader menu."); LeaderMenu(client); - return Plugin_Handled; - } - else - { - ReplyToCommand(client, "[SM] The target has to be alive!"); - return Plugin_Handled; + return Plugin_Handled; } } else @@ -816,7 +826,7 @@ public int LeaderMenu_Handler(Handle menu, MenuAction action, int client, int po } else if(action == MenuAction_End) { - CloseHandle(menu); + delete menu; } } @@ -912,7 +922,7 @@ public int SpriteMenu_Handler(Handle menu, MenuAction action, int client, int po } else if(action == MenuAction_End) { - CloseHandle(menu); + delete menu; } else if (action == MenuAction_Cancel && position == MenuCancel_ExitBack) { @@ -989,7 +999,7 @@ public int MarkerMenu_Handler(Handle menu, MenuAction action, int client, int po } else if(action == MenuAction_End) { - CloseHandle(menu); + delete menu; } else if (action == MenuAction_Cancel && position == MenuCancel_ExitBack) { diff --git a/_entWatch4/scripting/entWatch-logs.sp b/MVP_Stars/scripting/MVP_Stars.sp similarity index 51% rename from _entWatch4/scripting/entWatch-logs.sp rename to MVP_Stars/scripting/MVP_Stars.sp index 69e26918..101256da 100644 --- a/_entWatch4/scripting/entWatch-logs.sp +++ b/MVP_Stars/scripting/MVP_Stars.sp @@ -1,81 +1,85 @@ -//==================================================================================================== -// -// Name: [entWatch] Logs -// Author: Prometheum & zaCade -// Description: Handle the logs of [entWatch] -// -//==================================================================================================== -#include - -#pragma newdecls required - #include -#include -#include +#include +#include + +new bool:G_bIsHuman[MAXPLAYERS+1]; +new bool:G_bIsZombie[MAXPLAYERS+1]; //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public Plugin myinfo = { - name = "[entWatch] Logs", - author = "Prometheum & zaCade", - description = "Handle the logs of [entWatch]", - version = "4.0.0" + name = "MVP_Stars", + author = "zaCade", + description = "", + version = "1.0", + url = "" }; //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void OnPluginStart() +public OnPluginStart() { + HookEvent("round_start", Event_RoundStart); + HookEvent("round_end", Event_RoundEnd); } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDrop(any[] itemArray, int client, int index) +public ZR_OnClientInfected(client, attacker, bool:motherinfect, bool:respawnoverride, bool:respawn) { + G_bIsHuman[client] = false; + G_bIsZombie[client] = true; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDeath(any[] itemArray, int client, int index) +public ZR_OnClientHumanPost(client, bool:respawn, bool:protect) { + G_bIsHuman[client] = true; + G_bIsZombie[client] = false; } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemPickup(any[] itemArray, int client, int index) +public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast) { + for (new client = 1; client <= MaxClients; client++) + { + G_bIsHuman[client] = true; + G_bIsZombie[client] = false; + } } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDisconnect(any[] itemArray, int client, int index) +public Action:Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) { + switch(GetEventInt(event, "winner")) + { + case(CS_TEAM_CT): CreateTimer(0.2, OnHumansWin, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); + } } //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemActivate(any[] itemArray, int client, int index) -{ -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientRestricted(int client, int target, int length) -{ -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientUnrestricted(int client, int target) +public Action:OnHumansWin(Handle:timer) { + for (new client = 1; client <= MaxClients; client++) + { + if (IsClientInGame(client) && IsPlayerAlive(client) && !IsClientObserver(client) && !IsFakeClient(client)) + { + if (G_bIsHuman[client] && !G_bIsZombie[client]) + { + CS_SetMVPCount(client, CS_GetMVPCount(client) + 1); + } + } + } } \ No newline at end of file diff --git a/MakoVote/scripting/MakoVote.sp b/MakoVote/scripting/MakoVote.sp index 9f29959b..e7a047d8 100644 --- a/MakoVote/scripting/MakoVote.sp +++ b/MakoVote/scripting/MakoVote.sp @@ -40,9 +40,6 @@ public void OnMapStart() { VerifyMap(); - PrecacheSound("#unloze/Pendulum - Witchcraft.mp3", true); - AddFileToDownloadsTable("sound/unloze/Pendulum - Witchcraft.mp3"); - bStartVoteNextRound = false; for (int i = 0; i <= (NUMBEROFSTAGES - 1); i++) @@ -53,36 +50,42 @@ public Action VerifyMap() { char currentMap[64]; GetCurrentMap(currentMap, sizeof(currentMap)); - if (!StrEqual(currentMap, "ze_FFVII_Mako_Reactor_v5_3")) + + if (!StrEqual(currentMap, "ze_ffvii_mako_reactor_v5_3", false)) { char sFilename[256]; GetPluginFilename(INVALID_HANDLE, sFilename, sizeof(sFilename)); + ServerCommand("sm plugins unload %s", sFilename); } + else + { + PrecacheSound("#unloze/Pendulum - Witchcraft.mp3", true); + + AddFileToDownloadsTable("sound/unloze/Pendulum - Witchcraft.mp3"); + } } public void OnEntityCreated(int iEntity, const char[] sClassname) { - if (IsValidEntity(iEntity)) - { - SDKHook(iEntity, SDKHook_SpawnPost, OnEntitySpawned); - } + if (!IsValidEntity(iEntity) || g_bVoteFinished) + return; + + SDKHook(iEntity, SDKHook_SpawnPost, OnEntitySpawned); } public void OnEntitySpawned(int iEntity) { - if (g_bVoteFinished) + if (!IsValidEntity(iEntity) || g_bVoteFinished) return; char sTargetname[128]; GetEntPropString(iEntity, Prop_Data, "m_iName", sTargetname, sizeof(sTargetname)); char sClassname[128]; - GetEdictClassname(iEntity, sClassname, sizeof(sClassname)); + GetEntityClassname(iEntity, sClassname, sizeof(sClassname)); if ((strcmp(sTargetname, "espad") != 0) && (strcmp(sTargetname, "ss_slow") != 0) && (strcmp(sClassname, "ambient_generic") == 0)) - { AcceptEntityInput(iEntity, "Kill"); - } } public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) @@ -95,18 +98,56 @@ public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) if (!(g_bVoteFinished)) { - int iStrip = FindEntityByTargetname(INVALID_ENT_REFERENCE, "race_game_zone", "game_zone_player"); + int iStrip = FindEntityByTargetname(INVALID_ENT_REFERENCE, "RaceZone", "game_zone_player"); if (iStrip != INVALID_ENT_REFERENCE) AcceptEntityInput(iStrip, "FireUser1"); - int iCounter = FindEntityByTargetname(INVALID_ENT_REFERENCE, "Level_Counter", "math_counter"); + int iButton1 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "boton", "func_button"); + if (iButton1 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iButton1, "Lock"); + + int iButton2 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "RaceMapButton1", "func_button"); + if (iButton2 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iButton2, "Lock"); + + int iButton3 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "RaceMapButton2", "func_button"); + if (iButton3 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iButton3, "Lock"); + + int iButton4 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "RaceMapButton3", "func_button"); + if (iButton4 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iButton4, "Lock"); + + int iButton5 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "RaceMapButton4", "func_button"); + if (iButton5 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iButton5, "Lock"); + + int iCounter = FindEntityByTargetname(INVALID_ENT_REFERENCE, "LevelCounter", "math_counter"); if (iCounter != INVALID_ENT_REFERENCE) AcceptEntityInput(iCounter, "Kill"); + int iFilter = FindEntityByTargetname(INVALID_ENT_REFERENCE, "humanos", "filter_activator_team"); + if (iFilter != INVALID_ENT_REFERENCE) + AcceptEntityInput(iFilter, "Kill"); + + int iBarrerasfinal = FindEntityByTargetname(INVALID_ENT_REFERENCE, "barrerasfinal", "prop_dynamic"); + if (iBarrerasfinal != INVALID_ENT_REFERENCE) + AcceptEntityInput(iBarrerasfinal, "Kill"); + + int iBarrerasfinal2 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "barrerasfinal2", "func_breakable"); + if (iBarrerasfinal2 != INVALID_ENT_REFERENCE) + AcceptEntityInput(iBarrerasfinal2, "Break"); + + int iLevelText = FindEntityByTargetname(INVALID_ENT_REFERENCE, "LevelText", "game_text"); + if (iLevelText != INVALID_ENT_REFERENCE) + { + SetVariantString("message > INTERMISSION ROUND <"); + AcceptEntityInput(iLevelText, "AddOutput"); + } + int iDestination = FindEntityByTargetname(INVALID_ENT_REFERENCE, "arriba2ex", "info_teleport_destination"); if (iDestination != INVALID_ENT_REFERENCE) { - SetVariantString("origin -9350 4550 100"); AcceptEntityInput(iDestination, "AddOutput"); @@ -114,89 +155,50 @@ public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) AcceptEntityInput(iDestination, "AddOutput"); } - int iTeleport = FindEntityByTargetname(INVALID_ENT_REFERENCE, "teleporte_extreme", "trigger_teleport"); - if (iTeleport != INVALID_ENT_REFERENCE) - AcceptEntityInput(iTeleport, "Enable"); - - int iBarrerasfinal2 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "barrerasfinal2", "func_breakable"); - if (iBarrerasfinal2 != INVALID_ENT_REFERENCE) - AcceptEntityInput(iBarrerasfinal2, "Break"); - - int iBarrerasfinal = FindEntityByTargetname(INVALID_ENT_REFERENCE, "barrerasfinal", "prop_dynamic"); - if (iBarrerasfinal != INVALID_ENT_REFERENCE) - AcceptEntityInput(iBarrerasfinal, "Kill"); - - int iPush = FindEntityByTargetname(INVALID_ENT_REFERENCE, "race_push", "trigger_push"); - if (iPush != INVALID_ENT_REFERENCE) - AcceptEntityInput(iPush, "Kill"); - - int iFilter = FindEntityByTargetname(INVALID_ENT_REFERENCE, "humanos", "filter_activator_team"); - if (iFilter != INVALID_ENT_REFERENCE) - AcceptEntityInput(iFilter, "Kill"); - - int iTemp1 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "ex2_laser_1_temp", "point_template"); - if (iTemp1 != INVALID_ENT_REFERENCE) + int iTemplate1 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "EX2Laser1Temp", "point_template"); + if (iTemplate1 != INVALID_ENT_REFERENCE) { - DispatchKeyValue(iTemp1, "OnEntitySpawned", "ex2_laser_1_hurt,SetDamage,0,0,-1"); - DispatchKeyValue(iTemp1, "OnEntitySpawned", "ex2_laser_1_hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); + DispatchKeyValue(iTemplate1, "OnEntitySpawned", "EX2Laser1Hurt,SetDamage,0,0,-1"); + DispatchKeyValue(iTemplate1, "OnEntitySpawned", "EX2Laser1Hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); } - int iTemp2 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "ex2_laser_2_temp", "point_template"); - if (iTemp2 != INVALID_ENT_REFERENCE) + int iTemplate2 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "EX2Laser2Temp", "point_template"); + if (iTemplate2 != INVALID_ENT_REFERENCE) { - DispatchKeyValue(iTemp2, "OnEntitySpawned", "ex2_laser_2_hurt,SetDamage,0,0,-1"); - DispatchKeyValue(iTemp2, "OnEntitySpawned", "ex2_laser_2_hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); + DispatchKeyValue(iTemplate2, "OnEntitySpawned", "EX2Laser2Hurt,SetDamage,0,0,-1"); + DispatchKeyValue(iTemplate2, "OnEntitySpawned", "EX2Laser2Hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); } - int iTemp3 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "ex2_laser_3_temp", "point_template"); - if (iTemp3 != INVALID_ENT_REFERENCE) + int iTemplate3 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "EX2Laser3Temp", "point_template"); + if (iTemplate3 != INVALID_ENT_REFERENCE) { - DispatchKeyValue(iTemp3, "OnEntitySpawned", "ex2_laser_3_hurt,SetDamage,0,0,-1"); - DispatchKeyValue(iTemp3, "OnEntitySpawned", "ex2_laser_3_hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); + DispatchKeyValue(iTemplate3, "OnEntitySpawned", "EX2Laser3Hurt,SetDamage,0,0,-1"); + DispatchKeyValue(iTemplate3, "OnEntitySpawned", "EX2Laser3Hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); } - int iTemp4 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "ex2_laser_4_temp", "point_template"); - if (iTemp4 != INVALID_ENT_REFERENCE) + int iTemplate4 = FindEntityByTargetname(INVALID_ENT_REFERENCE, "EX2Laser4Temp", "point_template"); + if (iTemplate4 != INVALID_ENT_REFERENCE) { - DispatchKeyValue(iTemp4, "OnEntitySpawned", "ex2_laser_4_hurt,SetDamage,0,0,-1"); - DispatchKeyValue(iTemp4, "OnEntitySpawned", "ex2_laser_4_hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); - + DispatchKeyValue(iTemplate4, "OnEntitySpawned", "EX2Laser4Hurt,SetDamage,0,0,-1"); + DispatchKeyValue(iTemplate4, "OnEntitySpawned", "EX2Laser4Hurt,AddOutput,OnStartTouch !activator:AddOutput:origin -7000 -1000 100:0:-1,0,-1"); } - int iLaserTimer = FindEntityByTargetname(INVALID_ENT_REFERENCE, "cortes2", "logic_timer"); - if (iLaserTimer != INVALID_ENT_REFERENCE) - AcceptEntityInput(iLaserTimer, "Enable"); - - int iGameText = FindEntityByTargetname(INVALID_ENT_REFERENCE, "Level_Text", "game_text"); - if (iGameText != INVALID_ENT_REFERENCE) - AcceptEntityInput(iGameText, "Kill"); - - int iNewGameText; - iNewGameText = CreateEntityByName("game_text"); - DispatchKeyValue(iNewGameText, "targetname", "intermission_game_text"); - DispatchKeyValue(iNewGameText, "channel", "4"); - DispatchKeyValue(iNewGameText, "spawnflags", "1"); - DispatchKeyValue(iNewGameText, "color", "255 128 0"); - DispatchKeyValue(iNewGameText, "color2", "255 255 0"); - DispatchKeyValue(iNewGameText, "fadein", "1"); - DispatchKeyValue(iNewGameText, "fadeout", "1"); - DispatchKeyValue(iNewGameText, "holdtime", "10"); - DispatchKeyValue(iNewGameText, "message", "Intermission Round"); - DispatchKeyValue(iNewGameText, "x", "-1"); - DispatchKeyValue(iNewGameText, "y", ".01"); - DispatchKeyValue(iNewGameText, "OnUser1", "!self,Display,,0,-1"); - DispatchKeyValue(iNewGameText, "OnUser1", "!self,FireUser1,,5,-1"); - DispatchSpawn(iNewGameText); - SetVariantString("!activator"); - AcceptEntityInput(iNewGameText, "FireUser1"); - int iMusic = FindEntityByTargetname(INVALID_ENT_REFERENCE, "ss_slow", "ambient_generic"); if (iMusic != INVALID_ENT_REFERENCE) { SetVariantString("message #unloze/Pendulum - Witchcraft.mp3"); AcceptEntityInput(iMusic, "AddOutput"); + AcceptEntityInput(iMusic, "PlaySound"); } + + int iTeleport = FindEntityByTargetname(INVALID_ENT_REFERENCE, "teleporte_extreme", "trigger_teleport"); + if (iTeleport != INVALID_ENT_REFERENCE) + AcceptEntityInput(iTeleport, "Enable"); + + int iTimer = FindEntityByTargetname(INVALID_ENT_REFERENCE, "cortes2", "logic_timer"); + if (iTimer != INVALID_ENT_REFERENCE) + AcceptEntityInput(iTimer, "Enable"); } } @@ -236,7 +238,7 @@ public Action Command_StartVote(int args) iOnCD += 1; } - if (iOnCD >= 3) + if (iOnCD >= 4) { for (int i = 0; i <= (NUMBEROFSTAGES - 1); i++) g_bOnCooldown[i] = false; @@ -305,7 +307,7 @@ public int Handler_MakoVoteMenu(Handle menu, MenuAction action, int param1, int { case MenuAction_End: { - CloseHandle(menu); + delete menu; if (param1 != -1) { @@ -377,7 +379,7 @@ public void Handler_VoteFinishedGeneric(Handle menu, int num_votes, int num_clie public int GetCurrentStage() { - int iLevelCounterEnt = FindEntityByTargetname(INVALID_ENT_REFERENCE, "Level_Counter", "math_counter"); + int iLevelCounterEnt = FindEntityByTargetname(INVALID_ENT_REFERENCE, "LevelCounter", "math_counter"); int offset = FindDataMapInfo(iLevelCounterEnt, "m_OutValue"); int iCounterVal = RoundFloat(GetEntDataFloat(iLevelCounterEnt, offset)); @@ -428,4 +430,4 @@ public int FindEntityByTargetname(int entity, const char[] sTargetname, const ch } } return INVALID_ENT_REFERENCE; -} +} \ No newline at end of file diff --git a/MapAdmin/configs/MapAdmin.cfg b/MapAdmin/configs/MapAdmin.cfg deleted file mode 100644 index 40649e36..00000000 --- a/MapAdmin/configs/MapAdmin.cfg +++ /dev/null @@ -1,3137 +0,0 @@ -"maps" -{ - "ze_Ancient_wrath_v1_fix2" - { - "adminroom" "-1446.649292 2565.642822 70.031311" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#1100931:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#1100968:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#1100986:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#1100992:Press" - } - } - } - } - - "ze_avalanche_b6" - { - "adminroom" "-6611.015137 -10353.966797 -1093.947510" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#1442088:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#1442207:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#1442267:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#1442260:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#1442384:Press" - } - } - } - } - - "ze_castlevania_v1_3" - { - "adminroom" "286.144928 -395.411438 -8023.295898" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#842009:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#842353:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#842367:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#842381:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#842395:Press" - } - } - "6" - { - "name" "Stage 6" - "triggers" - { - "0" "6" - } - "actions" - { - "0" "#842409:Press" - } - } - } - } - - "ze_christmas_beta3f" - { - "adminroom" "1350.582886 -2878.954346 459.998840" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#483691:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "1" "#483685:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "1" "#483663:Press" - } - } - "3" - { - "name" "Added NORMAL MODE" - "triggers" - { - "0" "normal+" - } - "actions" - { - "0" "#968314:Press" - } - } - "4" - { - "name" "Added EXTREME MODE" - "triggers" - { - "0" "extreme+" - } - "actions" - { - "0" "#968338:Press" - } - } - } - } - - "ze_fapescape_rote_v1_3f" - { - "adminroom" "12.488744 15103.370117 1504.031250" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#269908:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#269897:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - "1" "normal3" - } - "actions" - { - "0" "#269894:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - "1" "extreme1" - } - "actions" - { - "0" "#269947:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - "1" "extreme2" - } - "actions" - { - "0" "#269986:Press" - } - } - "5" - { - "name" "Stage 6" - "triggers" - { - "0" "6" - "1" "extreme3" - } - "actions" - { - "0" "#269989:Press" - } - } - } - } - - "ze_ffvii_cosmo_canyon_v5c3" - { - "adminroom" "6665.342773 -6283.459473 66.240921" - "stages" - { - "0" - { - "name" "Normal" - "triggers" - { - "0" "1" - "1" "normal" - } - "actions" - { - "0" "#710694:Press" - } - } - "1" - { - "name" "Hard" - "triggers" - { - "0" "2" - "1" "hard" - } - "actions" - { - "0" "#710749:Press" - } - } - "2" - { - "name" "Extreme" - "triggers" - { - "0" "3" - "1" "extreme" - "2" "ex" - } - "actions" - { - "0" "#710753:Press" - } - } - "3" - { - "name" "Rage" - "triggers" - { - "0" "4" - "1" "rage" - } - "actions" - { - "0" "#1083748:Press" - } - } - "4" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "2" "zombie" - } - "actions" - { - "0" "#710757:Press" - } - } - } - } - - "ze_FFVII_temple_ancient_v3" - { - "adminroom" "-5275.780273 -2190.979980 -407.968689" - "stages" - { - "0" - { - "name" "Normal 1" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#4228281:Press" - } - } - "1" - { - "name" "Normal 2" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#4228290:Press" - } - } - "2" - { - "name" "Extreme" - "triggers" - { - "0" "3" - "1" "ex1" - "2" "extreme1" - "3" "extreme" - "4" "ex" - } - "actions" - { - "0" "#4228295:Press" - } - } - "3" - { - "name" "Extreme 2" - "triggers" - { - "0" "4" - "1" "ex2" - "2" "extreme2" - } - "actions" - { - "0" "#4228277:Press" - } - } - } - } - - "ze_FFXII_Feywood_b3_1" - { - "adminroom" "689.568054 -3759.504150 3168.031250" - "stages" - { - "0" - { - "name" "Easy" - "triggers" - { - "0" "1" - "1" "easy" - } - "actions" - { - "0" "#2433439:Press" - } - } - "1" - { - "name" "Normal" - "triggers" - { - "0" "2" - "1" "normal" - } - "actions" - { - "0" "#2433436:Press" - } - } - "2" - { - "name" "Hard" - "triggers" - { - "0" "3" - "1" "hard" - } - "actions" - { - "0" "#2433433:Press" - } - } - "3" - { - "name" "Extreme" - "triggers" - { - "0" "4" - "1" "extreme" - "2" "ex" - } - "actions" - { - "0" "#2433430:Press" - } - } - "4" - { - "name" "Legend" - "triggers" - { - "0" "5" - "1" "legend" - } - "actions" - { - "0" "#2433427:Press" - } - } - "5" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "1" "zombie" - } - "actions" - { - "0" "#2433424:Press" - } - } - } - } - - "ze_FFXII_Paramina_Rift_v1_4" - { - "adminroom" "-13049.566406 1272.054077 128.031311" - "stages" - { - "0" - { - "name" "Normal" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#867908:Press" - } - } - "1" - { - "name" "Normal 2" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#867942:Press" - } - } - "2" - { - "name" "Insane" - "triggers" - { - "0" "3" - "1" "insane" - } - "actions" - { - "0" "#867932:Press" - } - } - "3" - { - "name" "Insane 2" - "triggers" - { - "0" "4" - "1" "insane2" - } - "actions" - { - "0" "#867947:Press" - } - } - } - } - - "ze_gris_css" - { - "adminroom" "306.926575 2363.775146 6426.031250" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#340112:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#339967:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#340048:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#542058:Press" - } - } - } - } - - "ze_fapescape_v1_2" - { - "adminroom" "-9217.688477 -8193.571289 576.031311" - "stages" - { - "0" - { - "name" "Nomral 1" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#2722:Press" - } - } - "1" - { - "name" "Normal 2" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#2724:Press" - } - } - "2" - { - "name" "Normal 3" - "triggers" - { - "0" "3" - "1" "normal3" - } - "actions" - { - "0" "#2726:Press" - } - } - "4" - { - "name" "Extreme 1" - "triggers" - { - "0" "4" - "1" "extreme" - "2" "ex" - "3" "ex1" - } - "actions" - { - "0" "#4470:Press" - } - } - "5" - { - "name" "Extreme 2" - "triggers" - { - "0" "5" - "1" "extreme2" - "2" "ex2" - } - "actions" - { - "0" "#4468:Press" - } - } - "6" - { - "name" "Extreme 3" - "triggers" - { - "0" "6" - "1" "extreme3" - "2" "ex3" - } - "actions" - { - "0" "#4472:Press" - } - } - } - } - - "ZE_FFVII_Mako_Reactor_V6_B08" - { - "adminroom" "2676.47 -2681.79 409.15" - "stages" - { - "0" - { - "name" "Easy" - "triggers" - { - "0" "1" - "1" "easy" - } - "actions" - { - "0" "#2327237:Press" - } - } - "1" - { - "name" "Normal" - "triggers" - { - "0" "2" - "1" "normal" - } - "actions" - { - "0" "#2327234:Press" - } - } - "2" - { - "name" "Hard" - "triggers" - { - "0" "3" - "1" "hard" - } - "actions" - { - "0" "#2327231:Press" - } - } - "4" - { - "name" "Extreme" - "triggers" - { - "0" "4" - "1" "extreme" - "2" "ex" - } - "actions" - { - "0" "#2327228:Press" - } - } - "5" - { - "name" "Insane" - "triggers" - { - "0" "5" - "1" "insane" - } - "actions" - { - "0" "#2327225:Press" - } - } - "6" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "1" "zombie" - } - "actions" - { - "0" "#2326977:Press" - } - } - } - } - - "ze_FFVII_Mako_Reactor_v5_3" - { - "adminroom" "-4579.24 -3607.97 1281.53" - "stages" - { - "0" - { - "name" "Normal" - "triggers" - { - "0" "1" - "1" "normal" - } - "actions" - { - "0" "#140688:Press" - } - } - "1" - { - "name" "Hard" - "triggers" - { - "0" "2" - "1" "hard" - } - "actions" - { - "0" "#140684:Press" - } - } - "2" - { - "name" "Extreme" - "triggers" - { - "0" "3" - "1" "extreme" - "2" "ex" - "3" "ex1" - } - "actions" - { - "0" "#140680:Press" - } - } - "3" - { - "name" "Extreme 2" - "triggers" - { - "0" "4" - "1" "extreme2" - "3" "ex2" - } - "actions" - { - "0" "#140676:Press" - } - } - "4" - { - "name" "ZM Mode" - "triggers" - { - "0" "zombie" - "1" "zm" - "2" "9" - } - "actions" - { - "0" "#140668:Press" - } - } - "5" - { - "name" "Ext2 Ulti-Heal" - "triggers" - { - "0" "ulti" - "1" "heal" - "2" "ultiheal" - "3" "5" - } - "actions" - { - "0" "#100000:FireUser1" - } - } - "6" - { - "name" "Ext2 Special Lasers" - "triggers" - { - "0" "laser" - } - "actions" - { - "0" "#100001:FireUser1" - } - } - "7" - { - "name" "Ext3 Hellz" - "triggers" - { - "0" "hellz" - "1" "7" - } - "actions" - { - "0" "#100002:FireUser1" - } - } - "8" - { - "name" "Ext3 Zombieden" - "triggers" - { - "0" "zombieden" - "1" "6" - } - "actions" - { - "0" "#100003:FireUser1" - } - } - "9" - { - "name" "Race Zombieden" - "triggers" - { - "0" "race" - "1" "8" - } - "actions" - { - "0" "#100004:FireUser1" - } - } - } - } - - "ze_FFXII_Westersand_v7_2" - { - "adminroom" "-3232.12 -2758.98 2440.66" - "stages" - { - "0" - { - "name" "Normal" - "triggers" - { - "0" "1" - "1" "normal" - } - "actions" - { - "0" "#257297:Press" - } - } - "1" - { - "name" "Hard" - "triggers" - { - "0" "2" - "1" "hard" - } - "actions" - { - "0" "#257302:Press" - } - } - "2" - { - "name" "Extreme" - "triggers" - { - "0" "3" - "1" "ex" - "2" "extreme" - } - "actions" - { - "0" "#257307:Press" - } - } - "4" - { - "name" "Epic" - "triggers" - { - "0" "4" - "1" "epic" - } - "actions" - { - "0" "#257312:Press" - } - } - "5" - { - "name" "God" - "triggers" - { - "0" "5" - "1" "god" - } - "actions" - { - "0" "#257317:Press" - } - } - "6" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "1" "zombie" - } - "actions" - { - "0" "#257322:Press" - } - } - } - } - - "ze_FFXII_Westersand_v8zeta1" - { - "adminroom" "-9388.13 -2761.42 2445.43" - "stages" - { - "0" - { - "name" "Hard" - "triggers" - { - "0" "1" - "1" "hard" - } - "actions" - { - "0" "#257302:Press" - } - } - "1" - { - "name" "Extreme" - "triggers" - { - "0" "2" - "1" "ex" - "2" "extreme" - } - "actions" - { - "0" "#257307:Press" - } - } - "2" - { - "name" "Epic" - "triggers" - { - "0" "3" - "1" "epic" - } - "actions" - { - "0" "#257312:Press" - } - } - "4" - { - "name" "God" - "triggers" - { - "0" "4" - "1" "god" - } - "actions" - { - "0" "#257317:Press" - } - } - "5" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "1" "zombie" - } - "actions" - { - "0" "#3098636:Press" - } - } - "6" - { - "name" "Added INSANE DIFFICULTY" - "triggers" - { - "0" "insane+" - "1" "addinsane" - } - "actions" - { - "0" "#257280:Press" - } - } - "7" - { - "name" "Removed INSANE DIFFICULTY" - "triggers" - { - "0" "insane-" - "1" "reminsane" - } - "actions" - { - "0" "#3078868:Press" - } - } - "8" - { - "name" "Event Mode" - "triggers" - { - "0" "event" - } - "actions" - { - "0" "#3078876:Press" - } - } - } - } - - "ze_harry_potter_v1_3" - { - "adminroom" "13483.09 6717.95 11890.92" - } - - "ze_harry_potter_v2_1" - { - "adminroom" "13501.326172 6999.011230 11886.922852" - } - - "ze_infected_sewers_v6_2" - { - "adminroom" "-5249.76 3126.35 446.41" - "stages" - { - "0" - { - "name" "Easy" - "triggers" - { - "0" "1" - "1" "easy" - } - "actions" - { - "0" "#1598086:Press" - } - } - "1" - { - "name" "Normal" - "triggers" - { - "0" "2" - "1" "normal" - } - "actions" - { - "0" "#1598090:Press" - } - } - "2" - { - "name" "Hard" - "triggers" - { - "0" "3" - "1" "hard" - } - "actions" - { - "0" "#1598094:Press" - } - } - } - } - - "ze_l0v0l_a7" - { - "adminroom" "-14473.577148 -14502.405273 -969.968689" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#131:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#142:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#149:Press" - } - } - } - } - - "ze_lila_panic_escape_v3_1" - { - "adminroom" "-1813.513916 945.182617 -69" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#216150:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#216190:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#216194:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#216198:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#216202:Press" - } - } - "5" - { - "name" "Stage 6" - "triggers" - { - "0" "6" - } - "actions" - { - "0" "#216206:Press" - } - } - "6" - { - "name" "Stage 7" - "triggers" - { - "0" "7" - } - "actions" - { - "0" "#216210:Press" - } - } - "7" - { - "name" "Stage 8" - "triggers" - { - "0" "8" - } - "actions" - { - "0" "#216214:Press" - } - } - "8" - { - "name" "Stage 9" - "triggers" - { - "0" "9" - } - "actions" - { - "0" "#216218:Press" - } - } - - } - } - - "ze_LOTR_Isengard_v2_3" - { - "adminroom" "3476.222900 -428.928711 -36.733688" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#4028283:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#4028292:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#4028300:Press" - } - } - } - } - - "ze_lotr_minas_tirith_v2_2fix" - { - "adminroom" "12978.165039 -2229.674805 12512.031250" - } - - "ze_lotr_minas_tirith_v3_5" - { - "adminroom" "12978.165039 -2229.674805 12512.031250" - "stages" - { - "0" - { - "name" "Normal 1" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#6231276:Press" // stage 1 button - "1" "#6939367:Press" // rm extreme button - } - } - "1" - { - "name" "Normal 2" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#5154340:Press" // stage 2 button - "1" "#6939367:Press" // rm extreme button - } - } - "2" - { - "name" "Normal 3" - "triggers" - { - "0" "3" - "1" "normal3" - } - "actions" - { - "0" "#5154373:Press" // stage 3 button - "1" "#6939367:Press" // rm extreme button - } - } - "3" - { - "name" "Normal 4" - "triggers" - { - "0" "4" - "1" "normal4" - } - "actions" - { - "0" "#5154280:Press" // stage 4 button - "1" "#6939367:Press" // rm extreme button - } - } - "4" - { - "name" "Extreme 1" - "triggers" - { - "0" "5" - "1" "ex1" - "2" "ex" - "3" "etreme" - "4" "extreme1" - } - "actions" - { - "0" "#6231276:Press" // stage 1 button - "1" "#5154576:Press" // extreme button - } - } - "5" - { - "name" "Extreme 2" - "triggers" - { - "0" "6" - "1" "ex2" - "2" "extreme2" - } - "actions" - { - "0" "#5154340:Press" // stage 2 button - "1" "#5154576:Press" // extreme button - } - } - "6" - { - "name" "Extreme 3" - "triggers" - { - "0" "7" - "1" "ex3" - "2" "extreme3" - } - "actions" - { - "0" "#5154373:Press" // stage 3 button - "1" "#5154576:Press" // extreme button - } - } - "7" - { - "name" "Extreme 4" - "triggers" - { - "0" "8" - "1" "ex4" - "2" "extreme4" - } - "actions" - { - "0" "#5154280:Press" // stage 4 button - "1" "#5154576:Press" // extreme button - } - } - } - } - - "ze_minecraft_adventure_v1_2c" - { - "adminroom" "268.823669 -921.844055 6064.031250" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#185465:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#185473:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#185478:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#185483:Press" - } - } - } - } - - "ze_paper_escaper_v7" - { - "adminroom" "266.188873 -446.516846 240.031311" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#3780:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#3782:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#3784:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#3841:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#3784:Press" - } - } - "5" - { - "name" "Stage 6" - "triggers" - { - "0" "6" - } - "actions" - { - "0" "#3841:Press" - } - } - } - } - - "ze_pirates_port_royal_v3_6" - { - "adminroom" "-2672.09 5697.04 -531.09" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#2769:Press" - } - } - "1" - { - "name" "Level 2: >> CANNON <<" - "triggers" - { - "0" "2" - "1" "cannon" - } - "actions" - { - "0" "#2767:Press" - } - } - "2" - { - "name" "Level 3: >> PIRATE <<" - "triggers" - { - "0" "3" - "1" "pirate" - } - "actions" - { - "0" "#2765:Press" - } - } - "3" - { - "name" "Level 4: >> BARBOSSA <<" - "triggers" - { - "0" "4" - "1" "barbossa" - } - "actions" - { - "0" "#2763:Press" - } - } - "4" - { - "name" "Level 5: >> KRAKEN <<" - "triggers" - { - "0" "5" - "1" "kraken" - } - "actions" - { - "0" "#4490:Press" - } - } - } - } - - "ze_pirates_port_royal_v5_4s2" - { - "adminroom" "-4612.97 9527.14 -366.96" - } - - "ze_lolxd_final_s" - { - "adminroom" "-13556.65 197.77 805.44" - } - - "ze_predator_ultimate_v3" - { - "adminroom" "-2042.76 3029.01 2569.07" - "stages" - { - "0" - { - "name" "Normal" - "triggers" - { - "0" "1" - "1" "normal" - } - "actions" - { - "0" "#3757225:Press" - } - } - "1" - { - "name" "Hard" - "triggers" - { - "0" "2" - "1" "hard" - } - "actions" - { - "0" "#3757222:Press" - } - } - "2" - { - "name" "Hyper" - "triggers" - { - "0" "3" - "1" "hyper" - } - "actions" - { - "0" "#3757219:Press" - } - } - "3" - { - "name" "Ultimate" - "triggers" - { - "0" "4" - "1" "ultimate" - } - "actions" - { - "0" "#3757228:Press" - } - } - } - } - - "ze_prototype_v2" - { - "adminroom" "-347.31 986.22 64.70" - "stages" - { - "0" - { - "name" "Mission 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#115085:Press" - } - } - "1" - { - "name" "Mission 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#115093:Press" - } - } - "2" - { - "name" "Mission 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#115101:Press" - } - } - "3" - { - "name" "ZM Mode" - "triggers" - { - "0" "zm" - "0" "zombie" - } - "actions" - { - "0" "#534460:Press" - } - } - } - } - - "ze_rizomata_z33s" - { - "adminroom" "22.209089 16.095177 -2087.968750" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#570954:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#570976:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#570979:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#948617:Press" - } - } - } - } - - "ze_sandstorm_f" - { - "adminroom" "-10640.294922 -1552.716064 669.635193" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#9828097:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#9828110:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#9828128:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#9828146:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#12723242:Press" - } - } - "5" - { - "name" "ZM Mode" - "triggers" - { - "0" "6" - "1" "zm" - "2" "zombie" - } - "actions" - { - "0" "#14136163:Press" - } - } - } - } - - "ze_santassination_css2" - { - "adminroom" "-7.021196 -0.119221 11584.031250" - "stages" - { - "0" - { - "name" "Prologue: Death of a king (NORMAL MODE)" - "triggers" - { - "0" "1" - "1" "normal1" - } - "actions" - { - "0" "#57821:Press" // Prologue button - "1" "#2306057:Press" // remove extreme button - } - } - "1" - { - "name" "Act I: Christmas is coming (NORMAL MODE)" - "triggers" - { - "0" "2" - "1" "normal2" - } - "actions" - { - "0" "#57837:Press" // Act I button - "1" "#2306057:Press" // remove extreme button - } - } - "2" - { - "name" "Act II: Coal for everyone (NORMAL MODE)" - "triggers" - { - "0" "3" - "1" "normal3" - } - "actions" - { - "0" "#57840:Press" // Act II button - "1" "#2306057:Press" // remove extreme button - } - } - "3" - { - "name" "Act III: Enging Christmas (NORMAL MODE)" - "triggers" - { - "0" "4" - "1" "normal4" - } - "actions" - { - "0" "#57843:Press" // Act III button - "1" "#2306057:Press" // remove extreme button - } - } - "4" - { - "name" "Prologue: Death of a king (EXTREME MODE)" - "triggers" - { - "0" "5" - "1" "extreme1" - "2" "ex" - "3" "ex1" - } - "actions" - { - "0" "#57821:Press" // Prologue button - "1" "#2219432:Press" // add extreme button - } - } - "5" - { - "name" "Act I: Christmas is coming (EXTREME MODE)" - "triggers" - { - "0" "6" - "1" "extreme2" - "2" "ex2" - } - "actions" - { - "0" "#57837:Press" // Act I button - "1" "#2219432:Press" // add extreme button - } - } - "6" - { - "name" "Act II: Coal for everyone (EXTREME MODE)" - "triggers" - { - "0" "7" - "1" "extreme3" - "2" "ex3" - } - "actions" - { - "0" "#57840:Press" // Act II button - "1" "#2219432:Press" // add extreme button - } - } - "7" - { - "name" "Act III: Enging Christmas (EXTREME MODE)" - "triggers" - { - "0" "8" - "1" "extreme4" - "2" "ex4" - } - "actions" - { - "0" "#57843:Press" // Act III button - "1" "#2219432:Press" // add extreme button - } - } - } - } - - "ze_Serpentis_Temple_v1_1" - { - "adminroom" "-13042.00 -13471.50 -509.16" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#343718:Press" - } - } - "1" - { - "name" "Level 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#343738:Press" - } - } - "2" - { - "name" "Level 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#615958:Press" - } - } - "3" - { - "name" "Level 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#1064597:Press" - } - } - "4" - { - "name" "Level 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "#2071913:Press" - } - } - } - } - - "ze_shroomforest_v4_5" - { - "adminroom" "-1867.50 -1771.51 -126.69" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#182467:Press" - } - } - "1" - { - "name" "Level 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#182493:Press" - } - } - "2" - { - "name" "Level 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#182510:Press" - } - } - "3" - { - "name" "Extreme 1" - "triggers" - { - "0" "4" - "1" "ex1" - "2" "extreme1" - } - "actions" - { - "0" "#1403403:Press" - } - } - "4" - { - "name" "Extreme 2" - "triggers" - { - "0" "5" - "1" "ex2" - "2" "extreme2" - } - "actions" - { - "0" "#1403440:Press" - } - } - "5" - { - "name" "Extreme 3" - "triggers" - { - "0" "6" - "1" "ex3" - "2" "extreme3" - } - "actions" - { - "0" "#1403466:Press" - } - } - } - } - - "ze_shroomforest2_v1" - { - "adminroom" "3730.17 2574.71 1230.34" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#1332:Press" - } - } - "1" - { - "name" "Level 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#1334:Press" - } - } - "2" - { - "name" "Level 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#1336:Press" - } - } - "3" - { - "name" "Extreme 1" - "triggers" - { - "0" "4" - "1" "ex1" - "2" "extreme1" - } - "actions" - { - "0" "#1153758:Press" - } - } - "4" - { - "name" "Extreme 2" - "triggers" - { - "0" "5" - "1" "ex2" - "2" "extreme2" - } - "actions" - { - "0" "#1823:Press" - } - } - "5" - { - "name" "Extreme 3" - "triggers" - { - "0" "6" - "1" "ex3" - "2" "extreme3" - } - "actions" - { - "0" "#1825:Press" - } - } - "6" - { - "name" "The End" - "triggers" - { - "0" "7" - "1" "theend" - "2" "end" - } - "actions" - { - "0" "#635101:Press" - } - } - } - } - - "ze_shroomforest3_b3" - { - "adminroom" "655.395874 5227.343750 5894.031250" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#545062:Press" - } - } - "1" - { - "name" "Level 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#545065:Press" - } - } - "2" - { - "name" "Level 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#545068:Press" - } - } - "3" - { - "name" "Extreme 1" - "triggers" - { - "0" "4" - "1" "ex1" - "2" "extreme1" - } - "actions" - { - "0" "#545130:Press" - } - } - "4" - { - "name" "Extreme 2" - "triggers" - { - "0" "5" - "1" "ex2" - "2" "extreme2" - } - "actions" - { - "0" "#545074:Press" - } - } - "5" - { - "name" "Extreme 3" - "triggers" - { - "0" "6" - "1" "ex3" - "2" "extreme3" - } - "actions" - { - "0" "#545077:Press" - } - } - - } - } - - "ze_slender_escape_b4" - { - "adminroom" "-394.413605 15300.344727 64.031311" - "stages" - { - "0" - { - "name" "Stage 1: >> PRISON <<" - "triggers" - { - "0" "1" - "1" "prison" - } - "actions" - { - "0" "#887486:Press" - } - } - "1" - { - "name" "Stage 2: >> SCHOOL <<" - "triggers" - { - "0" "2" - "1" "school" - } - "actions" - { - "0" "#887489:Press" - } - } - "2" - { - "name" "Stage 3: >> FOREST <<" - "triggers" - { - "0" "3" - "1" "forest" - } - "actions" - { - "0" "#887505:Press" - } - } - "3" - { - "name" "Stage 4: >> MANSION <<" - "triggers" - { - "0" "4" - "1" "mansion" - } - "actions" - { - "0" "#938542:Press" - } - } - "4" - { - "name" "Survival 1" - "triggers" - { - "0" "5" - "1" "zm1" - } - "actions" - { - "0" "#156149:Press" - } - } - "5" - { - "name" "Survival 2" - "triggers" - { - "0" "6" - "1" "zm2" - } - "actions" - { - "0" "#156169:Press" - } - } - "6" - { - "name" "Survival 3" - "triggers" - { - "0" "7" - "1" "zm3" - } - "actions" - { - "0" "#156164:Press" - } - } - "7" - { - "name" "Final Madness Mode" - "triggers" - { - "0" "8" - "0" "final" - } - "actions" - { - "0" "#778562:Press" - } - } - } - } - - "ze_stalker_ultimate_v2_3" - { - "adminroom" "2845.753662 -7843.855957 -5103.968750" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - "1" "Level1" - } - "actions" - { - "0" "#332556:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - "1" "Level2" - } - "actions" - { - "0" "#332550:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - "1" "Level3" - } - "actions" - { - "0" "#332536:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - "1" "Level4" - } - "actions" - { - "0" "#1100216:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - "1" "Level5" - } - "actions" - { - "0" "#1348021:Press" - } - } - } - } - - "ze_stalker_ultimate_v3" - { - "adminroom" "2845.753662 -7843.855957 -5103.968750" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - "1" "Level1" - } - "actions" - { - "0" "#332556:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - "1" "Level2" - } - "actions" - { - "0" "#332550:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - "1" "Level3" - } - "actions" - { - "0" "#332536:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - "1" "Level4" - } - "actions" - { - "0" "#1100216:Press" - } - } - "4" - { - "name" "Stage 5" - "triggers" - { - "0" "5" - "1" "Level5" - } - "actions" - { - "0" "#1348021:Press" - } - } - } - } - - "ze_sunlight_v2_0" - { - "adminroom" "-4858.08 681.00 1663.40" - "stages" - { - "0" - { - "name" "Stage I" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#452847:Press" - } - } - "1" - { - "name" "Stage II" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#452832:Press" - } - } - "2" - { - "name" "Stage III" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#452825:Press" - } - } - "3" - { - "name" "Stage IV" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "#452837:Press" - } - } - "4" - { - "name" "ZM Mode" - "triggers" - { - "0" "zombie" - "1" "zm" - "2" "5" - } - "actions" - { - "0" "#452842:Press" - } - } - } - } - - "ze_tesv_skyrim_v4fix" - { - "adminroom" "508.16 -7632.75 2724.31" - "stages" - { - "0" - { - "name" "Stage 1: >> Helgen <<" - "triggers" - { - "0" "1" - "1" "helgen" - } - "actions" - { - "0" "#6769:Press" - } - } - "1" - { - "name" "Stage 2: >> Whiterun <<" - "triggers" - { - "0" "2" - "1" "whiterun" - } - "actions" - { - "0" "#6771:Press" - } - } - "2" - { - "name" "Stage 3: >> Road To Dwemer Ruins <<" - "triggers" - { - "0" "3" - "1" "road" - } - "actions" - { - "0" "#6777:Press" - } - } - "3" - { - "name" "Stage 4: >> Dwemer ruins <<" - "triggers" - { - "0" "4" - "1" "ruins" - } - "actions" - { - "0" "#6773:Press" - } - } - "4" - { - "name" "Stage 5: >> Sovngarde <<" - "triggers" - { - "0" "5" - "1" "sovngarde" - } - "actions" - { - "0" "#6775:Press" - } - } - } - } - - "ze_tyranny_v5fix" - { - "adminroom" "7715.86 -14011.46 136.26" - "stages" - { - "0" - { - "name" "Level 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "lvl1_button:Press" - } - } - "1" - { - "name" "Level 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "lvl2_button:Press" - } - } - "2" - { - "name" "Level 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "lvl3_button:Press" - } - } - "3" - { - "name" "Level 4" - "triggers" - { - "0" "4" - } - "actions" - { - "0" "lvl4_button:Press" - } - } - "4" - { - "name" "Level 5" - "triggers" - { - "0" "5" - } - "actions" - { - "0" "lvl5_button:Press" - } - } - "5" - { - "name" "Level 6" - "triggers" - { - "0" "6" - } - "actions" - { - "0" "lvl6_button:Press" - } - } - } - } - - "ze_UT2004_Convoy_v2_2_1" - { - "adminroom" "5681.272949 -1445.944946 64.031311" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - "1" "novice" - } - "actions" - { - "0" "#329341:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - "1" "experienced" - } - "actions" - { - "0" "#329398:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - "1" "masterful" - } - "actions" - { - "0" "#329403:Press" - } - } - "3" - { - "name" "Stage 4" - "triggers" - { - "0" "4" - "1" "godlike" - } - "actions" - { - "0" "#329408:Press" - } - } - } - } - - "ze_johnny_nukem_beta5" - { - "adminroom" "1042.988037 5565.441895 3841.496582" - "stages" - { - "0" - { - "name" "Stage 1" - "triggers" - { - "0" "1" - } - "actions" - { - "0" "#287012:Press" - } - } - "1" - { - "name" "Stage 2" - "triggers" - { - "0" "2" - } - "actions" - { - "0" "#287069:Press" - } - } - "2" - { - "name" "Stage 3" - "triggers" - { - "0" "3" - } - "actions" - { - "0" "#287097:Press" - } - } - } - } -} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ZE_FFVII_Mako_Reactor_V6_B08.cfg b/MapAdmin/configs/mapadmin/ZE_FFVII_Mako_Reactor_V6_B08.cfg new file mode 100644 index 00000000..b99ee8a9 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ZE_FFVII_Mako_Reactor_V6_B08.cfg @@ -0,0 +1,86 @@ +"mapadmin" +{ + "adminroom" "2676.47 -2681.79 409.15" + "stages" + { + "0" + { + "name" "Easy" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#2327237:Press" + } + } + "1" + { + "name" "Normal" + "triggers" + { + "0" "2" + "1" "normal" + } + "actions" + { + "0" "#2327234:Press" + } + } + "2" + { + "name" "Hard" + "triggers" + { + "0" "3" + "1" "hard" + } + "actions" + { + "0" "#2327231:Press" + } + } + "4" + { + "name" "Extreme" + "triggers" + { + "0" "4" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#2327228:Press" + } + } + "5" + { + "name" "Insane" + "triggers" + { + "0" "5" + "1" "insane" + } + "actions" + { + "0" "#2327225:Press" + } + } + "6" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "1" "zombie" + } + "actions" + { + "0" "#2326977:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_8bit_v4b.cfg b/MapAdmin/configs/mapadmin/ze_8bit_v4b.cfg new file mode 100644 index 00000000..3b6bcfd5 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_8bit_v4b.cfg @@ -0,0 +1,92 @@ +"mapadmin" +{ + "adminroom" "-7405.279785 3687.374756 283.031311" + "stages" + { + "0" + { + "name" "[STAGE 1 NORMAL]" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#176126:Press" + } + } + "1" + { + "name" "[STAGE 2 NORMAL]" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#176143:Press" + } + } + "2" + { + "name" "[STAGE 3 NORMAL]" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#176149:Press" + } + } + "3" + { + "name" "[STAGE 1 EXTREME]" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#176161:Press" + } + } + "4" + { + "name" "[STAGE 2 EXTREME]" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#176158:Press" + } + } + "5" + { + "name" "[STAGE 3 EXTREME]" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#176155:Press" + } + } + "6" + { + "name" "[FINAL STAGE]" + "triggers" + { + "0" "7" + "1" "zm" + } + "actions" + { + "0" "#176173:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_Ancient_wrath_v1_fix2.cfg b/MapAdmin/configs/mapadmin/ze_Ancient_wrath_v1_fix2.cfg new file mode 100644 index 00000000..8248d0ca --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Ancient_wrath_v1_fix2.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "-1446.649292 2565.642822 70.031311" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1100931:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1100968:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1100986:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1100992:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v3_1.cfg b/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v3_1.cfg new file mode 100644 index 00000000..325aa1fa --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v3_1.cfg @@ -0,0 +1,75 @@ +"mapadmin" +{ + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "Level_Normal:FireUser1" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "Level_Hard:FireUser1" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + "2" "ex" + "3" "ex1" + } + "actions" + { + "0" "Level_Extreme:FireUser1" + } + } + "3" + { + "name" "Extreme 2" + "triggers" + { + "0" "4" + "1" "extreme2" + "3" "ex2" + } + "actions" + { + "0" "Level_Extreme2:FireUser1" + } + } + "4" + { + "name" "ZM Mode" + "triggers" + { + "0" "zombie" + "1" "zm" + "2" "5" + } + "actions" + { + "0" "Level_ZM:FireUser1" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v5_3.cfg b/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v5_3.cfg new file mode 100644 index 00000000..f5d1309e --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFVII_Mako_Reactor_v5_3.cfg @@ -0,0 +1,142 @@ +"mapadmin" +{ + "adminroom" "-4579.24 -3607.97 1281.53" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#140688:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#140684:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + "2" "ex" + "3" "ex1" + } + "actions" + { + "0" "#140680:Press" + } + } + "3" + { + "name" "Extreme 2" + "triggers" + { + "0" "4" + "1" "extreme2" + "3" "ex2" + } + "actions" + { + "0" "#140676:Press" + } + } + "4" + { + "name" "ZM Mode" + "triggers" + { + "0" "zombie" + "1" "zm" + "2" "9" + } + "actions" + { + "0" "#140668:Press" + } + } + "5" + { + "name" "Ext2 Ulti-Heal" + "triggers" + { + "0" "ulti" + "1" "heal" + "2" "ultiheal" + "3" "5" + } + "actions" + { + "0" "#100000:FireUser1" + } + } + "6" + { + "name" "Ext2 Special Lasers" + "triggers" + { + "0" "laser" + } + "actions" + { + "0" "#100001:FireUser1" + } + } + "7" + { + "name" "Ext3 Hellz" + "triggers" + { + "0" "hellz" + "1" "7" + } + "actions" + { + "0" "#100002:FireUser1" + } + } + "8" + { + "name" "Ext3 Zombieden" + "triggers" + { + "0" "zombieden" + "1" "6" + } + "actions" + { + "0" "#100003:FireUser1" + } + } + "9" + { + "name" "Race Zombieden" + "triggers" + { + "0" "race" + "1" "8" + } + "actions" + { + "0" "#100004:FireUser1" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3.cfg b/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3.cfg new file mode 100644 index 00000000..300b2833 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3.cfg @@ -0,0 +1,63 @@ +"mapadmin" +{ + "adminroom" "-5275.780273 -2190.979980 -407.968689" + "stages" + { + "0" + { + "name" "Normal 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#4228281:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#4228290:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "ex1" + "2" "extreme1" + "3" "extreme" + "4" "ex" + } + "actions" + { + "0" "#4228295:Press" + } + } + "3" + { + "name" "Extreme 2" + "triggers" + { + "0" "4" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#4228277:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3_3.cfg b/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3_3.cfg new file mode 100644 index 00000000..6d4a0da3 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFVII_temple_ancient_v3_3.cfg @@ -0,0 +1,63 @@ +"mapadmin" +{ + "adminroom" "-13938.937500 464.462067 -511.461304" + "stages" + { + "0" + { + "name" "Normal 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#4700149:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#4700142:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "ex1" + "2" "extreme1" + "3" "extreme" + "4" "ex" + } + "actions" + { + "0" "#4700145:Press" + } + } + "3" + { + "name" "Extreme 2" + "triggers" + { + "0" "4" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#4700154:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFXII_Feywood_b3_1.cfg b/MapAdmin/configs/mapadmin/ze_FFXII_Feywood_b3_1.cfg new file mode 100644 index 00000000..59afd956 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFXII_Feywood_b3_1.cfg @@ -0,0 +1,86 @@ +"mapadmin" +{ + "adminroom" "689.568054 -3759.504150 3168.031250" + "stages" + { + "0" + { + "name" "Easy" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#2433439:Press" + } + } + "1" + { + "name" "Normal" + "triggers" + { + "0" "2" + "1" "normal" + } + "actions" + { + "0" "#2433436:Press" + } + } + "2" + { + "name" "Hard" + "triggers" + { + "0" "3" + "1" "hard" + } + "actions" + { + "0" "#2433433:Press" + } + } + "3" + { + "name" "Extreme" + "triggers" + { + "0" "4" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#2433430:Press" + } + } + "4" + { + "name" "Legend" + "triggers" + { + "0" "5" + "1" "legend" + } + "actions" + { + "0" "#2433427:Press" + } + } + "5" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "1" "zombie" + } + "actions" + { + "0" "#2433424:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFXII_Paramina_Rift_v1_4.cfg b/MapAdmin/configs/mapadmin/ze_FFXII_Paramina_Rift_v1_4.cfg new file mode 100644 index 00000000..808516e1 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFXII_Paramina_Rift_v1_4.cfg @@ -0,0 +1,59 @@ +"mapadmin" +{ + "adminroom" "-13049.566406 1272.054077 128.031311" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#867908:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#867942:Press" + } + } + "2" + { + "name" "Insane" + "triggers" + { + "0" "3" + "1" "insane" + } + "actions" + { + "0" "#867932:Press" + } + } + "3" + { + "name" "Insane 2" + "triggers" + { + "0" "4" + "1" "insane2" + } + "actions" + { + "0" "#867947:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v7_2.cfg b/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v7_2.cfg new file mode 100644 index 00000000..11289488 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v7_2.cfg @@ -0,0 +1,86 @@ +"mapadmin" +{ + "adminroom" "-3232.12 -2758.98 2440.66" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#257297:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#257302:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "ex" + "2" "extreme" + } + "actions" + { + "0" "#257307:Press" + } + } + "4" + { + "name" "Epic" + "triggers" + { + "0" "4" + "1" "epic" + } + "actions" + { + "0" "#257312:Press" + } + } + "5" + { + "name" "God" + "triggers" + { + "0" "5" + "1" "god" + } + "actions" + { + "0" "#257317:Press" + } + } + "6" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "1" "zombie" + } + "actions" + { + "0" "#257322:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v8zeta1.cfg b/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v8zeta1.cfg new file mode 100644 index 00000000..c6aa7e1d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFXII_Westersand_v8zeta1.cfg @@ -0,0 +1,111 @@ +"mapadmin" +{ + "adminroom" "-9388.13 -2761.42 2445.43" + "stages" + { + "0" + { + "name" "Hard" + "triggers" + { + "0" "1" + "1" "hard" + } + "actions" + { + "0" "#257302:Press" + } + } + "1" + { + "name" "Extreme" + "triggers" + { + "0" "2" + "1" "ex" + "2" "extreme" + } + "actions" + { + "0" "#257307:Press" + } + } + "2" + { + "name" "Epic" + "triggers" + { + "0" "3" + "1" "epic" + } + "actions" + { + "0" "#257312:Press" + } + } + "4" + { + "name" "God" + "triggers" + { + "0" "4" + "1" "god" + } + "actions" + { + "0" "#257317:Press" + } + } + "5" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "1" "zombie" + } + "actions" + { + "0" "#3098636:Press" + } + } + "6" + { + "name" "Added INSANE DIFFICULTY" + "triggers" + { + "0" "insane+" + "1" "addinsane" + } + "actions" + { + "0" "#257280:Press" + } + } + "7" + { + "name" "Removed INSANE DIFFICULTY" + "triggers" + { + "0" "insane-" + "1" "reminsane" + } + "actions" + { + "0" "#3078868:Press" + } + } + "8" + { + "name" "Event Mode" + "triggers" + { + "0" "event" + } + "actions" + { + "0" "#3078876:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_FFXIV_Wanderers_Palace_v5_2f.cfg b/MapAdmin/configs/mapadmin/ze_FFXIV_Wanderers_Palace_v5_2f.cfg new file mode 100644 index 00000000..d7db056a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_FFXIV_Wanderers_Palace_v5_2f.cfg @@ -0,0 +1,59 @@ +"mapadmin" +{ + "adminroom" "-8724.382813 -10993.325195 -1337.474365" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#1523238:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#1523232:Press" + } + } + "2" + { + "name" "Savage" + "triggers" + { + "0" "3" + "1" "savage" + } + "actions" + { + "0" "#1523226:Press" + } + } + "3" + { + "name" "Ultimate" + "triggers" + { + "0" "4" + "1" "ultimate" + } + "actions" + { + "0" "#1523214:Press" + } + } + } +} diff --git a/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_b2.cfg b/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_b2.cfg new file mode 100644 index 00000000..b676229b --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_b2.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "8868.744141 -604.063293 -905.763062" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#377014:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#362551:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#362565:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_v1_2.cfg b/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_v1_2.cfg new file mode 100644 index 00000000..44428de1 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Genso_Of_Last_v1_2.cfg @@ -0,0 +1,19 @@ +"mapadmin" +{ + "adminroom" "16.813068 -13227.184570 -171.689285" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#206347:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_GoT_The_North_b4.cfg b/MapAdmin/configs/mapadmin/ze_GoT_The_North_b4.cfg new file mode 100644 index 00000000..41259727 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_GoT_The_North_b4.cfg @@ -0,0 +1,31 @@ +"mapadmin" +{ + "adminroom" "7211.381836 -12013.371094 10680.239258" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#3310808:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#3310862:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_Holmes_Escape_pf_2014c.cfg b/MapAdmin/configs/mapadmin/ze_Holmes_Escape_pf_2014c.cfg new file mode 100644 index 00000000..9ade2c41 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Holmes_Escape_pf_2014c.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-6056.183105 867.056946 -675.643188" + "stages" + { + "0" + { + "name" "Curse of white face" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#449853:Press" + } + } + "1" + { + "name" "Black castle" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#315912:Press" + } + } + "2" + { + "name" "Expert mode" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#315909:Press" + } + } + "3" + { + "name" "Black world" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#315906:Press" + } + } + "4" + { + "name" "Final escape" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "##400085:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_LOTR_Isengard_v2_3.cfg b/MapAdmin/configs/mapadmin/ze_LOTR_Isengard_v2_3.cfg new file mode 100644 index 00000000..d3e97c8a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_LOTR_Isengard_v2_3.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "3476.222900 -428.928711 -36.733688" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#4028283:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#4028292:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#4028300:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_PoncherMonkey_Shooter_v3_5.cfg b/MapAdmin/configs/mapadmin/ze_PoncherMonkey_Shooter_v3_5.cfg new file mode 100644 index 00000000..92e09480 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_PoncherMonkey_Shooter_v3_5.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "-1540.635498 4207.054688 847.378357" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#315095:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#315231:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1246917:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_S_A_M_a40_css.cfg b/MapAdmin/configs/mapadmin/ze_S_A_M_a40_css.cfg new file mode 100644 index 00000000..7b548ef2 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_S_A_M_a40_css.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "-1472.260010 -3158.615967 140.753235" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#358730:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#358768:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#466003:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#722034:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1387271:Press" + } + } + "5" + { + "name" "Stage zm" + "triggers" + { + "0" "zm" + } + "actions" + { + "0" "#2517304:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_Serpentis_Temple_v1_1.cfg b/MapAdmin/configs/mapadmin/ze_Serpentis_Temple_v1_1.cfg new file mode 100644 index 00000000..fdd3871a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Serpentis_Temple_v1_1.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-13042.00 -13471.50 -509.16" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#343718:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#343738:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#615958:Press" + } + } + "3" + { + "name" "Level 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1064597:Press" + } + } + "4" + { + "name" "Level 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#2071913:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_UT2004_Convoy_v2_2_1.cfg b/MapAdmin/configs/mapadmin/ze_UT2004_Convoy_v2_2_1.cfg new file mode 100644 index 00000000..71c7101a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_UT2004_Convoy_v2_2_1.cfg @@ -0,0 +1,59 @@ +"mapadmin" +{ + "adminroom" "5681.272949 -1445.944946 64.031311" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + "1" "novice" + } + "actions" + { + "0" "#329341:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + "1" "experienced" + } + "actions" + { + "0" "#329398:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + "1" "masterful" + } + "actions" + { + "0" "#329403:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + "1" "godlike" + } + "actions" + { + "0" "#329408:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_Zombie_Factory_v1.cfg b/MapAdmin/configs/mapadmin/ze_Zombie_Factory_v1.cfg new file mode 100644 index 00000000..d6388142 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_Zombie_Factory_v1.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "-992.919556 -3146.085449 241.359329" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#102754:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#102770:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#102783:Press" + } + } + "3" + { + "name" "Stage zm" + "triggers" + { + "0" "zm" + } + "actions" + { + "0" "#102784:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_abandoned_project_v1_2.cfg b/MapAdmin/configs/mapadmin/ze_abandoned_project_v1_2.cfg new file mode 100644 index 00000000..2d736cb8 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_abandoned_project_v1_2.cfg @@ -0,0 +1,46 @@ +"mapadmin" +{ + "adminroom" "4936.497070 578.257629 -4584.858887" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#4386:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#4388:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + } + "actions" + { + "0" "#4390:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_aepp_nano_grid2_b2s.cfg b/MapAdmin/configs/mapadmin/ze_aepp_nano_grid2_b2s.cfg new file mode 100644 index 00000000..357b4ca9 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_aepp_nano_grid2_b2s.cfg @@ -0,0 +1,31 @@ +"mapadmin" +{ + "adminroom" "10866.024414 11227.990234 830.064026" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#14625:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#181156:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_alien_vs_predator_v5.cfg b/MapAdmin/configs/mapadmin/ze_alien_vs_predator_v5.cfg new file mode 100644 index 00000000..8365b48d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_alien_vs_predator_v5.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "2809.809814 -694.194519 73.533035" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#5825308:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#5825305:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#5825302:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#5825299:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_ancient_wrath_v2_test27.cfg b/MapAdmin/configs/mapadmin/ze_ancient_wrath_v2_test27.cfg new file mode 100644 index 00000000..ac483d48 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_ancient_wrath_v2_test27.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "-1450.517334 2488.845947 101.652344" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1100931:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1100968:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1100986:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1100992:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_ashen_keep_v0_3.cfg b/MapAdmin/configs/mapadmin/ze_ashen_keep_v0_3.cfg new file mode 100644 index 00000000..ec5a38b7 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_ashen_keep_v0_3.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "-1853.386597 -11068.916992 -486.637756" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1061110:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1061107:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1061104:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1061101:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_avalanche_b6.cfg b/MapAdmin/configs/mapadmin/ze_avalanche_b6.cfg new file mode 100644 index 00000000..2e59e3c2 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_avalanche_b6.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-6611.015137 -10353.966797 -1093.947510" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1442088:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1442207:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1442267:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1442260:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1442384:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta3.cfg b/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta3.cfg new file mode 100644 index 00000000..e1fd2013 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta3.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "-6657.747559 -10274.492188 -1032.784668" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1442088:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1442207:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1442267:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1442260:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1442384:Press" + } + } + "5" + { + "name" "Stage 6" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#3114829:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta7.cfg b/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta7.cfg new file mode 100644 index 00000000..14c913df --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_avalanche_reboot_beta7.cfg @@ -0,0 +1,74 @@ +"mapadmin" +{ + "adminroom" "-6657.747559 -10274.492188 -1032.784668" + "stages" + { + "0" + { + "name" "Normal 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#1442088:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#1442207:Press" + } + } + "2" + { + "name" "Normal 3" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#1442267:Press" + } + } + "3" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "extreme1" + "2" "ex1" + } + "actions" + { + "0" "#1442260:Press" + } + } + "4" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "extreme2" + "2" "ex2" + } + "actions" + { + "0" "#1442384:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_bioshock_v6_3.cfg b/MapAdmin/configs/mapadmin/ze_bioshock_v6_3.cfg new file mode 100644 index 00000000..c3808ec0 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_bioshock_v6_3.cfg @@ -0,0 +1,72 @@ +"mapadmin" +{ + "adminroom" "-4376.840332 -9982.022461 9197.487305" + "stages" + { + "0" + { + "name" "Chapter 1 - Welcome to Rapture" + "triggers" + { + "0" "1" + "1" "rapture" + } + "actions" + { + "0" "#7555848:Press" + } + } + "1" + { + "name" "Chapter 2 - Siren Alley & Fort Frolic" + "triggers" + { + "0" "2" + "1" "frolic" + } + "actions" + { + "0" "#7555851:Press" + } + } + "2" + { + "name" "Chapter 3 - Arcadia" + "triggers" + { + "0" "3" + "1" "arcadia" + } + "actions" + { + "0" "#7555854:Press" + } + } + "3" + { + "name" "Chapter 4 - Hephaestus" + "triggers" + { + "0" "4" + "1" "hephaestus" + } + "actions" + { + "0" "#7555857:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + "1" "1999" + } + "actions" + { + "0" "#7555860:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_boredom_v543656.cfg b/MapAdmin/configs/mapadmin/ze_boredom_v543656.cfg new file mode 100644 index 00000000..c8197a88 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_boredom_v543656.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "4487.248047 1216.612793 1616.262207" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#648844:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#649099:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#649114:Press" + } + } + "3" + { + "name" "Level 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#649111:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_castlevania_64_v1.cfg b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1.cfg new file mode 100644 index 00000000..9c3b9a0d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1.cfg @@ -0,0 +1,31 @@ +"mapadmin" +{ + "adminroom" "-1792 2816 5152" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#838977:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "1" "#839012:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_1.cfg b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_1.cfg new file mode 100644 index 00000000..1039d851 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_1.cfg @@ -0,0 +1,31 @@ +"mapadmin" +{ + "adminroom" "-1792 2816 5152" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#838977:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#839012:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_2.cfg b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_2.cfg new file mode 100644 index 00000000..1039d851 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_castlevania_64_v1_2.cfg @@ -0,0 +1,31 @@ +"mapadmin" +{ + "adminroom" "-1792 2816 5152" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#838977:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#839012:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_castlevania_v1_3.cfg b/MapAdmin/configs/mapadmin/ze_castlevania_v1_3.cfg new file mode 100644 index 00000000..737d0bed --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_castlevania_v1_3.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "246.324722 -267.897736 -8126.265137" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#842009:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#842353:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#842367:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#842381:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#842395:Press" + } + } + "5" + { + "name" "Stage 6" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#842409:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_christmas_beta3f.cfg b/MapAdmin/configs/mapadmin/ze_christmas_beta3f.cfg new file mode 100644 index 00000000..3f3cd91f --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_christmas_beta3f.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "1350.582886 -2878.954346 459.998840" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#483691:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "1" "#483685:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "1" "#483663:Press" + } + } + "3" + { + "name" "Added NORMAL MODE" + "triggers" + { + "0" "normal+" + } + "actions" + { + "0" "#968314:Press" + } + } + "4" + { + "name" "Added EXTREME MODE" + "triggers" + { + "0" "extreme+" + } + "actions" + { + "0" "#968338:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_deadcore_s6.cfg b/MapAdmin/configs/mapadmin/ze_deadcore_s6.cfg new file mode 100644 index 00000000..13099813 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_deadcore_s6.cfg @@ -0,0 +1,19 @@ +"mapadmin" +{ + "adminroom" "-14782.794922 -14907.069336 -16122.736328" + "stages" + { + "0" + { + "name" "Stage D" + "triggers" + { + "0" "d" + } + "actions" + { + "0" "#3471212:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_destruction_of_exorath_re3.cfg b/MapAdmin/configs/mapadmin/ze_destruction_of_exorath_re3.cfg new file mode 100644 index 00000000..9a9a659b --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_destruction_of_exorath_re3.cfg @@ -0,0 +1,73 @@ +"mapadmin" +{ + "adminroom" "3681.885498 847.534180 789.836914" + "stages" + { + "0" + { + "name" "Easy" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#4568115:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#4568127:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#4568133:Press" + } + } + "3" + { + "name" "God" + "triggers" + { + "0" "4" + "1" "god" + } + "actions" + { + "0" "#4568139:Press" + } + } + "4" + { + "name" "Impossible" + "triggers" + { + "0" "5" + "1" "impossible" + } + "actions" + { + "0" "#4568145:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_dev_r4a.cfg b/MapAdmin/configs/mapadmin/ze_dev_r4a.cfg new file mode 100644 index 00000000..910d8234 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_dev_r4a.cfg @@ -0,0 +1,109 @@ +"mapadmin" +{ + "adminroom" "-770.184509 -12172.327148 2496.088867" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#10506:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#10541:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#44473:Press" + } + } + "3" + { + "name" "Drift Mode" + "triggers" + { + "0" "drift" + "1" "driftmode" + } + "actions" + { + "0" "#8837:Press" + } + } + "4" + { + "name" "Spook Mode" + "triggers" + { + "0" "spook" + "1" "spookmode" + "2" "nolights" + } + "actions" + { + "0" "#8399:Press" + } + } + "5" + { + "name" "Random Mode" + "triggers" + { + "0" "random" + "1" "randommode" + } + "actions" + { + "0" "#86705:Press" + } + } + "6" + { + "name" "Items Mode" + "triggers" + { + "0" "items" + "1" "itemsmode" + } + "actions" + { + "0" "#88946:Press" + } + } + "7" + { + "name" "Sub Mode" + "triggers" + { + "0" "sub" + "1" "submode" + } + "actions" + { + "0" "#37185:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_doom3_v1.cfg b/MapAdmin/configs/mapadmin/ze_doom3_v1.cfg new file mode 100644 index 00000000..36d320ce --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_doom3_v1.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "-6633.227539 11664.859375 -4374.592285" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#582644:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#582678:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1069484:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_evernight_a3_4_css2.cfg b/MapAdmin/configs/mapadmin/ze_evernight_a3_4_css2.cfg new file mode 100644 index 00000000..0aa8eb4e --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_evernight_a3_4_css2.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "-15464.225586 -6962.232910 1047.328979" + "stages" + { + "0" + { + "name" "[Act I] Initial Contact" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#195760:Press" + } + } + "1" + { + "name" "[Act II] Misty Mystery" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#195763:Press" + } + } + "2" + { + "name" "[Act III] Checkmate" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1264165:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_fapescape_rote_v1_3f.cfg b/MapAdmin/configs/mapadmin/ze_fapescape_rote_v1_3f.cfg new file mode 100644 index 00000000..79467d7c --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_fapescape_rote_v1_3f.cfg @@ -0,0 +1,85 @@ +"mapadmin" +{ + "adminroom" "12.488744 15103.370117 1504.031250" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#269908:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#269897:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#269894:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + "1" "extreme1" + } + "actions" + { + "0" "#269947:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + "1" "extreme2" + } + "actions" + { + "0" "#269986:Press" + } + } + "5" + { + "name" "Stage 6" + "triggers" + { + "0" "6" + "1" "extreme3" + } + "actions" + { + "0" "#269989:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_fapescape_v1_2.cfg b/MapAdmin/configs/mapadmin/ze_fapescape_v1_2.cfg new file mode 100644 index 00000000..2d29ae9d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_fapescape_v1_2.cfg @@ -0,0 +1,89 @@ +"mapadmin" +{ + "adminroom" "-9217.688477 -8193.571289 576.031311" + "stages" + { + "0" + { + "name" "Nomral 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#2722:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#2724:Press" + } + } + "2" + { + "name" "Normal 3" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#2726:Press" + } + } + "4" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "extreme" + "2" "ex" + "3" "ex1" + } + "actions" + { + "0" "#4470:Press" + } + } + "5" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "extreme2" + "2" "ex2" + } + "actions" + { + "0" "#4468:Press" + } + } + "6" + { + "name" "Extreme 3" + "triggers" + { + "0" "6" + "1" "extreme3" + "2" "ex3" + } + "actions" + { + "0" "#4472:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5.cfg b/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5.cfg new file mode 100644 index 00000000..4a48ade2 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5.cfg @@ -0,0 +1,73 @@ +"mapadmin" +{ + "adminroom" "6665.342773 -6283.459473 66.240921" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#710694:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#710749:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#710753:Press" + } + } + "3" + { + "name" "Rage" + "triggers" + { + "0" "4" + "1" "rage" + } + "actions" + { + "0" "#1083748:Press" + } + } + "4" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "2" "zombie" + } + "actions" + { + "0" "#710757:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5fix.cfg b/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5fix.cfg new file mode 100644 index 00000000..0c1cd447 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_ffvii_cosmo_canyon_v5fix.cfg @@ -0,0 +1,72 @@ +"mapadmin" +{ + "adminroom" "6680.512207 -6203.695801 116.873871" + "stages" + { + "0" + { + "name" "**NORMAL MODE**" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#710694:Press" + } + } + "1" + { + "name" "**HARD MODE**" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#710749:Press" + } + } + "2" + { + "name" "**EXTREME MODE**" + "triggers" + { + "0" "3" + "1" "extreme" + } + "actions" + { + "0" "#710753:Press" + } + } + "3" + { + "name" "**RAGE MODE**" + "triggers" + { + "0" "4" + "1" "rage" + } + "actions" + { + "0" "#1083748:Press" + } + } + "4" + { + "name" "**ZM MODE**" + "triggers" + { + "0" "5" + "1" "zm" + } + "actions" + { + "0" "#710757:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_ffxiv_wanderers_palace_v4_5s.cfg b/MapAdmin/configs/mapadmin/ze_ffxiv_wanderers_palace_v4_5s.cfg new file mode 100644 index 00000000..410df14b --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_ffxiv_wanderers_palace_v4_5s.cfg @@ -0,0 +1,73 @@ +"mapadmin" +{ + "adminroom" "-1523.394165 -12715.484375 -5362.004395" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#85476:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#85479:Press" + } + } + "2" + { + "name" "Extreme" + "triggers" + { + "0" "3" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#121544:Press" + } + } + "3" + { + "name" "Savage" + "triggers" + { + "0" "4" + "1" "savage" + } + "actions" + { + "0" "#242363:Press" + } + } + "4" + { + "name" "Ultimate" + "triggers" + { + "0" "5" + "1" "ultimate" + } + "actions" + { + "0" "#469134:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_grau_s2.cfg b/MapAdmin/configs/mapadmin/ze_grau_s2.cfg new file mode 100644 index 00000000..6a7d3a39 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_grau_s2.cfg @@ -0,0 +1,56 @@ +"mapadmin" +{ + "adminroom" "33.261944 160.677948 -1848.398926" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#163829:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#163839:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#269846:Press" + } + } + "3" + { + "name" "RTV Level" + "triggers" + { + "0" "4" + "1" "rtv" + } + "actions" + { + "0" "#500390:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_gris_css.cfg b/MapAdmin/configs/mapadmin/ze_gris_css.cfg new file mode 100644 index 00000000..44f26d03 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_gris_css.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "306.926575 2363.775146 6426.031250" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#340112:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#339967:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#340048:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#542058:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_harry_potter_v1_3.cfg b/MapAdmin/configs/mapadmin/ze_harry_potter_v1_3.cfg new file mode 100644 index 00000000..ffa3b004 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_harry_potter_v1_3.cfg @@ -0,0 +1,4 @@ +"mapadmin" +{ + "adminroom" "13483.09 6717.95 11890.92" +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_harry_potter_v2_1.cfg b/MapAdmin/configs/mapadmin/ze_harry_potter_v2_1.cfg new file mode 100644 index 00000000..5be46d68 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_harry_potter_v2_1.cfg @@ -0,0 +1,4 @@ +"mapadmin" +{ + "adminroom" "13501.326172 6999.011230 11886.922852" +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_hsc_a4_5.cfg b/MapAdmin/configs/mapadmin/ze_hsc_a4_5.cfg new file mode 100644 index 00000000..3152c8ed --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_hsc_a4_5.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "1217.849976 -4114.792480 512.031311" + "stages" + { + "0" + { + "name" "STAGE 1 - HYPER SPACE CUBE" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#55647:Press" + } + } + "1" + { + "name" "STAGE 2 - HARMONIOUS SPATIAL CREATION" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#55707:Press" + } + } + "2" + { + "name" "STAGE 3 - HEAVENLY SPACED CONTAINMENT" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#55734:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_illya_b3.cfg b/MapAdmin/configs/mapadmin/ze_illya_b3.cfg new file mode 100644 index 00000000..435a8e24 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_illya_b3.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "11884.680664 14576.375977 13912.777344" + "stages" + { + "0" + { + "name" ">>Chapter 1 - Hitching a ride<<" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#925852:Press" + } + } + "1" + { + "name" ">>Chapter 2 - Welcome to Illya City<<" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#925860:Press" + } + } + "2" + { + "name" ">>Chapter 3 - Illya Mining Dept.<<" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#925868:Press" + } + } + "3" + { + "name" ">>Chapter 4 - To the Depths<<" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#925876:Press" + } + } + "4" + { + "name" ">>Chapter 5 - Cutbacks<<" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#925884:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_2.cfg b/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_2.cfg new file mode 100644 index 00000000..98124295 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_2.cfg @@ -0,0 +1,46 @@ +"mapadmin" +{ + "adminroom" "-5249.76 3126.35 446.41" + "stages" + { + "0" + { + "name" "Easy" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#1598086:Press" + } + } + "1" + { + "name" "Normal" + "triggers" + { + "0" "2" + "1" "normal" + } + "actions" + { + "0" "#1598090:Press" + } + } + "2" + { + "name" "Hard" + "triggers" + { + "0" "3" + "1" "hard" + } + "actions" + { + "0" "#1598094:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_5.cfg b/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_5.cfg new file mode 100644 index 00000000..37a1e5c9 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_infected_sewers_v6_5.cfg @@ -0,0 +1,46 @@ +"mapadmin" +{ + "adminroom" "-5626.793457 -6482.035645 3323.787842" + "stages" + { + "0" + { + "name" "EASY DIFFICULTY" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#1598086:Press" + } + } + "1" + { + "name" "NORMAL DIFFICULTY" + "triggers" + { + "0" "2" + "1" "normal" + } + "actions" + { + "0" "#1598090:Press" + } + } + "2" + { + "name" "HARD DIFFICULTY" + "triggers" + { + "0" "3" + "1" "hard" + } + "actions" + { + "0" "#1598094:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_johnny_nukem_b8_1.cfg b/MapAdmin/configs/mapadmin/ze_johnny_nukem_b8_1.cfg new file mode 100644 index 00000000..7075e4ee --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_johnny_nukem_b8_1.cfg @@ -0,0 +1,56 @@ +"mapadmin" +{ + "adminroom" "1025.636841 5521.234375 3840.031250" + "stages" + { + "0" + { + "name" "[Stage 1 - The Rebellion against the Frog Kingdom]" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#287012:Press" + } + } + "1" + { + "name" "[Stage 2 - The Rebellion against the Frog (Lego) Kingdom MK. II]" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#287069:Press" + } + } + "2" + { + "name" "[Stage 3 - The Betrayal of Rayvel]" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#287097:Press" + } + } + "3" + { + "name" "Enable No Balls Mode (Extreme Mode)" + "triggers" + { + "0" "extreme+" + "1" "ex+" + } + "actions" + { + "0" "#705627:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_johnny_nukem_beta5.cfg b/MapAdmin/configs/mapadmin/ze_johnny_nukem_beta5.cfg new file mode 100644 index 00000000..928bb0b4 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_johnny_nukem_beta5.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "1042.988037 5565.441895 3841.496582" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#287012:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#287069:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#287097:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_jungle_escape_v1_2.cfg b/MapAdmin/configs/mapadmin/ze_jungle_escape_v1_2.cfg new file mode 100644 index 00000000..236449ac --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_jungle_escape_v1_2.cfg @@ -0,0 +1,63 @@ +"mapadmin" +{ + "adminroom" "790.073425 2879.557373 1601.614258" + "stages" + { + "0" + { + "name" "Stage 1 : Waterfalls" + "triggers" + { + "0" "1" + "1" "waterfalls" + } + "actions" + { + "0" "#1353224:Press" + } + } + "1" + { + "name" "Stage 2 : Trees" + "triggers" + { + "0" "2" + "1" "trees" + } + "actions" + { + "0" "#1353311:Press" + } + } + "2" + { + "name" "Stage 3 : Diamond Mines" + "triggers" + { + "0" "3" + "1" "diamondmines" + "2" "diamond mines" + "3" "mines" + } + "actions" + { + "0" "#1353323:Press" + } + } + "3" + { + "name" "Stage 4 : Aztec Ruins" + "triggers" + { + "0" "4" + "1" "aztecruins" + "2" "aztec ruins" + "3" "ruins" + } + "actions" + { + "0" "#1433871:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_l0v0l_a7.cfg b/MapAdmin/configs/mapadmin/ze_l0v0l_a7.cfg new file mode 100644 index 00000000..eef414cd --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_l0v0l_a7.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "-14473.577148 -14502.405273 -969.968689" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#131:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#142:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#149:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_l0v0l_v1_4.cfg b/MapAdmin/configs/mapadmin/ze_l0v0l_v1_4.cfg new file mode 100644 index 00000000..ee1fe32d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_l0v0l_v1_4.cfg @@ -0,0 +1,60 @@ +"mapadmin" +{ + "adminroom" "-14528.515625 -14470.273438 -913.042542" + "stages" + { + "0" + { + "name" ">>> STAGE 1 : GARDEN MODE<<<" + "triggers" + { + "0" "1" + "1" "garden" + } + "actions" + { + "0" "#131:Press" + } + } + "1" + { + "name" ">>> STAGE 2 : FOREST MODE<<<" + "triggers" + { + "0" "2" + "1" "forest" + } + "actions" + { + "0" "#142:Press" + } + } + "2" + { + "name" ">>> STAGE 3 : FACILITY MODE<<<" + "triggers" + { + "0" "3" + "1" "facility" + } + "actions" + { + "0" "#149:Press" + } + } + "2" + { + "name" ">>> STAGE 0 : DARK MODE<<<" + "triggers" + { + "0" "0" + "1" "4" + "2" "dark" + } + "actions" + { + "0" "#7894561:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_last_man_standing_v5_1.cfg b/MapAdmin/configs/mapadmin/ze_last_man_standing_v5_1.cfg new file mode 100644 index 00000000..2bffa175 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_last_man_standing_v5_1.cfg @@ -0,0 +1,80 @@ +"mapadmin" +{ + "adminroom" "-1645.0 2651.0 3718.0" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#5777267:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#5777276:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#5777273:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#5777285:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#5777444:Press" + } + } + "5" + { + "name" "Add Extreme Mode" + "triggers" + { + "0" "extreme+" + "1" "ex+" + } + "actions" + { + "0" "#5777257:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_lila_panic_escape_v3_1.cfg b/MapAdmin/configs/mapadmin/ze_lila_panic_escape_v3_1.cfg new file mode 100644 index 00000000..7fa552a2 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_lila_panic_escape_v3_1.cfg @@ -0,0 +1,116 @@ +"mapadmin" +{ + "adminroom" "-1813.513916 945.182617 -69" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#216150:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#216190:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#216194:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#216198:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#216202:Press" + } + } + "5" + { + "name" "Stage 6" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#216206:Press" + } + } + "6" + { + "name" "Stage 7" + "triggers" + { + "0" "7" + } + "actions" + { + "0" "#216210:Press" + } + } + "7" + { + "name" "Stage 8" + "triggers" + { + "0" "8" + } + "actions" + { + "0" "#216214:Press" + } + } + "8" + { + "name" "Stage 9" + "triggers" + { + "0" "9" + } + "actions" + { + "0" "#216218:Press" + } + } + + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_lolxd_final_s.cfg b/MapAdmin/configs/mapadmin/ze_lolxd_final_s.cfg new file mode 100644 index 00000000..c666a2c7 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_lolxd_final_s.cfg @@ -0,0 +1,4 @@ +"mapadmin" +{ + "adminroom" "-13556.65 197.77 805.44" +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v2_2fix.cfg b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v2_2fix.cfg new file mode 100644 index 00000000..17c7196c --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v2_2fix.cfg @@ -0,0 +1,4 @@ +"mapadmin" +{ + "adminroom" "12978.165039 -2229.674805 12512.031250" +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_3.cfg b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_3.cfg new file mode 100644 index 00000000..cc8a1350 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_3.cfg @@ -0,0 +1,82 @@ +"mapadmin" +{ + "adminroom" "13048.440430 -2285.809082 12600.348633" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#6231276:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#5154340:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#5154373:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#5154280:Press" + } + } + "4" + { + "name" "Enable Extreme Mode" + "triggers" + { + "0" "extreme+" + "1" "ex+" + } + "actions" + { + "0" "#5154576:Press" + } + } + "5" + { + "name" "Disable Extreme Mode" + "triggers" + { + "0" "extreme-" + "1" "ex-" + "2" "normal+" + } + "actions" + { + "0" "#6939367:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_5.cfg b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_5.cfg new file mode 100644 index 00000000..2b1647c7 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_lotr_minas_tirith_v3_5.cfg @@ -0,0 +1,125 @@ +"mapadmin" +{ + "adminroom" "12978.165039 -2229.674805 12512.031250" + "stages" + { + "0" + { + "name" "Normal 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#6231276:Press" // stage 1 button + "1" "#6939367:Press" // rm extreme button + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#5154340:Press" // stage 2 button + "1" "#6939367:Press" // rm extreme button + } + } + "2" + { + "name" "Normal 3" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#5154373:Press" // stage 3 button + "1" "#6939367:Press" // rm extreme button + } + } + "3" + { + "name" "Normal 4" + "triggers" + { + "0" "4" + "1" "normal4" + } + "actions" + { + "0" "#5154280:Press" // stage 4 button + "1" "#6939367:Press" // rm extreme button + } + } + "4" + { + "name" "Extreme 1" + "triggers" + { + "0" "5" + "1" "ex1" + "2" "ex" + "3" "etreme" + "4" "extreme1" + } + "actions" + { + "0" "#6231276:Press" // stage 1 button + "1" "#5154576:Press" // extreme button + } + } + "5" + { + "name" "Extreme 2" + "triggers" + { + "0" "6" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#5154340:Press" // stage 2 button + "1" "#5154576:Press" // extreme button + } + } + "6" + { + "name" "Extreme 3" + "triggers" + { + "0" "7" + "1" "ex3" + "2" "extreme3" + } + "actions" + { + "0" "#5154373:Press" // stage 3 button + "1" "#5154576:Press" // extreme button + } + } + "7" + { + "name" "Extreme 4" + "triggers" + { + "0" "8" + "1" "ex4" + "2" "extreme4" + } + "actions" + { + "0" "#5154280:Press" // stage 4 button + "1" "#5154576:Press" // extreme button + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_minecraft_adventure_v1_2c.cfg b/MapAdmin/configs/mapadmin/ze_minecraft_adventure_v1_2c.cfg new file mode 100644 index 00000000..a5f86bad --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_minecraft_adventure_v1_2c.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "268.823669 -921.844055 6064.031250" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#185465:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#185473:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#185478:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#185483:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_naruto_v2_6e.cfg b/MapAdmin/configs/mapadmin/ze_naruto_v2_6e.cfg new file mode 100644 index 00000000..294d6955 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_naruto_v2_6e.cfg @@ -0,0 +1,60 @@ +"mapadmin" +{ + "adminroom" "51.407555 -15160.564453 1833.219238" + "stages" + { + "0" + { + "name" "Easy" + "triggers" + { + "0" "1" + "1" "easy" + } + "actions" + { + "0" "#806912:Press" + } + } + "1" + { + "name" "Normal" + "triggers" + { + "0" "2" + "1" "normal" + } + "actions" + { + "0" "#806909:Press" + } + } + "2" + { + "name" "Hard" + "triggers" + { + "0" "3" + "1" "hard" + } + "actions" + { + "0" "#806906:Press" + } + } + "3" + { + "name" "Extreme" + "triggers" + { + "0" "4" + "1" "extreme" + "2" "ex" + } + "actions" + { + "0" "#806903:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_onahole_v3s_fix.cfg b/MapAdmin/configs/mapadmin/ze_onahole_v3s_fix.cfg new file mode 100644 index 00000000..2a496bae --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_onahole_v3s_fix.cfg @@ -0,0 +1,88 @@ +"mapadmin" +{ + "adminroom" "24.323803 11.281137 58.926575" + "stages" + { + "0" + { + "name" "Normal 1" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#48908:Press" + } + } + "1" + { + "name" "Normal 2" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#48987:Press" + } + } + "2" + { + "name" "Normal 3" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#48991:Press" + } + } + "3" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "extreme1" + "2" "ex1" + } + "actions" + { + "0" "#48995:Press" + } + } + "4" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "extreme2" + "2" "ex2" + } + "actions" + { + "0" "#48999:Press" + } + } + "5" + { + "name" "Extreme 3" + "triggers" + { + "0" "6" + "1" "extreme3" + "2" "ex3" + } + "actions" + { + "0" "#49003:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_otakuroom_v5_6fs.cfg b/MapAdmin/configs/mapadmin/ze_otakuroom_v5_6fs.cfg new file mode 100644 index 00000000..843a77ec --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_otakuroom_v5_6fs.cfg @@ -0,0 +1,56 @@ +"mapadmin" +{ + "adminroom" "2905.678955 3724.664551 -1327.948730" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#19773:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#19796:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#47095:Press" + } + } + "3" + { + "name" "ZM Mode" + "triggers" + { + "0" "4" + "1" "zm" + } + "actions" + { + "0" "#52404:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_paper_escaper_v7.cfg b/MapAdmin/configs/mapadmin/ze_paper_escaper_v7.cfg new file mode 100644 index 00000000..aef501b2 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_paper_escaper_v7.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "266.188873 -446.516846 240.031311" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#3780:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#3782:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#3784:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#3841:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#3784:Press" + } + } + "5" + { + "name" "Stage 6" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#3841:Press" + } + } + } +} diff --git a/MapAdmin/configs/mapadmin/ze_parking_v3_1.cfg b/MapAdmin/configs/mapadmin/ze_parking_v3_1.cfg new file mode 100644 index 00000000..22f48167 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_parking_v3_1.cfg @@ -0,0 +1,70 @@ +"mapadmin" +{ + "adminroom" "-1458.971191 2451.428955 181.973175" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#48993:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#48996:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#48999:Press" + } + } + "3" + { + "name" "Enable Extreme Mode" + "triggers" + { + "0" "extreme+" + "1" "ex+" + } + "actions" + { + "0" "#49002:Press" + } + } + "4" + { + "name" "Disable Extreme Mode" + "triggers" + { + "0" "extreme-" + "1" "ex-" + "2" "normal+" + } + "actions" + { + "0" "#253157:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pidaras_v1_4fix3.cfg b/MapAdmin/configs/mapadmin/ze_pidaras_v1_4fix3.cfg new file mode 100644 index 00000000..9440d350 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pidaras_v1_4fix3.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "1840.546021 532.420776 321.302429" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1669099:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1669093:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1669096:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v3_6.cfg b/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v3_6.cfg new file mode 100644 index 00000000..5acf3f15 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v3_6.cfg @@ -0,0 +1,85 @@ +"mapadmin" +{ + "adminroom" "-2672.09 5697.04 -531.09" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#2769:Press" + } + } + "1" + { + "name" "Level 2: >> CANNON <<" + "triggers" + { + "0" "2" + "1" "cannon" + } + "actions" + { + "0" "#2767:Press" + } + } + "2" + { + "name" "Level 3: >> PIRATE <<" + "triggers" + { + "0" "3" + "1" "pirate" + } + "actions" + { + "0" "#2765:Press" + } + } + "3" + { + "name" "Level 4: >> BARBOSSA <<" + "triggers" + { + "0" "4" + "1" "barbossa" + } + "actions" + { + "0" "#2763:Press" + } + } + "4" + { + "name" "Level 5: >> KRAKEN <<" + "triggers" + { + "0" "5" + "1" "kraken" + } + "actions" + { + "0" "#4490:Press" + } + } + "5" + { + "name" "Level 6: >> KRAKEN GOD <<" + "triggers" + { + "0" "6" + "1" "kraken god" + "2" "krakengod" + } + "actions" + { + "0" "#4491:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v5_4s2.cfg b/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v5_4s2.cfg new file mode 100644 index 00000000..0e4652f0 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pirates_port_royal_v5_4s2.cfg @@ -0,0 +1,4 @@ +"mapadmin" +{ + "adminroom" "-4612.97 9527.14 -366.96" +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v7_2s.cfg b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v7_2s.cfg new file mode 100644 index 00000000..68c7dbac --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v7_2s.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "-1858.540283 -15985.220703 38.680443" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#318053:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#82953:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#132358:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#260256:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v8_6s_fix2.cfg b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v8_6s_fix2.cfg new file mode 100644 index 00000000..2c3a5925 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v8_6s_fix2.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-7945.430176 2610.128418 42.573078" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1087156:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1087170:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1087174:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1087178:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1087182:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9_1s.cfg b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9_1s.cfg new file mode 100644 index 00000000..eb881d5c --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9_1s.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-2378.661621 1734.404907 65.669640" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1107989:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1107993:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1108001:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1108005:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1108009:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9s_fix.cfg b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9s_fix.cfg new file mode 100644 index 00000000..eb881d5c --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_pkmn_adventure_v9s_fix.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-2378.661621 1734.404907 65.669640" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1107989:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1107993:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1108001:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1108005:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1108009:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_predator_ultimate_v3.cfg b/MapAdmin/configs/mapadmin/ze_predator_ultimate_v3.cfg new file mode 100644 index 00000000..7e9a2322 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_predator_ultimate_v3.cfg @@ -0,0 +1,59 @@ +"mapadmin" +{ + "adminroom" "-2042.76 3029.01 2569.07" + "stages" + { + "0" + { + "name" "Normal" + "triggers" + { + "0" "1" + "1" "normal" + } + "actions" + { + "0" "#3757225:Press" + } + } + "1" + { + "name" "Hard" + "triggers" + { + "0" "2" + "1" "hard" + } + "actions" + { + "0" "#3757222:Press" + } + } + "2" + { + "name" "Hyper" + "triggers" + { + "0" "3" + "1" "hyper" + } + "actions" + { + "0" "#3757219:Press" + } + } + "3" + { + "name" "Ultimate" + "triggers" + { + "0" "4" + "1" "ultimate" + } + "actions" + { + "0" "#3757228:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_prototype_v2.cfg b/MapAdmin/configs/mapadmin/ze_prototype_v2.cfg new file mode 100644 index 00000000..195b440a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_prototype_v2.cfg @@ -0,0 +1,56 @@ +"mapadmin" +{ + "adminroom" "-347.31 986.22 64.70" + "stages" + { + "0" + { + "name" "Mission 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#115085:Press" + } + } + "1" + { + "name" "Mission 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#115093:Press" + } + } + "2" + { + "name" "Mission 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#115101:Press" + } + } + "3" + { + "name" "ZM Mode" + "triggers" + { + "0" "zm" + "0" "zombie" + } + "actions" + { + "0" "#534460:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_rizomata_s1_3.cfg b/MapAdmin/configs/mapadmin/ze_rizomata_s1_3.cfg new file mode 100644 index 00000000..819d8d40 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_rizomata_s1_3.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "122.142609 1.250381 -2078.356934" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#2169166:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#2169163:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#2169160:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#2171307:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#2172672:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_rizomata_z33s.cfg b/MapAdmin/configs/mapadmin/ze_rizomata_z33s.cfg new file mode 100644 index 00000000..6fd7a581 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_rizomata_z33s.cfg @@ -0,0 +1,55 @@ +"mapadmin" +{ + "adminroom" "22.209089 16.095177 -2087.968750" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#570954:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#570976:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#570979:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#948617:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_sandstorm_f.cfg b/MapAdmin/configs/mapadmin/ze_sandstorm_f.cfg new file mode 100644 index 00000000..f8f904be --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_sandstorm_f.cfg @@ -0,0 +1,81 @@ +"mapadmin" +{ + "adminroom" "-10640.294922 -1552.716064 669.635193" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#9828097:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#9828110:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#9828128:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#9828146:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#12723242:Press" + } + } + "5" + { + "name" "ZM Mode" + "triggers" + { + "0" "6" + "1" "zm" + "2" "zombie" + } + "actions" + { + "0" "#14136163:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_sandstorm_f1.cfg b/MapAdmin/configs/mapadmin/ze_sandstorm_f1.cfg new file mode 100644 index 00000000..5c3e9e11 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_sandstorm_f1.cfg @@ -0,0 +1,81 @@ +"mapadmin" +{ + "adminroom" "-10576.686523 -1527.944336 718.659363" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#9828097:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#9828110:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#9828128:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#9828146:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#12723242:Press" + } + } + "5" + { + "name" "ZM Mode" + "triggers" + { + "0" "6" + "1" "zm" + "2" "zombie" + } + "actions" + { + "0" "#14136163:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_santassination_css2.cfg b/MapAdmin/configs/mapadmin/ze_santassination_css2.cfg new file mode 100644 index 00000000..dbdb84a3 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_santassination_css2.cfg @@ -0,0 +1,124 @@ +"mapadmin" +{ + "adminroom" "-7.021196 -0.119221 11584.031250" + "stages" + { + "0" + { + "name" "Prologue: Death of a king (NORMAL MODE)" + "triggers" + { + "0" "1" + "1" "normal1" + } + "actions" + { + "0" "#57821:Press" // Prologue button + "1" "#2306057:Press" // remove extreme button + } + } + "1" + { + "name" "Act I: Christmas is coming (NORMAL MODE)" + "triggers" + { + "0" "2" + "1" "normal2" + } + "actions" + { + "0" "#57837:Press" // Act I button + "1" "#2306057:Press" // remove extreme button + } + } + "2" + { + "name" "Act II: Coal for everyone (NORMAL MODE)" + "triggers" + { + "0" "3" + "1" "normal3" + } + "actions" + { + "0" "#57840:Press" // Act II button + "1" "#2306057:Press" // remove extreme button + } + } + "3" + { + "name" "Act III: Enging Christmas (NORMAL MODE)" + "triggers" + { + "0" "4" + "1" "normal4" + } + "actions" + { + "0" "#57843:Press" // Act III button + "1" "#2306057:Press" // remove extreme button + } + } + "4" + { + "name" "Prologue: Death of a king (EXTREME MODE)" + "triggers" + { + "0" "5" + "1" "extreme1" + "2" "ex" + "3" "ex1" + } + "actions" + { + "0" "#57821:Press" // Prologue button + "1" "#2219432:Press" // add extreme button + } + } + "5" + { + "name" "Act I: Christmas is coming (EXTREME MODE)" + "triggers" + { + "0" "6" + "1" "extreme2" + "2" "ex2" + } + "actions" + { + "0" "#57837:Press" // Act I button + "1" "#2219432:Press" // add extreme button + } + } + "6" + { + "name" "Act II: Coal for everyone (EXTREME MODE)" + "triggers" + { + "0" "7" + "1" "extreme3" + "2" "ex3" + } + "actions" + { + "0" "#57840:Press" // Act II button + "1" "#2219432:Press" // add extreme button + } + } + "7" + { + "name" "Act III: Enging Christmas (EXTREME MODE)" + "triggers" + { + "0" "8" + "1" "extreme4" + "2" "ex4" + } + "actions" + { + "0" "#57843:Press" // Act III button + "1" "#2219432:Press" // add extreme button + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_shroomforest2_v1.cfg b/MapAdmin/configs/mapadmin/ze_shroomforest2_v1.cfg new file mode 100644 index 00000000..e71fefd8 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_shroomforest2_v1.cfg @@ -0,0 +1,99 @@ +"mapadmin" +{ + "adminroom" "3730.17 2574.71 1230.34" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#1332:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#1334:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#1336:Press" + } + } + "3" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "ex1" + "2" "extreme1" + } + "actions" + { + "0" "#1153758:Press" + } + } + "4" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#1823:Press" + } + } + "5" + { + "name" "Extreme 3" + "triggers" + { + "0" "6" + "1" "ex3" + "2" "extreme3" + } + "actions" + { + "0" "#1825:Press" + } + } + "6" + { + "name" "The End" + "triggers" + { + "0" "7" + "1" "theend" + "2" "end" + } + "actions" + { + "0" "#635101:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_shroomforest3_b3.cfg b/MapAdmin/configs/mapadmin/ze_shroomforest3_b3.cfg new file mode 100644 index 00000000..0f33c02e --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_shroomforest3_b3.cfg @@ -0,0 +1,85 @@ +"mapadmin" +{ + "adminroom" "655.395874 5227.343750 5894.031250" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#545062:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#545065:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#545068:Press" + } + } + "3" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "ex1" + "2" "extreme1" + } + "actions" + { + "0" "#545130:Press" + } + } + "4" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#545074:Press" + } + } + "5" + { + "name" "Extreme 3" + "triggers" + { + "0" "6" + "1" "ex3" + "2" "extreme3" + } + "actions" + { + "0" "#545077:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_shroomforest3_b6_2.cfg b/MapAdmin/configs/mapadmin/ze_shroomforest3_b6_2.cfg new file mode 100644 index 00000000..fc530fb6 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_shroomforest3_b6_2.cfg @@ -0,0 +1,108 @@ +"mapadmin" +{ + "adminroom" "4803.248047 819.460449 1083.125610" + "stages" + { + "0" + { + "name" "[Level1] Explore the tree" + "triggers" + { + "0" "1" + "1" "normal1" + "2" "deadtree" + "3" "tree" + } + "actions" + { + "0" "#2168710:Press" + } + } + "1" + { + "name" "[Level2] Explore the caves" + "triggers" + { + "0" "2" + "1" "normal2" + "2" "caves" + } + "actions" + { + "0" "#2168713:Press" + } + } + "2" + { + "name" "[Level3] Discover a new world" + "triggers" + { + "0" "3" + "1" "normal3" + "2" "pokeball" + } + "actions" + { + "0" "#2168716:Press" + } + } + "3" + { + "name" "[Extreme1] Take over the castle" + "triggers" + { + "0" "4" + "1" "extreme1" + "2" "ex1" + "3" "treeex" + } + "actions" + { + "0" "#2168719:Press" + } + } + "4" + { + "name" "[Extreme2] Fight the cursed skeletons" + "triggers" + { + "0" "5" + "1" "extreme2" + "2" "ex2" + "3" "cavesex" + } + "actions" + { + "0" "#2168722:Press" + } + } + "5" + { + "name" "[Extreme3] Escape this world" + "triggers" + { + "0" "6" + "1" "extreme3" + "2" "ex3" + "3" "pokeballex" + } + "actions" + { + "0" "#2168725:Press" + } + } + "6" + { + "name" "[TimeLoop] Change the future" + "triggers" + { + "0" "7" + "1" "timeloop" + } + "actions" + { + "0" "#2168728:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_shroomforest_v4_5.cfg b/MapAdmin/configs/mapadmin/ze_shroomforest_v4_5.cfg new file mode 100644 index 00000000..e2d0f999 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_shroomforest_v4_5.cfg @@ -0,0 +1,85 @@ +"mapadmin" +{ + "adminroom" "-1867.50 -1771.51 -126.69" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#182467:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#182493:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#182510:Press" + } + } + "3" + { + "name" "Extreme 1" + "triggers" + { + "0" "4" + "1" "ex1" + "2" "extreme1" + } + "actions" + { + "0" "#1403403:Press" + } + } + "4" + { + "name" "Extreme 2" + "triggers" + { + "0" "5" + "1" "ex2" + "2" "extreme2" + } + "actions" + { + "0" "#1403440:Press" + } + } + "5" + { + "name" "Extreme 3" + "triggers" + { + "0" "6" + "1" "ex3" + "2" "extreme3" + } + "actions" + { + "0" "#1403466:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_slender_escape_b4.cfg b/MapAdmin/configs/mapadmin/ze_slender_escape_b4.cfg new file mode 100644 index 00000000..cd77f4d4 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_slender_escape_b4.cfg @@ -0,0 +1,111 @@ +"mapadmin" +{ + "adminroom" "-394.413605 15300.344727 64.031311" + "stages" + { + "0" + { + "name" "Stage 1: >> PRISON <<" + "triggers" + { + "0" "1" + "1" "prison" + } + "actions" + { + "0" "#887486:Press" + } + } + "1" + { + "name" "Stage 2: >> SCHOOL <<" + "triggers" + { + "0" "2" + "1" "school" + } + "actions" + { + "0" "#887489:Press" + } + } + "2" + { + "name" "Stage 3: >> FOREST <<" + "triggers" + { + "0" "3" + "1" "forest" + } + "actions" + { + "0" "#887505:Press" + } + } + "3" + { + "name" "Stage 4: >> MANSION <<" + "triggers" + { + "0" "4" + "1" "mansion" + } + "actions" + { + "0" "#938542:Press" + } + } + "4" + { + "name" "Survival 1" + "triggers" + { + "0" "5" + "1" "zm1" + } + "actions" + { + "0" "#156149:Press" + } + } + "5" + { + "name" "Survival 2" + "triggers" + { + "0" "6" + "1" "zm2" + } + "actions" + { + "0" "#156169:Press" + } + } + "6" + { + "name" "Survival 3" + "triggers" + { + "0" "7" + "1" "zm3" + } + "actions" + { + "0" "#156164:Press" + } + } + "7" + { + "name" "Final Madness Mode" + "triggers" + { + "0" "8" + "0" "final" + } + "actions" + { + "0" "#778562:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v2_3.cfg b/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v2_3.cfg new file mode 100644 index 00000000..684b2b85 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v2_3.cfg @@ -0,0 +1,72 @@ +"mapadmin" +{ + "adminroom" "2845.753662 -7843.855957 -5103.968750" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + "1" "Level1" + } + "actions" + { + "0" "#332556:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + "1" "Level2" + } + "actions" + { + "0" "#332550:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + "1" "Level3" + } + "actions" + { + "0" "#332536:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + "1" "Level4" + } + "actions" + { + "0" "#1100216:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + "1" "Level5" + } + "actions" + { + "0" "#1348021:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v3.cfg b/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v3.cfg new file mode 100644 index 00000000..684b2b85 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_stalker_ultimate_v3.cfg @@ -0,0 +1,72 @@ +"mapadmin" +{ + "adminroom" "2845.753662 -7843.855957 -5103.968750" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + "1" "Level1" + } + "actions" + { + "0" "#332556:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + "1" "Level2" + } + "actions" + { + "0" "#332550:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + "1" "Level3" + } + "actions" + { + "0" "#332536:Press" + } + } + "3" + { + "name" "Stage 4" + "triggers" + { + "0" "4" + "1" "Level4" + } + "actions" + { + "0" "#1100216:Press" + } + } + "4" + { + "name" "Stage 5" + "triggers" + { + "0" "5" + "1" "Level5" + } + "actions" + { + "0" "#1348021:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_starwars_v2fix.cfg b/MapAdmin/configs/mapadmin/ze_starwars_v2fix.cfg new file mode 100644 index 00000000..4a5b2f0a --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_starwars_v2fix.cfg @@ -0,0 +1,89 @@ +"mapadmin" +{ + "adminroom" "-7779.820801 3449.011230 -3894.803467" + "stages" + { + "0" + { + "name" "[Young Padawan MODE]" + "triggers" + { + "0" "1" + "1" "young padawan" + "2" "youngpadawan" + } + "actions" + { + "0" "#844:Press" + } + } + "1" + { + "name" "[Padawan MODE]" + "triggers" + { + "0" "2" + "1" "padawan" + } + "actions" + { + "0" "#846:Press" + } + } + "2" + { + "name" "[Jedi MODE]" + "triggers" + { + "0" "3" + "1" "jedi" + } + "actions" + { + "0" "#1307:Press" + } + } + "3" + { + "name" "[Jedi Knight MODE]" + "triggers" + { + "0" "4" + "1" "jedi knight" + "2" "jediknight" + } + "actions" + { + "0" "#1743:Press" + } + } + "4" + { + "name" "[Jedi Master MODE]" + "triggers" + { + "0" "5" + "1" "jedi master" + "2" "jedimaster" + } + "actions" + { + "0" "#1936:Press" + } + } + "5" + { + "name" "[Dark Jedi MODE]" + "triggers" + { + "0" "6" + "1" "dark jedi" + "2" "darkjedi" + } + "actions" + { + "0" "#741783:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_sunlight_v2_0.cfg b/MapAdmin/configs/mapadmin/ze_sunlight_v2_0.cfg new file mode 100644 index 00000000..62f00e46 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_sunlight_v2_0.cfg @@ -0,0 +1,69 @@ +"mapadmin" +{ + "adminroom" "-4858.08 681.00 1663.40" + "stages" + { + "0" + { + "name" "Stage I" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#452847:Press" + } + } + "1" + { + "name" "Stage II" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#452832:Press" + } + } + "2" + { + "name" "Stage III" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#452825:Press" + } + } + "3" + { + "name" "Stage IV" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#452837:Press" + } + } + "4" + { + "name" "ZM Mode" + "triggers" + { + "0" "zombie" + "1" "zm" + "2" "5" + } + "actions" + { + "0" "#452842:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b6.cfg b/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b6.cfg new file mode 100644 index 00000000..5ded2e1d --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b6.cfg @@ -0,0 +1,67 @@ +"mapadmin" +{ + "adminroom" "-878.790527 -1126.558350 -6331.038574" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#804138:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#804148:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#804151:Press" + } + } + "3" + { + "name" "Level 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#1140801:Press" + } + } + "4" + { + "name" "Level 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#1996426:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b9.cfg b/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b9.cfg new file mode 100644 index 00000000..b14d9ae3 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_super_mario_64_v2_b9.cfg @@ -0,0 +1,73 @@ +"mapadmin" +{ + "adminroom" "-1003.155029 -1095.178833 -6310.886719" + "stages" + { + "0" + { + "name" "Stage 1 : Bob-omb's Battlefield" + "triggers" + { + "0" "1" + "1" "bob-omb" + "2" "bobomb" + } + "actions" + { + "0" "#804138:Press" + } + } + "1" + { + "name" "Stage 2 : Shifting Sand Land" + "triggers" + { + "0" "2" + "1" "sand" + } + "actions" + { + "0" "#804148:Press" + } + } + "2" + { + "name" "Stage 3 : Big Boo's Haunt" + "triggers" + { + "0" "3" + "1" "boo" + } + "actions" + { + "0" "#804151:Press" + } + } + "3" + { + "name" "Stage 4 : Tick Tock Clock" + "triggers" + { + "0" "4" + "1" "clock" + } + "actions" + { + "0" "#1140801:Press" + } + } + "4" + { + "name" "ZM Level" + "triggers" + { + "0" "5" + "1" "zm" + } + "actions" + { + "0" "#1996426:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_tesv_skyrim_v4fix.cfg b/MapAdmin/configs/mapadmin/ze_tesv_skyrim_v4fix.cfg new file mode 100644 index 00000000..81c8e057 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_tesv_skyrim_v4fix.cfg @@ -0,0 +1,72 @@ +"mapadmin" +{ + "adminroom" "508.16 -7632.75 2724.31" + "stages" + { + "0" + { + "name" "Stage 1: >> Helgen <<" + "triggers" + { + "0" "1" + "1" "helgen" + } + "actions" + { + "0" "#6769:Press" + } + } + "1" + { + "name" "Stage 2: >> Whiterun <<" + "triggers" + { + "0" "2" + "1" "whiterun" + } + "actions" + { + "0" "#6771:Press" + } + } + "2" + { + "name" "Stage 3: >> Road To Dwemer Ruins <<" + "triggers" + { + "0" "3" + "1" "road" + } + "actions" + { + "0" "#6777:Press" + } + } + "3" + { + "name" "Stage 4: >> Dwemer ruins <<" + "triggers" + { + "0" "4" + "1" "ruins" + } + "actions" + { + "0" "#6773:Press" + } + } + "4" + { + "name" "Stage 5: >> Sovngarde <<" + "triggers" + { + "0" "5" + "1" "sovngarde" + } + "actions" + { + "0" "#6775:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_trials_v1fs.cfg b/MapAdmin/configs/mapadmin/ze_trials_v1fs.cfg new file mode 100644 index 00000000..718de7e7 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_trials_v1fs.cfg @@ -0,0 +1,43 @@ +"mapadmin" +{ + "adminroom" "-6655.315918 -10294.438477 145.833908" + "stages" + { + "0" + { + "name" "Stage 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#111161:Press" + } + } + "1" + { + "name" "Stage 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#111168:Press" + } + } + "2" + { + "name" "Stage 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#111174:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_tyranny_v5fix.cfg b/MapAdmin/configs/mapadmin/ze_tyranny_v5fix.cfg new file mode 100644 index 00000000..07290aff --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_tyranny_v5fix.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "7715.86 -14011.46 136.26" + "stages" + { + "0" + { + "name" "Level 1" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "lvl1_button:Press" + } + } + "1" + { + "name" "Level 2" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "lvl2_button:Press" + } + } + "2" + { + "name" "Level 3" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "lvl3_button:Press" + } + } + "3" + { + "name" "Level 4" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "lvl4_button:Press" + } + } + "4" + { + "name" "Level 5" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "lvl5_button:Press" + } + } + "5" + { + "name" "Level 6" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "lvl6_button:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/configs/mapadmin/ze_v0u0v_a6.cfg b/MapAdmin/configs/mapadmin/ze_v0u0v_a6.cfg new file mode 100644 index 00000000..3f9c3bb5 --- /dev/null +++ b/MapAdmin/configs/mapadmin/ze_v0u0v_a6.cfg @@ -0,0 +1,79 @@ +"mapadmin" +{ + "adminroom" "-13040.134766 -9026.633789 1100.503174" + "stages" + { + "0" + { + "name" ">>> STAGE 1 : SEA VILLAGE MODE <<<" + "triggers" + { + "0" "1" + } + "actions" + { + "0" "#80189:Press" + } + } + "1" + { + "name" ">>> STAGE 2 : GREEN HILL MODE <<<" + "triggers" + { + "0" "2" + } + "actions" + { + "0" "#131850:Press" + } + } + "2" + { + "name" ">>> STAGE 3 : DIRTY TOWN MODE <<<" + "triggers" + { + "0" "3" + } + "actions" + { + "0" "#823406:Press" + } + } + "3" + { + "name" ">>> STAGE 4 : LAVA VILLAGE MODE <<<" + "triggers" + { + "0" "4" + } + "actions" + { + "0" "#81980:Press" + } + } + "4" + { + "name" ">>> STAGE 5 : BURNING HILL MODE <<<" + "triggers" + { + "0" "5" + } + "actions" + { + "0" "#131886:Press" + } + } + "5" + { + "name" ">>> STAGE 6 : ARMY TOWN MODE <<<" + "triggers" + { + "0" "6" + } + "actions" + { + "0" "#823409:Press" + } + } + } +} \ No newline at end of file diff --git a/MapAdmin/scripting/MapAdmin.sp b/MapAdmin/scripting/MapAdmin.sp index a6e521c4..f4c86a1c 100644 --- a/MapAdmin/scripting/MapAdmin.sp +++ b/MapAdmin/scripting/MapAdmin.sp @@ -5,7 +5,6 @@ #include KeyValues g_Config; -bool g_Enabled = false; public Plugin myinfo = { @@ -20,16 +19,30 @@ public void OnPluginStart() { LoadTranslations("common.phrases"); + RegAdminCmd("sm_adminroom", Command_AdminRoom, ADMFLAG_GENERIC, "sm_adminroom [#userid|name]"); + RegAdminCmd("sm_stage", Command_Stage, ADMFLAG_GENERIC, "sm_stage "); +} + +public void OnMapStart() +{ + if(g_Config) + delete g_Config; + + char sMapName[PLATFORM_MAX_PATH]; + GetCurrentMap(sMapName, sizeof(sMapName)); + char sConfigFile[PLATFORM_MAX_PATH]; - BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/MapAdmin.cfg"); + BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/mapadmin/%s.cfg", sMapName); if(!FileExists(sConfigFile)) { - SetFailState("Could not find config: \"%s\"", sConfigFile); + LogMessage("Could not find mapconfig: \"%s\"", sConfigFile); return; } - g_Config = new KeyValues("maps"); + LogMessage("Found mapconfig: \"%s\"", sConfigFile); + + g_Config = new KeyValues("mapadmin"); if(!g_Config.ImportFromFile(sConfigFile)) { delete g_Config; @@ -37,26 +50,11 @@ public void OnPluginStart() return; } g_Config.Rewind(); - - RegAdminCmd("sm_adminroom", Command_AdminRoom, ADMFLAG_GENERIC, "sm_adminroom [#userid|name]"); - RegAdminCmd("sm_stage", Command_Stage, ADMFLAG_GENERIC, "sm_stage "); -} - -public void OnMapStart() -{ - g_Enabled = false; - g_Config.Rewind(); - - char sMapName[PLATFORM_MAX_PATH]; - GetCurrentMap(sMapName, sizeof(sMapName)); - - if(g_Config.JumpToKey(sMapName, false)) - g_Enabled = true; } public Action Command_AdminRoom(int client, int argc) { - if(!g_Enabled) + if(!g_Config) { ReplyToCommand(client, "[SM] The current map is not supported."); return Plugin_Handled; @@ -118,7 +116,7 @@ public Action Command_AdminRoom(int client, int argc) public Action Command_Stage(int client, int argc) { - if(!g_Enabled) + if(!g_Config) { ReplyToCommand(client, "[SM] The current map is not supported."); return Plugin_Handled; diff --git a/Meteors/scripting/Meteors.sp b/Meteors/scripting/Meteors.sp new file mode 100644 index 00000000..3ede15ff --- /dev/null +++ b/Meteors/scripting/Meteors.sp @@ -0,0 +1,431 @@ +#include +#include +#include +#include + +public Plugin myinfo = +{ + name = "Meteors", + author = "Neon", + description = "", + version = "Meteors", + url = "https://steamcommunity.com/id/n3ontm" +} + +//ambient/explosions/explode_9.wav +//models/effects/vol_light128x512.mdl + +new String:debugString[64]; + +bool g_bEnabled = false; + +public void OnPluginStart() +{ + HookEvent("round_end", OnRoundEnding); + RegAdminCmd("sm_meteors", Command_Meteors, ADMFLAG_ROOT); +} + +public void OnMapStart() +{ + g_bEnabled = false; + PrecacheModel("models/props/cs_office/vending_machine.mdl"); + CreateTimer(5.0, MeteorMain, INVALID_HANDLE, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE); +} + +public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_bEnabled = false; +} + +public Action Command_Meteors(int client, int args) +{ + if (g_bEnabled) + { + g_bEnabled = false; + CPrintToChatAll("{darkred}[Meteors] {white}%N has disabled Meteors!", client); + } + else if (!(g_bEnabled)) + { + g_bEnabled = true; + CPrintToChatAll("{darkred}[Meteors] {white}%N has enabled Meteors!", client); + } +} + +public Action MeteorMain(Handle timer) +{ + if (!(g_bEnabled)) + return; + + int victimClient = GetTargetClient() + + if (victimClient == -1) + return; + + int indicator = SpawnIndicator(victimClient); + int model = SpawnMeteor2(victimClient); + int hurt = SpawnTriggerHurt(victimClient); + int move = SpawnMoveLinear(victimClient); + int explosion = SpawnExplosion(victimClient); + int sound = SpawnAmbientGeneric(victimClient); + int particle = SpawnParticle(victimClient); + int particle2 = SpawnParticle(victimClient); + + SetVariantString("!activator"); + AcceptEntityInput(model, "SetParent", move); + + SetVariantString("!activator"); + AcceptEntityInput(hurt, "SetParent", move); + + SetVariantString("!activator"); + AcceptEntityInput(particle, "SetParent", move); + + SetVariantString("!activator"); + AcceptEntityInput(particle2, "SetParent", move); + + AcceptEntityInput(move, "Open"); +} + +public Action SpawnParticle(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_particle_system_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_particle"); + DispatchKeyValue(Entity, "effect_name", "fire_large_01"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + AcceptEntityInput(Entity, "start"); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 7000.0; + + TeleportEntity(Entity, fVector, NULL_VECTOR, NULL_VECTOR); + + return Entity; + +} + +public Action SpawnAmbientGeneric(int client) +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_sound"); + DispatchKeyValue(Entity, "spawnflags", "48"); + DispatchKeyValue(Entity, "SourceEntityName", "meteor_model2"); + DispatchKeyValue(Entity, "radius", "3050"); + DispatchKeyValue(Entity, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "preset", "0"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnTriggerHurt(int client) +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_hurt")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_hurt_%i", Entity); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 7000.0; + + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_hurt"); + DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchKeyValueVector(Entity, "origin", fVector); + DispatchKeyValue(Entity, "nodmgforce", "0"); + DispatchKeyValue(Entity, "damage", "320"); + DispatchKeyValue(Entity, "damagetype", "128"); + DispatchKeyValue(Entity, "damagemodel", "0"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + SetEntityModel(Entity, "models/props/cs_office/vending_machine.mdl"); + + new Float:minbounds[3] = {-50.0, -50.0, -100.0}; + new Float:maxbounds[3] = {50.0, 50.0, 100.0}; + SetEntPropVector(Entity, Prop_Send, "m_vecMins", minbounds); + SetEntPropVector(Entity, Prop_Send, "m_vecMaxs", maxbounds); + + SetEntProp(Entity, Prop_Send, "m_nSolidType", 2); + + new enteffects = GetEntProp(Entity, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(Entity, Prop_Send, "m_fEffects", enteffects); + + return Entity; +} + +public Action SpawnMeteor2(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_physics_multiplayer")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_physics_multiplayer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_model2"); + DispatchKeyValue(Entity, "model", "models/props/cs_militia/militiarock05.mdl"); + DispatchKeyValue(Entity, "spawnflags", "8"); + DispatchKeyValue(Entity, "pressuredelay", "0"); + DispatchKeyValue(Entity, "physicsmode", "2"); + DispatchKeyValue(Entity, "physdamagescale", "0.1"); + DispatchKeyValue(Entity, "modelscale", "2.0"); + DispatchSpawn(Entity); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 7000.0; + //fVector[1] += 1000.0; + + TeleportEntity(Entity, fVector, NULL_VECTOR, NULL_VECTOR); + + return Entity; + +} +public Action SpawnExplosion(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_explosion")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_explosion_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_explosion"); + DispatchKeyValue(Entity, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(Entity, "rendermode", "5"); + DispatchKeyValue(Entity, "iMagnitude", "300"); + DispatchKeyValue(Entity, "iRadiusOverride", "70"); + + DispatchKeyValue(Entity, "spawnflags", "81"); + + DispatchSpawn(Entity); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + TeleportEntity(Entity, fVector, NULL_VECTOR, NULL_VECTOR); + + return Entity; + + +} + +public Action SpawnMeteor(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_model"); + DispatchKeyValue(Entity, "model", "models/props/cs_militia/militiarock05.mdl"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "renderamt", "255"); + DispatchKeyValue(Entity, "rendercolor", "0 181 240"); + DispatchKeyValue(Entity, "renderfx", "0"); + DispatchKeyValue(Entity, "rendermode", "0"); + + DispatchSpawn(Entity); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 7000.0; + //fVector[1] += 1000.0; + + TeleportEntity(Entity, fVector, NULL_VECTOR, NULL_VECTOR); + + return Entity; + + +} + +public Action SpawnMoveLinear(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_movelinear")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_movelinear_%i", Entity); + + float fVectorClient[3]; + float fVectorStart[3]; + float fAngles[3]; + float fVectorCalculated[3]; + float fAnglesCalculated[3]; + GetClientAbsOrigin(client, fVectorClient); + GetClientAbsAngles(client, fAngles); + + fVectorStart = fVectorClient; + fVectorStart[2] += 7000.0; + + SubtractVectors(fVectorClient, fVectorStart, fVectorCalculated); + float distanceF = GetVectorLength(fVectorCalculated, false) + distanceF -= 128.0; + NormalizeVector(fVectorCalculated, fVectorCalculated); + GetVectorAngles(fVectorCalculated, fAnglesCalculated); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_linear"); + DispatchKeyValueVector(Entity, "movedir", fAnglesCalculated); + DispatchKeyValueVector(Entity, "origin", fVectorStart); + DispatchKeyValue(Entity, "speed", "3000"); + DispatchKeyValueFloat(Entity, "movedistance", distanceF); + DispatchKeyValue(Entity, "spawnflags", "8"); + DispatchKeyValue(Entity, "rendermode", "3"); + DispatchKeyValue(Entity, "rendercolor", "136 0 0"); + DispatchKeyValue(Entity, "OnFullyOpen", "!self,KillHierarchy,,0.01,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "meteor_indicator,Kill,,0,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "meteor_explosion,Explode,,0,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "meteor_explosion,Kill,,0.01,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "meteor_sound,PlaySound,,0,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "meteor_sound,Kill,,0.01,1"); + DispatchSpawn(Entity); + + return Entity; +} + + +public Action SpawnIndicator(int client) +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "meteor_indicator"); + DispatchKeyValue(Entity, "model", "models/effects/vol_light128x512.mdl"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "angles", "0 0 180"); + DispatchKeyValue(Entity, "renderamt", "255"); + DispatchKeyValue(Entity, "rendercolor", "0 181 240"); + DispatchKeyValue(Entity, "renderfx", "0"); + DispatchKeyValue(Entity, "rendermode", "0"); + + DispatchSpawn(Entity); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + //fVector[2] += 320.0; + + TeleportEntity(Entity, fVector, NULL_VECTOR, NULL_VECTOR); + + return Entity; +} + +public int GetTargetClient() +{ + + int outsideClientCount = 0; + new int:outsideClients[MaxClients]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && IsPlayerAlive(i) && (ZR_IsClientHuman(i)) && (GetClientDistanceToCeiling(i) > 200.0)) + { + outsideClients[outsideClientCount] = i + outsideClientCount += 1; + } + } + + if (outsideClientCount == 0) + return -1; + + int randomIndex = GetRandomInt(0, outsideClientCount - 1) + + return outsideClients[randomIndex]; + +} + +public float GetClientDistanceToCeiling(int client) +{ + float distanceF = 0.0; + + new Float:fOrigin[3], Float:fCeiling[3]; + GetClientAbsOrigin(client, fOrigin); + + fOrigin[2] += 10.0; + + TR_TraceRayFilter(fOrigin, Float:{-90.0,0.0,0.0}, MASK_PLAYERSOLID, RayType_Infinite, TraceRayNoPlayers, client); + if (TR_DidHit()) + { + TR_GetEndPosition(fCeiling); + fOrigin[2] -= 10.0; + distanceF = GetVectorDistance(fOrigin, fCeiling); + } + //PrintToChatAll("Client: %d - %f", client,distanceF); + return distanceF; +} + +public bool:TraceRayNoPlayers(entity, mask, any:data) +{ + if(entity == data || (entity >= 1 && entity <= MaxClients)) + { + return false; + } + return true; +} + diff --git a/NoAdminTools/scripting/NoAdminTools.sp b/NoAdminTools/scripting/NoAdminTools.sp new file mode 100644 index 00000000..9c92deb8 --- /dev/null +++ b/NoAdminTools/scripting/NoAdminTools.sp @@ -0,0 +1,261 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +#pragma newdecls required + +int g_iAdminAFKTime; +int g_iSelfMaxExtendsAmount; +int g_iSelfExtendsTime; +float g_fSelfExtendsRatio; +float g_fSelfExtendsDelay; + +bool g_bSelfExtends[MAXPLAYERS + 1] = { false, ...}; +bool g_bSelfExtendsAllowed; +bool g_bActiveAdmin[MAXPLAYERS + 1] = { false, ...}; +int g_iSelfExtends; + +ConVar g_cvarTimeLimit; + +public Plugin myinfo = +{ + name = "No Admin Tools", + author = "Dogan", + description = "Make it possible for the server to do several things when there is no active admin online", + version = "1.1.0", + url = "" +}; + +public void OnPluginStart() +{ + RegAdminCmd("sm_checkadmins", Command_DisplayActiveAdmins, ADMFLAG_GENERIC, "Check if there are any active Admins online or not."); + RegConsoleCmd("sm_selfextend", Command_SelfExtend, "Is available when all regular extends are depleted and there is no active admin online. Makes it possible for players to extend the map themselves"); + + ConVar cvar; + HookConVarChange((cvar = CreateConVar("sm_admin_afk_time", "30", "Time in seconds until an admin is considered as AFK.")), Cvar_AdminAFKTime); + g_iAdminAFKTime = cvar.IntValue; + HookConVarChange((cvar = CreateConVar("sm_selfextend_amount", "2", "Amount of sm_selfextend's allowed.")), Cvar_SelfExtendsAmount); + g_iSelfMaxExtendsAmount = cvar.IntValue; + HookConVarChange((cvar = CreateConVar("sm_selfextend_time", "10", "How long to extend in minutes when sm_selfextend passes through.")), Cvar_SelfExtendsTime); + g_iSelfExtendsTime = cvar.IntValue; + HookConVarChange((cvar = CreateConVar("sm_selfextend_ratio", "0.6", "Ratio needed for sm_selfextend to pass through.")), Cvar_SelfExtendsRatio); + g_fSelfExtendsRatio = cvar.FloatValue; + HookConVarChange((cvar = CreateConVar("sm_selfextend_delay", "60.0", "Time to pass until sm_selfextend can be used")), Cvar_SelfExtendsDelay); + g_fSelfExtendsDelay = cvar.FloatValue; + delete cvar; + + g_cvarTimeLimit = FindConVar("mp_timelimit"); + + AutoExecConfig(); +} + +public void Cvar_AdminAFKTime(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iAdminAFKTime = convar.IntValue; +} + +public void Cvar_SelfExtendsAmount(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iSelfMaxExtendsAmount = convar.IntValue; +} + +public void Cvar_SelfExtendsTime(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iSelfExtendsTime = convar.IntValue; +} + +public void Cvar_SelfExtendsRatio(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fSelfExtendsRatio = convar.FloatValue; +} + +public void Cvar_SelfExtendsDelay(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fSelfExtendsDelay = convar.FloatValue; +} + +public bool ActiveAdmin(int client) +{ + if(GetClientIdleTime(client) < g_iAdminAFKTime) + return true; + + return false; +} + +public void OnClientDisconnect(int client) +{ + g_bSelfExtends[client] = false; + g_bActiveAdmin[client] = false; + + CheckRatio(); +} + +public void OnClientPostAdminCheck(int client) +{ + if(CheckCommandAccess(client, "", ADMFLAG_GENERIC)) + { + g_bActiveAdmin[client] = true; + } + + CheckRatio(); +} + +public void OnMapStart() +{ + g_iSelfExtends = 0; + g_bSelfExtendsAllowed = false; + + CreateTimer(g_fSelfExtendsDelay, Timer_DelaySelfExtend, _, TIMER_FLAG_NO_MAPCHANGE); + + for(int i; i <= MaxClients; i++) + g_bSelfExtends[i] = false; +} + +public void OnMapEnd() +{ + g_bSelfExtendsAllowed = false; +} + +public Action Timer_DelaySelfExtend(Handle timer) +{ + g_bSelfExtendsAllowed = true; +} + +public Action Command_DisplayActiveAdmins(int client, int args) +{ + for(int i = 1; i <= MaxClients; i++) + if(IsValidClient(i) && CheckCommandAccess(i, "", ADMFLAG_GENERIC) && ActiveAdmin(i)) + g_bActiveAdmin[i] = true; + else if(IsValidClient(i) && CheckCommandAccess(i, "", ADMFLAG_GENERIC) && !ActiveAdmin(i)) + g_bActiveAdmin[i] = false; + + char aBuf[1024]; + char bBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsValidClient(i)) + { + if(g_bActiveAdmin[i]) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + + if(CheckCommandAccess(i, "", ADMFLAG_GENERIC) && !g_bActiveAdmin[i]) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(bBuf, sizeof(bBuf), aBuf2); + StrCat(bBuf, sizeof(bBuf), ", "); + } + } + } + + if(strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + ReplyToCommand(client, "[SM] Active Admins online: %s", aBuf); + } + else + ReplyToCommand(client, "[SM] Active Admins online: none"); + + if(strlen(bBuf)) + { + bBuf[strlen(bBuf) - 2] = 0; + ReplyToCommand(client, "[SM] Inactive Admins online: %s", bBuf); + } + else + ReplyToCommand(client, "[SM] Inactive Admins online: none"); + + return Plugin_Handled; +} + +public Action Command_SelfExtend(int client, int args) +{ + int iAdminActivity = 0; + for(int i = 1; i <= MaxClients; i++) + if(g_bActiveAdmin[i]) + iAdminActivity++; + + if(GetExtendsLeft() > 0) + { + ReplyToCommand(client, "[SM] Not available because not all regular extends have been depleted."); + return Plugin_Handled; + } + if(iAdminActivity > 0) + { + ReplyToCommand(client, "[SM] Not available because there is atleast one active Admin who can extend. Please ask the Admins."); + return Plugin_Handled; + } + if(!g_bSelfExtendsAllowed) + { + ReplyToCommand(client, "[SM] Not available because it's still too early in the map."); + return Plugin_Handled; + } + if(g_iSelfMaxExtendsAmount <= g_iSelfExtends) + { + ReplyToCommand(client, "[SM] Not available because this map was already self-extended %d times.", g_iSelfMaxExtendsAmount); + return Plugin_Handled; + } + + if(!g_bSelfExtends[client]) + { + g_bSelfExtends[client] = true; + PrintToChatAll("[SM] %N wants to self-extend the map.", client); + CheckRatio(); + } + else + ReplyToCommand(client, "[SM] You have already voted to self-extend the map."); + + return Plugin_Handled; +} + +public void CheckRatio() +{ + if(!g_bSelfExtendsAllowed) + return; + + int iPlayers; + int iSelfExtendsPlayers; + int iPlayersNeeded; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsValidClient(i)) + iPlayers++; + + if(g_bSelfExtends[i]) + iSelfExtendsPlayers++; + } + + iPlayersNeeded = RoundToFloor(float(iPlayers) * g_fSelfExtendsRatio); + + if(iSelfExtendsPlayers >= iPlayersNeeded) + { + PrintToChatAll("[SM] Enough Players voted to self-extend the map. Adding %d minutes to the timelimit.", g_iSelfExtendsTime); + g_iSelfExtends++; + g_cvarTimeLimit.IntValue += g_iSelfExtendsTime; + + for(int j; j <= MaxClients; j++) + g_bSelfExtends[j] = false; + } + + return; +} + +static stock bool IsValidClient(int client) +{ + if (client > 0 && client <= MaxClients && IsClientInGame(client)) + { + return true; + } + else + { + return false; + } +} \ No newline at end of file diff --git a/PlayerManager/scripting/PlayerManager_Connect.sp b/PlayerManager/scripting/PlayerManager_Connect.sp new file mode 100644 index 00000000..54552d03 --- /dev/null +++ b/PlayerManager/scripting/PlayerManager_Connect.sp @@ -0,0 +1,354 @@ +#pragma semicolon 1 + +#include +#include +#include + +#pragma newdecls required + +/* CONVARS */ +ConVar g_hCvar_BlockSpoof; +ConVar g_hCvar_BlockAdmin; +ConVar g_hCvar_BlockVoice; + +/* DATABASE */ +Database g_hDatabase; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "PlayerManager: Connect", + author = "zaCade + Neon", + description = "Manage clients, denying admin access, ect.", + version = "2.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int errorSize) +{ + CreateNative("PM_IsPlayerSteam", Native_IsPlayerSteam); + CreateNative("PM_GetPlayerType", Native_GetPlayerType); + + RegPluginLibrary("PlayerManager"); + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCvar_BlockSpoof = CreateConVar("sm_manager_block_spoof", "1", "Kick unauthenticated people that join with known steamids.", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCvar_BlockAdmin = CreateConVar("sm_manager_block_admin", "1", "Should unauthenticated people be blocked from admin?", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCvar_BlockVoice = CreateConVar("sm_manager_block_voice", "1", "Should unauthenticated people be blocked from voice?", FCVAR_NONE, true, 0.0, true, 1.0); + + AddMultiTargetFilter("@steam", Filter_Steam, "Steam Players", false); + AddMultiTargetFilter("@nosteam", Filter_NoSteam, "No-Steam Players", false); + + RegConsoleCmd("sm_steam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players"); + RegConsoleCmd("sm_nosteam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players"); + + AutoExecConfig(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnConfigsExecuted() +{ + if(!g_hCvar_BlockSpoof.BoolValue) + return; + + Database.Connect(SQL_OnDatabaseConnect, "PlayerManager"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginEnd() +{ + RemoveMultiTargetFilter("@steam", Filter_Steam); + RemoveMultiTargetFilter("@nosteam", Filter_NoSteam); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_DisplaySteamStats(int client, int args) +{ + char aBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + char sAuthID[32]; + GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(!SteamClientAuthenticated(sAuthID)) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + } + } + + if(strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + ReplyToCommand(client, "[SM] No-Steam clients online: %s", aBuf); + } + else + ReplyToCommand(client, "[SM] No-Steam clients online: none"); + + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool Filter_Steam(const char[] sPattern, Handle hClients) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + char sAuthID[32]; + GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(SteamClientAuthenticated(sAuthID)) + PushArrayCell(hClients, i); + } + } + return true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool Filter_NoSteam(const char[] sPattern, Handle hClients) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + char sAuthID[32]; + GetClientAuthId(i, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(!SteamClientAuthenticated(sAuthID)) + PushArrayCell(hClients, i); + } + } + return true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sAuthID) +{ + if(!g_hCvar_BlockSpoof.BoolValue || !g_hDatabase) + return; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return; + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM connections WHERE auth='%s'", sAuthID); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, GetClientSerial(client), DBPrio_Low); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + if(!g_hCvar_BlockAdmin.BoolValue) + return Plugin_Continue; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return Plugin_Continue; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(!SteamClientAuthenticated(sAuthID)) + { + LogMessage("%L was not authenticated with steam, denying admin.", client); + NotifyPostAdminCheck(client); + return Plugin_Handled; + } + else return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminCheck(int client) +{ + if(!g_hCvar_BlockVoice.BoolValue) + return; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(!SteamClientAuthenticated(sAuthID)) + { + LogMessage("%L was not authenticated with steam, muting client.", client); + BaseComm_SetClientMute(client, true); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SQL_OnDatabaseConnect(Database db, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Database error: %s", error); + return; + } + + g_hDatabase = db; + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS connections (`auth` varchar(32), `type` varchar(32), `address` varchar(16), PRIMARY KEY (`auth`))"); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_High); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Query error: %s", error); + return; + } + + int client; + if ((client = GetClientFromSerial(data)) == 0) + return; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + char sAddress[16]; + GetClientIP(client, sAddress, sizeof(sAddress)); + + char sConnectionType[32]; + if(SteamClientAuthenticated(sAuthID)) + sConnectionType = "SteamLegit"; + else + sConnectionType = "NoAuth"; + + if(results.RowCount && results.FetchRow()) + { + int iFieldNum; + char sResultAddress[16]; + char sResultConnectionType[32]; + + results.FieldNameToNum("address", iFieldNum); + results.FetchString(iFieldNum, sResultAddress, sizeof(sResultAddress)); + + results.FieldNameToNum("type", iFieldNum); + results.FetchString(iFieldNum, sResultConnectionType, sizeof(sResultConnectionType)); + + delete results; + + if(!SteamClientAuthenticated(sAuthID)) + { + if(!StrEqual(sConnectionType, sResultConnectionType, false) && StrEqual(sResultConnectionType, "SteamLegit", false)) + { + if(StrEqual(sAddress, sResultAddress, false)) + { + LogMessage("%L tried to join with a legitimate steamid while not authenticated with steam. Allowing connection, IPs match. (Known: %s)", client, sAddress); + } + else + { + LogAction(client, -1, "\"%L\" tried to join with a legitimate steamid while not authenticated with steam. Refusing connection, IPs dont match. (Known: %s | Current: %s)", client, sResultAddress, sAddress); + KickClient(client, "Trying to join with a legitimate steamid while not authenticated with steam."); + return; + } + } + } + } + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "INSERT INTO connections (auth, type, address) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE type='%s', address='%s';", sAuthID, sConnectionType, sAddress, sConnectionType, sAddress); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_IsPlayerSteam(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client index %d is invalid", client); + } + else if (!IsClientConnected(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not connected", client); + } + else if (IsFakeClient(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is a bot", client); + } + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(SteamClientAuthenticated(sAuthID)) + return true; + + return false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetPlayerType(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + int length = GetNativeCell(3); + + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client index %d is invalid", client); + } + else if (!IsClientConnected(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not connected", client); + } + else if (IsFakeClient(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is a bot", client); + } + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + if(SteamClientAuthenticated(sAuthID)) + return !SetNativeString(2, "SteamLegit", length + 1); + + return !SetNativeString(2, "NoAuth", length + 1); +} \ No newline at end of file diff --git a/PlayerManager/scripting/PlayerManager_RevEmu.sp b/PlayerManager/scripting/PlayerManager_RevEmu.sp new file mode 100644 index 00000000..5f32ed98 --- /dev/null +++ b/PlayerManager/scripting/PlayerManager_RevEmu.sp @@ -0,0 +1,333 @@ +#pragma semicolon 1 + +#include +#include +#include + +#pragma newdecls required + +/* CONVARS */ +ConVar g_hCvar_BlockSpoof; +ConVar g_hCvar_BlockAdmin; +ConVar g_hCvar_BlockVoice; + +/* DATABASE */ +Database g_hDatabase; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "PlayerManager: RevEmu", + author = "zaCade + Neon", + description = "Manage clients, denying admin access, ect.", + version = "2.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int errorSize) +{ + CreateNative("PM_IsPlayerSteam", Native_IsPlayerSteam); + CreateNative("PM_GetPlayerType", Native_GetPlayerType); + + RegPluginLibrary("PlayerManager"); + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCvar_BlockSpoof = CreateConVar("sm_manager_block_spoof", "1", "Kick unauthenticated people that join with known steamids.", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCvar_BlockAdmin = CreateConVar("sm_manager_block_admin", "1", "Should unauthenticated people be blocked from admin?", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCvar_BlockVoice = CreateConVar("sm_manager_block_voice", "1", "Should unauthenticated people be blocked from voice?", FCVAR_NONE, true, 0.0, true, 1.0); + + AddMultiTargetFilter("@steam", Filter_Steam, "Steam Players", false); + AddMultiTargetFilter("@nosteam", Filter_NoSteam, "No-Steam Players", false); + + RegConsoleCmd("sm_steam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players"); + RegConsoleCmd("sm_nosteam", Command_DisplaySteamStats, "Shows the number of Steam and No-Steam players"); + + AutoExecConfig(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnConfigsExecuted() +{ + if(!g_hCvar_BlockSpoof.BoolValue) + return; + + Database.Connect(SQL_OnDatabaseConnect, "PlayerManager"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginEnd() +{ + RemoveMultiTargetFilter("@steam", Filter_Steam); + RemoveMultiTargetFilter("@nosteam", Filter_NoSteam); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_DisplaySteamStats(int client, int args) +{ + char aBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(!RevEmu_IsPlayerSteam(i)) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + } + } + + if(strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + ReplyToCommand(client, "[SM] No-Steam clients online: %s", aBuf); + } + else + ReplyToCommand(client, "[SM] No-Steam clients online: none"); + + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool Filter_Steam(const char[] sPattern, Handle hClients) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(RevEmu_IsPlayerSteam(i)) + PushArrayCell(hClients, i); + } + } + return true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool Filter_NoSteam(const char[] sPattern, Handle hClients) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(!RevEmu_IsPlayerSteam(i)) + PushArrayCell(hClients, i); + } + } + return true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sAuthID) +{ + if(!g_hCvar_BlockSpoof.BoolValue || !g_hDatabase) + return; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return; + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM connections WHERE auth='%s'", sAuthID); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, GetClientSerial(client), DBPrio_Low); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + if(!g_hCvar_BlockAdmin.BoolValue) + return Plugin_Continue; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return Plugin_Continue; + + if(!RevEmu_IsPlayerSteam(client)) + { + char sConnectionType[32]; + RevEmu_GetPlayerType(client, sConnectionType, sizeof(sConnectionType)); + + LogMessage("%L has a illegitimate connection type: '%s', denying admin.", client, sConnectionType); + NotifyPostAdminCheck(client); + return Plugin_Handled; + } + else return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminCheck(int client) +{ + if(!g_hCvar_BlockVoice.BoolValue) + return; + + if(IsFakeClient(client) || IsClientSourceTV(client)) + return; + + if(!RevEmu_IsPlayerSteam(client)) + { + char sConnectionType[32]; + RevEmu_GetPlayerType(client, sConnectionType, sizeof(sConnectionType)); + + LogMessage("%L has a illegitimate connection type: '%s', muting client.", client, sConnectionType); + BaseComm_SetClientMute(client, true); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SQL_OnDatabaseConnect(Database db, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Database error: %s", error); + return; + } + + g_hDatabase = db; + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "CREATE TABLE IF NOT EXISTS connections (`auth` varchar(32), `type` varchar(32), `address` varchar(16), PRIMARY KEY (`auth`))"); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_High); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void SQL_OnQueryCompleted(Database db, DBResultSet results, const char[] error, any data) +{ + if(!db || strlen(error)) + { + LogError("Query error: %s", error); + return; + } + + int client; + if ((client = GetClientFromSerial(data)) == 0) + return; + + char sAuthID[32]; + GetClientAuthId(client, AuthId_Steam2, sAuthID, sizeof(sAuthID)); + + char sAddress[16]; + GetClientIP(client, sAddress, sizeof(sAddress)); + + char sConnectionType[32]; + RevEmu_GetPlayerType(client, sConnectionType, sizeof(sConnectionType)); + + if(results.RowCount && results.FetchRow()) + { + int iFieldNum; + char sResultAddress[16]; + char sResultConnectionType[32]; + + results.FieldNameToNum("address", iFieldNum); + results.FetchString(iFieldNum, sResultAddress, sizeof(sResultAddress)); + + results.FieldNameToNum("type", iFieldNum); + results.FetchString(iFieldNum, sResultConnectionType, sizeof(sResultConnectionType)); + + delete results; + + if(!RevEmu_IsPlayerSteam(client)) + { + if(!StrEqual(sConnectionType, sResultConnectionType, false) && StrEqual(sResultConnectionType, "SteamLegit", false)) + { + if(StrEqual(sAddress, sResultAddress, false)) + { + LogMessage("%L tried to join with a legitimate steamid while having a illegitimate connection type: '%s'. Allowing connection, IPs match. (Known: %s)", client, sConnectionType, sAddress); + } + else + { + LogAction(client, -1, "\"%L\" tried to join with a legitimate steamid while having a illegitimate connection type: '%s'. Refusing connection, IPs dont match. (Known: %s | Current: %s)", client, sConnectionType, sResultAddress, sAddress); + KickClient(client, "Trying to join with a legitimate steamid while having a illegitimate connection."); + return; + } + } + } + } + + char sQuery[512]; + Format(sQuery, sizeof(sQuery), "INSERT INTO connections (auth, type, address) VALUES ('%s', '%s', '%s') ON DUPLICATE KEY UPDATE type='%s', address='%s';", sAuthID, sConnectionType, sAddress, sConnectionType, sAddress); + + g_hDatabase.Query(SQL_OnQueryCompleted, sQuery, _, DBPrio_Low); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_IsPlayerSteam(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client index %d is invalid", client); + } + else if (!IsClientConnected(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not connected", client); + } + else if (IsFakeClient(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is a bot", client); + } + + return RevEmu_IsPlayerSteam(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetPlayerType(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + int length = GetNativeCell(3); + + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client index %d is invalid", client); + } + else if (!IsClientConnected(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not connected", client); + } + else if (IsFakeClient(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is a bot", client); + } + + char[] sPlayerType = new char[length + 1]; + RevEmu_GetPlayerType(client, sPlayerType, length + 1); + + return !SetNativeString(2, sPlayerType, length + 1); +} \ No newline at end of file diff --git a/PlayerManager/scripting/include/PlayerManager.inc b/PlayerManager/scripting/include/PlayerManager.inc new file mode 100644 index 00000000..a711ee90 --- /dev/null +++ b/PlayerManager/scripting/include/PlayerManager.inc @@ -0,0 +1,48 @@ +#if defined _PlayerManager_included + #endinput +#endif + +#define _PlayerManager_included + +/** + * Check if clients usertype is legit. + * + * @param clients The client index. + * + * @return True if valid, false otherwise. + * @error Invalid client index, not connected or fake client. + */ +native bool PM_IsPlayerSteam(int client); + +/** + * Retrieve clients usertype. + * + * @param clients The client index. + * @param type The buffer to write to. + * @param maxlength The maximum buffer length. + * + * @return True on success, false otherwise. + * @error Invalid client index, not connected or fake client. + */ +native bool PM_GetPlayerType(int client, char[] type, int maxlength); + + +public SharedPlugin __pl_PlayerManager = +{ + name = "PlayerManager", + file = "PlayerManager_Connect.smx", + + #if defined REQUIRE_PLUGIN + required = 1 + #else + required = 0 + #endif +}; + +#if !defined REQUIRE_PLUGIN + public void __pl_PlayerManager_SetNTVOptional() + { + MarkNativeAsOptional("PM_IsPlayerSteam"); + MarkNativeAsOptional("PM_GetPlayerType"); + } +#endif diff --git a/PlayerRankings/content/materials/models/unloze/crown/crown.vmt b/PlayerRankings/content/materials/models/unloze/crown/crown.vmt new file mode 100644 index 00000000..db329fd8 --- /dev/null +++ b/PlayerRankings/content/materials/models/unloze/crown/crown.vmt @@ -0,0 +1,71 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models/unloze/crown/crown" + "$bumpmap" "models/unloze/crown/crown_bump" +// "$normalalphaenvmapmask" 1 +// "$env_map" "env_cubemap" +// "$envmaptint" "[.5 .5 .5]" + "$detail" "models/unloze/crown/crown_detail" + "$detailscale" "5" + "$detailblendfactor" .01 + "$detailblendmode" 6 + "$yellow" "0" + + "$phong" "1" + "$phongexponent" "50" + "$phongboost" "8" + "$lightwarptexture" "models/unloze/crown/crown_lightwarp" + "$phongfresnelranges" "[.25 .5 1]" + //"$basemapalphaphongmask" "1" + + "$blendtintbybasealpha" "1" + "$blendtintcoloroverbase" "0" + + "$colortint_base" "{127 61 61}" + "$colortint_tmp" "[0 0 0]" + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "4" // Exponent for phong component of rim lighting + "$rimlightboost" "2" // Boost for ambient cube component of rim lighting + + // Cloaking + "$cloakPassEnabled" "1" + + "Proxies" + { + "invis" + { + } + "AnimatedTexture" + { + "animatedtexturevar" "$detail" + "animatedtextureframenumvar" "$detailframe" + "animatedtextureframerate" 30 + } + "BurnLevel" + { + "resultVar" "$detailblendfactor" + } + "ItemTintColor" + { + "resultVar" "$colortint_tmp" + } + "SelectFirstIfNonZero" + { + "srcVar1" "$colortint_tmp" + "srcVar2" "$colortint_base" + "resultVar" "$color2" + } + "YellowLevel" + { + "resultVar" "$yellow" + } + "Multiply" + { + "srcVar1" "$color2" + "srcVar2" "$yellow" + "resultVar" "$color2" + } + } +} \ No newline at end of file diff --git a/PlayerRankings/content/materials/models/unloze/crown/crown.vtf b/PlayerRankings/content/materials/models/unloze/crown/crown.vtf new file mode 100644 index 00000000..f170a92a Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/crown/crown.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/crown/crown_bump.vtf b/PlayerRankings/content/materials/models/unloze/crown/crown_bump.vtf new file mode 100644 index 00000000..08564ec3 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/crown/crown_bump.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/crown/crown_detail.vtf b/PlayerRankings/content/materials/models/unloze/crown/crown_detail.vtf new file mode 100644 index 00000000..261eb872 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/crown/crown_detail.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/crown/crown_lightwarp.vtf b/PlayerRankings/content/materials/models/unloze/crown/crown_lightwarp.vtf new file mode 100644 index 00000000..3d5c0a82 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/crown/crown_lightwarp.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull.vmt b/PlayerRankings/content/materials/models/unloze/skull/skull.vmt new file mode 100644 index 00000000..baa5f6e1 --- /dev/null +++ b/PlayerRankings/content/materials/models/unloze/skull/skull.vmt @@ -0,0 +1,68 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models/unloze/skull/skull" + "$bumpmap" "models/unloze/skull/skull_bump" + "$detail" "models/unloze/crown/crown_detail" + "$detailscale" "5" + "$detailblendfactor" .01 + "$detailblendmode" 6 + "$yellow" "0" + + + "$blendtintbybasealpha" "1" + "$blendtintcoloroverbase" "0" + + "$colortint_base" "{200 200 200}" + "$colortint_tmp" "[0 0 0]" + + + + "$phong" "1" + "$phongexponent" "1" + "$phongboost" "1" + "$lightwarptexture" "models/unloze/crown/crown_lightwarp" + "$phongfresnelranges" "[.25 1 4]" + + "$rimlight" "1" + "$rimlightexponent" "20" + "$rimlightboost" "4" + // Cloaking + "$cloakPassEnabled" "1" + + "Proxies" + { + "invis" + { + } + "AnimatedTexture" + { + "animatedtexturevar" "$detail" + "animatedtextureframenumvar" "$detailframe" + "animatedtextureframerate" 30 + } + "BurnLevel" + { + "resultVar" "$detailblendfactor" + } + "ItemTintColor" + { + "resultVar" "$colortint_tmp" + } + "SelectFirstIfNonZero" + { + "srcVar1" "$colortint_tmp" + "srcVar2" "$colortint_base" + "resultVar" "$color2" + } + "YellowLevel" + { + "resultVar" "$yellow" + } + "Multiply" + { + "srcVar1" "$color2" + "srcVar2" "$yellow" + "resultVar" "$color2" + } + } +} \ No newline at end of file diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull.vtf b/PlayerRankings/content/materials/models/unloze/skull/skull.vtf new file mode 100644 index 00000000..0ccdbe31 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/skull/skull.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull_bump.vtf b/PlayerRankings/content/materials/models/unloze/skull/skull_bump.vtf new file mode 100644 index 00000000..c35117d2 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/skull/skull_bump.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vmt b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vmt new file mode 100644 index 00000000..e9bcc19b --- /dev/null +++ b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vmt @@ -0,0 +1,68 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models/unloze/skull/skull_horn_b" + "$bumpmap" "models/unloze/skull/skull_horn_b_bump" + "$detail" "models/unloze/crown/crown_detail" + "$detailscale" "5" + "$detailblendfactor" .01 + "$detailblendmode" 6 + "$yellow" "0" + + + "$blendtintbybasealpha" "1" + "$blendtintcoloroverbase" "0" + + "$colortint_base" "{87 93 93}" + "$colortint_tmp" "[0 0 0]" + + + + "$phong" "1" + "$phongexponent" "1" + "$phongboost" ".2" + "$lightwarptexture" "models/unloze/crown/crown_lightwarp" + "$phongfresnelranges" "[.25 1 4]" + + "$rimlight" "1" + "$rimlightexponent" "20" + "$rimlightboost" "2" + // Cloaking + "$cloakPassEnabled" "1" + + "Proxies" + { + "invis" + { + } + "AnimatedTexture" + { + "animatedtexturevar" "$detail" + "animatedtextureframenumvar" "$detailframe" + "animatedtextureframerate" 30 + } + "BurnLevel" + { + "resultVar" "$detailblendfactor" + } + "ItemTintColor" + { + "resultVar" "$colortint_tmp" + } + "SelectFirstIfNonZero" + { + "srcVar1" "$colortint_tmp" + "srcVar2" "$colortint_base" + "resultVar" "$color2" + } + "YellowLevel" + { + "resultVar" "$yellow" + } + "Multiply" + { + "srcVar1" "$color2" + "srcVar2" "$yellow" + "resultVar" "$color2" + } + } +} \ No newline at end of file diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vtf b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vtf new file mode 100644 index 00000000..912b8533 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b.vtf differ diff --git a/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b_bump.vtf b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b_bump.vtf new file mode 100644 index 00000000..6e96d569 Binary files /dev/null and b/PlayerRankings/content/materials/models/unloze/skull/skull_horn_b_bump.vtf differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.dx80.vtx b/PlayerRankings/content/models/unloze/crown_v3.dx80.vtx new file mode 100644 index 00000000..ee2fd7ac Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.dx80.vtx differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.dx90.vtx b/PlayerRankings/content/models/unloze/crown_v3.dx90.vtx new file mode 100644 index 00000000..91cf85ca Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.dx90.vtx differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.mdl b/PlayerRankings/content/models/unloze/crown_v3.mdl new file mode 100644 index 00000000..29aeb726 Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.mdl differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.phy b/PlayerRankings/content/models/unloze/crown_v3.phy new file mode 100644 index 00000000..15354c06 Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.phy differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.sw.vtx b/PlayerRankings/content/models/unloze/crown_v3.sw.vtx new file mode 100644 index 00000000..942cf246 Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.sw.vtx differ diff --git a/PlayerRankings/content/models/unloze/crown_v3.vvd b/PlayerRankings/content/models/unloze/crown_v3.vvd new file mode 100644 index 00000000..05629b29 Binary files /dev/null and b/PlayerRankings/content/models/unloze/crown_v3.vvd differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.dx80.vtx b/PlayerRankings/content/models/unloze/skull_v3.dx80.vtx new file mode 100644 index 00000000..2bdd76da Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.dx80.vtx differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.dx90.vtx b/PlayerRankings/content/models/unloze/skull_v3.dx90.vtx new file mode 100644 index 00000000..19b35c60 Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.dx90.vtx differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.mdl b/PlayerRankings/content/models/unloze/skull_v3.mdl new file mode 100644 index 00000000..c48a7f1d Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.mdl differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.phy b/PlayerRankings/content/models/unloze/skull_v3.phy new file mode 100644 index 00000000..d5933c02 Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.phy differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.sw.vtx b/PlayerRankings/content/models/unloze/skull_v3.sw.vtx new file mode 100644 index 00000000..298c0695 Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.sw.vtx differ diff --git a/PlayerRankings/content/models/unloze/skull_v3.vvd b/PlayerRankings/content/models/unloze/skull_v3.vvd new file mode 100644 index 00000000..6d5bb05b Binary files /dev/null and b/PlayerRankings/content/models/unloze/skull_v3.vvd differ diff --git a/PlayerRankings/content/sound/unloze/holy.wav b/PlayerRankings/content/sound/unloze/holy.wav new file mode 100644 index 00000000..d727ea3d Binary files /dev/null and b/PlayerRankings/content/sound/unloze/holy.wav differ diff --git a/PlayerRankings/scripting/PlayerRankings.sp b/PlayerRankings/scripting/PlayerRankings.sp new file mode 100644 index 00000000..4612a4ac --- /dev/null +++ b/PlayerRankings/scripting/PlayerRankings.sp @@ -0,0 +1,996 @@ +#include +#include +#include +#include +#include +#include + +#define SPECMODE_NONE 0 +#define SPECMODE_FIRSTPERSON 4 +#define SPECMODE_THIRDPERSON 5 +#define SPECMODE_FREELOOK 6 + +/* BOOLS */ +bool g_bEngineCSGO; +bool g_bHideCrown[MAXPLAYERS+1]; +bool g_bHideDialog[MAXPLAYERS+1]; +bool g_bProtection[MAXPLAYERS+1]; + +/* COOKIES */ +Handle g_hCookie_HideCrown; +Handle g_hCookie_HideDialog; +Handle g_hCookie_Protection; + +/* CONVARS */ +ConVar g_hCVar_Protection; +ConVar g_hCVar_ProtectionMinimal1; +ConVar g_hCVar_ProtectionMinimal2; +ConVar g_hCVar_ProtectionMinimal3; + +/* INTERGERS */ +int g_iDialogLevel = 100000; + +int g_iPlayerWinner[6]; +int g_iPlayerDamage[MAXPLAYERS+1]; +int g_iPlayerDamageHits[MAXPLAYERS+1]; +int g_iPlayerDamageFrom1K[MAXPLAYERS + 1]; +int g_iPlayerInfections[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Player Rankings", + author = "Neon & zaCade", + description = "Show Top Defenders & Infections after each round", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + CreateNative("PlayerRankings_GetClientDamage", Native_GetClientDamage); + CreateNative("PlayerRankings_GetClientHits", Native_GetClientHits); + + CreateNative("PlayerRankings_GetClientInfections", Native_GetClientInfections); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + LoadTranslations("plugin.playerrankings.phrases"); + + g_bEngineCSGO = view_as(GetEngineVersion() == Engine_CSGO); + + g_hCVar_Protection = CreateConVar("sm_topdefenders_protection", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_ProtectionMinimal1 = CreateConVar("sm_topdefenders_minimal_1", "15", "", FCVAR_NONE, true, 1.0, true, 64.0); + g_hCVar_ProtectionMinimal2 = CreateConVar("sm_topdefenders_minimal_2", "30", "", FCVAR_NONE, true, 1.0, true, 64.0); + g_hCVar_ProtectionMinimal3 = CreateConVar("sm_topdefenders_minimal_3", "45", "", FCVAR_NONE, true, 1.0, true, 64.0); + + g_hCookie_HideCrown = RegClientCookie("topdefenders_hidecrown", "", CookieAccess_Private); + g_hCookie_HideDialog = RegClientCookie("topdefenders_hidedialog", "", CookieAccess_Private); + g_hCookie_Protection = RegClientCookie("topdefenders_protection", "", CookieAccess_Private); + + CreateTimer(0.1, UpdateScoreboard, INVALID_HANDLE, TIMER_REPEAT); + CreateTimer(0.1, UpdateDialog, INVALID_HANDLE, TIMER_REPEAT); + + RegConsoleCmd("sm_togglecrown", OnToggleCrown); + RegConsoleCmd("sm_toggleskull", OnToggleCrown); + RegConsoleCmd("sm_toggledialog", OnToggleDialog); + RegConsoleCmd("sm_toggleimmunity", OnToggleImmunity); + + HookEvent("round_start", OnRoundStart); + HookEvent("round_end", OnRoundEnding); + HookEvent("player_hurt", OnClientHurt); + HookEvent("player_spawn", OnClientSpawn); + + SetCookieMenuItem(MenuHandler_CookieMenu, 0, "Player Rankings"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleCrown(int client, int args) +{ + ToggleCrown(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleDialog(int client, int args) +{ + ToggleDialog(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnToggleImmunity(int client, int args) +{ + ToggleImmunity(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleCrown(int client) +{ + g_bHideCrown[client] = !g_bHideCrown[client]; + + SetClientCookie(client, g_hCookie_HideCrown, g_bHideCrown[client] ? "1" : ""); + + CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bHideCrown[client] ? "Crown Disabled" : "Crown Enabled"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleDialog(int client) +{ + g_bHideDialog[client] = !g_bHideDialog[client]; + + SetClientCookie(client, g_hCookie_HideDialog, g_bHideDialog[client] ? "1" : ""); + + CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bHideDialog[client] ? "Dialog Disabled" : "Dialog Enabled"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ToggleImmunity(int client) +{ + g_bProtection[client] = !g_bProtection[client]; + + SetClientCookie(client, g_hCookie_Protection, g_bProtection[client] ? "1" : ""); + + CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", g_bProtection[client] ? "Immunity Disabled" : "Immunity Enabled"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ShowSettingsMenu(int client) +{ + Menu menu = new Menu(MenuHandler_MainMenu); + + menu.SetTitle("%T", "Cookie Menu Title", client); + + AddMenuItemTranslated(menu, "0", "%t: %t", "Crown", g_bHideCrown[client] ? "Disabled" : "Enabled"); + AddMenuItemTranslated(menu, "1", "%t: %t", "Dialog", g_bHideDialog[client] ? "Disabled" : "Enabled"); + AddMenuItemTranslated(menu, "2", "%t: %t", "Immunity", g_bProtection[client] ? "Disabled" : "Enabled"); + + menu.ExitBackButton = true; + + menu.Display(client, MENU_TIME_FOREVER); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void MenuHandler_CookieMenu(int client, CookieMenuAction action, any info, char[] buffer, int maxlen) +{ + switch(action) + { + case(CookieMenuAction_DisplayOption): + { + Format(buffer, maxlen, "%T", "Cookie Menu", client); + } + case(CookieMenuAction_SelectOption): + { + ShowSettingsMenu(client); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int MenuHandler_MainMenu(Menu menu, MenuAction action, int client, int selection) +{ + switch(action) + { + case(MenuAction_Select): + { + switch(selection) + { + case(0): ToggleCrown(client); + case(1): ToggleDialog(client); + case(2): ToggleImmunity(client); + } + + ShowSettingsMenu(client); + } + case(MenuAction_Cancel): + { + ShowCookieMenu(client); + } + case(MenuAction_End): + { + delete menu; + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + PrecacheSound("unloze/holy.wav"); + PrecacheModel("models/unloze/crown_v3.mdl"); + PrecacheModel("models/unloze/skull_v3.mdl"); + + AddFileToDownloadsTable("sound/unloze/holy.wav"); + + AddFileToDownloadsTable("models/unloze/crown_v3.mdl"); + AddFileToDownloadsTable("models/unloze/crown_v3.phy"); + AddFileToDownloadsTable("models/unloze/crown_v3.vvd"); + AddFileToDownloadsTable("models/unloze/crown_v3.sw.vtx"); + AddFileToDownloadsTable("models/unloze/crown_v3.dx80.vtx"); + AddFileToDownloadsTable("models/unloze/crown_v3.dx90.vtx"); + AddFileToDownloadsTable("materials/models/unloze/crown/crown.vmt"); + AddFileToDownloadsTable("materials/models/unloze/crown/crown.vtf"); + AddFileToDownloadsTable("materials/models/unloze/crown/crown_bump.vtf"); + AddFileToDownloadsTable("materials/models/unloze/crown/crown_detail.vtf"); + AddFileToDownloadsTable("materials/models/unloze/crown/crown_lightwarp.vtf"); + + AddFileToDownloadsTable("models/unloze/skull_v3.mdl"); + AddFileToDownloadsTable("models/unloze/skull_v3.phy"); + AddFileToDownloadsTable("models/unloze/skull_v3.vvd"); + AddFileToDownloadsTable("models/unloze/skull_v3.sw.vtx"); + AddFileToDownloadsTable("models/unloze/skull_v3.dx80.vtx"); + AddFileToDownloadsTable("models/unloze/skull_v3.dx90.vtx"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull.vmt"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull.vtf"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull_bump.vtf"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull_horn_b.vmt"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull_horn_b.vtf"); + AddFileToDownloadsTable("materials/models/unloze/skull/skull_horn_b_bump.vtf"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientCookiesCached(int client) +{ + char sBuffer[4]; + GetClientCookie(client, g_hCookie_HideCrown, sBuffer, sizeof(sBuffer)); + + if (sBuffer[0]) + g_bHideCrown[client] = true; + else + g_bHideCrown[client] = false; + + GetClientCookie(client, g_hCookie_HideDialog, sBuffer, sizeof(sBuffer)); + + if (sBuffer[0]) + g_bHideDialog[client] = true; + else + g_bHideDialog[client] = false; + + GetClientCookie(client, g_hCookie_Protection, sBuffer, sizeof(sBuffer)); + + if (sBuffer[0]) + g_bProtection[client] = true; + else + g_bProtection[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_iPlayerDamage[client] = 0; + g_iPlayerDamageHits[client] = 0; + g_iPlayerDamageFrom1K[client] = 0; + g_iPlayerInfections[client] = 0; + + g_bHideCrown[client] = false; + g_bHideDialog[client] = false; + g_bProtection[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int SortRankingsList(int[] elem1, int[] elem2, const int[][] array, Handle hndl) +{ + if (elem1[1] > elem2[1]) return -1; + if (elem1[1] < elem2[1]) return 1; + + return 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action UpdateScoreboard(Handle timer) +{ + int iSortedList[MAXPLAYERS+1][2]; + int iSortedCount; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client)) + continue; + + SetEntProp(client, Prop_Data, "m_iDeaths", 0); + + if (!g_iPlayerDamage[client]) + continue; + + iSortedList[iSortedCount][0] = client; + iSortedList[iSortedCount][1] = g_iPlayerDamage[client]; + iSortedCount++; + } + + SortCustom2D(iSortedList, iSortedCount, SortRankingsList); + + for (int rank = 0; rank < iSortedCount; rank++) + { + SetEntProp(iSortedList[rank][0], Prop_Data, "m_iDeaths", rank + 1); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action UpdateDialog(Handle timer) +{ + if (g_bEngineCSGO || g_iDialogLevel <= 0) + return; + + int iSortedList[MAXPLAYERS+1][2]; + int iSortedCount; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || !g_iPlayerDamage[client]) + continue; + + iSortedList[iSortedCount][0] = client; + iSortedList[iSortedCount][1] = g_iPlayerDamage[client]; + iSortedCount++; + } + + SortCustom2D(iSortedList, iSortedCount, SortRankingsList); + + for (int rank = 0; rank < iSortedCount; rank++) + { + switch(rank) + { + case(0): SendDialog(iSortedList[rank][0], "#%d (D: %d | P: -%d)", g_iDialogLevel, 1, rank + 1, iSortedList[rank][1], iSortedList[rank][1] - iSortedList[rank + 1][1]); + case(1): SendDialog(iSortedList[rank][0], "#%d (D: %d | N: +%d)", g_iDialogLevel, 1, rank + 1, iSortedList[rank][1], iSortedList[rank - 1][1] - iSortedList[rank][1]); + default: SendDialog(iSortedList[rank][0], "#%d (D: %d | N: +%d | F: +%d)", g_iDialogLevel, 1, rank + 1, iSortedList[rank][1], iSortedList[rank - 1][1] - iSortedList[rank][1], iSortedList[0][1] - iSortedList[rank][1]); + } + } + + g_iDialogLevel--; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_iDialogLevel = 100000; + + for (int client = 1; client <= MaxClients; client++) + { + g_iPlayerDamage[client] = 0; + g_iPlayerDamageHits[client] = 0; + g_iPlayerDamageFrom1K[client] = 0; + g_iPlayerInfections[client] = 0; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundEnding(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_iPlayerWinner = {-1, -1, -1, -1, -1, -1}; + + int iSortedListDefenders[MAXPLAYERS+1][3]; + int iSortedCountDefenders; + + int iSortedListInfectors[MAXPLAYERS+1][2]; + int iSortedCountInfectors; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client)) + continue; + + if (g_iPlayerDamage[client]) + { + iSortedListDefenders[iSortedCountDefenders][0] = client; + iSortedListDefenders[iSortedCountDefenders][1] = g_iPlayerDamage[client]; + iSortedListDefenders[iSortedCountDefenders][2] = g_iPlayerDamageHits[client]; + iSortedCountDefenders++; + } + + if (g_iPlayerInfections[client]) + { + iSortedListInfectors[iSortedCountInfectors][0] = client; + iSortedListInfectors[iSortedCountInfectors][1] = g_iPlayerInfections[client]; + iSortedCountInfectors++; + } + } + + SortCustom2D(iSortedListDefenders, iSortedCountDefenders, SortRankingsList); + SortCustom2D(iSortedListInfectors, iSortedCountInfectors, SortRankingsList); + + for (int rank = 0; rank < iSortedCountDefenders; rank++) + { + LogMessage("%d. %L - %d damage in %d hits", rank + 1, iSortedListDefenders[rank][0], iSortedListDefenders[rank][1], iSortedListDefenders[rank][2]) + } + + for (int rank = 0; rank < iSortedCountInfectors; rank++) + { + LogMessage("%d. %L - %d infections", rank + 1, iSortedListInfectors[rank][0], iSortedListInfectors[rank][1]) + } + + if (iSortedCountDefenders) + { + char sBuffer[512]; + Format(sBuffer, sizeof(sBuffer), "TOP DEFENDERS:"); + + if (iSortedListDefenders[0][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n1. %N - %d damage in %d hits", sBuffer, iSortedListDefenders[0][0], iSortedListDefenders[0][1], iSortedListDefenders[0][2]); + + g_iPlayerWinner[0] = GetSteamAccountID(iSortedListDefenders[0][0]); + + LH_LogPlayerEvent(iSortedListDefenders[0][0], "triggered", "ze_defender_first", true); + } + + if (iSortedListDefenders[1][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n2. %N - %d damage in %d hits", sBuffer, iSortedListDefenders[1][0], iSortedListDefenders[1][1], iSortedListDefenders[1][2]); + + g_iPlayerWinner[1] = GetSteamAccountID(iSortedListDefenders[1][0]); + + LH_LogPlayerEvent(iSortedListDefenders[1][0], "triggered", "ze_defender_second", true); + } + + if (iSortedListDefenders[2][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n3. %N - %d damage in %d hits", sBuffer, iSortedListDefenders[2][0], iSortedListDefenders[2][1], iSortedListDefenders[2][2]); + + g_iPlayerWinner[2] = GetSteamAccountID(iSortedListDefenders[2][0]); + + LH_LogPlayerEvent(iSortedListDefenders[2][0], "triggered", "ze_defender_third", true); + } + + if (g_bEngineCSGO) + { + int iSplits + char sSplits[16][512]; + + if ((iSplits = ExplodeString(sBuffer, "\n", sSplits, sizeof(sSplits), sizeof(sSplits[]))) != 0) + { + for (int iSplit; iSplit < iSplits; iSplit++) + { + PrintToChatAll(sSplits[iSplit]); + } + } + + PrintToMessageHUD(0, 50, Float:{0.02, 0.45}, {0, 128, 255, 255}, {255, 255, 255, 255}, 0, 0.1, 0.1, 5.0, 0.0, sBuffer); + } + else + { + PrintToMessageHUD(0, 50, Float:{0.02, 0.25}, {0, 128, 255, 255}, {255, 255, 255, 255}, 0, 0.1, 0.1, 5.0, 0.0, sBuffer); + PrintToChatAll(sBuffer); + } + } + + if (iSortedCountInfectors) + { + char sBuffer[512]; + Format(sBuffer, sizeof(sBuffer), "TOP INFECTORS:"); + + if (iSortedListInfectors[0][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n1. %N - %d infections", sBuffer, iSortedListInfectors[0][0], iSortedListInfectors[0][1]); + + g_iPlayerWinner[3] = GetSteamAccountID(iSortedListInfectors[0][0]); + + LH_LogPlayerEvent(iSortedListInfectors[0][0], "triggered", "ze_infector_first", true); + } + + if (iSortedListInfectors[1][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n2. %N - %d infections", sBuffer, iSortedListInfectors[1][0], iSortedListInfectors[1][1]); + + g_iPlayerWinner[4] = GetSteamAccountID(iSortedListInfectors[1][0]); + + LH_LogPlayerEvent(iSortedListInfectors[1][0], "triggered", "ze_infector_second", true); + } + + if (iSortedListInfectors[2][0]) + { + Format(sBuffer, sizeof(sBuffer), "%s\n3. %N - %d infections", sBuffer, iSortedListInfectors[2][0], iSortedListInfectors[2][1]); + + g_iPlayerWinner[5] = GetSteamAccountID(iSortedListInfectors[2][0]); + + LH_LogPlayerEvent(iSortedListInfectors[2][0], "triggered", "ze_infector_third", true); + } + + if (g_bEngineCSGO) + { + int iSplits + char sSplits[16][512]; + + if ((iSplits = ExplodeString(sBuffer, "\n", sSplits, sizeof(sSplits), sizeof(sSplits[]))) != 0) + { + for (int iSplit; iSplit < iSplits; iSplit++) + { + PrintToChatAll(sSplits[iSplit]); + } + } + + PrintToMessageHUD(0, 55, Float:{0.02, 0.6}, {255, 0, 0, 255}, {255, 255, 255, 255}, 0, 0.1, 0.1, 5.0, 0.0, sBuffer); + } + else + { + PrintToMessageHUD(0, 55, Float:{0.02, 0.4}, {255, 0, 0, 255}, {255, 255, 255, 255}, 0, 0.1, 0.1, 5.0, 0.0, sBuffer); + PrintToChatAll(sBuffer); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("attacker")); + int victim = GetClientOfUserId(hEvent.GetInt("userid")); + + if (client < 1 || client > MaxClients || victim < 1 || victim > MaxClients) + return; + + if (client == victim || (IsPlayerAlive(client) && ZR_IsClientZombie(client))) + return; + + int iDamage = hEvent.GetInt("dmg_health"); + + g_iPlayerDamage[client] += iDamage; + g_iPlayerDamageHits[client] += 1; + g_iPlayerDamageFrom1K[client] += iDamage; + + if (g_iPlayerDamageFrom1K[client] >= 2000) + { + g_iPlayerDamageFrom1K[client] -= 2000; + + LH_LogPlayerEvent(client, "triggered", "ze_damage_zombie", true); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + if (!g_bHideCrown[client]) + { + int steamAccountID = GetSteamAccountID(client); + + if (g_iPlayerWinner[0] == steamAccountID) + CreateTimer(7.0, OnClientSpawnPostCrown, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + + else if (g_iPlayerWinner[3] == steamAccountID) + CreateTimer(7.0, OnClientSpawnPostSkull, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientSpawnPostCrown(Handle timer, int serial) +{ + int client = -1; + if((client = GetClientFromSerial(serial)) == -1) + return; + + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + return; + + SpawnCrown(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientSpawnPostSkull(Handle timer, int serial) +{ + int client = -1; + if((client = GetClientFromSerial(serial)) == -1) + return; + + if (!IsClientInGame(client) || !IsPlayerAlive(client)) + return; + + SpawnSkull(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void SpawnCrown(int client) +{ + int entity = INVALID_ENT_REFERENCE; + if ((entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return; + + SetEntityModel(entity, "models/unloze/crown_v3.mdl"); + + DispatchKeyValue(entity, "solid", "0"); + DispatchKeyValue(entity, "disableshadows", "1"); + DispatchKeyValue(entity, "disablereceiveshadows", "1"); + DispatchKeyValue(entity, "disablebonefollowers", "1"); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 80.0; + + TeleportEntity(entity, fVector, fAngles, NULL_VECTOR); + + float fDirection[3]; + fDirection[0] = 0.0; + fDirection[1] = 0.0; + fDirection[2] = 1.0; + + TE_SetupSparks(fVector, fDirection, 1000, 200); + TE_SendToAll(); + + SetVariantString("!activator"); + AcceptEntityInput(entity, "SetParent", client); + + if (g_bEngineCSGO) + return; + + DataPack data = new DataPack(); + data.WriteCell(EntIndexToEntRef(entity)); + data.WriteCell(EntIndexToEntRef(client)); + data.Reset(); + + CreateTimer(0.1, OnCrownUpdate, data, TIMER_REPEAT); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void SpawnSkull(int client) +{ + int entity = INVALID_ENT_REFERENCE; + if ((entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return; + + SetEntityModel(entity, "models/unloze/skull_v3.mdl"); + + DispatchKeyValue(entity, "solid", "0"); + DispatchKeyValue(entity, "disableshadows", "1"); + DispatchKeyValue(entity, "disablereceiveshadows", "1"); + DispatchKeyValue(entity, "disablebonefollowers", "1"); + + float fVector[3]; + float fAngles[3]; + GetClientAbsOrigin(client, fVector); + GetClientAbsAngles(client, fAngles); + + fVector[2] += 80.0; + + TeleportEntity(entity, fVector, fAngles, NULL_VECTOR); + + float fDirection[3]; + fDirection[0] = 0.0; + fDirection[1] = 0.0; + fDirection[2] = 1.0; + + TE_SetupSparks(fVector, fDirection, 1000, 200); + TE_SendToAll(); + + SetVariantString("!activator"); + AcceptEntityInput(entity, "SetParent", client); + + if (g_bEngineCSGO) + return; + + DataPack data = new DataPack(); + data.WriteCell(EntIndexToEntRef(entity)); + data.WriteCell(EntIndexToEntRef(client)); + data.Reset(); + + CreateTimer(0.1, OnSkullUpdate, data, TIMER_REPEAT); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnCrownUpdate(Handle timer, DataPack data) +{ + data.Reset(); + + int entity = INVALID_ENT_REFERENCE; + if ((entity = EntRefToEntIndex(data.ReadCell())) == INVALID_ENT_REFERENCE) + return Plugin_Stop; + + int client = INVALID_ENT_REFERENCE; + if ((client = EntRefToEntIndex(data.ReadCell())) == INVALID_ENT_REFERENCE) + return Plugin_Stop; + + if (!IsValidEntity(entity) || !IsClientInGame(client) || !IsPlayerAlive(client)) + { + AcceptEntityInput(entity, "Kill"); + return Plugin_Stop; + } + else + { + float fAngles[3]; + GetClientAbsAngles(client, fAngles); + + TeleportEntity(entity, NULL_VECTOR, fAngles, NULL_VECTOR); + return Plugin_Continue; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnSkullUpdate(Handle timer, DataPack data) +{ + data.Reset(); + + int entity = INVALID_ENT_REFERENCE; + if ((entity = EntRefToEntIndex(data.ReadCell())) == INVALID_ENT_REFERENCE) + return Plugin_Stop; + + int client = INVALID_ENT_REFERENCE; + if ((client = EntRefToEntIndex(data.ReadCell())) == INVALID_ENT_REFERENCE) + return Plugin_Stop; + + if (!IsValidEntity(entity) || !IsClientInGame(client) || !IsPlayerAlive(client)) + { + AcceptEntityInput(entity, "Kill"); + return Plugin_Stop; + } + else + { + float fAngles[3]; + GetClientAbsAngles(client, fAngles); + + TeleportEntity(entity, NULL_VECTOR, fAngles, NULL_VECTOR); + return Plugin_Continue; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action ZR_OnClientInfect(&client, &attacker, &bool:motherInfect, &bool:respawnOverride, &bool:respawn) +{ + if (g_hCVar_Protection.BoolValue && motherInfect && !g_bProtection[client]) + { + int steamAccountID = GetSteamAccountID(client); + + if ((g_iPlayerWinner[0] == steamAccountID && GetClientCount() >= g_hCVar_ProtectionMinimal1.IntValue) || + (g_iPlayerWinner[1] == steamAccountID && GetClientCount() >= g_hCVar_ProtectionMinimal2.IntValue) || + (g_iPlayerWinner[2] == steamAccountID && GetClientCount() >= g_hCVar_ProtectionMinimal3.IntValue)) + { + PrintToMessageHUD(client, 60, Float:{-1.0, 0.3}, {255, 255, 255, 255}, {255, 255, 255, 255}, 0, 0.1, 0.1, 5.0, 0.0, "%t", "Protected"); + CPrintToChat(client, "{cyan}%t {white}%t", "Chat Prefix", "Protected"); + + EmitSoundToClient(client, "unloze/holy.wav", .volume=1.0); + return Plugin_Handled; + } + } + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (client < 1 || client > MaxClients || attacker < 1 || attacker > MaxClients) + return; + + if (client == attacker || (IsPlayerAlive(attacker) && ZR_IsClientHuman(attacker))) + return; + + g_iPlayerInfections[attacker] += 1; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetClientDamage(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index %d", client); + } + + if (!IsClientInGame(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not in game", client); + } + + return g_iPlayerDamage[client]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetClientHits(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index %d", client); + } + + if (!IsClientInGame(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not in game", client); + } + + return g_iPlayerDamageHits[client]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetClientInfections(Handle hPlugin, int numParams) +{ + int client = GetNativeCell(1); + if (client < 1 || client > MaxClients) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Invalid client index %d", client); + } + + if (!IsClientInGame(client)) + { + return ThrowNativeError(SP_ERROR_NATIVE, "Client %d is not in game", client); + } + + return g_iPlayerInfections[client]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void AddMenuItemTranslated(Menu menu, const char[] info, const char[] display, any ...) +{ + char buffer[128]; + VFormat(buffer, sizeof(buffer), display, 4); + + menu.AddItem(info, buffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void PrintToMessageHUD(int client, int channel, float position[2], int color1[4], int color2[4], int effect, float fadein, float fadeout, float hold, float fx, const char[] text, any ...) +{ + char buffer[512]; + VFormat(buffer, sizeof(buffer), text, 12); + + Handle hMessage = ((client == 0) ? StartMessageAll("HudMsg") : StartMessageOne("HudMsg", client)); + if (hMessage) + { + if (GetUserMessageType() == UM_Protobuf) + { + PbSetInt(hMessage, "channel", channel); + PbSetInt(hMessage, "effect", effect); + + PbSetVector2D(hMessage, "pos", position); + + PbSetColor(hMessage, "clr1", color1); + PbSetColor(hMessage, "clr2", color2); + + PbSetFloat(hMessage, "fade_in_time", fadein); + PbSetFloat(hMessage, "fade_out_time", fadeout); + PbSetFloat(hMessage, "hold_time", hold); + PbSetFloat(hMessage, "fx_time", fx); + + PbSetString(hMessage, "text", buffer); + EndMessage(); + } + else + { + BfWriteByte(hMessage, channel); + + BfWriteFloat(hMessage, position[0]); + BfWriteFloat(hMessage, position[1]); + + BfWriteByte(hMessage, color1[0]); + BfWriteByte(hMessage, color1[1]); + BfWriteByte(hMessage, color1[2]); + BfWriteByte(hMessage, color1[3]); + BfWriteByte(hMessage, color1[0]); + BfWriteByte(hMessage, color2[1]); + BfWriteByte(hMessage, color2[2]); + BfWriteByte(hMessage, color2[3]); + BfWriteByte(hMessage, effect); + + BfWriteFloat(hMessage, fadein); + BfWriteFloat(hMessage, fadeout); + BfWriteFloat(hMessage, hold); + BfWriteFloat(hMessage, fx); + + BfWriteString(hMessage, buffer); + EndMessage(); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +void SendDialog(int client, const char[] text, const int level, const int time, any ...) +{ + char buffer[128]; + VFormat(buffer, sizeof(buffer), text, 5); + + KeyValues kv = new KeyValues("dialog", "title", buffer); + kv.SetColor("color", 255, 255, 255, 255); + kv.SetNum("level", level); + kv.SetNum("time", time); + + if (!g_bHideDialog[client]) + { + CreateDialog(client, kv, DialogType_Msg); + } + + for (int spec = 1; spec <= MaxClients; spec++) + { + if (!IsClientInGame(spec) || !IsClientObserver(spec) || g_bHideDialog[spec]) + continue; + + int specMode = GetClientSpectatorMode(spec); + int specTarget = GetClientSpectatorTarget(spec); + + if ((specMode == SPECMODE_FIRSTPERSON || specMode == SPECMODE_THIRDPERSON) && specTarget == client) + { + CreateDialog(spec, kv, DialogType_Msg); + } + } + + delete kv; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +int GetClientSpectatorMode(int client) +{ + return GetEntProp(client, Prop_Send, "m_iObserverMode"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +int GetClientSpectatorTarget(int client) +{ + return GetEntPropEnt(client, Prop_Send, "m_hObserverTarget"); +} \ No newline at end of file diff --git a/PlayerRankings/scripting/include/PlayerRankings.inc b/PlayerRankings/scripting/include/PlayerRankings.inc new file mode 100644 index 00000000..2dc64374 --- /dev/null +++ b/PlayerRankings/scripting/include/PlayerRankings.inc @@ -0,0 +1,28 @@ +#if defined _PlayerRankings_OnRoundEnd + #endinput +#endif +#define _PlayerRankings_OnRoundEnd + +/** + * Returns the current damage of a client + * + * @param client Client index. + * @return The current damage of the client. + */ +native int PlayerRankings_GetClientDamage(int client); + +/** + * Returns the current hits of a client + * + * @param client Client index. + * @return The current hits of the client. + */ +native int PlayerRankings_GetClientHits(int client); + +/** + * Returns the current infections of a client + * + * @param client Client index. + * @return The current infections of the client. + */ +native int PlayerRankings_GetClientInfections(int client); \ No newline at end of file diff --git a/PlayerRankings/translations/plugin.playerrankings.phrases.txt b/PlayerRankings/translations/plugin.playerrankings.phrases.txt new file mode 100644 index 00000000..61c17f9f --- /dev/null +++ b/PlayerRankings/translations/plugin.playerrankings.phrases.txt @@ -0,0 +1,63 @@ +"Phrases" +{ + "Chat Prefix" + { + "en" "[PlayerRankings]" + } + "Cookie Menu" + { + "en" "PlayerRankings" + } + "Cookie Menu Title" + { + "en" "PlayerRankings Settings" + } + "Enabled" + { + "en" "Enabled" + } + "Disabled" + { + "en" "Disabled" + } + "Crown" + { + "en" "Crown/Skull" + } + "Crown Enabled" + { + "en" "You will now spawn with a Crown/Skull again." + } + "Crown Disabled" + { + "en" "You will no longer spawn with a Crown/Skull." + } + "Dialog" + { + "en" "Dialog" + } + "Dialog Enabled" + { + "en" "You will now see the dialog again." + } + "Dialog Disabled" + { + "en" "You will no longer see the dialog." + } + "Immunity" + { + "en" "Immunity" + } + "Immunity Enabled" + { + "en" "You will now be protected from being mother zombie." + } + "Immunity Disabled" + { + "en" "You will no longer be protected from being mother zombie." + } + "Protected" + { + "en" "You have been protected from being Mother Zombie,\n since you where Top Defender last round." + } +} \ No newline at end of file diff --git a/PlaytimeReward/scripting/PlaytimeReward.sp b/PlaytimeReward/scripting/PlaytimeReward.sp index 027debe7..9251ef7d 100644 --- a/PlaytimeReward/scripting/PlaytimeReward.sp +++ b/PlaytimeReward/scripting/PlaytimeReward.sp @@ -1,8 +1,7 @@ #pragma semicolon 1 #include - -#include "loghelper.inc" +#include #pragma newdecls required @@ -10,10 +9,10 @@ int g_iClientConnectionTime[MAXPLAYERS + 1]; public Plugin myinfo = { - name = "Play Time Reward", - author = "Obus", - description = "Handle ranking rewards", - version = "0.0.1" + name = "PlaytimeReward", + author = "Obus + Dogan", + description = "reward players with points for playing on the server", + version = "1.0.0" }; public void OnPluginStart() @@ -21,6 +20,7 @@ public void OnPluginStart() CreateTimer(30.0, Timer_CheckConnectionTime, _, TIMER_REPEAT); HookEvent("player_disconnect", EventHook_PlayerDisconnect, EventHookMode_Post); + HookEvent("player_connect", EventHook_PlayerConnect, EventHookMode_Post); } public void OnPluginEnd() @@ -28,12 +28,19 @@ public void OnPluginEnd() UnhookEvent("player_disconnect", EventHook_PlayerDisconnect, EventHookMode_Post); } -public void OnMapStart() +public void EventHook_PlayerDisconnect(Event hEvent, const char[] sName, bool bDontBroadcast) { - GetTeams(); + bool bIsBot = view_as(hEvent.GetInt("bot")); + + if (bIsBot) + return; + + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + g_iClientConnectionTime[client] = 0; } -public void EventHook_PlayerDisconnect(Event hEvent, const char[] sName, bool bDontBroadcast) +public void EventHook_PlayerConnect(Event hEvent, const char[] sName, bool bDontBroadcast) { bool bIsBot = view_as(hEvent.GetInt("bot")); @@ -52,10 +59,23 @@ public Action Timer_CheckConnectionTime(Handle hThis) if (!IsValidClient(i)) continue; - if ((g_iClientConnectionTime[i] += 30) >= 1200) + g_iClientConnectionTime[i] += 30; + + for (int iTime = 1800; iTime <= 36000; iTime += 1800) { - LogPlayerEvent(i, "triggered", "staying_server"); - g_iClientConnectionTime[i] -= 1200; + if ((g_iClientConnectionTime[i] % 1800) == 0) + { + int iConnectionTimeClamped = g_iClientConnectionTime[i]; + + if (iConnectionTimeClamped > 36000) + iConnectionTimeClamped = 36000; + + char sPlayerEvent[32]; + Format(sPlayerEvent, sizeof(sPlayerEvent), "staying_server_%d", iConnectionTimeClamped / 60); + + LH_LogPlayerEvent(i, "triggered", sPlayerEvent, true); + break; + } } } } @@ -63,4 +83,4 @@ public Action Timer_CheckConnectionTime(Handle hThis) stock bool IsValidClient(int client) { return (client >= 1 && client <= MaxClients && IsClientInGame(client) && !IsFakeClient(client)); -} +} \ No newline at end of file diff --git a/RandomizeSpawns/gamedata/RandomizeSpawns.games.txt b/RandomizeSpawns/gamedata/RandomizeSpawns.games.txt new file mode 100644 index 00000000..f1055713 --- /dev/null +++ b/RandomizeSpawns/gamedata/RandomizeSpawns.games.txt @@ -0,0 +1,14 @@ +"Games" +{ + "cstrike" + { + "Offsets" + { + "SelectSpawnPoint" + { + "windows" "392" + "linux" "393" + } + } + } +} \ No newline at end of file diff --git a/RandomizeSpawns/scripting/RandomizeSpawns.sp b/RandomizeSpawns/scripting/RandomizeSpawns.sp new file mode 100644 index 00000000..10183bd5 --- /dev/null +++ b/RandomizeSpawns/scripting/RandomizeSpawns.sp @@ -0,0 +1,147 @@ +#pragma newdecls required + +#include +#include +#include + +Handle hSelectSpawnPoint; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "RandomizeSpawns", + author = "zaCade", + description = "Randomize player spawns.", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + Handle hGameConf; + if ((hGameConf = LoadGameConfigFile("RandomizeSpawns.games")) == INVALID_HANDLE) + { + SetFailState("Couldn't load \"RandomizeSpawns.games\" game config!"); + return; + } + + // + int iOffset; + if ((iOffset = GameConfGetOffset(hGameConf, "SelectSpawnPoint")) == -1) + { + delete hGameConf; + SetFailState("GameConfGetOffset(hGameConf, \"SelectSpawnPoint\") failed!"); + return; + } + + if ((hSelectSpawnPoint = DHookCreate(iOffset, HookType_Entity, ReturnType_CBaseEntity, ThisPointer_CBaseEntity, OnPlayerSelectSpawnPoint)) == INVALID_HANDLE) + { + delete hGameConf; + SetFailState("DHookCreate(iOffset, HookType_Entity, ReturnType_CBaseEntity, ThisPointer_CBaseEntity, OnPlayerSelectSpawnPoint) failed!"); + return; + } + + // Late load. + for (int client = 1; client <= MaxClients; client++) + { + if (IsClientInGame(client)) + { + OnClientPutInServer(client); + } + } + + delete hGameConf; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPutInServer(int client) +{ + DHookEntity(hSelectSpawnPoint, false, client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int RandomizeSpawnPoints(int elem1, int elem2, int[] array, Handle hndl) +{ + return GetRandomInt(-1, 1); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public MRESReturn OnPlayerSelectSpawnPoint(int client, Handle hReturn) +{ + if (IsValidEntity(client) && !IsClientInGame(client)) + return MRES_Ignored; + + static int spawnPoints[128]; + static int spawnCount; + + if (!spawnCount) + { + int spawnPoint = INVALID_ENT_REFERENCE; + while ((spawnPoint = FindEntityByClassname(spawnPoint, "info_player_*")) != INVALID_ENT_REFERENCE) + { + char sClassname[64]; + GetEntityClassname(spawnPoint, sClassname, sizeof(sClassname)); + + if (StrEqual(sClassname, "info_player_terrorist", true) || StrEqual(sClassname, "info_player_counterterrorist", true)) + { + spawnPoints[spawnCount++] = spawnPoint; + } + } + } + + if (spawnCount) + { + int spawnCountAttempts; + while (spawnCountAttempts >= spawnCount) + { + SortCustom1D(spawnPoints, spawnCount, RandomizeSpawnPoints); + + int spawnPoint = spawnPoints[0]; + if (IsValidEntity(spawnPoint) && IsValidPlayerSpawn(client, spawnPoint)) + { + DHookSetReturn(hReturn, spawnPoint); + return MRES_Supercede; + } + + spawnCountAttempts++; + } + } + + return MRES_Ignored; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool IsValidPlayerSpawn(int client, int spawnPoint) +{ + float clientMins[3]; + float clientMaxs[3]; + GetClientMins(client, clientMins); + GetClientMaxs(client, clientMaxs); + + float spawnPointOrigin[3]; + GetEntPropVector(spawnPoint, Prop_Send, "m_vecOrigin", spawnPointOrigin); + + TR_TraceHullFilter(spawnPointOrigin, spawnPointOrigin, clientMins, clientMaxs, MASK_PLAYERSOLID, IsValidPlayerSpawnFilter); + + return !TR_DidHit(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool IsValidPlayerSpawnFilter(int entity, int contentsMask) +{ + return view_as(entity); +} \ No newline at end of file diff --git a/RepeatKiller/scripting/RepeatKiller.sp b/RepeatKiller/scripting/RepeatKiller.sp new file mode 100644 index 00000000..5615c143 --- /dev/null +++ b/RepeatKiller/scripting/RepeatKiller.sp @@ -0,0 +1,97 @@ +#include +#include + +/* BOOLS */ +bool g_bBlockRespawn[MAXPLAYERS+1]; + +/* FLOATS */ +float g_fDeathTime[MAXPLAYERS+1]; + +/* CONVARS */ +ConVar g_hRespawnDelay; +ConVar g_hRespawnTreshold; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Repeat kill detector", + author = "zaCade", + description = "Disables respawning on maps with repeat killers", + version = "2.0.0", + url = "http://www.sourcemod.net/" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + if((g_hRespawnDelay = FindConVar("zr_respawn_delay")) == INVALID_HANDLE) + SetFailState("Failed to find zr_respawn_delay cvar."); + + g_hRespawnTreshold = CreateConVar("zr_repeatkill_threshold", "1.0", "Zombie Reloaded Repeat Kill Detector Threshold", 0, true, 0.0, true, 10.0); + + HookEvent("round_start", OnRoundStart); + HookEvent("player_death", OnClientDeath); + + AutoExecConfig(true, "plugin.RepeatKillDetector"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bBlockRespawn[client] = false; + g_fDeathTime[client] = 0.0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + for (int client; client < MaxClients; client++) + g_bBlockRespawn[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + char sWeapon[32]; + hEvent.GetString("weapon", sWeapon, sizeof(sWeapon)) + + int victim = GetClientOfUserId(hEvent.GetInt("userid")); + int client = GetClientOfUserId(hEvent.GetInt("attacker")); + + if (g_bBlockRespawn[victim]) + return; + + if (victim && !client && StrEqual(sWeapon, "trigger_hurt")) + { + float fGameTime = GetGameTime(); + + if (fGameTime - g_fDeathTime[victim] - g_hRespawnDelay.FloatValue <= g_hRespawnTreshold.FloatValue) + { + PrintToChat(victim, "\x04[ZR]\x01 Repeat killer detected. Disabling your respawn for this round."); + g_bBlockRespawn[victim] = true; + } + + g_fDeathTime[victim] = fGameTime; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action ZR_OnClientRespawn(&client, &ZR_RespawnCondition:condition) +{ + if (g_bBlockRespawn[client]) + return Plugin_Handled; + + return Plugin_Continue; +} \ No newline at end of file diff --git a/ReservedSlot/scripting/ReservedSlot.sp b/ReservedSlot/scripting/ReservedSlot.sp index 15da6235..84f981ce 100644 --- a/ReservedSlot/scripting/ReservedSlot.sp +++ b/ReservedSlot/scripting/ReservedSlot.sp @@ -5,7 +5,6 @@ #undef REQUIRE_PLUGIN #include #include -#include #define REQUIRE_PLUGIN #pragma semicolon 1 @@ -13,7 +12,6 @@ bool g_Plugin_AFKManager; bool g_Plugin_GFLClanru; -bool g_Plugin_entWatch; int g_Client_Reservation[MAXPLAYERS + 1] = {0, ...}; @@ -40,12 +38,10 @@ public void OnAllPluginsLoaded() { g_Plugin_AFKManager = LibraryExists("AFKManager"); g_Plugin_GFLClanru = LibraryExists("GFLClanru"); - g_Plugin_entWatch = LibraryExists("entWatch"); LogMessage("ReservedSlots capabilities:\nAFKManager: %s\nGFLClanru: %s\nentWatch: %s", (g_Plugin_AFKManager ? "loaded" : "not loaded"), - (g_Plugin_GFLClanru ? "loaded" : "not loaded"), - (g_Plugin_entWatch ? "loaded" : "not loaded")); + (g_Plugin_GFLClanru ? "loaded" : "not loaded")); } public void OnClientPostAdminCheck(int client) @@ -154,10 +150,6 @@ stock bool KickValidClient(const char[] sName, const char[] sSteam32ID, AdminId else // Fall back to highest connection time. IdleTime = ConnectionTime; - bool HasItem = false; - if(g_Plugin_entWatch) - HasItem = entWatch_HasSpecialItem(client); - /* Spectators * Sort by idle time and also kick donators if IdleTime > 30 */ diff --git a/RewardEventWinners/scripting/RewardEventWinners.sp b/RewardEventWinners/scripting/RewardEventWinners.sp new file mode 100644 index 00000000..f88f5c4c --- /dev/null +++ b/RewardEventWinners/scripting/RewardEventWinners.sp @@ -0,0 +1,50 @@ +#include +#include "loghelper.inc" + +#pragma semicolon 1 +#pragma newdecls required + +public Plugin myinfo = +{ + name = "RewardEventWinners", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +public void OnPluginStart() +{ + RegAdminCmd("sm_rewardwinners", Command_RewardWinners, ADMFLAG_BAN, "sm_rewardwinners "); +} + +public void OnMapStart() +{ + GetTeams(); +} + +public Action Command_RewardWinners(int client, int argc) +{ + if (argc < 1) + { + ReplyToCommand(client, "[SM] Usage: sm_rewardwinners "); + return Plugin_Handled; + } + + char sArg[64]; + GetCmdArg(1, sArg, sizeof(sArg)); + int iDifficulty = StringToInt(sArg); + + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientInGame(i) && IsPlayerAlive(i) && !IsClientObserver(i) && !IsFakeClient(i) && (GetClientTeam(i) == 3)) + { + char StrEventName[128]; + Format(StrEventName, sizeof(StrEventName), "event_win_%d", iDifficulty); + //PrintToChatAll(StrEventName); + LogPlayerEvent(i, "triggered", StrEventName); + LogAction(client, -1, "\"%L\" rewarded \"%L\" for winning an event (difficulty: %d).", client, i, iDifficulty); + } + } + return Plugin_Handled; +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ZE_FFVII_Mako_Reactor_V6_B08.cfg b/StageDisplay/configs/stagedisplay/ZE_FFVII_Mako_Reactor_V6_B08.cfg new file mode 100644 index 00000000..528d6bf8 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ZE_FFVII_Mako_Reactor_V6_B08.cfg @@ -0,0 +1,11 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "EASY" + "2" "NORMAL" + "3" "HARD" + "4" "EXTREME" + "5" "INSAME" + "6" "ZM" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_Ancient_wrath_v1_fix2.cfg b/StageDisplay/configs/stagedisplay/ze_Ancient_wrath_v1_fix2.cfg new file mode 100644 index 00000000..cd81cf66 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_Ancient_wrath_v1_fix2.cfg @@ -0,0 +1,10 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "0" "WARMUP" + "1" "CHAPTER 1" + "2" "CHAPTER 2" + "3" "CHAPTER 3" + "4" "CHAPTER 4" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_FFVII_Mako_Reactor_v5_3.cfg b/StageDisplay/configs/stagedisplay/ze_FFVII_Mako_Reactor_v5_3.cfg new file mode 100644 index 00000000..d7619317 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_FFVII_Mako_Reactor_v5_3.cfg @@ -0,0 +1,16 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "WARMUP" + "2" "NORMAL" + "3" "HARD" + "4" "EXTREME" + "5" "EXTREME II" + "6" "ZM" + "7" "EXTREME II (HEAL&ULTIMA ONLY)" + "8" "EXTREME II (SPECIAL LASERS)" + "9" "EXTREME III (HELLZ VERSION)" + "10" "EXTREME III (ZOMBIEDEN VERSION)" + "11" "RACE (ZOMBIEDEN VERSION)" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_FFXII_Paramina_Rift_v1_4.cfg b/StageDisplay/configs/stagedisplay/ze_FFXII_Paramina_Rift_v1_4.cfg new file mode 100644 index 00000000..2f693dc4 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_FFXII_Paramina_Rift_v1_4.cfg @@ -0,0 +1,9 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Map_WinCounter" + "1" "1 - NORMAL" + "2" "2 - NORMAL" + "3" "1 - INSANE" + "4" "2 - INSANE" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_FFXII_Westersand_v8zeta1.cfg b/StageDisplay/configs/stagedisplay/ze_FFXII_Westersand_v8zeta1.cfg new file mode 100644 index 00000000..a21cc305 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_FFXII_Westersand_v8zeta1.cfg @@ -0,0 +1,14 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter_Progress" + "1" "HARD" + "2" "EXTREME" + "3" "EPIC" + "4" "GODMODE" + "5" "ZOMBIE MOD" + "6" "HARD - INSANE" + "7" "EXTREME - INSANE" + "8" "EPIC - INSANE" + "9" "GODMODE - INSANE" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_Pirates_Port_Royal_v3_6.cfg b/StageDisplay/configs/stagedisplay/ze_Pirates_Port_Royal_v3_6.cfg new file mode 100644 index 00000000..9e8114f2 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_Pirates_Port_Royal_v3_6.cfg @@ -0,0 +1,10 @@ +"stagedisplay" +{ + "method" "score" + "0" "1 - PRISON ESCAPE" + "1" "2 - CANNON" + "2" "3 - PIRATE" + "3" "4 - BARBOSSA" + "4" "5 - KRAKEN" + "5" "5 - GOD KRAKEN" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_Serpentis_Temple_v1_1.cfg b/StageDisplay/configs/stagedisplay/ze_Serpentis_Temple_v1_1.cfg new file mode 100644 index 00000000..6c235662 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_Serpentis_Temple_v1_1.cfg @@ -0,0 +1,11 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "WARMUP" + "2" "1" + "3" "2" + "4" "3" + "5" "4" + "6" "5" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v2_2fix.cfg b/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v2_2fix.cfg new file mode 100644 index 00000000..f7c3c889 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v2_2fix.cfg @@ -0,0 +1,17 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "WARMUP" + "2" "OSGILIATH" + "3" "MAIN GATES" + "4" "CATAPULT" + "5" "THE LAST STAND" + + "diffcounter" + { + "counter" "Diff_Counter" + "1" "NORMAL" + "2" "EXTREME" + } +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v3_3.cfg b/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v3_3.cfg new file mode 100644 index 00000000..f7c3c889 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_lotr_minas_tirith_v3_3.cfg @@ -0,0 +1,17 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "WARMUP" + "2" "OSGILIATH" + "3" "MAIN GATES" + "4" "CATAPULT" + "5" "THE LAST STAND" + + "diffcounter" + { + "counter" "Diff_Counter" + "1" "NORMAL" + "2" "EXTREME" + } +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_predator_ultimate_v3.cfg b/StageDisplay/configs/stagedisplay/ze_predator_ultimate_v3.cfg new file mode 100644 index 00000000..fc812619 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_predator_ultimate_v3.cfg @@ -0,0 +1,9 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "1 - NORMAL" + "2" "2 - HARD" + "3" "3 - HYPER" + "4" "4 - ULTIMATE" +} \ No newline at end of file diff --git a/StageDisplay/configs/stagedisplay/ze_shroomforest2_v1.cfg b/StageDisplay/configs/stagedisplay/ze_shroomforest2_v1.cfg new file mode 100644 index 00000000..695d6bf1 --- /dev/null +++ b/StageDisplay/configs/stagedisplay/ze_shroomforest2_v1.cfg @@ -0,0 +1,13 @@ +"stagedisplay" +{ + "method" "counter" + "counter" "Level_Counter" + "1" "WARMUP" + "2" "RAVINE - NORMAL" + "3" "TV - NORMAL" + "4" "HEAVEN - NORMAL" + "5" "RAVINE - EXTREME" + "6" "TV - EXTREME" + "7" "HEAVEN - EXTREME" + "8" "THE END" +} \ No newline at end of file diff --git a/StageDisplay/scripting/StageDisplay.sp b/StageDisplay/scripting/StageDisplay.sp new file mode 100644 index 00000000..579bf4a8 --- /dev/null +++ b/StageDisplay/scripting/StageDisplay.sp @@ -0,0 +1,259 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include +#include +#include + +KeyValues g_Config; + +char g_sStageName[32]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "Stage Display", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int errorSize) +{ + CreateNative("SD_GetStage", Native_GetStage); + + RegPluginLibrary("StageDisplay"); + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + g_sStageName = "unknown"; + + if(g_Config) + delete g_Config; + + char sMapName[PLATFORM_MAX_PATH]; + GetCurrentMap(sMapName, sizeof(sMapName)); + + char sConfigFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/stagedisplay/%s.cfg", sMapName); + + if(!FileExists(sConfigFile)) + { + LogMessage("Could not find mapconfig: \"%s\"", sConfigFile); + return; + } + + LogMessage("Found mapconfig: \"%s\"", sConfigFile); + + g_Config = new KeyValues("stagedisplay"); + if(!g_Config.ImportFromFile(sConfigFile)) + { + delete g_Config; + SetFailState("ImportFromFile() failed!"); + return; + } + g_Config.Rewind(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + CreateTimer(3.0, CheckStageTimer, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CheckStageTimer(Handle timer) +{ + CheckStage(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void CheckStage() +{ + if(!g_Config) + return; + + g_Config.Rewind(); + + char sMethod[64]; + g_Config.GetString("method", sMethod, sizeof(sMethod)); + if(!sMethod[0]) + { + LogError("Could not find \"method\""); + return; + } + + char sStageName[64]; + char sDiffName[64]; + + + if(StrEqual(sMethod, "counter")) + { + char sCounter[64]; + if(!g_Config.GetString("counter", sCounter, sizeof(sCounter))) + { + LogError("Could not find \"counter\""); + return; + } + + int iCounterEnt = INVALID_ENT_REFERENCE; + iCounterEnt = FindEntityByTargetname(iCounterEnt, sCounter, "*"); + if(iCounterEnt == INVALID_ENT_REFERENCE) + { + LogError("Could not find entity: \"%s\"", sCounter); + return; + } + + static int iOffset = -1; + if (iOffset == -1) + iOffset = FindDataMapInfo(iCounterEnt, "m_OutValue"); + + int iValue = RoundToNearest(GetEntDataFloat(iCounterEnt, iOffset)); + + char sValue[8]; + IntToString(iValue, sValue, sizeof(sValue)); + + g_Config.GetString(sValue, sStageName, sizeof(sStageName)); + if(!sStageName[0]) + { + LogError("Could not find stage \"%s\"", sValue); + return; + } + } + else if(StrEqual(sMethod, "score")) + { + int iValue = CS_GetTeamScore(CS_TEAM_CT); + + char sValue[8]; + IntToString(iValue, sValue, sizeof(sValue)); + + g_Config.GetString(sValue, sStageName, sizeof(sStageName)); + if(!sStageName[0]) + { + LogError("Could not find stage \"%s\"", sValue); + return; + } + } + else + { + LogError("Unknown method \"%s\"", sMethod); + return; + } + + g_Config.Rewind(); + bool bHasDiffCounter = false; + if(g_Config.JumpToKey("diffcounter", false)) + { + bHasDiffCounter = true; + + char sDiffCounter[64]; + if(!g_Config.GetString("counter", sDiffCounter, sizeof(sDiffCounter))) + { + LogError("Could not find \"diffcounter\""); + return; + } + + int iDiffCounterEnt = INVALID_ENT_REFERENCE; + iDiffCounterEnt = FindEntityByTargetname(iDiffCounterEnt, sDiffCounter, "*"); + if(iDiffCounterEnt == INVALID_ENT_REFERENCE) + { + LogError("Could not find entity: \"%s\"", sDiffCounter); + return; + } + + static int iOffset = -1; + if (iOffset == -1) + iOffset = FindDataMapInfo(iDiffCounterEnt, "m_OutValue"); + + int iValue = RoundToNearest(GetEntDataFloat(iDiffCounterEnt, iOffset)); + + char sValue[8]; + IntToString(iValue, sValue, sizeof(sValue)); + + g_Config.GetString(sValue, sDiffName, sizeof(sDiffName)); + if(!sStageName[0]) + { + LogError("Could not find difficulty \"%s\"", sValue); + return; + } + } + + if(bHasDiffCounter) + Format(g_sStageName, sizeof(g_sStageName), "%s - %s", sStageName, sDiffName); + else + Format(g_sStageName, sizeof(g_sStageName), "%s", sStageName); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_GetStage(Handle hPlugin, int numParams) +{ + int length = GetNativeCell(2); + + char[] sStage = new char[length + 1]; + Format(sStage, length + 1, "%s", g_sStageName); + + if (strcmp(sStage, "unknown", true) == 0) + return 0; + + return !(SetNativeString(1, sStage, length + 1)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +int FindEntityByTargetname(int entity, const char[] sTargetname, const char[] sClassname="*") +{ + if(sTargetname[0] == '#') // HammerID + { + int HammerID = StringToInt(sTargetname[1]); + + while((entity = FindEntityByClassname(entity, sClassname)) != INVALID_ENT_REFERENCE) + { + if(GetEntProp(entity, Prop_Data, "m_iHammerID") == HammerID) + return entity; + } + } + else // Targetname + { + int Wildcard = FindCharInString(sTargetname, '*'); + char sTargetnameBuf[64]; + + while((entity = FindEntityByClassname(entity, sClassname)) != INVALID_ENT_REFERENCE) + { + if(GetEntPropString(entity, Prop_Data, "m_iName", sTargetnameBuf, sizeof(sTargetnameBuf)) <= 0) + continue; + + if(strncmp(sTargetnameBuf, sTargetname, Wildcard) == 0) + return entity; + } + } + + return INVALID_ENT_REFERENCE; +} diff --git a/StageDisplay/scripting/include/StageDisplay.inc b/StageDisplay/scripting/include/StageDisplay.inc new file mode 100644 index 00000000..0c995774 --- /dev/null +++ b/StageDisplay/scripting/include/StageDisplay.inc @@ -0,0 +1,35 @@ +#if defined _StageDisplay_included + #endinput +#endif + +#define _StageDisplay_included + +/** + * Retrieve current stage name. + * + * @param name The buffer to write to. + * @param maxlength The maximum buffer length. + * + * @return True on success, false otherwise. + */ +native bool SD_GetStage(char[] name, int maxlength); + + +public SharedPlugin __pl_StageDisplay = +{ + name = "StageDisplay", + file = "StageDisplay.smx", + + #if defined REQUIRE_PLUGIN + required = 1 + #else + required = 0 + #endif +}; + +#if !defined REQUIRE_PLUGIN + public void __pl_StageDisplay_SetNTVOptional() + { + MarkNativeAsOptional("SD_GetStage"); + } +#endif diff --git a/StatGroups/scripting/StatGroups.sp b/StatGroups/scripting/StatGroups.sp new file mode 100644 index 00000000..849aa893 --- /dev/null +++ b/StatGroups/scripting/StatGroups.sp @@ -0,0 +1,97 @@ +#pragma newdecls required + +#include +#include + +#define GameID "csgo-ze" + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "StatGroups", + author = "zaCade (Original by Jenz)", + description = "Grant sourcemod groups based on HLStats ranks", + version = "1.2" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnAllPluginsLoaded() +{ + AdminGroups_CreateAdminGroup("Ranking-Top10"); + AdminGroups_CreateAdminGroup("Ranking-Top20"); + AdminGroups_CreateAdminGroup("Ranking-Top40"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sAuthID) +{ + int rank; + if ((rank = RetrieveStatRank(client)) == -1) + return; + + if (rank <= 10) AdminGroups_GrantAdminGroup(client, "Ranking-Top10"); + if (rank <= 20) AdminGroups_GrantAdminGroup(client, "Ranking-Top20"); + if (rank <= 40) AdminGroups_GrantAdminGroup(client, "Ranking-Top40"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int RetrieveStatRank(int client) +{ + char sError[512]; + char sQuery[512]; + + if (!SQL_CheckConfig("stats")) + { + LogError("Could not find database config \"stats\"."); + return -1; + } + + Database database; + if ((database = SQL_Connect("stats", true, sError, sizeof(sError))) == null) + { + LogError("Connection error: \"%s\".", sError); + delete database; + return -1; + } + + char sSteamID[32]; + if (GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID))) + strcopy(sSteamID, sizeof(sSteamID), sSteamID[8]); + + SQL_FormatQuery(database, sQuery, sizeof(sQuery), "SELECT COUNT(*) AS rank FROM hlstats_Players WHERE hlstats_Players.game = '%s' AND hideranking = 0 AND skill > (SELECT skill FROM hlstats_Players JOIN hlstats_PlayerUniqueIds ON hlstats_Players.playerId = hlstats_PlayerUniqueIds.playerId WHERE hlstats_PlayerUniqueIds.game = '%s' AND uniqueId = '%s')", GameID, GameID, sSteamID); + + DBResultSet results; + if ((results = SQL_Query(database, sQuery)) == null) + { + delete database; + delete results; + return -1; + } + + if (!results.FetchRow()) + { + delete database; + delete results; + return -1; + } + + int rank; + if ((rank = results.FetchInt(0)) == 0) + { + delete database; + delete results; + return -1; + } + + delete database; + delete results; + return rank; +} \ No newline at end of file diff --git a/Status/scripting/Status.sp b/Status/scripting/Status.sp index 5dfc8544..e0946f0a 100644 --- a/Status/scripting/Status.sp +++ b/Status/scripting/Status.sp @@ -2,6 +2,7 @@ #include #include +#include #tryinclude "serverfps.inc" @@ -37,7 +38,7 @@ public void OnPluginStart() public Action Command_Status(int client, const char[] command, int args) { - if(!client) + if(!client || !IsClientInGame(client)) return Plugin_Continue; static char sServerName[128]; @@ -123,8 +124,8 @@ public Action Command_Status(int client, const char[] command, int args) PrintToConsole(client, "players : %d %s | %d %s (%d/%d)", iRealClients, Multiple(iRealClients) ? "humans" : "human", iFakeClients, Multiple(iFakeClients) ? "bots" : "bot", iTotalClients, MaxClients); - PrintToConsole(client, "# %8s %40s %24s %12s %4s %4s %s %s", - "userid", "name", "uniqueid", "connected", "ping", "loss", "state", "addr"); + PrintToConsole(client, "# %8s %40s %24s %12s %4s %4s %10s %16s %s", + "userid", "name", "uniqueid", "connected", "ping", "loss", "state", "addr", "type"); for(int player = 1; player <= MaxClients; player++) { @@ -139,6 +140,7 @@ public Action Command_Status(int client, const char[] command, int args) char sPlayerLoss[4]; static char sPlayerState[16]; char sPlayerAddr[16]; + char sPlayerType[64]; FormatEx(sPlayerID, sizeof(sPlayerID), "%d", GetClientUserId(player)); FormatEx(sPlayerName, sizeof(sPlayerName), "\"%N\"", player); @@ -167,10 +169,20 @@ public Action Command_Status(int client, const char[] command, int args) FormatEx(sPlayerState, sizeof(sPlayerState), "spawning"); if(GetAdminFlag(GetUserAdmin(client), Admin_RCON)) + { GetClientIP(player, sPlayerAddr, sizeof(sPlayerAddr)); - PrintToConsole(client, "# %8s %40s %24s %12s %4s %4s %s %s", - sPlayerID, sPlayerName, sPlayerAuth, sPlayerTime, sPlayerPing, sPlayerLoss, sPlayerState, sPlayerAddr); + if (IsFakeClient(player)) + FormatEx(sPlayerType, sizeof(sPlayerType), "FakeClient"); + else + PM_GetPlayerType(player, sPlayerType, sizeof(sPlayerType)); + + PrintToConsole(client, "# %8s %40s %24s %12s %4s %4s %10s %16s %s", + sPlayerID, sPlayerName, sPlayerAuth, sPlayerTime, sPlayerPing, sPlayerLoss, sPlayerState, sPlayerAddr, sPlayerType); + } + else + PrintToConsole(client, "# %8s %40s %24s %12s %4s %4s %s", + sPlayerID, sPlayerName, sPlayerAuth, sPlayerTime, sPlayerPing, sPlayerLoss, sPlayerState); } return Plugin_Handled; diff --git a/StopSound/scripting/StopSound.sp b/StopSound/scripting/StopSound.sp index f98102c1..5d947c24 100644 --- a/StopSound/scripting/StopSound.sp +++ b/StopSound/scripting/StopSound.sp @@ -9,6 +9,8 @@ #define PLUGIN_VERSION "3.1.0" +float g_fMusicVolume[MAXPLAYERS+1] = { 1.0, ... }; + bool g_bStopWeaponSounds[MAXPLAYERS+1] = { false, ... }; bool g_bStopMapMusic[MAXPLAYERS+1] = { false, ... }; @@ -19,6 +21,7 @@ StringMap g_MapMusic; Handle g_hCookieStopSound = null; Handle g_hCookieStopMapMusic = null; +Handle g_hCookieMusicVolume = null; public Plugin myinfo = { @@ -63,10 +66,12 @@ public void OnPluginStart() RegConsoleCmd("sm_sound", Command_StopSound, "Toggle hearing weapon sounds"); RegConsoleCmd("sm_stopmusic", Command_StopMusic, "Toggle hearing map music"); RegConsoleCmd("sm_music", Command_StopMusic, "Toggle hearing map music"); + RegConsoleCmd("sm_volume", Command_Volume, "Change music volume"); // Cookies g_hCookieStopSound = RegClientCookie("weaponsound_blocked", "Are weapon sounds enabled", CookieAccess_Protected); g_hCookieStopMapMusic = RegClientCookie("mapmusic_blocked", "Are map music enabled", CookieAccess_Protected); + g_hCookieMusicVolume = RegClientCookie("mapmusic_volume", "The volume for map music", CookieAccess_Protected); SetCookieMenuItem(CookieMenuHandler_StopSounds, 0, "Stop sounds"); @@ -216,9 +221,21 @@ public Action Command_StopMusic(int client, int args) return Plugin_Handled; } +public Action Command_Volume(int client, int args) +{ + if(client == 0) + { + ReplyToCommand(client, "[SM] Cannot use command from server console."); + return Plugin_Handled; + } + + ShowStopSoundsVolumeMenu(client); + return Plugin_Handled; +} + public void OnClientCookiesCached(int client) { - char sBuffer[2]; + char sBuffer[10]; // Weapon Sounds cookie GetClientCookie(client, g_hCookieStopSound, sBuffer, sizeof(sBuffer)); @@ -241,6 +258,17 @@ public void OnClientCookiesCached(int client) } else g_bStopMapMusic[client] = false; + + // Music Volume cookie + GetClientCookie(client, g_hCookieMusicVolume, sBuffer, sizeof(sBuffer)); + + if(sBuffer[0] != '\0') + { + g_fMusicVolume[client] = StringToFloat(sBuffer); + g_bStopMapMusicHooked = true; + } + else + g_fMusicVolume[client] = 1.0; } public void OnClientDisconnect(int client) @@ -275,7 +303,7 @@ void CheckMapMusicHooks() for(int i = 1; i <= MaxClients; i++) { - if(g_bStopMapMusic[i]) + if(g_bStopMapMusic[i] || g_fMusicVolume[i] != 1.0) { bShouldHook = true; break; @@ -392,6 +420,89 @@ public int MenuHandler_StopSoundsSettings(Menu menu, MenuAction action, int clie } } +void ShowStopSoundsVolumeMenu(int client) +{ + Menu menu = new Menu(MenuHandler_StopSoundsVolume); + + menu.SetTitle("Map music volume menu"); + + menu.AddItem("100", "100%"); + menu.AddItem("90", "90%"); + menu.AddItem("80", "80%"); + menu.AddItem("70", "70%"); + menu.AddItem("60", "60%"); + menu.AddItem("50", "50%"); + menu.AddItem("40", "40%"); + menu.AddItem("30", "30%"); + menu.AddItem("20", "20%"); + menu.AddItem("10", "10%"); + menu.AddItem("0", "0%"); + + menu.Display(client, MENU_TIME_FOREVER); +} + +public int MenuHandler_StopSoundsVolume(Menu menu, MenuAction action, int client, int selection) +{ + if(action == MenuAction_Select) + { + if (selection == 0) + { + g_fMusicVolume[client] = 1.0; + } + else if (selection == 1) + { + g_fMusicVolume[client] = 0.9; + } + else if (selection == 2) + { + g_fMusicVolume[client] = 0.8; + } + else if (selection == 3) + { + g_fMusicVolume[client] = 0.7; + } + else if (selection == 4) + { + g_fMusicVolume[client] = 0.6; + } + else if (selection == 5) + { + g_fMusicVolume[client] = 0.5; + } + else if (selection == 6) + { + g_fMusicVolume[client] = 0.4; + } + else if (selection == 7) + { + g_fMusicVolume[client] = 0.3; + } + else if (selection == 8) + { + g_fMusicVolume[client] = 0.2; + } + else if (selection == 9) + { + g_fMusicVolume[client] = 0.1; + } + else if (selection == 10) + { + g_fMusicVolume[client] = 0.0; + } + + char sBuffer[10]; + FloatToString(g_fMusicVolume[client], sBuffer, sizeof(sBuffer)); + + SetClientCookie(client, g_hCookieMusicVolume, sBuffer); + CPrintToChat(client, "%t Map music volume set to: %d", "Chat Prefix", RoundFloat(g_fMusicVolume[client] * 100)); + CheckMapMusicHooks(); + } + else if(action == MenuAction_End) + { + delete menu; + } +} + public Action Hook_NormalSound_CSS(int clients[MAXPLAYERS], int &numClients, char sample[PLATFORM_MAX_PATH], int &entity, int &channel, float &volume, int &level, int &pitch, int &flags, char soundEntry[PLATFORM_MAX_PATH], int &seed) @@ -629,7 +740,7 @@ public void OnReloadEffect(DataPack pack) } } - CloseHandle(pack); + delete pack; Handle ReloadEffect = StartMessage("ReloadEffect", players, playersNum, USERMSG_RELIABLE | USERMSG_BLOCKHOOKS); if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) @@ -672,7 +783,7 @@ public Action Hook_AmbientSound(char sample[PLATFORM_MAX_PATH], int &entity, flo EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, SNDLEVEL_NONE, SND_STOPLOOPING, SNDVOL_NORMAL, SNDPITCH_NORMAL); // Pass through the new sound.. - EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume, pitch); + EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume * g_fMusicVolume[client], pitch); } } default: @@ -683,7 +794,7 @@ public Action Hook_AmbientSound(char sample[PLATFORM_MAX_PATH], int &entity, flo if (!IsClientInGame(client) || g_bStopMapMusic[client]) continue; - EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume, pitch); + EmitSoundToClient(client, sample, entity, SNDCHAN_STATIC, level, flags, volume * g_fMusicVolume[client], pitch); } } } diff --git a/TriggerRewards/scripting/TriggerRewards.sp b/TriggerRewards/scripting/TriggerRewards.sp index f93c8c6b..2f0cefb6 100644 --- a/TriggerRewards/scripting/TriggerRewards.sp +++ b/TriggerRewards/scripting/TriggerRewards.sp @@ -2,8 +2,8 @@ #include #include #include -#include -#include "loghelper.inc" +#include +#include #pragma semicolon 1 #pragma newdecls required @@ -38,14 +38,6 @@ public void OnPluginStart() HookEntityOutput("func_button", "OnPressed", OnPressed); } -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnMapStart() -{ - GetTeams(); -} - //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -74,7 +66,7 @@ public void OnStartTouch(const char[] sOutput, int iCaller, int iActivator, floa CreateTimer(g_cCD.FloatValue, ResetCD); - LogPlayerEvent(iActivator, "triggered", "trigger"); + LH_LogPlayerEvent(iActivator, "triggered", "trigger", true); } //---------------------------------------------------------------------------------------------------- @@ -106,7 +98,7 @@ public void OnPressed(const char[] sOutput, int iCaller, int iActivator, float f CreateTimer(g_cCD.FloatValue, ResetCD); - LogPlayerEvent(iActivator, "triggered", "trigger"); + LH_LogPlayerEvent(iActivator, "triggered", "trigger", true); } //---------------------------------------------------------------------------------------------------- @@ -126,4 +118,4 @@ public bool IsValidClient(int iClient) return false; return true; -} +} \ No newline at end of file diff --git a/UNLOZE_BanDetector/scripting/UNLOZE_BanDetector.sp b/UNLOZE_BanDetector/scripting/UNLOZE_BanDetector.sp new file mode 100644 index 00000000..01659f4d --- /dev/null +++ b/UNLOZE_BanDetector/scripting/UNLOZE_BanDetector.sp @@ -0,0 +1,189 @@ +//==================================================================================================== +// +// Name: i3D.net Ban Detector. +// Author: zaCade +// Description: Detect potential ban evasions. +// +//==================================================================================================== +#undef REQUIRE_PLUGIN +#include +#include +#include + +new G_iParentAuthID[MAXPLAYERS+1]; +new G_iClientAuthID[MAXPLAYERS+1]; + +new bool:G_bSourcebansAvailable; +new Handle:G_hDatabase; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin:myinfo = +{ + name = "UNLOZE Ban Detector", + author = "zaCade", + description = "Detect potential ban evasions", + version = "1.0", +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnPluginStart() +{ + SQL_TConnect(SQL_OnConnected, "sourcebans"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnAllPluginsLoaded() +{ + if (LibraryExists("sourcebans")) + G_bSourcebansAvailable = true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnLibraryAdded(const String:name[]) +{ + if (StrEqual("sourcebans", name)) + G_bSourcebansAvailable = true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnLibraryRemoved(const String:name[]) +{ + if (StrEqual("sourcebans", name)) + G_bSourcebansAvailable = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnClientConnected(client) +{ + G_iParentAuthID[client] = -1; + G_iClientAuthID[client] = -1; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnClientDisconnect(client) +{ + G_iParentAuthID[client] = -1; + G_iClientAuthID[client] = -1; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public OnClientPostAdminCheck(client) +{ + if (G_bSourcebansAvailable && !IsFakeClient(client)) + { + if (G_iParentAuthID[client] != -1 && G_iClientAuthID[client] != -1) + CheckBans_SteamID(client, G_iParentAuthID[client], G_iClientAuthID[client]); + + CheckBans_IPAdress(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public SteamWorks_OnValidateClient(parentAuthID, clientAuthID) +{ + if (G_bSourcebansAvailable && parentAuthID != clientAuthID) + { + for (new client = 1; client <= MaxClients; client++) + { + if (IsClientConnected(client) && GetSteamAccountID(client) == clientAuthID) + { + if (!IsClientInGame(client)) + { + G_iParentAuthID[client] = parentAuthID; + G_iClientAuthID[client] = clientAuthID; + break; + } + else + { + CheckBans_SteamID(client, parentAuthID, clientAuthID); + break; + } + } + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public CheckBans_SteamID(client, parentAuthID, clientAuthID) +{ + new String:authid[32]; + Format(authid, sizeof(authid), "STEAM_0:%d:%d", (parentAuthID & 1), (parentAuthID >> 1)); + + new String:query[512]; + Format(query, sizeof(query), "SELECT * FROM sb_bans WHERE authid = '%s' AND ((length = 0 OR ends > UNIX_TIMESTAMP()) AND removetype IS NULL)", authid); +// Format(query, sizeof(query), "SELECT * FROM sb_bans WHERE authid = '%s' AND ((ends > '%d' AND length != '0') OR length = '0')", authid, GetTime()); + + LogMessage("[BanDetector] Checking family sharing user %L (AUTH: %s, PAUTH: %d, CAUTH: %d)", client, authid, parentAuthID, clientAuthID); + + if (G_hDatabase != INVALID_HANDLE) + SQL_TQuery(G_hDatabase, SQL_OnCheckClientSteamID, query, client); + else + LogMessage("[BanDetector] Unable to check user %L (No database)", client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public CheckBans_IPAdress(client) +{ + new String:adress[32]; + GetClientIP(client, adress, sizeof(adress)); + + new String:query[512]; + Format(query, sizeof(query), "SELECT * FROM sb_bans WHERE ip = '%s' AND ((length = 0 OR ends > UNIX_TIMESTAMP()) AND removetype IS NULL AND (aid != 0 OR reason != 'Ban evasion (IP)')", adress); +// Format(query, sizeof(query), "SELECT * FROM sb_bans WHERE ip = '%s' AND ((ends > '%d' AND length != '0') OR length = '0') AND ((reason != 'Ban evasion (IP)' AND aid = '0') OR aid != '0')", adress, GetTime()); + + LogMessage("[BanDetector] Checking user %L (IP: %s)", client, adress); + + if (G_hDatabase != INVALID_HANDLE) + SQL_TQuery(G_hDatabase, SQL_OnCheckClientIP, query, client); + else + LogMessage("[BanDetector] Unable to check user %L (No database)", client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public SQL_OnConnected(Handle:owner, Handle:handle, const String:error[], any:data) +{ + if (handle != INVALID_HANDLE) + G_hDatabase = handle; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public SQL_OnCheckClientSteamID(Handle:owner, Handle:handle, const String:error[], any:client) +{ + if (handle != INVALID_HANDLE && SQL_FetchRow(handle)) + SBBanPlayer(0, client, 0, "Ban evasion (FS)"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public SQL_OnCheckClientIP(Handle:owner, Handle:handle, const String:error[], any:client) +{ + if (handle != INVALID_HANDLE && SQL_FetchRow(handle)) + SBBanPlayer(0, client, 0, "Ban evasion (IP)"); +} \ No newline at end of file diff --git a/UNLOZE_Clantag/scripting/UNLOZE_Clantag.sp b/UNLOZE_Clantag/scripting/UNLOZE_Clantag.sp new file mode 100644 index 00000000..64ed672a --- /dev/null +++ b/UNLOZE_Clantag/scripting/UNLOZE_Clantag.sp @@ -0,0 +1,69 @@ +#include +#include + +#define CLANID "9110211" +#define GROUP "Game-Member" + +public Plugin myinfo = +{ + name = "UNLOZE Clantag", + author = "BotoX", + description = "Assign group to people wearing the UNLOZE clantag", + version = "1.0", + url = "" +}; + +public void OnPluginStart() +{ + /* Handle late load */ + for(int client = 1; client <= MaxClients; client++) + { + if(IsClientInGame(client) && IsClientAuthorized(client)) + { + OnClientPostAdminFilter(client); + } + } +} + +public void OnClientPostAdminFilter(int client) +{ + CheckClantag(client); +} + +public void OnClientSettingsChanged(int client) +{ + CheckClantag(client); +} + +void CheckClantag(int client) +{ + if(!IsClientAuthorized(client)) + return; + + char sClanID[32]; + GetClientInfo(client, "cl_clanid", sClanID, sizeof(sClanID)); + + if(!StrEqual(sClanID, CLANID)) + return; + + AdminId AdmID; + GroupId GrpID; + + if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) + { + LogMessage("Creating new admin for %L", client); + + AdmID = CreateAdmin(""); + SetUserAdmin(client, AdmID, true); + } + + if ((GrpID = FindAdmGroup(GROUP)) != INVALID_GROUP_ID) + { + if (AdminInheritGroup(AdmID, GrpID)) + LogMessage("%L added to group %s", client, GROUP); + } + else + { + LogMessage("%L group not found %s", client, GROUP); + } +} diff --git a/UNLOZE_Donation_Alert/configs/unloze_donation_alert/data.cfg b/UNLOZE_Donation_Alert/configs/unloze_donation_alert/data.cfg new file mode 100644 index 00000000..a73e1b7f --- /dev/null +++ b/UNLOZE_Donation_Alert/configs/unloze_donation_alert/data.cfg @@ -0,0 +1,7 @@ +"unloze_donation_alert" +{ + "last_processed_donation" + { + "id" "873" + } +} diff --git a/UNLOZE_Donation_Alert/scripting/UNLOZE_Donation_Alert.sp b/UNLOZE_Donation_Alert/scripting/UNLOZE_Donation_Alert.sp new file mode 100644 index 00000000..8d9dc68d --- /dev/null +++ b/UNLOZE_Donation_Alert/scripting/UNLOZE_Donation_Alert.sp @@ -0,0 +1,226 @@ +#pragma semicolon 1 + +#include +#include + +#pragma newdecls required + +/* CONVARS */ +ConVar g_cvInterval; + +/* DATABASE */ +Database g_hDatabase; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE Donation Alert", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_cvInterval = CreateConVar("sm_unloze_donation_alert_interval", "60", "", FCVAR_NONE); + + AutoExecConfig(); + + char sError[256]; + if (SQL_CheckConfig("xenforo")) + g_hDatabase = SQL_Connect("xenforo", true, sError, sizeof(sError)); + + if (g_hDatabase == null) + LogError("Could not connect to database: %s", sError); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + CreateTimer(g_cvInterval.FloatValue, CheckForNewDonations, INVALID_HANDLE, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CheckForNewDonations(Handle timer) +{ + char sDataFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sDataFile, sizeof(sDataFile), "configs/unloze_donation_alert/data.cfg"); + + if(!FileExists(sDataFile)) + { + LogError("Could not find data file: \"%s\"", sDataFile); + return Plugin_Stop; + } + + KeyValues Data = new KeyValues("unloze_donation_alert"); + + if(!Data.ImportFromFile(sDataFile)) + { + LogError("Unable to load data file: \"%s\"", sDataFile); + delete Data; + return Plugin_Stop; + } + + if(!Data.JumpToKey("last_processed_donation", false)) + { + LogError("Unable to find section last_processed_donation: \"%s\"", sDataFile); + delete Data; + return Plugin_Stop; + } + + int iID; + iID = Data.GetNum("id", -1); + if (iID == -1) + { + LogError("Unable to ID of last_processed_donation: \"%s\"", sDataFile); + delete Data; + return Plugin_Stop; + } + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_bdpaygate_log WHERE log_id = %d", iID + 1); + g_hDatabase.Query(TQueryCB, sQuery, iID + 1); + + delete Data; + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCB(Database db, DBResultSet results, const char[] error, any data) +{ + int iID = data; + + if (results.RowCount > 0) + { + int iField; + char sLogType[64]; + char sLogDetails[4096]; + results.FetchRow(); + results.FieldNameToNum("log_type", iField); + results.FetchString(iField, sLogType, sizeof(sLogType)); + + if(!StrEqual(sLogType, "accepted")) + { + HandleDonation(iID); + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_bdpaygate_log WHERE log_id = %d", iID + 1); + g_hDatabase.Query(TQueryCB, sQuery, iID + 1); + return; + } + + results.FieldNameToNum("log_details", iField); + results.FetchString(iField, sLogDetails, sizeof(sLogDetails)); + static char sStrings[256][256]; + char sMessage[256]; + char sMessageWhite[256]; + int iStrings = ExplodeString(sLogDetails, "\"", sStrings, 256, 256); + + if (StrContains(sLogDetails, "user_upgrade") != -1) + { + for (int i = 0; i < iStrings; i++) + { + if (StrContains(sStrings[i], "Account Upgrade:") != -1) + { + char sBuffer[256]; + char sUpgrade[256]; + char sName[256]; + strcopy(sBuffer, sizeof(sBuffer), sStrings[i]); + + int iStart = FindCharInString(sBuffer, ':', false); + strcopy(sBuffer, sizeof(sBuffer), sBuffer[iStart + 2]); + iStart = FindCharInString(sBuffer, '(', false); + strcopy(sName, sizeof(sName), sBuffer[iStart + 1]); + int iLength = strlen(sName); + sName[iLength-1] = 0; + SplitString(sBuffer, "(", sUpgrade, sizeof(sUpgrade)); + Format(sMessage, sizeof(sMessage), "{chartreuse}[UNLOZE] {lightblue}%s {white}just bought {lightblue}%s{white}! Thank you for supporting our servers!!!", sName, sUpgrade); + Format(sMessageWhite, sizeof(sMessageWhite), "%s just bought %s! Thank you for supporting our servers!!!", sName, sUpgrade); + + } + } + } + else if (StrContains(sLogDetails, "gift_upgrade") != -1) + { + for (int i = 0; i < iStrings; i++) + { + if (StrContains(sStrings[i], "Account Upgrade:") != -1) + { + char sBuffer[256]; + char sUpgrade[256]; + char sName[256]; + strcopy(sBuffer, sizeof(sBuffer), sStrings[i]); + + int iStart = FindCharInString(sBuffer, ':', false); + strcopy(sBuffer, sizeof(sBuffer), sBuffer[iStart + 2]); + iStart = FindCharInString(sBuffer, '(', false); + strcopy(sName, sizeof(sName), sBuffer[iStart + 1]); + int iLength = strlen(sName); + sName[iLength-1] = 0; + SplitString(sBuffer, "(", sUpgrade, sizeof(sUpgrade)); + + Format(sMessage, sizeof(sMessage), "{chartreuse}[UNLOZE] {lightblue}%s {white}just recieved {lightblue}%s {white}as a gift! Thank you for supporting our servers!!!", sName, sUpgrade); + Format(sMessageWhite, sizeof(sMessageWhite), "%s just recieved %s as a gift! Thank you for supporting our servers!!!", sName, sUpgrade); + } + } + } + + CPrintToChatAll(sMessage); + for(int client = 1; client <= MaxClients; client++) + { + if(IsClientInGame(client)) + { + PrintHintText(client, sMessageWhite); + } + } + + HandleDonation(iID); + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM xf_bdpaygate_log WHERE log_id = %d", iID + 1); + g_hDatabase.Query(TQueryCB, sQuery, iID + 1); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HandleDonation(int iID) +{ + char sDataFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sDataFile, sizeof(sDataFile), "configs/unloze_donation_alert/data.cfg"); + + if(!FileExists(sDataFile)) + { + LogError("Could not find data file: \"%s\"", sDataFile); + return; + } + + KeyValues Data = new KeyValues("unloze_donation_alert"); + + if(!Data.JumpToKey("last_processed_donation", true)) + { + LogError("Unable to create section last_processed_donation: \"%s\"", sDataFile); + delete Data; + return; + } + Data.SetNum("id", iID); + Data.Rewind(); + if(!Data.ExportToFile(sDataFile)) + { + LogError("Unable to export data file: \"%s\"", sDataFile); + delete Data; + return; + } + delete Data; +} \ No newline at end of file diff --git a/UNLOZE_ForumIntegration/scripting/UNLOZE_ForumIntegration.sp b/UNLOZE_ForumIntegration/scripting/UNLOZE_ForumIntegration.sp new file mode 100644 index 00000000..0a84b6ba --- /dev/null +++ b/UNLOZE_ForumIntegration/scripting/UNLOZE_ForumIntegration.sp @@ -0,0 +1,339 @@ +//==================================================================================================== +// +// Name: UNLOZE Forum Integration. +// Author: .George & zaCade (Original by Botox) +// Description: Handles forum access ingame. +// +//==================================================================================================== +#include +#include +#include + +#pragma newdecls required + +#define APIKEY "k9Mk2lA3mF9Sk0FoaD" + +/* STRINGS */ +char G_sGroup[MAXPLAYERS+1][64]; + +/* BOOLS */ +bool G_bPreAdminChecked[MAXPLAYERS+1]; +bool G_bResponseFailed[MAXPLAYERS+1]; +bool G_bResponsePassed[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE Forum Integration", + author = ".George & zaCade (Original by Botox)", + description = "Handles forum access ingame", + version = "1.2" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) +{ + CreateNative("HasSteamIDReservedSlot", Native_HasSteamIDReservedSlot); + + RegPluginLibrary("unloze"); + + return APLRes_Success; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRebuildAdminCache(AdminCachePart part) +{ + if (part != AdminCache_Admins) + return; + + CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnRebuildAdminCachePost(Handle hTimer) +{ + for (int client = 1; client <= MaxClients; client++) + { + if(G_bResponsePassed[client] && G_bPreAdminChecked[client]) + ApplyGroupFlags(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + G_bPreAdminChecked[client] = false; + G_bResponseFailed[client] = false; + G_bResponsePassed[client] = false; + + G_sGroup[client][0] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + G_bPreAdminChecked[client] = false; + G_bResponseFailed[client] = false; + G_bResponsePassed[client] = false; + + G_sGroup[client][0] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sSteamID32) +{ + if (IsFakeClient(client)) + return; + + char sSteamID64[32]; + SteamID32toSteamID64(sSteamID32, sSteamID64, sizeof(sSteamID64)); + + int iSerial = GetClientSerial(client); + + char sRequest[256]; + FormatEx(sRequest, sizeof(sRequest), "https://unloze.com/api/private_api.php?api_key=%s&steam_id=%s", APIKEY, sSteamID64); + + Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); + if (!hRequest || + !SteamWorks_SetHTTPCallbacks(hRequest, OnClientAuthorized_OnTransferComplete) || + !SteamWorks_SetHTTPRequestContextValue(hRequest, iSerial) || + !SteamWorks_SendHTTPRequest(hRequest)) + { + delete hRequest; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int OnClientAuthorized_OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, int iSerial) +{ + int client = GetClientFromSerial(iSerial); + + if (!client) //Player disconnected. + { + delete hRequest; + return; + } + + if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK) + { + G_bResponseFailed[client] = true; + + if (G_bPreAdminChecked[client]) + NotifyPostAdminCheck(client); + + delete hRequest; + return; + } + + SteamWorks_GetHTTPResponseBodyCallback(hRequest, OnClientAuthorized_OnTransferResponse, iSerial); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int OnClientAuthorized_OnTransferResponse(char[] sData, int iSerial) +{ + int client = GetClientFromSerial(iSerial); + + if (!client) //Player disconnected. + return; + + TrimString(sData); + StripQuotes(sData); + + strcopy(G_sGroup[client], sizeof(G_sGroup[]), sData); + + G_bResponsePassed[client] = true; + + if (G_bPreAdminChecked[client]) + NotifyPostAdminCheck(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + G_bPreAdminChecked[client] = true; + + if (G_bResponsePassed[client] || G_bResponseFailed[client]) + return Plugin_Continue; + + RunAdminCacheChecks(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminFilter(int client) +{ + ApplyGroupFlags(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void ApplyGroupFlags(int client) +{ + if (!G_bResponsePassed[client]) + return; + + AdminId AdmID; + GroupId GrpID; + + if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) + { + LogMessage("Creating new admin for %L", client); + + AdmID = CreateAdmin(); + SetUserAdmin(client, AdmID, true); + } + + if ((GrpID = FindAdmGroup(G_sGroup[client])) != INVALID_GROUP_ID) + { + if (AdminInheritGroup(AdmID, GrpID)) + { + LogMessage("%L added to group %s", client, G_sGroup[client]); + } + } + else + { + LogMessage("%L group not found %s", client, G_sGroup[client]); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_HasSteamIDReservedSlot(Handle plugin, int numParams) +{ + char sSteamID32[32]; + GetNativeString(1, sSteamID32, sizeof(sSteamID32)); + + HasSteamIDReservedSlotCallback callback; + callback = GetNativeCell(2); + + any data; + data = GetNativeCell(3); + + char sSteamID64[32]; + SteamID32toSteamID64(sSteamID32, sSteamID64, sizeof(sSteamID64)); + + char sRequest[256]; + FormatEx(sRequest, sizeof(sRequest), "https://unloze.com/api/private_api.php?api_key=%s&steam_id=%s", APIKEY, sSteamID64); + + DataPack hDataPack = new DataPack(); + hDataPack.WriteString(sSteamID32); + hDataPack.WriteFunction(callback); + hDataPack.WriteCell(plugin); + hDataPack.WriteCell(data); + + Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); + if (!hRequest || + !SteamWorks_SetHTTPCallbacks(hRequest, Native_HasSteamIDReservedSlot_OnTransferComplete) || + !SteamWorks_SetHTTPRequestContextValue(hRequest, hDataPack) || + !SteamWorks_SendHTTPRequest(hRequest)) + { + delete hRequest; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_HasSteamIDReservedSlot_OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, DataPack hDataPack) +{ + if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK) + { + char sData[32] = "NOGROUP"; + Native_HasSteamIDReservedSlot_OnTransferResponse(sData, hDataPack); + + delete hRequest; + return; + } + + SteamWorks_GetHTTPResponseBodyCallback(hRequest, Native_HasSteamIDReservedSlot_OnTransferResponse, hDataPack); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int Native_HasSteamIDReservedSlot_OnTransferResponse(char[] sData, DataPack hDataPack) +{ + hDataPack.Reset(); + + char sSteamID32[32]; + hDataPack.ReadString(sSteamID32, sizeof(sSteamID32)); + + HasSteamIDReservedSlotCallback callback; + callback = view_as(hDataPack.ReadFunction()); + + Handle plugin; + plugin = hDataPack.ReadCell(); + + any data; + data = hDataPack.ReadCell(); + + TrimString(sData); + StripQuotes(sData); + + int result; + if (StrEqual(sData, "Game-Donator", false)) + result = 1; + else + result = 0; + + Call_StartFunction(plugin, callback); + Call_PushString(sSteamID32); + Call_PushCell(result); + Call_PushCell(data); + Call_Finish(); + + delete hDataPack; + return; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool SteamID32toSteamID64(const char[] sSteamID32, char[] sSteamID64, int iSize) +{ + if (strlen(sSteamID32) < 11 || strncmp(sSteamID32[0], "STEAM_", 6)) + { + sSteamID64[0] = 0; + return false; + } + + int iUpper = 765611979; + int isSteam64ID = StringToInt(sSteamID32[10]) * 2 + 60265728 + sSteamID32[8] - 48; + + int iDiv = isSteam64ID / 100000000; + int iIdx = 9 - (iDiv ? (iDiv / 10 + 1) : 0); + + iUpper += iDiv; + + IntToString(isSteam64ID, sSteamID64[iIdx], iSize - iIdx); + iIdx = sSteamID64[9]; + + IntToString(iUpper, sSteamID64, iSize); + sSteamID64[9] = iIdx; + + return true; +} \ No newline at end of file diff --git a/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp b/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp new file mode 100644 index 00000000..e35cedd8 --- /dev/null +++ b/UNLOZE_KnifeMadness/scripting/UNLOZE_KnifeMadness.sp @@ -0,0 +1,162 @@ +#include +#include +#include +#include + +#pragma semicolon 1 +#pragma newdecls required + +/* CONVARS */ +ConVar g_hCVar_Delay; + +/* BOOLS */ +bool g_bClientKnifed[MAXPLAYERS+1]; +bool g_bSupressDeath[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE Knife Madness", + author = "Neon", + description = "UNLOZE Knife Madness", + version = "1.1", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCVar_Delay = CreateConVar("sm_knife_madness_kill_delay", "3", "Delay before ZMs die after being knifed by a human.", 0, true, 0.0); + + HookEvent("player_spawn", OnClientSpawn, EventHookMode_Post); + HookEvent("player_death", OnClientDeath, EventHookMode_Pre); + HookEvent("player_hurt", OnClientHurt, EventHookMode_Post); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientSpawn(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + g_bClientKnifed[client] = false; + g_bSupressDeath[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + if (g_bSupressDeath[client]) + { + g_bSupressDeath[client] = false; + return Plugin_Handled; + } + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientHurt(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + int attacker = GetClientOfUserId(hEvent.GetInt("attacker")); + int victim = GetClientOfUserId(hEvent.GetInt("userid")); + + if (!IsValidClient(attacker, false)) + return; + + if (!(IsPlayerAlive(attacker) && IsPlayerAlive(victim) && ZR_IsClientHuman(attacker) && ZR_IsClientZombie(victim))) + return; + + char sWeapon[32]; + GetEventString(hEvent, "weapon", sWeapon, sizeof(sWeapon)); + + if(!StrEqual(sWeapon, "knife", false)) + return; + + g_bClientKnifed[victim] = true; + CPrintToChat(attacker, "{unique}[Knife Madness] {white}You have knifed {lime}%N{white}. He will die in %ds if he doesnt infect a human.", victim, g_hCVar_Delay.IntValue); + CPrintToChat(victim, "{unique}[Knife Madness] {white}You have been knifed by {lime}%N{white}. You will die in %ds if you do not infect a human.", attacker, g_hCVar_Delay.IntValue); + + SetEntPropFloat(victim, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); + SetEntProp(victim, Prop_Send, "m_iProgressBarDuration", g_hCVar_Delay.IntValue); + + DataPack pack; + CreateDataTimer(g_hCVar_Delay.FloatValue, KillZM, pack, TIMER_FLAG_NO_MAPCHANGE); + pack.WriteCell(GetClientUserId(attacker)); + pack.WriteCell(GetClientUserId(victim)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (!IsValidClient(attacker)) + return; + + if(g_bClientKnifed[attacker]) + { + g_bClientKnifed[attacker] = false; + SetEntProp(attacker, Prop_Send, "m_iProgressBarDuration", 0); + CPrintToChat(attacker, "{unique}[Knife Madness] {white}You have successfully infected a human and prevented your death."); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action KillZM(Handle timer, DataPack pack) +{ + int attacker = 0; + int client = 0; + + pack.Reset(); + attacker = GetClientOfUserId(pack.ReadCell()); + client = GetClientOfUserId(pack.ReadCell()); + + if (client == 0) + return; + + if (!(IsValidClient(client, false) && IsPlayerAlive(client) && ZR_IsClientZombie(client) && g_bClientKnifed[client])) + return; + + g_bSupressDeath[client] = true; + ForcePlayerSuicide(client); + + if (!(IsValidClient(attacker, false))) + return; + + Event hEvent = CreateEvent("player_death"); + if (hEvent == null) + return; + + hEvent.SetInt("userid", GetClientUserId(client)); + hEvent.SetInt("attacker", GetClientUserId(attacker)); + hEvent.SetString("weapon", "knife"); + hEvent.SetBool("headshot", false); + hEvent.SetInt("dominated", 0); + hEvent.SetInt("revenge", 0); + hEvent.Fire(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} \ No newline at end of file diff --git a/VIP_Menu/configs/vip_menu.cfg b/VIP_Menu/configs/vip_menu.cfg new file mode 100644 index 00000000..6ba387f1 --- /dev/null +++ b/VIP_Menu/configs/vip_menu.cfg @@ -0,0 +1,23 @@ +"vip_menu" +{ + "-1" + { + "command" "zclass" + "description" "Player Skins (!zclass)" + } + "0" + { + "command" "sm_tag" + "description" "Chat Options (!tag)" + } + "1" + { + "command" "sm_glow" + "description" "Glowcolors (!glow)" + } + "2" + { + "command" "sm_rainbow" + "description" "Toggle Rainbow" + } +} diff --git a/VIP_Menu/scripting/VIP_Menu.sp b/VIP_Menu/scripting/VIP_Menu.sp new file mode 100644 index 00000000..2fb63e28 --- /dev/null +++ b/VIP_Menu/scripting/VIP_Menu.sp @@ -0,0 +1,141 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include + +#define MAXCOMMANDS 20 + +/* STRINGS */ +char g_sDataFile[128]; +char g_sVIPCommands[MAXCOMMANDS][2][128]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE_VIP_Menu", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + BuildPath(Path_SM, g_sDataFile, sizeof(g_sDataFile), "configs/vip_menu.cfg"); + RegAdminCmd("sm_vip", Command_VIP, ADMFLAG_CUSTOM1, "Open VIP Menu."); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + for (int i = 0; i < MAXCOMMANDS; i++) + { + for (int j = 0; j < 2; j++) + g_sVIPCommands[i][j] = ""; + } + + int k = 0; + + if(!FileExists(g_sDataFile)) + { + SetFailState("Config file missing!"); + return; + } + + KeyValues hKvConfig = new KeyValues("vip_menu"); + + if (!(hKvConfig.ImportFromFile(g_sDataFile))) + { + SetFailState("ImportFromFile() failed!"); + return; + } + + hKvConfig.Rewind(); + + if(!hKvConfig.GotoFirstSubKey()) + { + SetFailState("GotoFirstSubKey() failed!"); + return; + } + + do + { + char sSection[64]; + hKvConfig.GetSectionName(sSection, sizeof(sSection)); + + char sCommand[64]; + hKvConfig.GetString("command", sCommand, sizeof(sCommand)); + + if(!sCommand[0]) + { + SetFailState("Could not find \"command\" in \"%s\"", sSection); + return; + } + + char sDescription[64]; + hKvConfig.GetString("description", sDescription, sizeof(sDescription)); + + if(!sDescription[0]) + { + SetFailState("Could not find \"description\" in \"%s\"", sSection); + return; + } + + g_sVIPCommands[k][0] = sCommand; + g_sVIPCommands[k][1] = sDescription; + k++; + + } while(hKvConfig.GotoNextKey(false)); + + delete hKvConfig; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_VIP(int client, int iArgs) +{ + Menu menu = new Menu(MenuHandler_VIPMenu); + menu.SetTitle("VIP Menu"); + + for (int i = 0; i < MAXCOMMANDS; i++) + { + if(!g_sVIPCommands[i][0][0]) + break; + + menu.AddItem(g_sVIPCommands[i][0], g_sVIPCommands[i][1]); + } + + menu.Display(client, MENU_TIME_FOREVER); + + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int MenuHandler_VIPMenu(Menu menu, MenuAction action, int param1, int param2) +{ + switch(action) + { + case MenuAction_Select: + { + char sInfo[128]; + menu.GetItem(param2, sInfo, sizeof(sInfo)); + FakeClientCommandEx(param1, sInfo); + } + + case MenuAction_End: + { + delete menu; + } + } + return 0; +} \ No newline at end of file diff --git a/VIP_Test/scripting/VIP_Test.sp b/VIP_Test/scripting/VIP_Test.sp new file mode 100644 index 00000000..0fb48ce0 --- /dev/null +++ b/VIP_Test/scripting/VIP_Test.sp @@ -0,0 +1,298 @@ +#pragma semicolon 1 + +#include + +#pragma newdecls required + +/* STRINGS */ +char g_sAdmGroup[32] = "Game-Donator"; +char g_sGroup[MAXPLAYERS+1][64]; + +/* CONVARS */ +ConVar g_cvFreeVIPDuration; + +/* DATABASE */ +Database g_hDatabase; + +/* BOOLS */ +bool g_bPreAdminChecked[MAXPLAYERS+1]; +bool g_bResponseFailed[MAXPLAYERS+1]; +bool g_bResponsePassed[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE_VIP_Test", + author = "Neon", + description = "", + version = "2.0", + url = "https://steamcommunity.com/id/n3ontm" +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_cvFreeVIPDuration = CreateConVar("sm_unloze_vip_test_duration", "1440", "", FCVAR_NONE); + + RegConsoleCmd("sm_viptest", Command_VIP, "Activate free VIP period"); + RegConsoleCmd("sm_testvip", Command_VIP, "Activate free VIP period"); + + AutoExecConfig(); + + char sError[256]; + if (SQL_CheckConfig("testvip")) + g_hDatabase = SQL_Connect("testvip", true, sError, sizeof(sError)); + + if (g_hDatabase == null) + LogError("Could not connect to database: %s", sError); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRebuildAdminCache(AdminCachePart part) +{ + if (part != AdminCache_Admins) + return; + + CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnRebuildAdminCachePost(Handle hTimer) +{ + for (int client = 1; client <= MaxClients; client++) + { + if(g_bResponsePassed[client] && g_bPreAdminChecked[client]) + ApplyGroupFlags(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_sGroup[client][0] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_sGroup[client][0] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sSteamID32) +{ + if (IsFakeClient(client)) + return; + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[256]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM testvip_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBConnect, sQuery, GetClientUserId(client)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBConnect(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "activated", iField); + int iTimestampActivated = SQL_FetchInt(rs, iField); + int iTimestamp = GetTime(); + delete rs; + + if ((iTimestamp - iTimestampActivated) < g_cvFreeVIPDuration.IntValue *60) + { + strcopy(g_sGroup[client], sizeof(g_sGroup[]), g_sAdmGroup); + } + } + + g_bResponsePassed[client] = true; + if (g_bPreAdminChecked[client]) + NotifyPostAdminCheck(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + g_bPreAdminChecked[client] = true; + + if (g_bResponsePassed[client] || g_bResponseFailed[client]) + return Plugin_Continue; + + RunAdminCacheChecks(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminFilter(int client) +{ + ApplyGroupFlags(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_VIP(int client, int iArgs) +{ + if (!IsValidClient(client)) + return Plugin_Handled; + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * FROM testvip_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBCommand, sQuery, GetClientUserId(client)); + + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBCommand(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + int iTimestamp = GetTime(); + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "activated", iField); + int iTimestampActivated = SQL_FetchInt(rs, iField); + delete rs; + + if ((iTimestamp - iTimestampActivated) < g_cvFreeVIPDuration.IntValue *60) + PrintToChat(client, "[UNLOZE] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue - (iTimestamp - iTimestampActivated) / 60); + else + PrintToChat(client, "[UNLOZE] Your TEST VIP expired already!"); + } + else + { + if (IsVIP(client)) + { + PrintToChat(client, "[UNLOZE] You already have VIP activated!"); + return; + } + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "INSERT INTO testvip_table (steam_auth, activated) VALUES ('%s', '%d')", sSteamID, iTimestamp); + SQL_FastQuery(g_hDatabase, sQuery); + strcopy(g_sGroup[client], sizeof(g_sGroup[]), g_sAdmGroup); + ApplyGroupFlags(client); + PrintToChat(client, "[UNLOZE] You have now access to !zclass, !tag and !glow and other VIP-Perks."); + PrintToChat(client, "[UNLOZE] Your TEST VIP will expire in %d minutes!", g_cvFreeVIPDuration.IntValue); + FakeClientCommandEx(client, "sm_vip"); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void ApplyGroupFlags(int client) +{ + if (!g_bResponsePassed[client]) + return; + + if (g_sGroup[client][0] == 0) + return; + + AdminId AdmID; + GroupId GrpID; + + if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) + { + LogMessage("Creating new admin for %L", client); + + AdmID = CreateAdmin(""); + SetUserAdmin(client, AdmID, true); + } + + if ((GrpID = FindAdmGroup(g_sGroup[client])) != INVALID_GROUP_ID) + { + if (AdminInheritGroup(AdmID, GrpID)) + LogMessage("%L added to group %s", client, g_sGroup[client]); + } + else + LogMessage("%L group not found %s", client, g_sGroup[client]); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public bool IsVIP(int client) +{ + AdminId AdmID; + + if ((AdmID = GetUserAdmin(client)) == INVALID_ADMIN_ID) + return false; + else + { + for (int i = 0; i <= GetAdminGroupCount(AdmID); i++) + { + char sGroup[32]; + if ((GetAdminGroup(AdmID, i, sGroup, sizeof(sGroup)) != INVALID_GROUP_ID)) + { + if (StrEqual(sGroup, g_sAdmGroup)) + return true; + } + } + } + return false; +} \ No newline at end of file diff --git a/VPN-Check/scripting/VPN-Check.sp b/VPN-Check/scripting/VPN-Check.sp new file mode 100644 index 00000000..76c56984 --- /dev/null +++ b/VPN-Check/scripting/VPN-Check.sp @@ -0,0 +1,275 @@ +#include +#include +#include + +#undef REQUIRE_PLUGIN +#include +#define REQUIRE_PLUGIN + + +#pragma newdecls required +#pragma semicolon 1 + +ConVar g_cvBlockNoSteamVPN; + +int g_bStatus[MAXPLAYERS+1] = {0,...}; + +bool g_bPMLoaded; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "VPN-Check", + author = "Neon", + description = "", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_cvBlockNoSteamVPN = CreateConVar("sm_vpn_block", "1", "Kick unauthenticated people that use a VPN.", FCVAR_NONE, true, 0.0, true, 1.0); + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsValidClient(client) || IsClientSourceTV(client)) + continue; + + int iSerial = GetClientSerial(client); + + char sIP[32]; + GetClientIP(client, sIP, sizeof(sIP)); + + char sRequest[256]; + FormatEx(sRequest, sizeof(sRequest), "http://proxy.mind-media.com/block/proxycheck.php?ip=%s", sIP); + + Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); + if (!hRequest || + !SteamWorks_SetHTTPCallbacks(hRequest, OnClientPostAdminCheck_OnTransferComplete) || + !SteamWorks_SetHTTPRequestContextValue(hRequest, iSerial) || + !SteamWorks_SendHTTPRequest(hRequest)) + { + delete hRequest; + } + } + + RegAdminCmd("sm_vpn", Command_CheckVPN, ADMFLAG_RCON); + + AutoExecConfig(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnAllPluginsLoaded() +{ + g_bPMLoaded = LibraryExists("PlayerManager"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryAdded(const char[] sName) +{ + if (strcmp(sName, "PlayerManager", false) == 0) + g_bPMLoaded = true; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnLibraryRemoved(const char[] sName) +{ + if (strcmp(sName, "PlayerManager", false) == 0) + g_bPMLoaded = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_CheckVPN(int client, int args) +{ + char sBuffer[4096]; + char sIP[32]; + char sSteamID[32]; + bool bFound = false; + + Format(sBuffer, sizeof(sBuffer), "VPN STATUS:\n"); + Format(sBuffer, sizeof(sBuffer), "%s#########################################\n", sBuffer); + for (int i = 1; i <= MaxClients; i++) + { + if (!IsValidClient(i)) + continue; + + if (g_bStatus[i] == 0) + continue; + + if (g_bStatus[i] == 1) + { + GetClientAuthId(i, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + GetClientIP(i, sIP, sizeof(sIP)); + + if (g_bPMLoaded) + { + if (!PM_IsPlayerSteam(i)) + Format(sBuffer, sizeof(sBuffer), "%s\"%L\"[NOSTEAM] is possibly using a VPN (%s).\n", sBuffer, i, sIP); + else + Format(sBuffer, sizeof(sBuffer), "%s\"%L\"[STEAM] is possibly using a VPN (%s).\n", sBuffer, i, sIP); + } + else + Format(sBuffer, sizeof(sBuffer), "%s\"%L\" is possibly using a VPN (%s).\n", sBuffer, i, sIP); + + bFound = true; + } + else if (g_bStatus[i] == 2) + { + Format(sBuffer, sizeof(sBuffer), "%s\"%L\" VPN-Check failed due to an API Error.\n", sBuffer, i); + bFound = true; + } + else if (g_bStatus[i] == 3) + { + Format(sBuffer, sizeof(sBuffer), "%s\"%L\" VPN-Check failed due to an Request Error.\n", sBuffer, i); + bFound = true; + } + } + + if (!bFound) + Format(sBuffer, sizeof(sBuffer), "%sCould not find any possible VPNs\n", sBuffer); + + Format(sBuffer, sizeof(sBuffer), "%s#########################################", sBuffer); + ReplyToCommand(client, sBuffer); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + g_bStatus[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bStatus[client] = 0; +} +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminCheck(int client) +{ + if (!IsValidClient(client) || IsClientSourceTV(client)) + return; + + int iSerial = GetClientSerial(client); + + char sIP[32]; + GetClientIP(client, sIP, sizeof(sIP)); + + char sRequest[256]; + FormatEx(sRequest, sizeof(sRequest), "http://proxy.mind-media.com/block/proxycheck.php?ip=%s", sIP); + + Handle hRequest = SteamWorks_CreateHTTPRequest(k_EHTTPMethodGET, sRequest); + if (!hRequest || + !SteamWorks_SetHTTPCallbacks(hRequest, OnClientPostAdminCheck_OnTransferComplete) || + !SteamWorks_SetHTTPRequestContextValue(hRequest, iSerial) || + !SteamWorks_SendHTTPRequest(hRequest)) + { + delete hRequest; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int OnClientPostAdminCheck_OnTransferComplete(Handle hRequest, bool bFailure, bool bSuccessful, EHTTPStatusCode eStatusCode, int iSerial) +{ + int client = GetClientFromSerial(iSerial); + + if (!client) //Player disconnected. + { + delete hRequest; + return; + } + + if (bFailure || !bSuccessful || eStatusCode != k_EHTTPStatusCode200OK) + { + g_bStatus[client] = 3; + delete hRequest; + return; + } + + SteamWorks_GetHTTPResponseBodyCallback(hRequest, OnClientPostAdminCheck_OnTransferResponse, iSerial); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int OnClientPostAdminCheck_OnTransferResponse(char[] sData, int iSerial) +{ + int client = GetClientFromSerial(iSerial); + + if (!client) //Player disconnected. + return; + + TrimString(sData); + StripQuotes(sData); + + if (strcmp(sData, "Y", false) == 0) + { + g_bStatus[client] = 1; + + char sIP[32]; + GetClientIP(client, sIP, sizeof(sIP)); + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + for(int i = 1; i <= MaxClients; i++) + { + if(IsValidClient(i) && CheckCommandAccess(i, "sm_vpn", ADMFLAG_RCON)) + { + if (g_bPMLoaded) + { + if (!PM_IsPlayerSteam(client)) + { + if (g_cvBlockNoSteamVPN.BoolValue) + { + CPrintToChat(i, "{green}[SM]{default} %L[NOSTEAM] is possibly using a {red}VPN {default}(IP: %s). Client will be kicked.", client, sIP); + KickClient(client, "VPN not allowed"); + LogAction(client, -1, "\"%L\"[NOSTEAM] is possibly using a VPN (IP: %s). Client got kicked.", client, sIP); + } + else + CPrintToChat(i, "{green}[SM]{default} %L[NOSTEAM] is possibly using a {red}VPN {default}(IP: %s).", client, sIP); + } + else + CPrintToChat(i, "{green}[SM]{default} %L[STEAM] is possibly using a {red}VPN {default}(IP: %s).", client, sIP); + } + else + CPrintToChat(i, "{green}[SM]{default} %L is possibly using a {red}VPN {default}(IP: %s).", client, sIP); + } + } + } + else if (strcmp(sData, "N", false) == 0) + g_bStatus[client] = 0; + else if (strcmp(sData, "X", false) == 0) + g_bStatus[client] = 2; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} \ No newline at end of file diff --git a/ZSkills/content/sound/unloze/extinguish.wav b/ZSkills/content/sound/unloze/extinguish.wav new file mode 100644 index 00000000..9e8c2e66 Binary files /dev/null and b/ZSkills/content/sound/unloze/extinguish.wav differ diff --git a/ZSkills/scripting/ZSkills.sp b/ZSkills/scripting/ZSkills.sp new file mode 100644 index 00000000..96529445 --- /dev/null +++ b/ZSkills/scripting/ZSkills.sp @@ -0,0 +1,359 @@ +#include +#include +#include + +/* BOOLS */ +bool g_bZAmmo_Enabled; +bool g_bZAmmo_Active[MAXPLAYERS+1]; + +bool g_bZCleanse_Enabled; +bool g_bZCleanse_Active[MAXPLAYERS+1]; +bool g_bLastButtonReload[MAXPLAYERS+1]; + +/* CONVARS */ +ConVar g_hCVar_ZAmmo_Enabled; +ConVar g_hCVar_ZAmmo_Duration; +ConVar g_hCVar_ZAmmo_Cost; + +ConVar g_hCVar_ZCleanse_Enabled; +ConVar g_hCVar_ZCleanse_Duration; +ConVar g_hCVar_ZCleanse_Uses; + +/* INTEGERS */ +int g_bZCleanse_Uses[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ZSkills", + author = "Neon", + description = "Skills?!", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + g_hCVar_ZAmmo_Enabled = CreateConVar("zr_zammo_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_ZAmmo_Duration = CreateConVar("zr_zammo_duration", "6", "", FCVAR_NONE, true, 1.0); + g_hCVar_ZAmmo_Cost = CreateConVar("zr_zammo_cost", "4500", "", FCVAR_NONE, true, 1.0); + g_bZAmmo_Enabled = g_hCVar_ZAmmo_Enabled.BoolValue; + if (g_bZAmmo_Enabled) + HookEvent("weapon_fire", Event_WeaponFire); + g_hCVar_ZAmmo_Enabled.AddChangeHook(ConVarChanged); + + g_hCVar_ZCleanse_Enabled = CreateConVar("zr_zcleanse_enabled", "1", "", FCVAR_NONE, true, 0.0, true, 1.0); + g_hCVar_ZCleanse_Duration = CreateConVar("zr_zcleanse_duration", "5", "", FCVAR_NONE, true, 1.0); + g_hCVar_ZCleanse_Uses = CreateConVar("zr_zcleanse_uses", "5", "", FCVAR_NONE, true, 1.0); + g_bZCleanse_Enabled = g_hCVar_ZCleanse_Enabled.BoolValue; + g_hCVar_ZCleanse_Enabled.AddChangeHook(ConVarChanged); + + + RegConsoleCmd("sm_zammo", Command_ZAmmo); + RegConsoleCmd("sm_zcleanse", Command_ZCleanse); + + + + + HookEvent("round_start", Event_RoundStart); + AutoExecConfig(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + PrecacheSound("unloze/extinguish.wav"); + AddFileToDownloadsTable("sound/unloze/extinguish.wav"); +} + + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ConVarChanged(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_bZAmmo_Enabled = convar.BoolValue; + if (g_bZAmmo_Enabled) + HookEvent("weapon_fire", Event_WeaponFire); + else + UnhookEvent("weapon_fire", Event_WeaponFire); + + g_bZCleanse_Enabled = g_hCVar_ZCleanse_Enabled.BoolValue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ZAmmo(int client, int args) +{ + if (client == 0) + { + ReplyToCommand(client, "[ZAmmo] Can't use this from console."); + return Plugin_Handled; + } + if (!g_bZAmmo_Enabled) + { + PrintToChat(client, "[ZAmmo] is currently disabled."); + return Plugin_Handled; + } + if (!IsPlayerAlive(client)) + { + PrintToChat(client, "[ZAmmo] This feature requires you to be alive."); + return Plugin_Handled; + } + if (!ZR_IsClientHuman(client)) + { + PrintToChat(client, "[ZAmmo] This feature requires you to be Human."); + return Plugin_Handled; + } + if(g_bZAmmo_Active[client]) + { + PrintToChat(client, "[ZAmmo] is already active on you."); + return Plugin_Handled; + } + int iCost = g_hCVar_ZAmmo_Cost.IntValue; + if (GetEntProp(client, Prop_Send, "m_iAccount") < iCost) + { + PrintToChat(client, "[ZAmmo] Insufficent funds (%d).", iCost); + return Plugin_Handled; + } + int iDuration = g_hCVar_ZAmmo_Duration.IntValue; + + SetEntProp(client, Prop_Send, "m_iAccount", GetEntProp(client, Prop_Send, "m_iAccount") - iCost); + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", iDuration); + CreateTimer(float(iDuration), Timer_Disable_ZAmmo, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + + g_bZAmmo_Active[client] = true; + PrintToChat(client, "[ZAmmo] Enabling Infinite Ammo for %d seconds in exchange for %d$.", iDuration, iCost); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ZCleanse(int client, int args) +{ + if (client == 0) + { + ReplyToCommand(client, "[ZCleanse] Can't use this from console."); + return Plugin_Handled; + } + if (!g_bZCleanse_Enabled) + { + PrintToChat(client, "[ZCleanse] is currently disabled."); + return Plugin_Handled; + } + if (!IsPlayerAlive(client)) + { + PrintToChat(client, "[ZCleanse] This feature requires you to be alive."); + return Plugin_Handled; + } + if (!ZR_IsClientZombie(client)) + { + PrintToChat(client, "[ZCleanse] This feature requires you to be Zombie."); + return Plugin_Handled; + } + if(g_bZCleanse_Active[client]) + { + PrintToChat(client, "[ZCleanse] is already active on you."); + return Plugin_Handled; + } + int iMaxUses = g_hCVar_ZCleanse_Uses.IntValue; + if (g_bZCleanse_Uses[client] >= iMaxUses) + { + PrintToChat(client, "[ZCleanse] Already used (%d/%d) times this round.", g_bZCleanse_Uses[client], iMaxUses); + return Plugin_Handled; + } + int iDuration = g_hCVar_ZCleanse_Duration.IntValue; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", iDuration); + NapalmExtinguishEntity(client); + CreateTimer(float(iDuration), Timer_Disable_ZCleanse, GetClientSerial(client), TIMER_FLAG_NO_MAPCHANGE); + + g_bZCleanse_Active[client] = true; + g_bZCleanse_Uses[client]++; + PrintToChat(client, "[ZCleanse] You are immune against napalm for the next %d seconds. (%d/%d) uses.", iDuration, g_bZCleanse_Uses[client], iMaxUses); + //EmitSoundToClient(client, "unloze/extinguish.wav", .volume=1.0); + EmitSoundToAll("unloze/extinguish.wav", .entity=client, .volume=0.4); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bZAmmo_Active[client] = false; + g_bZCleanse_Active[client] = false; + g_bZCleanse_Uses[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void Event_RoundStart(Handle hEvent, char[] name, bool dontBroadcast) +{ + for (int client = 1; client <= MaxClients; client++) + { + g_bZAmmo_Active[client] = false; + g_bZCleanse_Active[client] = false; + g_bZCleanse_Uses[client] = 0; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void Event_WeaponFire(Handle hEvent, char[] name, bool dontBroadcast) +{ + int client = GetClientOfUserId(GetEventInt(hEvent, "userid")); + if(!g_bZAmmo_Active[client]) + return; + + int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon", 0); + if(IsValidEntity(weapon)) + { + if(weapon == GetPlayerWeaponSlot(client, 0) || weapon == GetPlayerWeaponSlot(client, 1)) + { + if(GetEntProp(weapon, Prop_Send, "m_iState", 4, 0) == 2 && GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0)) + { + int toAdd = 1; + char weaponClassname[128]; + GetEntityClassname(weapon, weaponClassname, sizeof(weaponClassname)); + + if(StrEqual(weaponClassname, "weapon_glock", true) || StrEqual(weaponClassname, "weapon_famas", true)) + { + if(GetEntProp(weapon, Prop_Send, "m_bBurstMode")) + { + switch (GetEntProp(weapon, Prop_Send, "m_iClip1")) + { + case 1: + { + toAdd = 1; + } + case 2: + { + toAdd = 2; + } + default: + { + toAdd = 3; + } + } + } + } + SetEntProp(weapon, Prop_Send, "m_iClip1", GetEntProp(weapon, Prop_Send, "m_iClip1", 4, 0) + toAdd, 4, 0); + } + } + } + + return; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (!g_bZAmmo_Active[client]) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZAmmo_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void NapalmExtinguishEntity(int client) +{ + int iFire = GetEntPropEnt(client, Prop_Data, "m_hEffectEntity"); + if (IsValidEntity(iFire)) + { + char sClassName[64]; + GetEdictClassname(iFire, sClassName, sizeof(sClassName)); + if (StrEqual(sClassName, "entityflame", false)) + SetEntPropFloat(iFire, Prop_Data, "m_flLifetime", 0.0); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action ZR_OnClientIgnite(int &client, float &duration) +{ + if(g_bZCleanse_Active[client]) + return Plugin_Handled; + + return Plugin_Continue; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Timer_Disable_ZAmmo(Handle timer, int iSerial) +{ + int client; + if ((client = GetClientFromSerial(iSerial)) == 0) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZAmmo_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Timer_Disable_ZCleanse(Handle timer, int iSerial) +{ + int client; + if ((client = GetClientFromSerial(iSerial)) == 0) + return; + + SetEntPropFloat(client, Prop_Send, "m_flProgressBarStartTime", GetGameTime()-1); + SetEntProp(client, Prop_Send, "m_iProgressBarDuration", 0); + + g_bZCleanse_Active[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnPlayerRunCmd(int client, int &buttons) +{ + if(!IsPlayerAlive(client)) + return Plugin_Continue; + + if(!ZR_IsClientZombie(client)) + return Plugin_Continue; + + if (g_bZCleanse_Active[client]) + return Plugin_Continue; + + bool bPressingReload = view_as(buttons & IN_RELOAD); + if (!bPressingReload) + { + g_bLastButtonReload[client] = false; + return Plugin_Continue; + } + + if (!g_bLastButtonReload[client]) + { + g_bLastButtonReload[client] = true; + Command_ZCleanse(client, 0); + } + return Plugin_Continue; +} \ No newline at end of file diff --git a/ZombieManager/scripting/ZombieManager.sp b/ZombieManager/scripting/ZombieManager.sp new file mode 100644 index 00000000..63ffee11 --- /dev/null +++ b/ZombieManager/scripting/ZombieManager.sp @@ -0,0 +1,211 @@ +#pragma semicolon 1 + +#include +#include +#include +#include + +bool g_bTestRound; +bool g_bAdminTestRound; +bool g_bMotherZM[MAXPLAYERS + 1] = { false, ...}; + +public Plugin myinfo = +{ + name = "Zombie Manager", + author = "Dogan", + description = "Tools to manage testround and zombies", + version = "1.1.0", + url = "" +}; + +public void OnPluginStart() +{ + g_bTestRound = false; + g_bAdminTestRound = false; + + RegAdminCmd("sm_testround", Command_Testround, ADMFLAG_GENERIC, "Toggle to enable/disable a test round."); + + CreateTimer(20.0, Timer_MessageTestRound, _, TIMER_REPEAT); + + HookEvent("round_start", OnRoundStart); + HookEvent("player_spawn", OnClientSpawn); + HookEvent("player_team", OnPlayerTeam); + + AddMultiTargetFilter("@mzombie", Filter_Motherzombies, "Mother Zombies", false); + RegConsoleCmd("sm_mzombie", Command_DisplayMotherzombies, "Current Mother Zombies"); +} + +public void OnPluginEnd() +{ + RemoveMultiTargetFilter("@mzombie", Filter_Motherzombies); +} + +public void OnRoundStart(Event hEvent, const char[] sName, bool bDontBroadcast) +{ + g_bTestRound = false; + g_bAdminTestRound = false; + + for(int i = 1; i <= MaxClients; i++) + { + g_bMotherZM[i] = false; + } +} + +public void ZR_OnClientHumanPost(int client, bool respawn, bool protect) +{ + g_bMotherZM[client] = false; +} + +public Action ZR_OnClientInfect(int &client, int &attacker, bool &motherInfect, bool &respawnOverride, bool &respawn) +{ + if(g_bTestRound) + return Plugin_Handled; + + return Plugin_Continue; +} + +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + g_bMotherZM[client] = motherInfect; +} + +public Action ZR_OnInfectCountdown() +{ + if(g_bTestRound) + return Plugin_Handled; + + return Plugin_Continue; +} + +public void OnClientSpawn(Event hEvent, const char[] sName, bool bDontBroadcast) +{ + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + g_bMotherZM[client] = false; +} + +public Action OnPlayerTeam(Event event, const char[] name, bool dontBroadcast) +{ + int client = GetClientOfUserId(GetEventInt(event, "userid")); + + g_bMotherZM[client] = false; +} + +public bool Filter_Motherzombies(const char[] sPattern, Handle hClients, int client) +{ + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(g_bMotherZM[i]) + PushArrayCell(hClients, i); + } + } + + return true; +} + +public Action Command_DisplayMotherzombies(int client, int args) +{ + char aBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i)) + { + if(g_bMotherZM[i]) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + } + } + + if(strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + ReplyToCommand(client, "[SM] Current Mother Zombies: %s", aBuf); + } + else + ReplyToCommand(client, "[SM] Current Mother Zombies: none"); + + return Plugin_Handled; +} + +public Action Command_Testround(int client, int args) +{ + /*if(GetClientTeam(client) == CS_TEAM_SPECTATOR) + { + ReplyToCommand(client, "[SM] Please join a Team first."); + return Plugin_Handled; + } + + if(!IsPlayerAlive(client)) + { + ReplyToCommand(client, "[SM] Please respawn yourself first."); + return Plugin_Handled; + }*/ + + ToggleTestRound(client); + return Plugin_Handled; +} + +public void ToggleTestRound(int client) +{ + g_bAdminTestRound = !g_bAdminTestRound; + + if(g_bTestRound) + { + g_bTestRound = false; + + ReplyToCommand(client, "[SM] Deactivated this Test Round."); + CPrintToChatAll("[SM] %N deactivated this Test Round!", client); + LogAction(client, -1, "\"%L\" deactivated this Test Round.", client); + } + else + { + g_bTestRound = true; + + ReplyToCommand(client, "[SM] Activated a Test Round."); + CPrintToChatAll("[SM] %N activated a Test Round!", client); + LogAction(client, -1, "\"%L\" activated a Test Round.", client); + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && !IsFakeClient(i) && IsPlayerAlive(i) && ZR_IsClientZombie(i)) + { + ZR_HumanClient(i, false, false); + } + } + } +} + +public Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason) +{ + if(g_bTestRound) + return Plugin_Handled; + + return Plugin_Continue; +} + +public Action ZR_OnClientRespawn(int &client, ZR_RespawnCondition &condition) +{ + if(g_bTestRound) + condition = ZR_Respawn_Human; + + return Plugin_Changed; +} + +public Action Timer_MessageTestRound(Handle timer) +{ + if(g_bTestRound) + { + CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!"); + CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!"); + CPrintToChatAll("{cyan}[UNLOZE] {red}This is a Test Round!"); + } + + return Plugin_Continue; +} \ No newline at end of file diff --git a/_WebShortcuts/configs/Webshortcuts.txt b/_WebShortcuts/configs/Webshortcuts.txt new file mode 100644 index 00000000..1ce98e1a --- /dev/null +++ b/_WebShortcuts/configs/Webshortcuts.txt @@ -0,0 +1,39 @@ +"Forum" +{ + "Url" "https://unloze.com/forums" + "Title" "Unloze Forum" + "Hook" "!forum" + "Hook" "/forum" + "Hook" "!forums" + "Hook" "/forums" +} + +"Stats" +{ + "Url" "http://stats.unloze.com/" + "Title" "Unloze Stats" + "Hook" "!hlstatsx" + "Hook" "/hlstatsx" +} + +"SteamGroup" +{ + "Url" "http://steamcommunity.com/groups/UNLOZE" + "Title" "Unloze Steam Group" + "Hook" "!steam" + "Hook" "/steam" + "Hook" "!steamcommunity" + "Hook" "/steamcommunity" + "Hook" "!unloze" + "Hook" "/unloze" + "Hook" "!group" + "Hook" "/group" +} + +"Discord" +{ + "Url" "https://discordapp.com/invite/RzrZu7y" + "Title" "Unloze Discord" + "Hook" "!discord" + "Hook" "/discord" +} diff --git a/_WebShortcuts/scripting/WebShortcuts.sp b/_WebShortcuts/scripting/WebShortcuts.sp new file mode 100644 index 00000000..497f5b3a --- /dev/null +++ b/_WebShortcuts/scripting/WebShortcuts.sp @@ -0,0 +1,965 @@ +#pragma semicolon 1 +#include +#tryinclude + +#define PLUGIN_VERSION "1.1" +#define PLUGIN_DESCRIPTION "Redux of Web Shortcuts and Dynamic MOTD Functionality" + +public Plugin:myinfo = +{ + name = "Web Shortcuts", /* https://www.youtube.com/watch?v=h6k5jwllFfA&hd=1 */ + author = "Kyle Sanderson, Nicholas Hastings", + description = PLUGIN_DESCRIPTION, + version = PLUGIN_VERSION, + url = "http://SourceMod.net" +}; + +enum _:States { + Game_TF2 = (1<<0), + Game_L4D = (1<<1), + Big_MOTD = (1<<8) +}; + +new g_iGameMode; + +enum _:FieldCheckFlags +{ + Flag_Steam_ID = (1<<0), + Flag_User_ID = (1<<1), + Flag_Friend_ID = (1<<2), + Flag_Name = (1<<3), + Flag_IP = (1<<4), + Flag_Language = (1<<5), + Flag_Rate = (1<<6), + Flag_Server_IP = (1<<7), + Flag_Server_Port = (1<<8), + Flag_Server_Name = (1<<9), + Flag_Server_Custom = (1<<10), + Flag_L4D_GameMode = (1<<11), + Flag_Current_Map = (1<<12), + Flag_Next_Map = (1<<13), + Flag_GameDir = (1<<14), + Flag_CurPlayers = (1<<15), + #if defined _steamtools_included + Flag_MaxPlayers = (1<<16), + Flag_VACStatus = (1<<17), + Flag_Server_Pub_IP = (1<<18), + Flag_Steam_ConnStatus = (1<<19) + #else + Flag_MaxPlayers = (1<<16) + #endif /* _steamtools_included */ +}; + +#define IsTeamFortress2() (g_iGameMode & Game_TF2) +#define IsLeftForDead() (g_iGameMode & Game_L4D) +#define GoLargeOrGoHome() (IsTeamFortress2() && (g_iGameMode & Big_MOTD)) + +/*#include "Duck"*/ + +new Handle:g_hIndexArray = INVALID_HANDLE; +new Handle:g_hFastLookupTrie = INVALID_HANDLE; + +new Handle:g_hCurrentTrie = INVALID_HANDLE; +new String:g_sCurrentSection[128]; + +public OnPluginStart() +{ + g_hIndexArray = CreateArray(); /* We'll only use this for cleanup to prevent handle leaks and what not. + Our friend below doesn't have iteration, so we have to do this... */ + g_hFastLookupTrie = CreateTrie(); + + AddCommandListener(Client_Say, "say"); + AddCommandListener(Client_Say, "say_team"); + + /* From Psychonic */ + Duck_OnPluginStart(); + + new Handle:cvarVersion = CreateConVar("webshortcutsredux_version", PLUGIN_VERSION, PLUGIN_DESCRIPTION, FCVAR_PLUGIN|FCVAR_NOTIFY); + + /* On a reload, this will be set to the old version. Let's update it. */ + SetConVarString(cvarVersion, PLUGIN_VERSION); +} + +public Action:Client_Say(iClient, const String:sCommand[], argc) +{ + if (argc < 1 || !IsValidClient(iClient)) + { + return Plugin_Continue; /* Well. While we can probably have blank hooks, I doubt anyone wants this. Lets not waste cycles. Let the game deal with this. */ + } + + decl String:sFirstArg[64]; /* If this is too small, let someone know. */ + GetCmdArg(1, sFirstArg, sizeof(sFirstArg)); + TrimString(sFirstArg); + + new Handle:hStoredTrie = INVALID_HANDLE; + if (!GetTrieValue(g_hFastLookupTrie, sFirstArg, hStoredTrie) || hStoredTrie == INVALID_HANDLE) /* L -> R. Strings are R -> L, but that can change. */ + { + return Plugin_Continue; /* Didn't find anything. Bug out! */ + } + + if (DealWithOurTrie(iClient, sFirstArg, hStoredTrie)) + { + return Plugin_Handled; /* We want other hooks to be called, I guess. We just don't want it to go to the game. */ + } + + return Plugin_Continue; /* Well this is embarasing. We didn't actually hook this. Or atleast didn't intend to. */ +} + +public bool:DealWithOurTrie(iClient, const String:sHookedString[], Handle:hStoredTrie) +{ + decl String:sUrl[256]; + if (!GetTrieString(hStoredTrie, "Url", sUrl, sizeof(sUrl))) + { + LogError("Unable to find a Url for: \"%s\".", sHookedString); + return false; + } + + new iUrlBits; + + if (!GetTrieValue(hStoredTrie, "UrlBits", iUrlBits)) + { + iUrlBits = 0; /* That's fine, there are no replacements! Less work for us. */ + } + + decl String:sTitle[256]; + new iTitleBits; + if (!GetTrieString(hStoredTrie, "Title", sTitle, sizeof(sTitle))) + { + sTitle[0] = '\0'; /* We don't really need a title. Don't worry, it's cool. */ + iTitleBits = 0; + } + else + { + if (!GetTrieValue(hStoredTrie, "TitleBits", iTitleBits)) + { + iTitleBits = 0; /* That's fine, there are no replacements! Less work for us. */ + } + } + + Duck_DoReplacements(iClient, sUrl, iUrlBits, sTitle, iTitleBits); /* Arrays are passed by reference. Variables are copied. */ + + new bool:bBig; + new bool:bNotSilent = true; + + GetTrieValue(hStoredTrie, "Silent", bNotSilent); + if (GoLargeOrGoHome()) + { + GetTrieValue(hStoredTrie, "Big", bBig); + } + + decl String:sMessage[256]; + if (GetTrieString(hStoredTrie, "Msg", sMessage, sizeof(sMessage))) + { + new iMsgBits; + GetTrieValue(hStoredTrie, "MsgBits", iMsgBits); + + if (iMsgBits != 0) + { + Duck_DoReplacements(iClient, sMessage, iMsgBits, sMessage, 0); /* Lame Hack for now */ + } + + PrintToChatAll("%s", sMessage); + } + + DisplayMOTDWithOptions(iClient, sTitle, sUrl, bBig, bNotSilent, MOTDPANEL_TYPE_URL); + return true; +} + +public ClearExistingData() +{ + new Handle:hHandle = INVALID_HANDLE; + for (new i = (GetArraySize(g_hIndexArray) - 1); i >= 0; i--) + { + hHandle = GetArrayCell(g_hIndexArray, i); + + if (hHandle == INVALID_HANDLE) + { + continue; + } + + delete hHandle; + } + + ClearArray(g_hIndexArray); + ClearTrie(g_hFastLookupTrie); +} + +public OnConfigsExecuted() +{ + ClearExistingData(); + + decl String:sPath[256]; + BuildPath(Path_SM, sPath, sizeof(sPath), "configs/Webshortcuts.txt"); + if (!FileExists(sPath)) + { + return; + } + + ProcessFile(sPath); +} + +public ProcessFile(const String:sPathToFile[]) +{ + new Handle:hSMC = SMC_CreateParser(); + SMC_SetReaders(hSMC, SMCNewSection, SMCReadKeyValues, SMCEndSection); + + new iLine; + new SMCError:ReturnedError = SMC_ParseFile(hSMC, sPathToFile, iLine); /* Calls the below functions, then execution continues. */ + + if (ReturnedError != SMCError_Okay) + { + decl String:sError[256]; + SMC_GetErrorString(ReturnedError, sError, sizeof(sError)); + if (iLine > 0) + { + LogError("Could not parse file (Line: %d, File \"%s\"): %s.", iLine, sPathToFile, sError); + delete hSMC; /* Sneaky Handles. */ + return; + } + + LogError("Parser encountered error (File: \"%s\"): %s.", sPathToFile, sError); + } + + delete hSMC; +} + +public SMCResult:SMCNewSection(Handle:smc, const String:name[], bool:opt_quotes) +{ + if (!opt_quotes) + { + LogError("Invalid Quoting used with Section: %s.", name); + } + + strcopy(g_sCurrentSection, sizeof(g_sCurrentSection), name); + + if (GetTrieValue(g_hFastLookupTrie, name, g_hCurrentTrie)) + { + return SMCParse_Continue; + } + else /* That's cool. Sounds like an initial insertion. Just wanted to make sure! */ + { + g_hCurrentTrie = CreateTrie(); + PushArrayCell(g_hIndexArray, g_hCurrentTrie); /* Don't be leakin */ + SetTrieValue(g_hFastLookupTrie, name, g_hCurrentTrie); + SetTrieString(g_hCurrentTrie, "Name", name); + } + + return SMCParse_Continue; +} + +public SMCResult:SMCReadKeyValues(Handle:smc, const String:key[], const String:value[], bool:key_quotes, bool:value_quotes) +{ + if (!key_quotes) + { + LogError("Invalid Quoting used with Key: \"%s\".", key); + } + else if (!value_quotes) + { + LogError("Invalid Quoting used with Key: \"%s\" Value: \"%s\".", key, value); + } + else if (g_hCurrentTrie == INVALID_HANDLE) + { + return SMCParse_Continue; + } + + switch (key[0]) + { + case 'p','P': + { + if (!StrEqual(key, "Pointer", false)) + { + return SMCParse_Continue; + } + + new iFindValue; + iFindValue = FindValueInArray(g_hIndexArray, g_hCurrentTrie); + + if (iFindValue > -1) + { + RemoveFromArray(g_hIndexArray, iFindValue); + } + + if (g_sCurrentSection[0] != '\0') + { + RemoveFromTrie(g_hFastLookupTrie, g_sCurrentSection); + } + + delete g_hCurrentTrie; /* We're about to invalidate below */ + + if (GetTrieValue(g_hFastLookupTrie, value, g_hCurrentTrie)) + { + SetTrieValue(g_hFastLookupTrie, g_sCurrentSection, g_hCurrentTrie, true); + return SMCParse_Continue; + } + + g_hCurrentTrie = CreateTrie(); /* Ruhro, the thing this points to doesn't actually exist. Should we error or what? Nah, lets try and recover. */ + PushArrayCell(g_hIndexArray, g_hCurrentTrie); /* Don't be losin handles */ + SetTrieValue(g_hFastLookupTrie, g_sCurrentSection, g_hCurrentTrie, true); + SetTrieString(g_hCurrentTrie, "Name", g_sCurrentSection, true); + } + + case 'u','U': + { + if (!StrEqual(key, "Url", false)) + { + return SMCParse_Continue; + } + + SetTrieString(g_hCurrentTrie, "Url", value, true); + + new iBits; + Duck_CalcBits(value, iBits); /* Passed by Ref */ + SetTrieValue(g_hCurrentTrie, "UrlBits", iBits, true); + } + + case 'T','t': + { + if (!StrEqual(key, "Title", false)) + { + return SMCParse_Continue; + } + + SetTrieString(g_hCurrentTrie, "Title", value, true); + + new iBits; + Duck_CalcBits(value, iBits); /* Passed by Ref */ + SetTrieValue(g_hCurrentTrie, "TitleBits", iBits, true); + } + + case 'b','B': + { + if (!GoLargeOrGoHome() || !StrEqual(key, "Big", false)) /* Maybe they don't know they can't use it? Oh well. Protect the silly. */ + { + return SMCParse_Continue; + } + + SetTrieValue(g_hCurrentTrie, "Big", TranslateToBool(value), true); + } + + case 'h','H': + { + if (!StrEqual(key, "Hook", false)) + { + return SMCParse_Continue; + } + + SetTrieValue(g_hFastLookupTrie, value, g_hCurrentTrie, true); + } + + case 's', 'S': + { + if (!StrEqual(key, "Silent", false)) + { + return SMCParse_Continue; + } + + SetTrieValue(g_hCurrentTrie, "Silent", !TranslateToBool(value), true); + } + + case 'M', 'm': + { + if (!StrEqual(key, "Msg", false)) + { + return SMCParse_Continue; + } + + SetTrieString(g_hCurrentTrie, "Msg", value, true); + + new iBits; + Duck_CalcBits(value, iBits); /* Passed by Ref */ + + SetTrieValue(g_hCurrentTrie, "MsgBits", iBits, true); + } + } + + return SMCParse_Continue; +} + +public SMCResult:SMCEndSection(Handle:smc) +{ + g_hCurrentTrie = INVALID_HANDLE; + g_sCurrentSection[0] = '\0'; +} + +public bool:TranslateToBool(const String:sSource[]) +{ + switch(sSource[0]) + { + case '0', 'n', 'N', 'f', 'F': + { + return false; + } + + case '1', 'y', 'Y', 't', 'T', 's', 'S': + { + return true; + } + } + + return false; /* Assume False */ +} + +public DisplayMOTDWithOptions(iClient, const String:sTitle[], const String:sUrl[], bool:bBig, bool:bNotSilent, iType) +{ + new Handle:hKv = CreateKeyValues("motd"); + + if (bBig) + { + KvSetNum(hKv, "customsvr", 1); + } + + KvSetNum(hKv, "type", iType); + + if (sTitle[0] != '\0') + { + KvSetString(hKv, "title", sTitle); + } + + if (sUrl[0] != '\0') + { + KvSetString(hKv, "msg", sUrl); + } + + ShowVGUIPanel(iClient, "info", hKv, bNotSilent); + delete hKv; +} + +static stock bool:IsValidClient(iClient) +{ + return (0 < iClient <= MaxClients && IsClientInGame(iClient)); +} + +/* Psychonics Realm */ + +#define FIELD_CHECK(%1,%2);\ +if (StrContains(source, %1) != -1) { field |= %2; } + +#define TOKEN_STEAM_ID "{STEAM_ID}" +#define TOKEN_USER_ID "{USER_ID}" +#define TOKEN_FRIEND_ID "{FRIEND_ID}" +#define TOKEN_NAME "{NAME}" +#define TOKEN_IP "{IP}" +#define TOKEN_LANGUAGE "{LANGUAGE}" +#define TOKEN_RATE "{RATE}" +#define TOKEN_SERVER_IP "{SERVER_IP}" +#define TOKEN_SERVER_PORT "{SERVER_PORT}" +#define TOKEN_SERVER_NAME "{SERVER_NAME}" +#define TOKEN_SERVER_CUSTOM "{SERVER_CUSTOM}" +#define TOKEN_L4D_GAMEMODE "{L4D_GAMEMODE}" +#define TOKEN_CURRENT_MAP "{CURRENT_MAP}" +#define TOKEN_NEXT_MAP "{NEXT_MAP}" +#define TOKEN_GAMEDIR "{GAMEDIR}" +#define TOKEN_CURPLAYERS "{CURPLAYERS}" +#define TOKEN_MAXPLAYERS "{MAXPLAYERS}" + +#if defined _steamtools_included +#define TOKEN_VACSTATUS "{VAC_STATUS}" +#define TOKEN_SERVER_PUB_IP "{SERVER_PUB_IP}" +#define TOKEN_STEAM_CONNSTATUS "{STEAM_CONNSTATUS}" +new g_bSteamTools; +#endif /* _steamtools_included */ + +/* Cached values */ +new String:g_szServerIp[16]; +new String:g_szServerPort[6]; +/* These can all be larger but whole buffer holds < 128 */ +new String:g_szServerName[128]; +new String:g_szServerCustom[128]; +new String:g_szL4DGameMode[128]; +new String:g_szCurrentMap[128]; +new String:g_szGameDir[64]; + + + +/*new Handle:g_hCmdQueue[MAXPLAYERS+1];*/ + +#if defined _steamtools_included +public Steam_FullyLoaded() +{ + g_bSteamTools = true; +} + +public OnLibraryRemoved(const String:sLibrary[]) +{ + if (!StrEqual(sLibrary, "SteamTools", false)) + { + return; + } + + g_bSteamTools = false; +} + +#endif + +public Duck_OnPluginStart() +{ + decl String:sGameDir[64]; + GetGameFolderName(sGameDir, sizeof(sGameDir)); + if (!strncmp(sGameDir, "tf", 2, false) || !strncmp(sGameDir, "tf_beta", 7, false)) + { + g_iGameMode |= Game_TF2; + g_iGameMode |= Big_MOTD; + } + + /* On a reload, these will already be registered and could be set to non-default */ + + if (IsTeamFortress2()) + { + /* AddCommandListener(Duck_TF2OnClose, "closed_htmlpage"); */ + } + + LongIPToString(GetConVarInt(FindConVar("hostip")), g_szServerIp); + GetConVarString(FindConVar("hostport"), g_szServerPort, sizeof(g_szServerPort)); + + new Handle:hostname = FindConVar("hostname"); + decl String:szHostname[256]; + GetConVarString(hostname, szHostname, sizeof(szHostname)); + Duck_UrlEncodeString(g_szServerName, sizeof(g_szServerName), szHostname); + HookConVarChange(hostname, OnCvarHostnameChange); + + decl String:szCustom[256]; + new Handle:hCVARCustom = CreateConVar("WebShortcuts_Custom", "", "Custom String for this server."); + GetConVarString(hCVARCustom, szCustom, sizeof(szCustom)); + Duck_UrlEncodeString(g_szServerCustom, sizeof(g_szServerCustom), szCustom); + HookConVarChange(hCVARCustom, OnCvarCustomChange); + + new iSDKVersion = GuessSDKVersion(); + if (iSDKVersion == SOURCE_SDK_LEFT4DEAD || iSDKVersion == SOURCE_SDK_LEFT4DEAD2) + { + g_iGameMode |= Game_L4D; + new Handle:hGameMode = FindConVar("mp_gamemode"); + decl String:szGamemode[256]; + GetConVarString(hGameMode, szGamemode, sizeof(szGamemode)); + Duck_UrlEncodeString(g_szL4DGameMode, sizeof(g_szL4DGameMode), szGamemode); + HookConVarChange(hGameMode, OnCvarGamemodeChange); + } + + Duck_UrlEncodeString(g_szGameDir, sizeof(g_szGameDir), sGameDir); +} + +public OnMapStart() +{ + decl String:sTempMap[sizeof(g_szCurrentMap)]; + GetCurrentMap(sTempMap, sizeof(sTempMap)); + + Duck_UrlEncodeString(g_szCurrentMap, sizeof(g_szCurrentMap), sTempMap); +} + +stock Duck_DoReplacements(iClient, String:sUrl[256], iUrlBits, String:sTitle[256], iTitleBits) /* Huge thanks to Psychonic */ +{ + if (iUrlBits & Flag_Steam_ID || iTitleBits & Flag_Steam_ID) + { + decl String:sSteamId[64]; + if (GetClientAuthString(iClient, sSteamId, sizeof(sSteamId))) + { + ReplaceString(sSteamId, sizeof(sSteamId), ":", "%3a"); + if (iTitleBits & Flag_Steam_ID) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_STEAM_ID, sSteamId); + if (iUrlBits & Flag_Steam_ID) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_STEAM_ID, sSteamId); + } + else + { + if (iTitleBits & Flag_Steam_ID) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_STEAM_ID, ""); + if (iUrlBits & Flag_Steam_ID) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_STEAM_ID, ""); + } + } + + if (iUrlBits & Flag_User_ID || iTitleBits & Flag_User_ID) + { + decl String:sUserId[16]; + IntToString(GetClientUserId(iClient), sUserId, sizeof(sUserId)); + if (iTitleBits & Flag_User_ID) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_USER_ID, sUserId); + if (iUrlBits & Flag_User_ID) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_USER_ID, sUserId); + } + + if (iUrlBits & Flag_Friend_ID || iTitleBits & Flag_Friend_ID) + { + decl String:sFriendId[64]; + if (GetClientFriendID(iClient, sFriendId, sizeof(sFriendId))) + { + if (iTitleBits & Flag_Friend_ID) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_FRIEND_ID, sFriendId); + if (iUrlBits & Flag_Friend_ID) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_FRIEND_ID, sFriendId); + } + else + { + if (iTitleBits & Flag_Friend_ID) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_FRIEND_ID, ""); + if (iUrlBits & Flag_Friend_ID) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_FRIEND_ID, ""); + } + } + + if (iUrlBits & Flag_Name || iTitleBits & Flag_Name) + { + decl String:sName[MAX_NAME_LENGTH]; + if (GetClientName(iClient, sName, sizeof(sName))) + { + decl String:sEncName[sizeof(sName)*3]; + Duck_UrlEncodeString(sEncName, sizeof(sEncName), sName); + if (iTitleBits & Flag_Name) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_NAME, sEncName); + if (iUrlBits & Flag_Name) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_NAME, sEncName); + } + else + { + if (iTitleBits & Flag_Name) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_NAME, ""); + if (iUrlBits & Flag_Name) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_NAME, ""); + } + } + + if (iUrlBits & Flag_IP || iTitleBits & Flag_IP) + { + decl String:sClientIp[32]; + if (GetClientIP(iClient, sClientIp, sizeof(sClientIp))) + { + if (iTitleBits & Flag_IP) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_IP, sClientIp); + if (iUrlBits & Flag_IP) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_IP, sClientIp); + } + else + { + if (iTitleBits & Flag_IP) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_IP, ""); + if (iUrlBits & Flag_IP) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_IP, ""); + } + } + + if (iUrlBits & Flag_Language || iTitleBits & Flag_Language) + { + decl String:sLanguage[32]; + if (GetClientInfo(iClient, "cl_language", sLanguage, sizeof(sLanguage))) + { + decl String:sEncLanguage[sizeof(sLanguage)*3]; + Duck_UrlEncodeString(sEncLanguage, sizeof(sEncLanguage), sLanguage); + if (iTitleBits & Flag_Language) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_LANGUAGE, sEncLanguage); + if (iUrlBits & Flag_Language) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_LANGUAGE, sEncLanguage); + } + else + { + if (iTitleBits & Flag_Language) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_LANGUAGE, ""); + if (iUrlBits & Flag_Language) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_LANGUAGE, ""); + } + } + + if (iUrlBits & Flag_Rate || iTitleBits & Flag_Rate) + { + decl String:sRate[16]; + if (GetClientInfo(iClient, "rate", sRate, sizeof(sRate))) + { + /* due to iClient's rate being silly, this won't necessarily be all digits */ + decl String:sEncRate[sizeof(sRate)*3]; + Duck_UrlEncodeString(sEncRate, sizeof(sEncRate), sRate); + if (iTitleBits & Flag_Rate) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_RATE, sEncRate); + if (iUrlBits & Flag_Rate) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_RATE, sEncRate); + } + else + { + if (iTitleBits & Flag_Rate) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_RATE, ""); + if (iUrlBits & Flag_Rate) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_RATE, ""); + } + } + + if (iTitleBits & Flag_Server_IP) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_IP, g_szServerIp); + if (iUrlBits & Flag_Server_IP) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_IP, g_szServerIp); + + if (iTitleBits & Flag_Server_Port) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_PORT, g_szServerPort); + if (iUrlBits & Flag_Server_Port) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_PORT, g_szServerPort); + + if (iTitleBits & Flag_Server_Name) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_NAME, g_szServerName); + if (iUrlBits & Flag_Server_Name) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_NAME, g_szServerName); + + if (iTitleBits & Flag_Server_Custom) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_CUSTOM, g_szServerCustom); + if (iUrlBits & Flag_Server_Custom) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_CUSTOM, g_szServerCustom); + + if (IsLeftForDead() && ((iUrlBits & Flag_L4D_GameMode) || (iTitleBits & Flag_L4D_GameMode))) + { + if (iTitleBits & Flag_L4D_GameMode) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_L4D_GAMEMODE, g_szL4DGameMode); + if (iUrlBits & Flag_L4D_GameMode) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_L4D_GAMEMODE, g_szL4DGameMode); + } + + if (iTitleBits & Flag_Current_Map) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_CURRENT_MAP, g_szCurrentMap); + if (iUrlBits & Flag_Current_Map) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_CURRENT_MAP, g_szCurrentMap); + + if (iUrlBits & Flag_Next_Map || iTitleBits & Flag_Next_Map) + { + decl String:szNextMap[PLATFORM_MAX_PATH]; + if (GetNextMap(szNextMap, sizeof(szNextMap))) + { + if (iTitleBits & Flag_Next_Map) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_NEXT_MAP, szNextMap); + if (iUrlBits & Flag_Next_Map) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_NEXT_MAP, szNextMap); + } + else + { + if (iTitleBits & Flag_Next_Map) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_NEXT_MAP, ""); + if (iUrlBits & Flag_Next_Map) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_NEXT_MAP, ""); + } + } + + if (iTitleBits & Flag_GameDir) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_GAMEDIR, g_szGameDir); + if (iUrlBits & Flag_GameDir) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_GAMEDIR, g_szGameDir); + + if (iUrlBits & Flag_CurPlayers || iTitleBits & Flag_CurPlayers) + { + decl String:sCurPlayers[10]; + IntToString(GetClientCount(false), sCurPlayers, sizeof(sCurPlayers)); + if (iTitleBits & Flag_CurPlayers) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_CURPLAYERS, sCurPlayers); + if (iUrlBits & Flag_CurPlayers) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_CURPLAYERS, sCurPlayers); + } + + if (iUrlBits & Flag_MaxPlayers || iTitleBits & Flag_MaxPlayers) + { + decl String:maxplayers[10]; + IntToString(MaxClients, maxplayers, sizeof(maxplayers)); + if (iTitleBits & Flag_MaxPlayers) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_MAXPLAYERS, maxplayers); + if (iUrlBits & Flag_MaxPlayers) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_MAXPLAYERS, maxplayers); + } + +#if defined _steamtools_included + if (iUrlBits & Flag_VACStatus || iTitleBits & Flag_VACStatus) + { + if (g_bSteamTools && Steam_IsVACEnabled()) + { + if (iTitleBits & Flag_VACStatus) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_VACSTATUS, "1"); + if (iUrlBits & Flag_VACStatus) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_VACSTATUS, "1"); + } + else + { + if (iTitleBits & Flag_VACStatus) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_VACSTATUS, "0"); + if (iUrlBits & Flag_VACStatus) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_VACSTATUS, "0"); + } + } + + if (iUrlBits & Flag_Server_Pub_IP || iTitleBits & Flag_Server_Pub_IP) + { + if (g_bSteamTools) + { + decl ip[4]; + decl String:sIPString[16]; + Steam_GetPublicIP(ip); + FormatEx(sIPString, sizeof(sIPString), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); + + if (iTitleBits & Flag_Server_Pub_IP) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_PUB_IP, sIPString); + if (iUrlBits & Flag_Server_Pub_IP) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_PUB_IP, sIPString); + } + else + { + if (iTitleBits & Flag_Server_Pub_IP) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_SERVER_PUB_IP, ""); + if (iUrlBits & Flag_Server_Pub_IP) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_SERVER_PUB_IP, ""); + } + } + + if (iUrlBits & Flag_Steam_ConnStatus || iTitleBits & Flag_Steam_ConnStatus) + { + if (g_bSteamTools && Steam_IsConnected()) + { + if (iTitleBits & Flag_Steam_ConnStatus) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_STEAM_CONNSTATUS, "1"); + if (iUrlBits & Flag_Steam_ConnStatus) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_STEAM_CONNSTATUS, "1"); + } + else + { + if (iTitleBits & Flag_Steam_ConnStatus) + ReplaceString(sTitle, sizeof(sTitle), TOKEN_STEAM_CONNSTATUS, "0"); + if (iUrlBits & Flag_Steam_ConnStatus) + ReplaceString(sUrl, sizeof(sUrl), TOKEN_STEAM_CONNSTATUS, "0"); + } + } +#endif /* _steamtools_included */ +} + +stock bool:GetClientFriendID(client, String:sFriendID[], size) +{ +#if defined _steamtools_included + Steam_GetCSteamIDForClient(client, sFriendID, size); +#else + decl String:sSteamID[64]; + if (!GetClientAuthString(client, sSteamID, sizeof(sSteamID))) + { + sFriendID[0] = '\0'; /* Sanitize incase the return isn't checked. */ + return false; + } + + TrimString(sSteamID); /* Just incase... */ + + if (StrEqual(sSteamID, "STEAM_ID_LAN", false)) + { + sFriendID[0] = '\0'; + return false; + } + + decl String:toks[3][16]; + ExplodeString(sSteamID, ":", toks, sizeof(toks), sizeof(toks[])); + + new iServer = StringToInt(toks[1]); + new iAuthID = StringToInt(toks[2]); + new iFriendID = (iAuthID*2) + 60265728 + iServer; + + if (iFriendID >= 100000000) + { + decl String:temp[12], String:carry[12]; + FormatEx(temp, sizeof(temp), "%d", iFriendID); + FormatEx(carry, 2, "%s", temp); + new icarry = StringToInt(carry[0]); + new upper = 765611979 + icarry; + + FormatEx(temp, sizeof(temp), "%d", iFriendID); + FormatEx(sFriendID, size, "%d%s", upper, temp[1]); + } + else + { + Format(sFriendID, size, "765611979%d", iFriendID); + } + #endif + return true; +} + +Duck_CalcBits(const String:source[], &field) +{ + field = 0; + + FIELD_CHECK(TOKEN_STEAM_ID, Flag_Steam_ID); + FIELD_CHECK(TOKEN_USER_ID, Flag_User_ID); + FIELD_CHECK(TOKEN_FRIEND_ID, Flag_Friend_ID); + FIELD_CHECK(TOKEN_NAME, Flag_Name); + FIELD_CHECK(TOKEN_IP, Flag_IP); + FIELD_CHECK(TOKEN_LANGUAGE, Flag_Language); + FIELD_CHECK(TOKEN_RATE, Flag_Rate); + FIELD_CHECK(TOKEN_SERVER_IP, Flag_Server_IP); + FIELD_CHECK(TOKEN_SERVER_PORT, Flag_Server_Port); + FIELD_CHECK(TOKEN_SERVER_NAME, Flag_Server_Name); + FIELD_CHECK(TOKEN_SERVER_CUSTOM, Flag_Server_Custom); + + if (IsLeftForDead()) + { + FIELD_CHECK(TOKEN_L4D_GAMEMODE, Flag_L4D_GameMode); + } + + FIELD_CHECK(TOKEN_CURRENT_MAP, Flag_Current_Map); + FIELD_CHECK(TOKEN_NEXT_MAP, Flag_Next_Map); + FIELD_CHECK(TOKEN_GAMEDIR, Flag_GameDir); + FIELD_CHECK(TOKEN_CURPLAYERS, Flag_CurPlayers); + FIELD_CHECK(TOKEN_MAXPLAYERS, Flag_MaxPlayers); + +#if defined _steamtools_included + FIELD_CHECK(TOKEN_VACSTATUS, Flag_VACStatus); + FIELD_CHECK(TOKEN_SERVER_PUB_IP, Flag_Server_Pub_IP); + FIELD_CHECK(TOKEN_STEAM_CONNSTATUS, Flag_Steam_ConnStatus); +#endif +} + +/* Courtesy of Mr. Asher Baker */ +stock LongIPToString(ip, String:szBuffer[16]) +{ + FormatEx(szBuffer, sizeof(szBuffer), "%i.%i.%i.%i", (((ip & 0xFF000000) >> 24) & 0xFF), (((ip & 0x00FF0000) >> 16) & 0xFF), (((ip & 0x0000FF00) >> 8) & 0xFF), (((ip & 0x000000FF) >> 0) & 0xFF)); +} + +/* loosely based off of PHP's urlencode */ +stock Duck_UrlEncodeString(String:output[], size, const String:input[]) +{ + new icnt = 0; + new ocnt = 0; + + for(;;) + { + if (ocnt == size) + { + output[ocnt-1] = '\0'; + return; + } + + new c = input[icnt]; + if (c == '\0') + { + output[ocnt] = '\0'; + return; + } + + // Use '+' instead of '%20'. + // Still follows spec and takes up less of our limited buffer. + if (c == ' ') + { + output[ocnt++] = '+'; + } + else if ((c < '0' && c != '-' && c != '.') || + (c < 'A' && c > '9') || + (c > 'Z' && c < 'a' && c != '_') || + (c > 'z' && c != '~')) + { + output[ocnt++] = '%'; + Format(output[ocnt], size-strlen(output[ocnt]), "%x", c); + ocnt += 2; + } + else + { + output[ocnt++] = c; + } + + icnt++; + } +} + +public OnCvarHostnameChange(Handle:convar, const String:oldValue[], const String:newValue[]) +{ + Duck_UrlEncodeString(g_szServerName, sizeof(g_szServerName), newValue); +} + +public OnCvarGamemodeChange(Handle:convar, const String:oldValue[], const String:newValue[]) +{ + Duck_UrlEncodeString(g_szL4DGameMode, sizeof(g_szL4DGameMode), newValue); +} + +public OnCvarCustomChange(Handle:convar, const String:oldValue[], const String:newValue[]) +{ + Duck_UrlEncodeString(g_szServerCustom, sizeof(g_szServerCustom), newValue); +} \ No newline at end of file diff --git a/_entWatch4/scripting/entWatch-glows.sp b/_entWatch4/scripting/entWatch-glows.sp deleted file mode 100644 index 1be50545..00000000 --- a/_entWatch4/scripting/entWatch-glows.sp +++ /dev/null @@ -1,31 +0,0 @@ -//==================================================================================================== -// -// Name: [entWatch] Beacons -// Author: zaCade & Prometheum -// Description: Handle the beacons of [entWatch] -// -//==================================================================================================== -#include - -#pragma newdecls required - -#include -#include - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Plugin myinfo = -{ - name = "[entWatch] Beacons", - author = "zaCade & Prometheum", - description = "Handle the beacons of [entWatch]", - version = "4.0.0" -}; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnPluginStart() -{ -} \ No newline at end of file diff --git a/_entWatch4/scripting/entWatch-interface.sp b/_entWatch4/scripting/entWatch-interface.sp deleted file mode 100644 index e80fe95e..00000000 --- a/_entWatch4/scripting/entWatch-interface.sp +++ /dev/null @@ -1,119 +0,0 @@ -//==================================================================================================== -// -// Name: [entWatch] Interface -// Author: zaCade & Prometheum -// Description: Handle the interface of [entWatch] -// -//==================================================================================================== -#include - -#pragma newdecls required - -#include -#include -#include - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Plugin myinfo = -{ - name = "[entWatch] Interface", - author = "zaCade & Prometheum", - description = "Handle the interface of [entWatch]", - version = "4.0.0" -}; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnGameFrame() -{ - if (EW_GetItemCount()) - { - char sHUDFormat[250]; - char sHUDBuffer[64]; - - for (int index; index < EW_GetItemCount(); index++) - { - any itemArray[items]; - EW_GetItemArray(index, itemArray, sizeof(itemArray)); - - if (itemArray[item_display] & DISPLAY_HUD) - { - if (itemArray[item_owned] && itemArray[item_owner] >= 0) - { - switch(itemArray[item_mode]) - { - case(1): - { - if (itemArray[item_nextuse] > RoundToCeil(GetEngineTime())) - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d]: %N", itemArray[item_short], itemArray[item_nextuse] - RoundToCeil(GetEngineTime()), itemArray[item_owner]); - } - else - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%s]: %N", itemArray[item_short], "R", itemArray[item_owner]); - } - } - case(2): - { - if (itemArray[item_uses] < itemArray[item_maxuses]) - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d/%d]: %N", itemArray[item_short], itemArray[item_uses], itemArray[item_maxuses], itemArray[item_owner]); - } - else - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%s]: %N", itemArray[item_short], "D", itemArray[item_owner]); - } - } - case(3): - { - if (itemArray[item_uses] < itemArray[item_maxuses]) - { - if (itemArray[item_nextuse] > RoundToCeil(GetEngineTime())) - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d]: %N", itemArray[item_short], itemArray[item_nextuse] - RoundToCeil(GetEngineTime()), itemArray[item_owner]); - } - else - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d/%d]: %N", itemArray[item_short], itemArray[item_uses], itemArray[item_maxuses], itemArray[item_owner]); - } - } - else - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%s]: %N", itemArray[item_short], "D", itemArray[item_owner]); - } - } - case(4): - { - if (itemArray[item_nextuse] > RoundToCeil(GetEngineTime())) - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d]: %N", itemArray[item_short], itemArray[item_nextuse] - RoundToCeil(GetEngineTime()), itemArray[item_owner]); - } - else - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%d/%d]: %N", itemArray[item_short], itemArray[item_uses], itemArray[item_maxuses], itemArray[item_owner]); - } - } - default: - { - Format(sHUDBuffer, sizeof(sHUDBuffer), "%s [%s]: %N", itemArray[item_short], "N/A", itemArray[item_owner]); - } - } - - if (strlen(sHUDFormat) + strlen(sHUDBuffer) <= sizeof(sHUDFormat) - 2) - { - Format(sHUDFormat, sizeof(sHUDFormat), "%s\n%s", sHUDFormat, sHUDBuffer); - } - else break; - } - } - } - - Handle hMessage = StartMessageAll("KeyHintText"); - BfWriteByte(hMessage, 1); - BfWriteString(hMessage, sHUDFormat); - EndMessage(); - } -} \ No newline at end of file diff --git a/_entWatch4/scripting/entWatch-messages.sp b/_entWatch4/scripting/entWatch-messages.sp deleted file mode 100644 index 721633e2..00000000 --- a/_entWatch4/scripting/entWatch-messages.sp +++ /dev/null @@ -1,126 +0,0 @@ -//==================================================================================================== -// -// Name: [entWatch] Messages -// Author: zaCade & Prometheum -// Description: Handle the chat messages of [entWatch] -// -//==================================================================================================== -#include -#include - -#pragma newdecls required - -#include -#include -#include - -#define MESSAGEFORMAT "\x07%s[entWatch] \x07%s%s \x07%s(\x07%s%s\x07%s) %t \x07%s%s" - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Plugin myinfo = -{ - name = "[entWatch] Messages", - author = "zaCade & Prometheum", - description = "Handle the chat messages of [entWatch]", - version = "4.0.0" -}; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnPluginStart() -{ - LoadTranslations("entWatch.messages.phrases"); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDrop(any[] itemArray, int client, int index) -{ - if (itemArray[item_display] & DISPLAY_CHAT) - { - char sName[32]; - GetClientName(client, sName, sizeof(sName)); - - char sAuth[32]; - GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - - CRemoveTags(sName, sizeof(sName)); - CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sName, "E562BA", "B2B2B2", sAuth, "E562BA", "Item Drop", itemArray[item_color], itemArray[item_name]); - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDeath(any[] itemArray, int client, int index) -{ - if (itemArray[item_display] & DISPLAY_CHAT) - { - char sName[32]; - GetClientName(client, sName, sizeof(sName)); - - char sAuth[32]; - GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - - CRemoveTags(sName, sizeof(sName)); - CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sName, "F1B567", "B2B2B2", sAuth, "F1B567", "Item Death", itemArray[item_color], itemArray[item_name]); - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemPickup(any[] itemArray, int client, int index) -{ - if (itemArray[item_display] & DISPLAY_CHAT) - { - char sName[32]; - GetClientName(client, sName, sizeof(sName)); - - char sAuth[32]; - GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - - CRemoveTags(sName, sizeof(sName)); - CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sName, "C9EF66", "B2B2B2", sAuth, "C9EF66", "Item Pickup", itemArray[item_color], itemArray[item_name]); - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemDisconnect(any[] itemArray, int client, int index) -{ - if (itemArray[item_display] & DISPLAY_CHAT) - { - char sName[32]; - GetClientName(client, sName, sizeof(sName)); - - char sAuth[32]; - GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - - CRemoveTags(sName, sizeof(sName)); - CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sName, "F1B567", "B2B2B2", sAuth, "F1B567", "Item Disconnect", itemArray[item_color], itemArray[item_name]); - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void EW_OnClientItemActivate(any[] itemArray, int client, int index) -{ - if (itemArray[item_display] & DISPLAY_USE) - { - char sName[32]; - GetClientName(client, sName, sizeof(sName)); - - char sAuth[32]; - GetClientAuthId(client, AuthId_Steam2, sAuth, sizeof(sAuth)); - - CRemoveTags(sName, sizeof(sName)); - CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sName, "67ADDF", "B2B2B2", sAuth, "67ADDF", "Item Activate", itemArray[item_color], itemArray[item_name]); - } -} \ No newline at end of file diff --git a/_entWatch4/scripting/entWatch-tools.sp b/_entWatch4/scripting/entWatch-tools.sp deleted file mode 100644 index 68781deb..00000000 --- a/_entWatch4/scripting/entWatch-tools.sp +++ /dev/null @@ -1,31 +0,0 @@ -//==================================================================================================== -// -// Name: [entWatch] Tools -// Author: zaCade & Prometheum -// Description: Handle the tools of [entWatch] -// -//==================================================================================================== -#include - -#pragma newdecls required - -#include -#include - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public Plugin myinfo = -{ - name = "[entWatch] Tools", - author = "zaCade & Prometheum", - description = "Handle the tools of [entWatch]", - version = "4.0.0" -}; - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public void OnPluginStart() -{ -} \ No newline at end of file diff --git a/_entWatch4/scripting/include/entWatch4.inc b/_entWatch4/scripting/include/entWatch4.inc deleted file mode 100644 index de02b382..00000000 --- a/_entWatch4/scripting/include/entWatch4.inc +++ /dev/null @@ -1,31 +0,0 @@ -#if defined entWatch_included - #endinput -#endif - -#define entWatch_included - -#define DISPLAY_CHAT (1 << 0) -#define DISPLAY_HUD (1 << 1) -#define DISPLAY_USE (1 << 2) - -enum items -{ - String:item_name[32], - String:item_short[32], - String:item_color[32], - String:item_filter[32], - bool:item_owned, - item_buttonid, - item_weaponid, - item_triggerid, - item_owner, - item_button, - item_weapon, - item_trigger, - item_display, - item_mode, - item_uses, - item_maxuses, - item_nextuse, - item_cooldown, -}; \ No newline at end of file diff --git a/_entWatch4/scripting/include/entWatch_core.inc b/_entWatch4/scripting/include/entWatch_core.inc deleted file mode 100644 index b160d8cc..00000000 --- a/_entWatch4/scripting/include/entWatch_core.inc +++ /dev/null @@ -1,40 +0,0 @@ -#if defined entWatch_core_included - #endinput -#endif - -#define entWatch_core_included - -public SharedPlugin __pl_entWatch_core = -{ - name = "entWatch-core", - file = "entWatch-core.smx", - - #if defined REQUIRE_PLUGIN - required = 1 - #else - required = 0 - #endif -}; - -#if !defined REQUIRE_PLUGIN - public void __pl_entWatch_core_SetNTVOptional() - { - MarkNativeAsOptional("EW_GetItemCount"); - MarkNativeAsOptional("EW_GetItemArray"); - MarkNativeAsOptional("EW_SetItemArray"); - } -#endif - -native int EW_GetItemCount(); - -native void EW_GetItemArray(int index, any[] itemArray, int size); -native void EW_SetItemArray(int index, any[] itemArray, int size); - -forward void EW_OnClientItemDrop(any[] itemArray, int client, int index); -forward void EW_OnClientItemDeath(any[] itemArray, int client, int index); -forward void EW_OnClientItemPickup(any[] itemArray, int client, int index); -forward void EW_OnClientItemActivate(any[] itemArray, int client, int index); -forward void EW_OnClientItemDisconnect(any[] itemArray, int client, int index); - -forward Action EW_OnClientItemCanPickup(any[] itemArray, int client, int index); -forward Action EW_OnClientItemCanActivate(any[] itemArray, int client, int index); \ No newline at end of file diff --git a/advertisements/scripting/advertisements.sp b/advertisements/scripting/advertisements.sp new file mode 100644 index 00000000..c677c6e6 --- /dev/null +++ b/advertisements/scripting/advertisements.sp @@ -0,0 +1,317 @@ +#include +#include +#undef REQUIRE_PLUGIN +#include +#include "include/topcolors.sp" + +#pragma newdecls required +#pragma semicolon 1 + +#define PL_VERSION "2.0.2" +#define UPDATE_URL "http://ErikMinekus.github.io/sm-advertisements/update.txt" + +public Plugin myinfo = +{ + name = "Advertisements", + author = "Tsunami", + description = "Display advertisements", + version = PL_VERSION, + url = "http://www.tsunami-productions.nl" +}; + + +/** + * Globals + */ +KeyValues g_hAdvertisements; +ConVar g_hEnabled; +ConVar g_hFile; +ConVar g_hInterval; +Handle g_hTimer; + + +/** + * Plugin Forwards + */ +public void OnPluginStart() +{ + CreateConVar("sm_advertisements_version", PL_VERSION, "Display advertisements", FCVAR_NOTIFY); + g_hEnabled = CreateConVar("sm_advertisements_enabled", "1", "Enable/disable displaying advertisements."); + g_hFile = CreateConVar("sm_advertisements_file", "advertisements.txt", "File to read the advertisements from."); + g_hInterval = CreateConVar("sm_advertisements_interval", "30", "Amount of seconds between advertisements."); + + g_hFile.AddChangeHook(ConVarChange_File); + g_hInterval.AddChangeHook(ConVarChange_Interval); + + RegServerCmd("sm_advertisements_reload", Command_ReloadAds, "Reload the advertisements"); + + AddTopColors(); + + if (LibraryExists("updater")) { + Updater_AddPlugin(UPDATE_URL); + } +} + +public void OnMapStart() +{ + ParseAds(); + + g_hTimer = CreateTimer(g_hInterval.IntValue * 1.0, Timer_DisplayAd, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + +public void OnLibraryAdded(const char[] name) +{ + if (StrEqual(name, "updater")) { + Updater_AddPlugin(UPDATE_URL); + } +} + +public void ConVarChange_File(ConVar convar, const char[] oldValue, const char[] newValue) +{ + ParseAds(); +} + +public void ConVarChange_Interval(ConVar convar, const char[] oldValue, const char[] newValue) +{ + if (g_hTimer) { + KillTimer(g_hTimer); + } + + g_hTimer = CreateTimer(g_hInterval.IntValue * 1.0, Timer_DisplayAd, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE); +} + + +/** + * Commands + */ +public Action Command_ReloadAds(int args) +{ + ParseAds(); + return Plugin_Handled; +} + + +/** + * Menu Handlers + */ +public int Handler_DoNothing(Menu menu, MenuAction action, int param1, int param2) {} + + +/** + * Timers + */ +public Action Timer_DisplayAd(Handle timer) +{ + if (!g_hEnabled.BoolValue) { + return; + } + + char sCenter[1024], sChat[1024], sHint[1024], sMenu[1024], sTop[1024], sFlags[16]; + g_hAdvertisements.GetString("center", sCenter, sizeof(sCenter)); + g_hAdvertisements.GetString("chat", sChat, sizeof(sChat)); + g_hAdvertisements.GetString("hint", sHint, sizeof(sHint)); + g_hAdvertisements.GetString("menu", sMenu, sizeof(sMenu)); + g_hAdvertisements.GetString("top", sTop, sizeof(sTop)); + g_hAdvertisements.GetString("flags", sFlags, sizeof(sFlags), "none"); + int iFlags = ReadFlagString(sFlags); + bool bAdmins = StrEqual(sFlags, ""), + bFlags = !StrEqual(sFlags, "none"); + + if (sCenter[0]) { + ProcessVariables(sCenter); + CRemoveColors(sCenter, sizeof(sCenter)); + + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i) && + ((!bAdmins && !(bFlags && (GetUserFlagBits(i) & (iFlags|ADMFLAG_ROOT)))) || + (bAdmins && (GetUserFlagBits(i) & (ADMFLAG_GENERIC|ADMFLAG_ROOT))))) { + PrintCenterText(i, sCenter); + + DataPack hCenterAd; + CreateDataTimer(1.0, Timer_CenterAd, hCenterAd, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); + hCenterAd.WriteCell(i); + hCenterAd.WriteString(sCenter); + } + } + } + if (sHint[0]) { + ProcessVariables(sHint); + CRemoveColors(sHint, sizeof(sHint)); + + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i) && + ((!bAdmins && !(bFlags && (GetUserFlagBits(i) & (iFlags|ADMFLAG_ROOT)))) || + (bAdmins && (GetUserFlagBits(i) & (ADMFLAG_GENERIC|ADMFLAG_ROOT))))) { + PrintHintText(i, sHint); + } + } + } + if (sMenu[0]) { + ProcessVariables(sMenu); + CRemoveColors(sMenu, sizeof(sMenu)); + + Panel hPl = new Panel(); + hPl.DrawText(sMenu); + hPl.CurrentKey = 10; + + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i) && + ((!bAdmins && !(bFlags && (GetUserFlagBits(i) & (iFlags|ADMFLAG_ROOT)))) || + (bAdmins && (GetUserFlagBits(i) & (ADMFLAG_GENERIC|ADMFLAG_ROOT))))) { + hPl.Send(i, Handler_DoNothing, 10); + } + } + + delete hPl; + } + if (sChat[0]) { + bool bTeamColor = StrContains(sChat, "{teamcolor}", false) != -1; + + ProcessVariables(sChat); + CProcessVariables(sChat, sizeof(sChat)); + CAddWhiteSpace(sChat, sizeof(sChat)); + + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i) && + ((!bAdmins && !(bFlags && (GetUserFlagBits(i) & (iFlags|ADMFLAG_ROOT)))) || + (bAdmins && (GetUserFlagBits(i) & (ADMFLAG_GENERIC|ADMFLAG_ROOT))))) { + if (bTeamColor) { + CSayText2(i, sChat, i); + } else { + PrintToChat(i, sChat); + } + } + } + } + if (sTop[0]) { + int iStart = 0, + aColor[4] = {255, 255, 255, 255}; + + ParseTopColor(sTop, iStart, aColor); + ProcessVariables(sTop[iStart]); + + KeyValues hKv = new KeyValues("Stuff", "title", sTop[iStart]); + hKv.SetColor4("color", aColor); + hKv.SetNum("level", 1); + hKv.SetNum("time", 10); + + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i) && + ((!bAdmins && !(bFlags && (GetUserFlagBits(i) & (iFlags|ADMFLAG_ROOT)))) || + (bAdmins && (GetUserFlagBits(i) & (ADMFLAG_GENERIC|ADMFLAG_ROOT))))) { + CreateDialog(i, hKv, DialogType_Msg); + } + } + + delete hKv; + } + + if (!g_hAdvertisements.GotoNextKey()) { + g_hAdvertisements.Rewind(); + g_hAdvertisements.GotoFirstSubKey(); + } +} + +public Action Timer_CenterAd(Handle timer, DataPack pack) +{ + char sCenter[1024]; + static int iCount = 0; + + pack.Reset(); + int iClient = pack.ReadCell(); + pack.ReadString(sCenter, sizeof(sCenter)); + + if (!IsClientInGame(iClient) || ++iCount >= 5) { + iCount = 0; + return Plugin_Stop; + } + + PrintCenterText(iClient, sCenter); + return Plugin_Continue; +} + + +/** + * Stocks + */ +void ParseAds() +{ + delete g_hAdvertisements; + g_hAdvertisements = CreateKeyValues("Advertisements"); + + char sFile[64], sPath[PLATFORM_MAX_PATH]; + g_hFile.GetString(sFile, sizeof(sFile)); + BuildPath(Path_SM, sPath, sizeof(sPath), "configs/%s", sFile); + + if (!FileExists(sPath)) { + SetFailState("File Not Found: %s", sPath); + } + + g_hAdvertisements.ImportFromFile(sPath); + g_hAdvertisements.GotoFirstSubKey(); +} + +void ProcessVariables(char sText[1024]) +{ + char sBuffer[64]; + if (StrContains(sText, "\\n") != -1) { + Format(sBuffer, sizeof(sBuffer), "%c", 13); + ReplaceString(sText, sizeof(sText), "\\n", sBuffer); + } + + if (StrContains(sText, "{currentmap}", false) != -1) { + GetCurrentMap(sBuffer, sizeof(sBuffer)); + ReplaceString(sText, sizeof(sText), "{currentmap}", sBuffer, false); + } + + if (StrContains(sText, "{date}", false) != -1) { + FormatTime(sBuffer, sizeof(sBuffer), "%m/%d/%Y"); + ReplaceString(sText, sizeof(sText), "{date}", sBuffer, false); + } + + if (StrContains(sText, "{time}", false) != -1) { + FormatTime(sBuffer, sizeof(sBuffer), "%I:%M:%S%p"); + ReplaceString(sText, sizeof(sText), "{time}", sBuffer, false); + } + + if (StrContains(sText, "{time24}", false) != -1) { + FormatTime(sBuffer, sizeof(sBuffer), "%H:%M:%S"); + ReplaceString(sText, sizeof(sText), "{time24}", sBuffer, false); + } + + if (StrContains(sText, "{timeleft}", false) != -1) { + int iMins, iSecs, iTimeLeft; + if (GetMapTimeLeft(iTimeLeft) && iTimeLeft > 0) { + iMins = iTimeLeft / 60; + iSecs = iTimeLeft % 60; + } + + Format(sBuffer, sizeof(sBuffer), "%d:%02d", iMins, iSecs); + ReplaceString(sText, sizeof(sText), "{timeleft}", sBuffer, false); + } + + ConVar hConVar; + char sConVar[64], sSearch[64], sReplace[64]; + int iEnd = -1, iStart = StrContains(sText, "{"), iStart2; + while (iStart != -1) { + iEnd = StrContains(sText[iStart + 1], "}"); + if (iEnd == -1) { + break; + } + + strcopy(sConVar, iEnd + 1, sText[iStart + 1]); + Format(sSearch, sizeof(sSearch), "{%s}", sConVar); + + if ((hConVar = FindConVar(sConVar))) { + hConVar.GetString(sReplace, sizeof(sReplace)); + ReplaceString(sText, sizeof(sText), sSearch, sReplace, false); + } + + iStart2 = StrContains(sText[iStart + 1], "{"); + if (iStart2 == -1) { + break; + } + + iStart += iStart2 + 1; + } +} \ No newline at end of file diff --git a/advertisements/scripting/include/colorvariables.inc b/advertisements/scripting/include/colorvariables.inc new file mode 100644 index 00000000..0af547cc --- /dev/null +++ b/advertisements/scripting/include/colorvariables.inc @@ -0,0 +1,1032 @@ +#if defined _colorvariables_included + #endinput +#endif +#define _colorvariables_included "1.3" + +// Author: Raska aka KissLick + +// ---------------------------------------------------------------------------------------- +#define _CV_MAX_MESSAGE_LENGTH 1024 +#define _CV_MAX_VARIABLE_REDIRECTS 10 +#define _CV_CONFIG_DIRECTORY "configs/colorvariables" + +static bool:g_bInit = false; +static Handle:g_hColors = INVALID_HANDLE; +static String:g_sConfigGlobal[PLATFORM_MAX_PATH]; +static String:g_sConfig[PLATFORM_MAX_PATH]; +static String:g_sChatPrefix[64] = ""; + +static bool:g_bIgnorePrefix = false; +static g_iAuthor; +static bool:g_bSkipPlayers[MAXPLAYERS + 1] = {false, ...}; + +static Handle:g_hForwardedVariable; + +enum triple { + unknown = -1, + yes = true, + no = false +} +static triple:g_IsSource2009 = unknown; +// ---------------------------------------------------------------------------------------- + +forward COnForwardedVariable(String:sCode[], String:sData[], iDataSize, String:sColor[], iColorSize); + +stock CSetPrefix(const String:sPrefix[], any:...) +{ + VFormat(g_sChatPrefix, sizeof(g_sChatPrefix), sPrefix, 2); +} + +stock CSavePrefix(const String:sPrefix[], any:...) +{ + new String:m_sPrefix[64]; + VFormat(m_sPrefix, sizeof(m_sPrefix), sPrefix, 2); + + CAddVariable("&prefix", m_sPrefix, true); +} + +stock CSkipNextPrefix() +{ + g_bIgnorePrefix = true; +} + +stock CSetNextAuthor(iClient) +{ + if (iClient < 1 || iClient > MaxClients || !IsClientInGame(iClient)) { + ThrowError("Invalid client index %i", iClient); + } + g_iAuthor = iClient; +} + +stock CSkipNextClient(iClient) +{ + if (iClient < 1 || iClient > MaxClients) { + ThrowError("Invalid client index %i", iClient); + } + g_bSkipPlayers[iClient] = true; +} + +stock CPrintToChat(iClient, const String:sMessage[], any:...) +{ + if (iClient < 1 || iClient > MaxClients) { + ThrowError("Invalid client index %d", iClient); + } + + if (!IsClientInGame(iClient)) { + ThrowError("Client %d is not in game", iClient); + } + + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 3); + + AddPrefixAndDefaultColor(sBuffer, sizeof(sBuffer)); + g_bIgnorePrefix = false; + + CProcessVariables(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + + SendPlayerMessage(iClient, sBuffer, g_iAuthor); + g_iAuthor = 0; +} + +stock CPrintToChatAll(const String:sMessage[], any:...) +{ + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + + for (new iClient = 1; iClient <= MaxClients; iClient++) { + if (!IsClientInGame(iClient) || g_bSkipPlayers[iClient]) { + g_bSkipPlayers[iClient] = false; + continue; + } + + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 2); + + AddPrefixAndDefaultColor(sBuffer, sizeof(sBuffer)); + g_bIgnorePrefix = false; + + CProcessVariables(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + + SendPlayerMessage(iClient, sBuffer, g_iAuthor); + } + g_iAuthor = 0; +} + +stock CPrintToChatTeam(iTeam, const String:sMessage[], any:...) +{ + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + + for (new iClient = 1; iClient <= MaxClients; iClient++) { + if (!IsClientInGame(iClient) || GetClientTeam(iClient) != iTeam || g_bSkipPlayers[iClient]) { + g_bSkipPlayers[iClient] = false; + continue; + } + + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 3); + + AddPrefixAndDefaultColor(sBuffer, sizeof(sBuffer)); + g_bIgnorePrefix = false; + + CProcessVariables(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + + SendPlayerMessage(iClient, sBuffer, g_iAuthor); + } + g_iAuthor = 0; +} + +stock CPrintToChatAdmins(iBitFlags, const String:sMessage[], any:...) +{ + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + new AdminId:iAdminID; + + for (new iClient = 1; iClient <= MaxClients; iClient++) { + if (!IsClientInGame(iClient) || GetClientTeam(iClient) != iTeam || g_bSkipPlayers[iClient]) { + g_bSkipPlayers[iClient] = false; + continue; + } + + iAdminID = GetUserAdmin(iClient); + if (iAdminID == INVALID_ADMIN_ID || GetAdminFlags(iAdminID, Access_Effective) ~ iBitFlags) { + continue; + } + + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 3); + + AddPrefixAndDefaultColor(sBuffer, sizeof(sBuffer)); + g_bIgnorePrefix = false; + + CProcessVariables(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + + SendPlayerMessage(iClient, sBuffer, g_iAuthor); + } + g_iAuthor = 0; +} + +stock CReplyToCommand(iClient, const String:sMessage[], any:...) +{ + if (iClient < 0 || iClient > MaxClients) { + ThrowError("Invalid client index %d", iClient); + } + + if (iClient != 0 && !IsClientInGame(iClient)) { + ThrowError("Client %d is not in game", iClient); + } + + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 3); + + AddPrefixAndDefaultColor(sBuffer, sizeof(sBuffer), "reply2cmd"); + g_bIgnorePrefix = false; + + if (GetCmdReplySource() == SM_REPLY_TO_CONSOLE) { + CRemoveColors(sBuffer, sizeof(sBuffer)); + PrintToConsole(iClient, "%s", sBuffer); + } else { + CPrintToChat(iClient, "%s", sBuffer); + } +} + +stock CShowActivity(iClient, const String:sMessage[], any:...) +{ + if (iClient < 0 || iClient > MaxClients) { + ThrowError("Invalid client index %d", iClient); + } + + if (iClient != 0 && !IsClientInGame(iClient)) { + ThrowError("Client %d is not in game", iClient); + } + + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH]; + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 3); + Format(sBuffer, sizeof(sBuffer), "{showactivity}%s", sBuffer); + CProcessVariables(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + + ShowActivity(iClient, "%s", sBuffer); +} + +stock CShowActivityEx(iClient, const String:sTag[], const String:sMessage[], any:...) +{ + if (iClient < 0 || iClient > MaxClients) { + ThrowError("Invalid client index %d", iClient); + } + + if (iClient != 0 && !IsClientInGame(iClient)) { + ThrowError("Client %d is not in game", iClient); + } + + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH], String:sBufferTag[_CV_MAX_MESSAGE_LENGTH]; + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 4); + Format(sBuffer, sizeof(sBuffer), "{showactivity}%s", sBuffer); + CProcessVariables(sBuffer, sizeof(sBuffer)); + Format(sBufferTag, sizeof(sBufferTag), "{prefix}%s", sTag); + CProcessVariables(sBufferTag, sizeof(sBufferTag)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBufferTag, sizeof(sBufferTag)); + + ShowActivityEx(iClient, sBufferTag, " %s", sBuffer); +} + +stock CShowActivity2(iClient, const String:sTag[], const String:sMessage[], any:...) +{ + if (iClient < 0 || iClient > MaxClients) { + ThrowError("Invalid client index %d", iClient); + } + + if (iClient != 0 && !IsClientInGame(iClient)) { + ThrowError("Client %d is not in game", iClient); + } + + decl String:sBuffer[_CV_MAX_MESSAGE_LENGTH], String:sBufferTag[_CV_MAX_MESSAGE_LENGTH]; + SetGlobalTransTarget(iClient); + VFormat(sBuffer, sizeof(sBuffer), sMessage, 4); + Format(sBuffer, sizeof(sBuffer), "{showactivity}%s", sBuffer); + CProcessVariables(sBuffer, sizeof(sBuffer)); + Format(sBufferTag, sizeof(sBufferTag), "{prefix}%s", sTag); + CProcessVariables(sBufferTag, sizeof(sBufferTag)); + CAddWhiteSpace(sBuffer, sizeof(sBuffer)); + CAddWhiteSpace(sBufferTag, sizeof(sBufferTag)); + + ShowActivityEx(iClient, sBufferTag, " %s", sBuffer); +} + +stock CAddVariable(String:sName[], String:sValue[], bool:bOnlySaveToConfig = false) +{ + if (Init()) { + if (!FileExists(g_sConfig)) { + LogError("Cannot add color variable to '%s' - file doesn't exist!", g_sConfig); + return; + } + + new Handle:hKV = CreateKeyValues("colorvariables"); + + if (!FileToKeyValues(hKV, g_sConfig)) { + delete hKV; + LogError("Cannot open file (for adding color variable) '%s' !", g_sConfig); + return; + } + + if (!KvJumpToKey(hKV, sName)) { + StringToLower(sName); + KvSetString(hKV, sName, sValue); + + if (!bOnlySaveToConfig) { + new Handle:hRedirect = CreateArray(64); + PushArrayString(hRedirect, sName); + SetTrieString(g_hColors, sName, sValue); + SolveRedirects(g_hColors, hRedirect); + delete hRedirect; + } + } + + KvRewind(hKV); + KeyValuesToFile(hKV, g_sConfig); + delete hKV; + } +} + +stock CLoadPluginConfig(const String:sPluginName[], bool:bAllowPrefix = true) +{ + if (Init()) { + new String:sConfig[PLATFORM_MAX_PATH]; + strcopy(sConfig, sizeof(sConfig), sPluginName); + ReplaceStringEx(sConfig, sizeof(sConfig), ".smx", ""); + BuildPath(Path_SM, sConfig, sizeof(sConfig), "%s/plugin.%s.cfg", _CV_CONFIG_DIRECTORY, sConfig); + + if (!FileExists(sConfig)) { + LogError("Cannot load color variables from file '%s' - file doesn't exist!", sConfig); + return; + } + + new Handle:hRedirect = CreateArray(64); + LoadConfigFile(g_hColors, sConfig, hRedirect, bAllowPrefix); + SolveRedirects(g_hColors, hRedirect); + delete hRedirect; + } +} + +stock CLoadPluginVariables(const String:sPluginName[], const String:sVariables[][], iVariablesCount, bool:bAllowPrefix = true) +{ + if (Init() && iVariablesCount > 0) { + new String:sConfig[PLATFORM_MAX_PATH]; + strcopy(sConfig, sizeof(sConfig), sPluginName); + ReplaceStringEx(sConfig, sizeof(sConfig), ".smx", ""); + BuildPath(Path_SM, sConfig, sizeof(sConfig), "%s/plugin.%s.cfg", _CV_CONFIG_DIRECTORY, sConfig); + + if (!FileExists(sConfig)) { + LogError("Cannot load color variables from file '%s' - file doesn't exist!", sConfig); + return; + } + + new Handle:hVariables = CreateTrie(); + new Handle:hRedirect = CreateArray(64); + LoadConfigFile(hVariables, sConfig, hRedirect, bAllowPrefix); + SolveRedirects(hVariables, hRedirect); + ClearArray(hRedirect); + + new String:sCode[64], String:sColor[64]; + + for (new i = 0; i < iVariablesCount; i++) { + strcopy(sCode, sizeof(sCode), sVariables[i]); + StringToLower(sCode); + + if (GetTrieString(hVariables, sCode, sColor, sizeof(sColor))) { + SetTrieString(g_hColors, sCode, sColor); + PushArrayString(hRedirect, sCode); + } + } + + SolveRedirects(g_hColors, hRedirect); + delete hRedirect; + delete hVariables; + } +} + +stock CRemoveColors(String:sMsg[], iSize) +{ + CProcessVariables(sMsg, iSize, true); +} + +stock CProcessVariables(String:sMsg[], iSize, bool:bRemoveColors = false) +{ + if (!Init()) { + return; + } + + new String:sOut[iSize], String:sCode[iSize], String:sColor[iSize]; + new iOutPos = 0, iCodePos = -1; + new iMsgLen = strlen(sMsg); + + for (new i = 0; i < iMsgLen; i++) { + if (sMsg[i] == '{') { + iCodePos = 0; + } + + if (iCodePos > -1) { + sCode[iCodePos] = sMsg[i]; + sCode[iCodePos + 1] = '\0'; + + if (sMsg[i] == '}' || i == iMsgLen - 1) { + strcopy(sCode, strlen(sCode) - 1, sCode[1]); + StringToLower(sCode); + + if (CGetColor(sCode, sColor, iSize)) { + if (!bRemoveColors) { + StrCat(sOut, iSize, sColor); + iOutPos += strlen(sColor); + } + } else { + Format(sOut, iSize, "%s{%s}", sOut, sCode); + iOutPos += strlen(sCode) + 2; + } + + iCodePos = -1; + strcopy(sCode, iSize, ""); + strcopy(sColor, iSize, ""); + } else { + iCodePos++; + } + + continue; + } + + sOut[iOutPos] = sMsg[i]; + iOutPos++; + sOut[iOutPos] = '\0'; + } + + strcopy(sMsg, iSize, sOut); +} + +stock bool:CGetColor(const String:sName[], String:sColor[], iColorSize) +{ + if (sName[0] == '\0') + return false; + + if (sName[0] == '@') { + new iSpace; + new String:sData[64], String:m_sName[64]; + strcopy(m_sName, sizeof(m_sName), sName[1]); + + if ((iSpace = FindCharInString(m_sName, ' ')) != -1 && (iSpace + 1 < strlen(m_sName))) { + strcopy(m_sName, iSpace + 1, m_sName); + strcopy(sData, sizeof(sData), m_sName[iSpace + 1]); + } + + Call_StartForward(g_hForwardedVariable); + Call_PushString(m_sName); + Call_PushStringEx(sData, sizeof(sData), SM_PARAM_STRING_UTF8|SM_PARAM_STRING_COPY, 0); + Call_PushCell(sizeof(sData)); + Call_PushStringEx(sColor, iColorSize, SM_PARAM_STRING_UTF8|SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); + Call_PushCell(iColorSize); + Call_Finish(); + + if (sColor[0] != '\0') { + return true; + } + + } else if (sName[0] == '#') { + if (strlen(sName) == 7) { + Format(sColor, iColorSize, "\x07%s", sName[1]); + return true; + } + if (strlen(sName) == 9) { + Format(sColor, iColorSize, "\x08%s", sName[1]); + return true; + } + } else if (StrContains(sName, "player ", false) == 0 && strlen(sName) > 7) { + new iClient = StringToInt(sName[7]); + + if (iClient < 1 || iClient > MaxClients || !IsClientInGame(iClient)) { + strcopy(sColor, iColorSize, "\x01"); + LogError("Invalid client index %d", iClient); + return false; + } + + strcopy(sColor, iColorSize, "\x01"); + switch (GetClientTeam(iClient)) { + case 1: {GetTrieString(g_hColors, "team0", sColor, iColorSize);} + case 2: {GetTrieString(g_hColors, "team1", sColor, iColorSize);} + case 3: {GetTrieString(g_hColors, "team2", sColor, iColorSize);} + } + return true; + } else { + return GetTrieString(g_hColors, sName, sColor, iColorSize); + } + + return false; +} + +stock bool:CExistColor(const String:sName[]) +{ + if (sName[0] == '\0' || sName[0] == '@' || sName[0] == '#') + return false; + + new String:sColor[64]; + return GetTrieString(g_hColors, sName, sColor, sizeof(sColor)); +} + +stock CSayText2(iClient, String:sMessage[], iAuthor) +{ + new Handle:hMsg = StartMessageOne("SayText2", iClient, USERMSG_RELIABLE|USERMSG_BLOCKHOOKS); + if(GetFeatureStatus(FeatureType_Native, "GetUserMessageType") == FeatureStatus_Available && GetUserMessageType() == UM_Protobuf) { + PbSetInt(hMsg, "ent_idx", iAuthor); + PbSetBool(hMsg, "chat", true); + PbSetString(hMsg, "msg_name", sMessage); + PbAddString(hMsg, "params", ""); + PbAddString(hMsg, "params", ""); + PbAddString(hMsg, "params", ""); + PbAddString(hMsg, "params", ""); + } else { + BfWriteByte(hMsg, iAuthor); + BfWriteByte(hMsg, true); + BfWriteString(hMsg, sMessage); + } + EndMessage(); +} + +stock CAddWhiteSpace(String:sBuffer[], iSize) +{ + if (!IsSource2009()) { + Format(sBuffer, iSize, " %s", sBuffer); + } +} + +// ---------------------------------------------------------------------------------------- +// Private stuff +// ---------------------------------------------------------------------------------------- + +stock bool:Init() +{ + if (g_bInit) { + LoadColors(); + return true; + } + + new String:sPluginName[PLATFORM_MAX_PATH]; + new String:sDirectoryPath[PLATFORM_MAX_PATH]; + new Handle:hConfig = INVALID_HANDLE; + GetPluginFilename(INVALID_HANDLE, sPluginName, sizeof(sPluginName)); + ReplaceStringEx(sPluginName, sizeof(sPluginName), "\\", "/"); + new iSlash = FindCharInString(sPluginName, '/', true); + if (iSlash > -1) { + strcopy(sPluginName, sizeof(sPluginName), sPluginName[iSlash + 1]); + } + ReplaceStringEx(sPluginName, sizeof(sPluginName), ".smx", ""); + + BuildPath(Path_SM, sDirectoryPath, sizeof(sDirectoryPath), "%s/", _CV_CONFIG_DIRECTORY); + if (!DirExists(sDirectoryPath)) + CreateDirectory(sDirectoryPath, 511); + + new String:sGlobalVariableList[15][2][64] = { + {"prefix", "{engine 2}"}, + {"default", "{engine 1}"}, + {"reply2cmd", "{engine 1}"}, + {"showactivity", "{engine 1}"}, + {"", ""}, + {"error", "{engine 3}"}, + {"", ""}, + {"highlight", "{engine 2}"}, + {"player", "{engine 2}"}, + {"settings", "{engine 2}"}, + {"command", "{engine 2}"}, + {"", ""}, + {"team0", "{engine 8}"}, + {"team1", "{engine 9}"}, + {"team2", "{engine 11}"} + }; + + if (IsSource2009()) { + strcopy(sGlobalVariableList[12][1], 64, "{#cccccc}"); + strcopy(sGlobalVariableList[13][1], 64, "{#ff4040}"); + strcopy(sGlobalVariableList[14][1], 64, "{#4d7942}"); + } + + BuildPath(Path_SM, g_sConfigGlobal, sizeof(g_sConfigGlobal), "%s/global.cfg", _CV_CONFIG_DIRECTORY); + if (!FileExists(g_sConfigGlobal)) { + hConfig = OpenFile(g_sConfigGlobal, "w"); + if (hConfig == INVALID_HANDLE) { + LogError("Cannot create file '%s' !", g_sConfigGlobal); + return false; + } + + WriteFileLine(hConfig, "// Version: %s", _colorvariables_included); + WriteFileLine(hConfig, "\"colorvariables\""); + WriteFileLine(hConfig, "{"); + for (new i = 0; i < 15; i++) { + if (sGlobalVariableList[i][0][0] == '\0') { + WriteFileLine(hConfig, ""); + } else { + WriteFileLine(hConfig, "\t\"%s\" \"%s\"", sGlobalVariableList[i][0], sGlobalVariableList[i][1]); + } + } + WriteFileLine(hConfig, "}"); + + delete hConfig; + } else { + hConfig = OpenFile(g_sConfigGlobal, "r"); + if (hConfig == INVALID_HANDLE) { + LogError("Cannot read from file '%s' !", g_sConfigGlobal); + return false; + } + + new String:sVersionLine[64]; + ReadFileLine(hConfig, sVersionLine, sizeof(sVersionLine)); + delete hConfig; + + TrimString(sVersionLine); + strcopy(sVersionLine, sizeof(sVersionLine), sVersionLine[FindCharInString(sVersionLine, ':') + 2]); + + if (StringToFloat(sVersionLine) < StringToFloat(_colorvariables_included)) { + new Handle:hKV = CreateKeyValues("colorvariables"); + + if (!FileToKeyValues(hKV, g_sConfigGlobal) || !KvGotoFirstSubKey(hKV, false)) { + delete hKV; + LogError("Cannot read variables from file '%s' !", g_sConfigGlobal); + return false; + } + + for (new i = 0; i < 15; i++) { + if (sGlobalVariableList[i][0][0] == '\0') + continue; + + if (!KvJumpToKey(hKV, sGlobalVariableList[i][0])) + KvSetString(hKV, sGlobalVariableList[i][0], sGlobalVariableList[i][1]); + } + + hConfig = OpenFile(g_sConfigGlobal, "w"); + if (hConfig == INVALID_HANDLE) { + LogError("Cannot write to file '%s' !", g_sConfigGlobal); + return false; + } + + WriteFileLine(hConfig, "// Version: %s", _colorvariables_included); + WriteFileLine(hConfig, "\"colorvariables\""); + WriteFileLine(hConfig, "{"); + + new String:sCode[64], String:sColor[64]; + + KvGotoFirstSubKey(hKV, false); + do + { + KvGetSectionName(hKV, sCode, sizeof(sCode)); + KvGetString(hKV, NULL_STRING, sColor, sizeof(sColor)); + StringToLower(sCode); + StringToLower(sColor); + + WriteFileLine(hConfig, "\t\"%s\" \"%s\"", sCode, sColor); + } while (KvGotoNextKey(hKV, false)); + + WriteFileLine(hConfig, "}"); + + delete hConfig; + delete hKV; + } + } + + BuildPath(Path_SM, g_sConfig, sizeof(g_sConfig), "%s/plugin.%s.cfg", _CV_CONFIG_DIRECTORY, sPluginName); + if (!FileExists(g_sConfig)) { + hConfig = OpenFile(g_sConfig, "w"); + if (hConfig == INVALID_HANDLE) { + LogError("Cannot create file '%s' !", g_sConfig); + return false; + } + + WriteFileLine(hConfig, "\"colorvariables\"\n{\n}"); + delete hConfig; + } + + for (new iClient = 1; iClient <= MaxClients; iClient++) { + g_bSkipPlayers[iClient] = false; + } + + g_hForwardedVariable = CreateGlobalForward("COnForwardedVariable", ET_Ignore, Param_String, Param_String, Param_Cell, Param_String, Param_Cell); + + LoadColors(); + g_bInit = true; + return true; +} + +stock static LoadColors() +{ + if (g_hColors == INVALID_HANDLE) { + g_hColors = CreateTrie(); + new Handle:hRedirect = CreateArray(64); + + AddColors(g_hColors); + LoadConfigFile(g_hColors, g_sConfigGlobal, hRedirect); + LoadConfigFile(g_hColors, g_sConfig, hRedirect); + + SolveRedirects(g_hColors, hRedirect); + CloseHandle(hRedirect); + } +} + +stock static LoadConfigFile(Handle:hTrie, String:sPath[], Handle:hRedirect, bool:bAllowPrefix = true) +{ + if (!FileExists(sPath)) { + LogError("Cannot load color variables from file '%s' - file doesn't exist!", sPath); + return; + } + + new Handle:hKV = CreateKeyValues("colorvariables"); + + if (!FileToKeyValues(hKV, sPath)) { + delete hKV; + LogError("Cannot load color variables from file '%s' !", sPath); + return; + } + + if (!KvGotoFirstSubKey(hKV, false)) { + delete hKV; + return; + } + + new String:sCode[64], String:sColor[64]; + + do + { + KvGetSectionName(hKV, sCode, sizeof(sCode)); + KvGetString(hKV, NULL_STRING, sColor, sizeof(sColor)); + + if (bAllowPrefix && StrEqual(sCode, "&prefix", false)) { + CSetPrefix(sColor); + continue; + } + + StringToLower(sCode); + + if (HasBrackets(sColor) && sColor[1] == '@') { + LogError("Variables cannot be redirected to forwarded variables! (variable '%s')", sCode); + continue; + } + + if (HasBrackets(sColor)) { + if (sColor[1] == '#') { + Format(sColor, sizeof(sColor), "\x07%s", sColor[1]); + } else { + PushArrayString(hRedirect, sCode); + } + } + + SetTrieString(hTrie, sCode, sColor); + } while (KvGotoNextKey(hKV, false)); + + delete hKV; +} + +stock static SolveRedirects(Handle:hTrie, Handle:hRedirect) +{ + new String:sCode[64], String:sRedirect[64], String:sColor[64], String:sFirstColor[64]; + new iRedirectLife, bool:bHasBrackets; + + for (new i = 0; i < GetArraySize(hRedirect); i++) { + GetArrayString(hRedirect, i, sRedirect, sizeof(sRedirect)); + strcopy(sCode, sizeof(sCode), sRedirect); + bHasBrackets = true; + + GetTrieString(hTrie, sRedirect, sColor, sizeof(sColor)); + strcopy(sFirstColor, sizeof(sFirstColor), sRedirect); + iRedirectLife = _CV_MAX_VARIABLE_REDIRECTS; + + do { + if (!HasBrackets(sColor)) { + strcopy(sRedirect, sizeof(sRedirect), sColor); + bHasBrackets = false; + break; + } + + strcopy(sColor, strlen(sColor) - 1, sColor[1]); + if (iRedirectLife > 0) { + strcopy(sRedirect, sizeof(sRedirect), sColor); + iRedirectLife--; + } else { + strcopy(sRedirect, sizeof(sRedirect), sFirstColor); + LogError("Too many redirects for variable '%s' !", sCode); + break; + } + } while (GetTrieString(hTrie, sRedirect, sColor, sizeof(sColor))); + + if (bHasBrackets) { + Format(sRedirect, sizeof(sRedirect), "{%s}", sRedirect); + } + + StringToLower(sCode); + StringToLower(sRedirect); + SetTrieString(hTrie, sCode, sRedirect); + } +} + +stock static HasBrackets(const String:sSource[]) +{ + return (sSource[0] == '{' && sSource[strlen(sSource) - 1] == '}'); +} + +stock static StringToLower(String:sSource[]) +{ + for (new i = 0; i < strlen(sSource); i++) { + if (sSource[i] == '\0') + break; + + sSource[i] = CharToLower(sSource[i]); + } +} + +stock static AddColors(Handle:hTrie) +{ + if (IsSource2009()) { + SetTrieString(hTrie, "default", "\x01"); + SetTrieString(hTrie, "teamcolor", "\x03"); + + SetTrieString(hTrie, "aliceblue", "\x07F0F8FF"); + SetTrieString(hTrie, "allies", "\x074D7942"); + SetTrieString(hTrie, "ancient", "\x07EB4B4B"); + SetTrieString(hTrie, "antiquewhite", "\x07FAEBD7"); + SetTrieString(hTrie, "aqua", "\x0700FFFF"); + SetTrieString(hTrie, "aquamarine", "\x077FFFD4"); + SetTrieString(hTrie, "arcana", "\x07ADE55C"); + SetTrieString(hTrie, "axis", "\x07FF4040"); + SetTrieString(hTrie, "azure", "\x07007FFF"); + SetTrieString(hTrie, "beige", "\x07F5F5DC"); + SetTrieString(hTrie, "bisque", "\x07FFE4C4"); + SetTrieString(hTrie, "black", "\x07000000"); + SetTrieString(hTrie, "blanchedalmond", "\x07FFEBCD"); + SetTrieString(hTrie, "blue", "\x0799CCFF"); + SetTrieString(hTrie, "blueviolet", "\x078A2BE2"); + SetTrieString(hTrie, "brown", "\x07A52A2A"); + SetTrieString(hTrie, "burlywood", "\x07DEB887"); + SetTrieString(hTrie, "cadetblue", "\x075F9EA0"); + SetTrieString(hTrie, "chartreuse", "\x077FFF00"); + SetTrieString(hTrie, "chocolate", "\x07D2691E"); + SetTrieString(hTrie, "collectors", "\x07AA0000"); + SetTrieString(hTrie, "common", "\x07B0C3D9"); + SetTrieString(hTrie, "community", "\x0770B04A"); + SetTrieString(hTrie, "coral", "\x07FF7F50"); + SetTrieString(hTrie, "cornflowerblue", "\x076495ED"); + SetTrieString(hTrie, "cornsilk", "\x07FFF8DC"); + SetTrieString(hTrie, "corrupted", "\x07A32C2E"); + SetTrieString(hTrie, "crimson", "\x07DC143C"); + SetTrieString(hTrie, "cyan", "\x0700FFFF"); + SetTrieString(hTrie, "darkblue", "\x0700008B"); + SetTrieString(hTrie, "darkcyan", "\x07008B8B"); + SetTrieString(hTrie, "darkgoldenrod", "\x07B8860B"); + SetTrieString(hTrie, "darkgray", "\x07A9A9A9"); + SetTrieString(hTrie, "darkgrey", "\x07A9A9A9"); + SetTrieString(hTrie, "darkgreen", "\x07006400"); + SetTrieString(hTrie, "darkkhaki", "\x07BDB76B"); + SetTrieString(hTrie, "darkmagenta", "\x078B008B"); + SetTrieString(hTrie, "darkolivegreen", "\x07556B2F"); + SetTrieString(hTrie, "darkorange", "\x07FF8C00"); + SetTrieString(hTrie, "darkorchid", "\x079932CC"); + SetTrieString(hTrie, "darkred", "\x078B0000"); + SetTrieString(hTrie, "darksalmon", "\x07E9967A"); + SetTrieString(hTrie, "darkseagreen", "\x078FBC8F"); + SetTrieString(hTrie, "darkslateblue", "\x07483D8B"); + SetTrieString(hTrie, "darkslategray", "\x072F4F4F"); + SetTrieString(hTrie, "darkslategrey", "\x072F4F4F"); + SetTrieString(hTrie, "darkturquoise", "\x0700CED1"); + SetTrieString(hTrie, "darkviolet", "\x079400D3"); + SetTrieString(hTrie, "deeppink", "\x07FF1493"); + SetTrieString(hTrie, "deepskyblue", "\x0700BFFF"); + SetTrieString(hTrie, "dimgray", "\x07696969"); + SetTrieString(hTrie, "dimgrey", "\x07696969"); + SetTrieString(hTrie, "dodgerblue", "\x071E90FF"); + SetTrieString(hTrie, "exalted", "\x07CCCCCD"); + SetTrieString(hTrie, "firebrick", "\x07B22222"); + SetTrieString(hTrie, "floralwhite", "\x07FFFAF0"); + SetTrieString(hTrie, "forestgreen", "\x07228B22"); + SetTrieString(hTrie, "frozen", "\x074983B3"); + SetTrieString(hTrie, "fuchsia", "\x07FF00FF"); + SetTrieString(hTrie, "fullblue", "\x070000FF"); + SetTrieString(hTrie, "fullred", "\x07FF0000"); + SetTrieString(hTrie, "gainsboro", "\x07DCDCDC"); + SetTrieString(hTrie, "genuine", "\x074D7455"); + SetTrieString(hTrie, "ghostwhite", "\x07F8F8FF"); + SetTrieString(hTrie, "gold", "\x07FFD700"); + SetTrieString(hTrie, "goldenrod", "\x07DAA520"); + SetTrieString(hTrie, "gray", "\x07CCCCCC"); + SetTrieString(hTrie, "grey", "\x07CCCCCC"); + SetTrieString(hTrie, "green", "\x073EFF3E"); + SetTrieString(hTrie, "greenyellow", "\x07ADFF2F"); + SetTrieString(hTrie, "haunted", "\x0738F3AB"); + SetTrieString(hTrie, "honeydew", "\x07F0FFF0"); + SetTrieString(hTrie, "hotpink", "\x07FF69B4"); + SetTrieString(hTrie, "immortal", "\x07E4AE33"); + SetTrieString(hTrie, "indianred", "\x07CD5C5C"); + SetTrieString(hTrie, "indigo", "\x074B0082"); + SetTrieString(hTrie, "ivory", "\x07FFFFF0"); + SetTrieString(hTrie, "khaki", "\x07F0E68C"); + SetTrieString(hTrie, "lavender", "\x07E6E6FA"); + SetTrieString(hTrie, "lavenderblush", "\x07FFF0F5"); + SetTrieString(hTrie, "lawngreen", "\x077CFC00"); + SetTrieString(hTrie, "legendary", "\x07D32CE6"); + SetTrieString(hTrie, "lemonchiffon", "\x07FFFACD"); + SetTrieString(hTrie, "lightblue", "\x07ADD8E6"); + SetTrieString(hTrie, "lightcoral", "\x07F08080"); + SetTrieString(hTrie, "lightcyan", "\x07E0FFFF"); + SetTrieString(hTrie, "lightgoldenrodyellow", "\x07FAFAD2"); + SetTrieString(hTrie, "lightgray", "\x07D3D3D3"); + SetTrieString(hTrie, "lightgrey", "\x07D3D3D3"); + SetTrieString(hTrie, "lightgreen", "\x0799FF99"); + SetTrieString(hTrie, "lightpink", "\x07FFB6C1"); + SetTrieString(hTrie, "lightsalmon", "\x07FFA07A"); + SetTrieString(hTrie, "lightseagreen", "\x0720B2AA"); + SetTrieString(hTrie, "lightskyblue", "\x0787CEFA"); + SetTrieString(hTrie, "lightslategray", "\x07778899"); + SetTrieString(hTrie, "lightslategrey", "\x07778899"); + SetTrieString(hTrie, "lightsteelblue", "\x07B0C4DE"); + SetTrieString(hTrie, "lightyellow", "\x07FFFFE0"); + SetTrieString(hTrie, "lime", "\x0700FF00"); + SetTrieString(hTrie, "limegreen", "\x0732CD32"); + SetTrieString(hTrie, "linen", "\x07FAF0E6"); + SetTrieString(hTrie, "magenta", "\x07FF00FF"); + SetTrieString(hTrie, "maroon", "\x07800000"); + SetTrieString(hTrie, "mediumaquamarine", "\x0766CDAA"); + SetTrieString(hTrie, "mediumblue", "\x070000CD"); + SetTrieString(hTrie, "mediumorchid", "\x07BA55D3"); + SetTrieString(hTrie, "mediumpurple", "\x079370D8"); + SetTrieString(hTrie, "mediumseagreen", "\x073CB371"); + SetTrieString(hTrie, "mediumslateblue", "\x077B68EE"); + SetTrieString(hTrie, "mediumspringgreen", "\x0700FA9A"); + SetTrieString(hTrie, "mediumturquoise", "\x0748D1CC"); + SetTrieString(hTrie, "mediumvioletred", "\x07C71585"); + SetTrieString(hTrie, "midnightblue", "\x07191970"); + SetTrieString(hTrie, "mintcream", "\x07F5FFFA"); + SetTrieString(hTrie, "mistyrose", "\x07FFE4E1"); + SetTrieString(hTrie, "moccasin", "\x07FFE4B5"); + SetTrieString(hTrie, "mythical", "\x078847FF"); + SetTrieString(hTrie, "navajowhite", "\x07FFDEAD"); + SetTrieString(hTrie, "navy", "\x07000080"); + SetTrieString(hTrie, "normal", "\x07B2B2B2"); + SetTrieString(hTrie, "oldlace", "\x07FDF5E6"); + SetTrieString(hTrie, "olive", "\x079EC34F"); + SetTrieString(hTrie, "olivedrab", "\x076B8E23"); + SetTrieString(hTrie, "orange", "\x07FFA500"); + SetTrieString(hTrie, "orangered", "\x07FF4500"); + SetTrieString(hTrie, "orchid", "\x07DA70D6"); + SetTrieString(hTrie, "palegoldenrod", "\x07EEE8AA"); + SetTrieString(hTrie, "palegreen", "\x0798FB98"); + SetTrieString(hTrie, "paleturquoise", "\x07AFEEEE"); + SetTrieString(hTrie, "palevioletred", "\x07D87093"); + SetTrieString(hTrie, "papayawhip", "\x07FFEFD5"); + SetTrieString(hTrie, "peachpuff", "\x07FFDAB9"); + SetTrieString(hTrie, "peru", "\x07CD853F"); + SetTrieString(hTrie, "pink", "\x07FFC0CB"); + SetTrieString(hTrie, "plum", "\x07DDA0DD"); + SetTrieString(hTrie, "powderblue", "\x07B0E0E6"); + SetTrieString(hTrie, "purple", "\x07800080"); + SetTrieString(hTrie, "rare", "\x074B69FF"); + SetTrieString(hTrie, "red", "\x07FF4040"); + SetTrieString(hTrie, "rosybrown", "\x07BC8F8F"); + SetTrieString(hTrie, "royalblue", "\x074169E1"); + SetTrieString(hTrie, "saddlebrown", "\x078B4513"); + SetTrieString(hTrie, "salmon", "\x07FA8072"); + SetTrieString(hTrie, "sandybrown", "\x07F4A460"); + SetTrieString(hTrie, "seagreen", "\x072E8B57"); + SetTrieString(hTrie, "seashell", "\x07FFF5EE"); + SetTrieString(hTrie, "selfmade", "\x0770B04A"); + SetTrieString(hTrie, "sienna", "\x07A0522D"); + SetTrieString(hTrie, "silver", "\x07C0C0C0"); + SetTrieString(hTrie, "skyblue", "\x0787CEEB"); + SetTrieString(hTrie, "slateblue", "\x076A5ACD"); + SetTrieString(hTrie, "slategray", "\x07708090"); + SetTrieString(hTrie, "slategrey", "\x07708090"); + SetTrieString(hTrie, "snow", "\x07FFFAFA"); + SetTrieString(hTrie, "springgreen", "\x0700FF7F"); + SetTrieString(hTrie, "steelblue", "\x074682B4"); + SetTrieString(hTrie, "strange", "\x07CF6A32"); + SetTrieString(hTrie, "tan", "\x07D2B48C"); + SetTrieString(hTrie, "teal", "\x07008080"); + SetTrieString(hTrie, "thistle", "\x07D8BFD8"); + SetTrieString(hTrie, "tomato", "\x07FF6347"); + SetTrieString(hTrie, "turquoise", "\x0740E0D0"); + SetTrieString(hTrie, "uncommon", "\x07B0C3D9"); + SetTrieString(hTrie, "unique", "\x07FFD700"); + SetTrieString(hTrie, "unusual", "\x078650AC"); + SetTrieString(hTrie, "valve", "\x07A50F79"); + SetTrieString(hTrie, "vintage", "\x07476291"); + SetTrieString(hTrie, "violet", "\x07EE82EE"); + SetTrieString(hTrie, "wheat", "\x07F5DEB3"); + SetTrieString(hTrie, "white", "\x07FFFFFF"); + SetTrieString(hTrie, "whitesmoke", "\x07F5F5F5"); + SetTrieString(hTrie, "yellow", "\x07FFFF00"); + SetTrieString(hTrie, "yellowgreen", "\x079ACD32"); + } else { + SetTrieString(hTrie, "default", "\x01"); + SetTrieString(hTrie, "teamcolor", "\x03"); + + SetTrieString(hTrie, "red", "\x07"); + SetTrieString(hTrie, "lightred", "\x0F"); + SetTrieString(hTrie, "darkred", "\x02"); + SetTrieString(hTrie, "bluegrey", "\x0A"); + SetTrieString(hTrie, "blue", "\x0B"); + SetTrieString(hTrie, "darkblue", "\x0C"); + SetTrieString(hTrie, "purple", "\x03"); + SetTrieString(hTrie, "orchid", "\x0E"); + SetTrieString(hTrie, "yellow", "\x09"); + SetTrieString(hTrie, "gold", "\x10"); + SetTrieString(hTrie, "lightgreen", "\x05"); + SetTrieString(hTrie, "green", "\x04"); + SetTrieString(hTrie, "lime", "\x06"); + SetTrieString(hTrie, "grey", "\x08"); + SetTrieString(hTrie, "grey2", "\x0D"); + } + + SetTrieString(hTrie, "engine 1", "\x01"); + SetTrieString(hTrie, "engine 2", "\x02"); + SetTrieString(hTrie, "engine 3", "\x03"); + SetTrieString(hTrie, "engine 4", "\x04"); + SetTrieString(hTrie, "engine 5", "\x05"); + SetTrieString(hTrie, "engine 6", "\x06"); + SetTrieString(hTrie, "engine 7", "\x07"); + SetTrieString(hTrie, "engine 8", "\x08"); + SetTrieString(hTrie, "engine 9", "\x09"); + SetTrieString(hTrie, "engine 10", "\x0A"); + SetTrieString(hTrie, "engine 11", "\x0B"); + SetTrieString(hTrie, "engine 12", "\x0C"); + SetTrieString(hTrie, "engine 13", "\x0D"); + SetTrieString(hTrie, "engine 14", "\x0E"); + SetTrieString(hTrie, "engine 15", "\x0F"); + SetTrieString(hTrie, "engine 16", "\x10"); +} + +stock static bool:IsSource2009() +{ + if (g_IsSource2009 == unknown) { + new EngineVersion:iEngineVersion = GetEngineVersion(); + g_IsSource2009 = (iEngineVersion == Engine_CSS || iEngineVersion == Engine_TF2 || iEngineVersion == Engine_HL2DM || iEngineVersion == Engine_DODS) ? yes : no; + } + + return bool:g_IsSource2009; +} + +stock static AddPrefixAndDefaultColor(String:sMessage[], iSize, String:sDefaultColor[] = "default", String:sPrefixColor[] = "prefix") +{ + if (g_sChatPrefix[0] != '\0' && !g_bIgnorePrefix) { + Format(sMessage, iSize, "{%s}[%s]{%s} %s", sPrefixColor, g_sChatPrefix, sDefaultColor, sMessage); + } else { + Format(sMessage, iSize, "{%s}%s", sDefaultColor, sMessage); + } +} + +stock static SendPlayerMessage(iClient, String:sMessage[], iAuthor = 0) +{ + if (iAuthor < 1 || iAuthor > MaxClients || !IsClientInGame(iAuthor)) { + PrintToChat(iClient, sMessage); + + if (iAuthor != 0) { + LogError("Client %d is not valid or in game", iAuthor); + } + } else { + CSayText2(iClient, sMessage, iAuthor); + } +} \ No newline at end of file diff --git a/advertisements/scripting/include/topcolors.sp b/advertisements/scripting/include/topcolors.sp new file mode 100644 index 00000000..57b6eef5 --- /dev/null +++ b/advertisements/scripting/include/topcolors.sp @@ -0,0 +1,216 @@ +StringMap g_hTopColors; + +void AddTopColors() +{ + if (!g_hTopColors) { + g_hTopColors = new StringMap(); + } + + AddTopColor("aliceblue", "F0F8FF"); + AddTopColor("allies", "4D7942"); + AddTopColor("ancient", "EB4B4B"); + AddTopColor("antiquewhite", "FAEBD7"); + AddTopColor("aqua", "00FFFF"); + AddTopColor("aquamarine", "7FFFD4"); + AddTopColor("arcana", "ADE55C"); + AddTopColor("axis", "FF4040"); + AddTopColor("azure", "007FFF"); + AddTopColor("beige", "F5F5DC"); + AddTopColor("bisque", "FFE4C4"); + AddTopColor("black", "000000"); + AddTopColor("blanchedalmond", "FFEBCD"); + AddTopColor("blue", "99CCFF"); + AddTopColor("blueviolet", "8A2BE2"); + AddTopColor("brown", "A52A2A"); + AddTopColor("burlywood", "DEB887"); + AddTopColor("cadetblue", "5F9EA0"); + AddTopColor("chartreuse", "7FFF00"); + AddTopColor("chocolate", "D2691E"); + AddTopColor("collectors", "AA0000"); + AddTopColor("common", "B0C3D9"); + AddTopColor("community", "70B04A"); + AddTopColor("coral", "FF7F50"); + AddTopColor("cornflowerblue", "6495ED"); + AddTopColor("cornsilk", "FFF8DC"); + AddTopColor("corrupted", "A32C2E"); + AddTopColor("crimson", "DC143C"); + AddTopColor("cyan", "00FFFF"); + AddTopColor("darkblue", "00008B"); + AddTopColor("darkcyan", "008B8B"); + AddTopColor("darkgoldenrod", "B8860B"); + AddTopColor("darkgray", "A9A9A9"); + AddTopColor("darkgrey", "A9A9A9"); + AddTopColor("darkgreen", "006400"); + AddTopColor("darkkhaki", "BDB76B"); + AddTopColor("darkmagenta", "8B008B"); + AddTopColor("darkolivegreen", "556B2F"); + AddTopColor("darkorange", "FF8C00"); + AddTopColor("darkorchid", "9932CC"); + AddTopColor("darkred", "8B0000"); + AddTopColor("darksalmon", "E9967A"); + AddTopColor("darkseagreen", "8FBC8F"); + AddTopColor("darkslateblue", "483D8B"); + AddTopColor("darkslategray", "2F4F4F"); + AddTopColor("darkslategrey", "2F4F4F"); + AddTopColor("darkturquoise", "00CED1"); + AddTopColor("darkviolet", "9400D3"); + AddTopColor("deeppink", "FF1493"); + AddTopColor("deepskyblue", "00BFFF"); + AddTopColor("dimgray", "696969"); + AddTopColor("dimgrey", "696969"); + AddTopColor("dodgerblue", "1E90FF"); + AddTopColor("exalted", "CCCCCD"); + AddTopColor("firebrick", "B22222"); + AddTopColor("floralwhite", "FFFAF0"); + AddTopColor("forestgreen", "228B22"); + AddTopColor("frozen", "4983B3"); + AddTopColor("fuchsia", "FF00FF"); + AddTopColor("fullblue", "0000FF"); + AddTopColor("fullred", "FF0000"); + AddTopColor("gainsboro", "DCDCDC"); + AddTopColor("genuine", "4D7455"); + AddTopColor("ghostwhite", "F8F8FF"); + AddTopColor("gold", "FFD700"); + AddTopColor("goldenrod", "DAA520"); + AddTopColor("gray", "CCCCCC"); + AddTopColor("grey", "CCCCCC"); + AddTopColor("green", "3EFF3E"); + AddTopColor("greenyellow", "ADFF2F"); + AddTopColor("haunted", "38F3AB"); + AddTopColor("honeydew", "F0FFF0"); + AddTopColor("hotpink", "FF69B4"); + AddTopColor("immortal", "E4AE33"); + AddTopColor("indianred", "CD5C5C"); + AddTopColor("indigo", "4B0082"); + AddTopColor("ivory", "FFFFF0"); + AddTopColor("khaki", "F0E68C"); + AddTopColor("lavender", "E6E6FA"); + AddTopColor("lavenderblush", "FFF0F5"); + AddTopColor("lawngreen", "7CFC00"); + AddTopColor("legendary", "D32CE6"); + AddTopColor("lemonchiffon", "FFFACD"); + AddTopColor("lightblue", "ADD8E6"); + AddTopColor("lightcoral", "F08080"); + AddTopColor("lightcyan", "E0FFFF"); + AddTopColor("lightgoldenrodyellow", "FAFAD2"); + AddTopColor("lightgray", "D3D3D3"); + AddTopColor("lightgrey", "D3D3D3"); + AddTopColor("lightgreen", "99FF99"); + AddTopColor("lightpink", "FFB6C1"); + AddTopColor("lightsalmon", "FFA07A"); + AddTopColor("lightseagreen", "20B2AA"); + AddTopColor("lightskyblue", "87CEFA"); + AddTopColor("lightslategray", "778899"); + AddTopColor("lightslategrey", "778899"); + AddTopColor("lightsteelblue", "B0C4DE"); + AddTopColor("lightyellow", "FFFFE0"); + AddTopColor("lime", "00FF00"); + AddTopColor("limegreen", "32CD32"); + AddTopColor("linen", "FAF0E6"); + AddTopColor("magenta", "FF00FF"); + AddTopColor("maroon", "800000"); + AddTopColor("mediumaquamarine", "66CDAA"); + AddTopColor("mediumblue", "0000CD"); + AddTopColor("mediumorchid", "BA55D3"); + AddTopColor("mediumpurple", "9370D8"); + AddTopColor("mediumseagreen", "3CB371"); + AddTopColor("mediumslateblue", "7B68EE"); + AddTopColor("mediumspringgreen", "00FA9A"); + AddTopColor("mediumturquoise", "48D1CC"); + AddTopColor("mediumvioletred", "C71585"); + AddTopColor("midnightblue", "191970"); + AddTopColor("mintcream", "F5FFFA"); + AddTopColor("mistyrose", "FFE4E1"); + AddTopColor("moccasin", "FFE4B5"); + AddTopColor("mythical", "8847FF"); + AddTopColor("navajowhite", "FFDEAD"); + AddTopColor("navy", "000080"); + AddTopColor("normal", "B2B2B2"); + AddTopColor("oldlace", "FDF5E6"); + AddTopColor("olive", "9EC34F"); + AddTopColor("olivedrab", "6B8E23"); + AddTopColor("orange", "FFA500"); + AddTopColor("orangered", "FF4500"); + AddTopColor("orchid", "DA70D6"); + AddTopColor("palegoldenrod", "EEE8AA"); + AddTopColor("palegreen", "98FB98"); + AddTopColor("paleturquoise", "AFEEEE"); + AddTopColor("palevioletred", "D87093"); + AddTopColor("papayawhip", "FFEFD5"); + AddTopColor("peachpuff", "FFDAB9"); + AddTopColor("peru", "CD853F"); + AddTopColor("pink", "FFC0CB"); + AddTopColor("plum", "DDA0DD"); + AddTopColor("powderblue", "B0E0E6"); + AddTopColor("purple", "800080"); + AddTopColor("rare", "4B69FF"); + AddTopColor("red", "FF4040"); + AddTopColor("rosybrown", "BC8F8F"); + AddTopColor("royalblue", "4169E1"); + AddTopColor("saddlebrown", "8B4513"); + AddTopColor("salmon", "FA8072"); + AddTopColor("sandybrown", "F4A460"); + AddTopColor("seagreen", "2E8B57"); + AddTopColor("seashell", "FFF5EE"); + AddTopColor("selfmade", "70B04A"); + AddTopColor("sienna", "A0522D"); + AddTopColor("silver", "C0C0C0"); + AddTopColor("skyblue", "87CEEB"); + AddTopColor("slateblue", "6A5ACD"); + AddTopColor("slategray", "708090"); + AddTopColor("slategrey", "708090"); + AddTopColor("snow", "FFFAFA"); + AddTopColor("springgreen", "00FF7F"); + AddTopColor("steelblue", "4682B4"); + AddTopColor("strange", "CF6A32"); + AddTopColor("tan", "D2B48C"); + AddTopColor("teal", "008080"); + AddTopColor("thistle", "D8BFD8"); + AddTopColor("tomato", "FF6347"); + AddTopColor("turquoise", "40E0D0"); + AddTopColor("uncommon", "B0C3D9"); + AddTopColor("unique", "FFD700"); + AddTopColor("unusual", "8650AC"); + AddTopColor("valve", "A50F79"); + AddTopColor("vintage", "476291"); + AddTopColor("violet", "EE82EE"); + AddTopColor("wheat", "F5DEB3"); + AddTopColor("white", "FFFFFF"); + AddTopColor("whitesmoke", "F5F5F5"); + AddTopColor("yellow", "FFFF00"); + AddTopColor("yellowgreen", "9ACD32"); +} + +void AddTopColor(const char[] sName, const char[] sColor) +{ + int aColor[4]; + ParseColor(sColor, aColor); + + g_hTopColors.SetArray(sName, aColor, sizeof(aColor)); +} + +void ParseColor(const char[] sColor, int aColor[4]) +{ + int iColor = StringToInt(sColor, 16); + aColor[0] = iColor >> 16; + aColor[1] = iColor >> 8 & 255; + aColor[2] = iColor & 255; + aColor[3] = 255; +} + +void ParseTopColor(const char[] sText, int &iStart, int aColor[4]) +{ + int iEnd = StrContains(sText, "}"); + if (sText[0] != '{' || iEnd == -1) { + return; + } + + char sColor[32]; + strcopy(sColor, iEnd, sText[1]); + if (sColor[0] == '#') { + ParseColor(sColor[1], aColor); + } else { + g_hTopColors.GetArray(sColor, aColor, sizeof(aColor)); + } + iStart = iEnd + 1; +} \ No newline at end of file diff --git a/advertisements/scripting/include/updater.inc b/advertisements/scripting/include/updater.inc new file mode 100644 index 00000000..68851328 --- /dev/null +++ b/advertisements/scripting/include/updater.inc @@ -0,0 +1,97 @@ +#if defined _updater_included + #endinput +#endif +#define _updater_included + +/** + * Adds your plugin to the updater. The URL will be updated if + * your plugin was previously added. + * + * @param url URL to your plugin's update file. + * @noreturn + */ +native Updater_AddPlugin(const String:url[]); + +/** + * Removes your plugin from the updater. This does not need to + * be called during OnPluginEnd. + * + * @noreturn + */ +native Updater_RemovePlugin(); + +/** + * Forces your plugin to be checked for updates. The behaviour + * of the update is dependant on the server's configuration. + * + * @return True if an update was triggered. False otherwise. + * @error Plugin not found in updater. + */ +native bool:Updater_ForceUpdate(); + +/** + * Called when your plugin is about to be checked for updates. + * + * @return Plugin_Handled to prevent checking, Plugin_Continue to allow it. + */ +forward Action:Updater_OnPluginChecking(); + +/** + * Called when your plugin is about to begin downloading an available update. + * + * @return Plugin_Handled to prevent downloading, Plugin_Continue to allow it. + */ +forward Action:Updater_OnPluginDownloading(); + +/** + * Called when your plugin's update files have been fully downloaded + * and are about to write to their proper location. This should be used + * to free read-only resources that require write access for your update. + * + * @note OnPluginUpdated will be called later during the same frame. + * + * @noreturn + */ +forward Updater_OnPluginUpdating(); + +/** + * Called when your plugin's update has been completed. It is safe + * to reload your plugin at this time. + * + * @noreturn + */ +forward Updater_OnPluginUpdated(); + +/** + * @brief Reloads a plugin. + * + * @param plugin Plugin Handle (INVALID_HANDLE uses the calling plugin). + * @noreturn + */ +stock ReloadPlugin(Handle:plugin=INVALID_HANDLE) +{ + decl String:filename[64]; + GetPluginFilename(plugin, filename, sizeof(filename)); + ServerCommand("sm plugins reload %s", filename); +} + + +public SharedPlugin:__pl_updater = +{ + name = "updater", + file = "updater.smx", +#if defined REQUIRE_PLUGIN + required = 1, +#else + required = 0, +#endif +}; + +#if !defined REQUIRE_PLUGIN +public __pl_updater_SetNTVOptional() +{ + MarkNativeAsOptional("Updater_AddPlugin"); + MarkNativeAsOptional("Updater_RemovePlugin"); + MarkNativeAsOptional("Updater_ForceUpdate"); +} +#endif \ No newline at end of file diff --git a/calladmin_restrictions/scripting/calladmin_restrictions.sp b/calladmin_restrictions/scripting/calladmin_restrictions.sp new file mode 100644 index 00000000..a00dc35f --- /dev/null +++ b/calladmin_restrictions/scripting/calladmin_restrictions.sp @@ -0,0 +1,26 @@ +#include +#include +#include + +#pragma semicolon 1 +#pragma newdecls required + +public Plugin myinfo = +{ + name = "CallAdmin Restrictions", + author = "Neon", + description = "", + version = "1.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CallAdmin_OnDrawTarget(int client, int target) +{ + if (CheckCommandAccess(target, "", ADMFLAG_GENERIC, true)) + return Plugin_Handled; + else + return Plugin_Continue; +} \ No newline at end of file diff --git a/calladmin_restrictions/scripting/include/calladmin.inc b/calladmin_restrictions/scripting/include/calladmin.inc new file mode 100644 index 00000000..a6ca9b84 --- /dev/null +++ b/calladmin_restrictions/scripting/include/calladmin.inc @@ -0,0 +1,289 @@ +/** Include guard */ +#if defined _calladmin_included + #endinput +#endif +#define _calladmin_included + + + + +/** Global calladmin version, do not change */ +#define CALLADMIN_VERSION "0.1.5" + + + +/** Pass this as a clientindex to the ReportPlayer native if you don't have a client, eg report from server automatically */ +#define REPORTER_CONSOLE 0 + + +/** Maximum size a reason string can be in length */ +#define REASON_MAX_LENGTH 128 + + + +/** + * Called when the main CallAdmin client selection menu is about to be drawn for a client. + * + * @param client Client index of the caller. + * @return Plugin_Continue to allow, Plugin_Handled otherwise. + */ +forward Action CallAdmin_OnDrawMenu(int client); + + + + +/** + * Called when the own reason selection is enabled and the select item for it is about to be drawn for a client. + * + * @param client Client index of the caller. + * @return Plugin_Continue to allow, Plugin_Handled otherwise. + */ +forward Action CallAdmin_OnDrawOwnReason(int client); + + + + +/** + * Called when a target is about to be drawn to the target selection menu for a client. + * Note: Called *n-1 times for the client selection menu where n is the amount of valid targets including the caller. + * + * @param client Client index of the caller. + * @param target Client index of the target about to be drawed. + * @return Plugin_Continue to allow the target to be drawn, Plugin_Handled otherwise. + */ +forward Action CallAdmin_OnDrawTarget(int client, int target); + + + + +/** + * Called when the trackercount was changed. + * + * @param oldVal Trackercount before update. + * @param newVal Trackercount after update. + * @noreturn + */ +forward void CallAdmin_OnTrackerCountChanged(int oldVal, int newVal); + + + + +/** + * Called before a client (or module) has reported another client. + * + * @param client Client index of the caller. + * @param target Client index of the target. + * @param reason Reason selected by the client for the report. + * @return Plugin_Continue to allow, Plugin_Handled otherwise. + */ +forward Action CallAdmin_OnReportPre(int client, int target, const char[] reason); + + + + +/** + * Called after a client (or module) has reported another client. + * Be sure to check that client != REPORTER_CONSOLE if you expect a valid client index. + * + * @param client Client index of the caller. + * @param target Client index of the target. + * @param reason Reason selected by the client for the report. + * @noreturn + */ +forward void CallAdmin_OnReportPost(int client, int target, const char[] reason); + + + + +/** + * Initiates an report call. + * If you report automatically (via a module for example) set the clientindex to REPORTER_CONSOLE. + * + * @param client Client index of the caller. + * @param target Client index of the target. + * @param reason Reason for the report. + * @return True if target could be reported, false otherwise. + */ +native bool CallAdmin_ReportClient(int client, int target, const char[] reason); + + + + +/** + * Called when an admin is about to be added to the in-game admin count. + * + * @param client Client index of the admin. + * @return Plugin_Continue to allow, Plugin_Handled otherwise. + */ +forward Action CallAdmin_OnAddToAdminCount(int client); + + + + +/** + * Returns the cached count of current trackers. + * + * @return Count of current trackers. + */ +native int CallAdmin_GetTrackersCount(); + + + + +/** + * Requests a forced refresh of the trackers count. + * Note that most modules work asynchronous and only return their own cached count. + * + * @noreturn + */ +native void CallAdmin_RequestTrackersCountRefresh(); + + + + +/** + * Called when the trackercount of a module is requested. + * This is either called periodically via the base calladmin, or when RequestTrackersCountRefresh is invoked. + * + * @param trackers By ref value of your trackers. + * @noreturn + */ +forward void CallAdmin_OnRequestTrackersCountRefresh(int &trackers); + + + + +enum ServerData +{ + ServerData_HostName, /**< This is the hostname of the server, gathered from the `hostname` convar */ + ServerData_HostIP, /**< This is the hostip of the server, gathered and converted from the `hostip` convar */ + ServerData_HostPort /**< This is the hostport of the server, gathered from the `hostport` convar */ +}; + + + + +/** + * Called when the serverdata data is changed. + * + * @param convar Handle to the convar which was changed. + * @param type Type of data which was changed. + * @param oldVal Value of data before change. + * @param newVal Value of data after change. + * @noreturn + */ +forward void CallAdmin_OnServerDataChanged(ConVar convar, ServerData type, const char[] oldVal, const char[] newVal); + + + + +/** + * Returns the server's hostname. + * + * @param buffer String to copy hostname to. + * @param max_size Maximum size of buffer. + * @noreturn + */ +native void CallAdmin_GetHostName(char[] buffer, int max_size); + + + + +/** + * Returns the server's IP String. + * + * @param buffer String to copy hostip to. + * @param max_size Maximum size of buffer. + * @noreturn + */ +native void CallAdmin_GetHostIP(char[] buffer, int max_size); + + + + +/** + * Returns the server's HostPort. + * + * @return Hostport. + */ +native int CallAdmin_GetHostPort(); + + + + +/** + * Logs a message to the calladmin logfile. + * The message has this format "[Pluginname] Message", where the plugin name is detected automatically. + * + * @param format Formatting rules. + * @param ... Variable number of format parameters. + * @noreturn + */ +native void CallAdmin_LogMessage(const char[] format, any ...); + + + + +/** + * Called when a message was logged to the calladmin logfile. + * + * @param plugin Handle to the plugin which logged a message. + * @param message Message which was logged. + * @noreturn + */ +forward void CallAdmin_OnLogMessage(Handle plugin, const char[] message); + + + + +/** + * Returns the server's current report id. + * This is a temporary value and is increased with each report. + * + * @return Current report id of the server. + */ +native int CallAdmin_GetReportID(); + + + + +/** + * Called when a report was handled. + * + * @param client Admin who handled the report. + * @param id ID of the handled report. + * @noreturn + */ +forward void CallAdmin_OnReportHandled(int client, int id); + + + + +/* Do not edit below this line */ +public SharedPlugin __pl_calladmin = +{ + name = "calladmin", + file = "calladmin.smx", +#if defined REQUIRE_PLUGIN + required = 1, +#else + required = 0, +#endif +}; + + + + +#if !defined REQUIRE_PLUGIN +public __pl_calladmin_SetNTVOptional() +{ + MarkNativeAsOptional("CallAdmin_GetTrackersCount"); + MarkNativeAsOptional("CallAdmin_RequestTrackersCountRefresh"); + MarkNativeAsOptional("CallAdmin_GetHostName"); + MarkNativeAsOptional("CallAdmin_GetHostIP"); + MarkNativeAsOptional("CallAdmin_GetHostPort"); + MarkNativeAsOptional("CallAdmin_ReportClient"); + MarkNativeAsOptional("CallAdmin_LogMessage"); + MarkNativeAsOptional("CallAdmin_GetReportID"); +} +#endif diff --git a/entWatch/scripting/entWatch.sp b/entWatch/scripting/entWatch.sp deleted file mode 100644 index 8a297e4f..00000000 --- a/entWatch/scripting/entWatch.sp +++ /dev/null @@ -1,2644 +0,0 @@ -//==================================================================================================== -// -// Name: entWatch -// Author: Prometheum & zaCade -// Description: Monitor entity interactions. -// -//==================================================================================================== -#pragma semicolon 1 - -#include -#include -#include -#include -#include -#include -#include -#include - -#define PLUGIN_VERSION "3.7.3" -#undef REQUIRE_PLUGIN - -//---------------------------------------------------------------------------------------------------- -// Purpose: Entity data -//---------------------------------------------------------------------------------------------------- -enum entities -{ - String:ent_name[32], - String:ent_shortname[32], - String:ent_color[32], - String:ent_buttonclass[32], - String:ent_filtername[32], - bool:ent_hasfiltername, - bool:ent_blockpickup, - bool:ent_allowtransfer, - bool:ent_forcedrop, - bool:ent_chat, - bool:ent_hud, - ent_hammerid, - ent_weaponid, - ent_buttonid, - ent_ownerid, - ent_mode, // 0 = No button, 1 = Spam protection only, 2 = Cooldowns, 3 = Limited uses, 4 = Limited uses with cooldowns, 5 = Cooldowns after multiple uses. - ent_uses, - ent_maxuses, - ent_cooldown, - ent_cooldowntime, -}; - -new entArray[512][entities]; -new entArraySize = 512; -new triggerArray[512]; -new triggerSize = 512; - -//---------------------------------------------------------------------------------------------------- -// Purpose: Color settings -//---------------------------------------------------------------------------------------------------- -new String:color_tag[16] = "E01B5D"; -new String:color_name[16] = "EDEDED"; -new String:color_steamid[16] = "B2B2B2"; -new String:color_use[16] = "67ADDF"; -new String:color_pickup[16] = "C9EF66"; -new String:color_drop[16] = "E562BA"; -new String:color_disconnect[16] = "F1B567"; -new String:color_death[16] = "F1B567"; -new String:color_warning[16] = "F16767"; - -//---------------------------------------------------------------------------------------------------- -// Purpose: Client settings -//---------------------------------------------------------------------------------------------------- -new Handle:g_hCookie_Display = INVALID_HANDLE; -new Handle:g_hCookie_Restricted = INVALID_HANDLE; -new Handle:g_hCookie_RestrictedLength = INVALID_HANDLE; -new Handle:g_hCookie_RestrictedIssued = INVALID_HANDLE; -new Handle:g_hCookie_RestrictedBy = INVALID_HANDLE; - -new bool:g_bDisplay[MAXPLAYERS + 1] = false; -new bool:g_bRestricted[MAXPLAYERS + 1] = false; -new String:g_sRestrictedBy[MAXPLAYERS + 1][64]; -new g_iRestrictedLength[MAXPLAYERS + 1]; -new g_iRestrictedIssued[MAXPLAYERS + 1]; -new g_iAdminMenuTarget[MAXPLAYERS + 1]; - -//---------------------------------------------------------------------------------------------------- -// Purpose: Plugin settings -//---------------------------------------------------------------------------------------------------- -new Handle:g_hCvar_DisplayEnabled = INVALID_HANDLE; -new Handle:g_hCvar_DisplayCooldowns = INVALID_HANDLE; -new Handle:g_hCvar_ModeTeamOnly = INVALID_HANDLE; -new Handle:g_hCvar_ConfigColor = INVALID_HANDLE; -new Handle:g_hAdminMenu = INVALID_HANDLE; -new Handle:g_hOnBanForward = INVALID_HANDLE; -new Handle:g_hOnUnbanForward = INVALID_HANDLE; - -new bool:g_bRoundTransition = false; -new bool:g_bConfigLoaded = false; -new bool:g_bLateLoad = false; - -new Handle:g_hGetSlot; -new Handle:g_hBumpWeapon; -new Handle:g_hOnPickedUp; -new g_Offset_m_toggle_state = -1; - -//---------------------------------------------------------------------------------------------------- -// Purpose: Plugin information -//---------------------------------------------------------------------------------------------------- -public Plugin:myinfo = -{ - name = "entWatch", - author = "Prometheum & zaCade. Edits: George & Obus & BotoX", - description = "Notify players about entity interactions.", - version = PLUGIN_VERSION, - url = "https://github.com/Obuss/entWatch" // Original here: "https://github.com/zaCade/entWatch" -}; - -public APLRes:AskPluginLoad2(Handle:hThis, bool:bLate, String:sError[], err_max) -{ - CreateNative("entWatch_IsClientBanned", Native_IsClientBanned); - CreateNative("entWatch_BanClient", Native_BanClient); - CreateNative("entWatch_UnbanClient", Native_UnbanClient); - CreateNative("entWatch_IsSpecialItem", Native_IsSpecialItem); - CreateNative("entWatch_HasSpecialItem", Native_HasSpecialItem); - - RegPluginLibrary("entWatch"); - - g_bLateLoad = bLate; - - return APLRes_Success; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Plugin initialization -//---------------------------------------------------------------------------------------------------- -public OnPluginStart() -{ - CreateConVar("entwatch_version", PLUGIN_VERSION, "Current version of entWatch", FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD); - - g_hCvar_DisplayEnabled = CreateConVar("entwatch_display_enable", "1", "Enable/Disable the display.", FCVAR_NONE, true, 0.0, true, 1.0); - g_hCvar_DisplayCooldowns = CreateConVar("entwatch_display_cooldowns", "1", "Show/Hide the cooldowns on the display.", FCVAR_NONE, true, 0.0, true, 1.0); - g_hCvar_ModeTeamOnly = CreateConVar("entwatch_mode_teamonly", "1", "Enable/Disable team only mode.", FCVAR_NONE, true, 0.0, true, 1.0); - g_hCvar_ConfigColor = CreateConVar("entwatch_config_color", "color_classic", "The name of the color config.", FCVAR_NONE); - - g_hCookie_Display = RegClientCookie("entwatch_display", "", CookieAccess_Private); - g_hCookie_Restricted = RegClientCookie("entwatch_restricted", "", CookieAccess_Private); - g_hCookie_RestrictedLength = RegClientCookie("entwatch_restrictedlength", "", CookieAccess_Private); - g_hCookie_RestrictedIssued = RegClientCookie("entwatch_restrictedissued", "", CookieAccess_Private); - g_hCookie_RestrictedBy = RegClientCookie("entwatch_restrictedby", "", CookieAccess_Private); - - new Handle:hTopMenu; - - if (LibraryExists("adminmenu") && ((hTopMenu = GetAdminTopMenu()) != INVALID_HANDLE)) - { - OnAdminMenuReady(hTopMenu); - } - - RegConsoleCmd("sm_hud", Command_ToggleHUD); - RegConsoleCmd("sm_status", Command_Status); - - RegAdminCmd("sm_eban", Command_Restrict, ADMFLAG_BAN); - RegAdminCmd("sm_ebanlist", Command_EBanlist, ADMFLAG_BAN); - RegAdminCmd("sm_eunban", Command_Unrestrict, ADMFLAG_BAN); - RegAdminCmd("sm_etransfer", Command_Transfer, ADMFLAG_BAN); - RegAdminCmd("sm_setcooldown", Command_Cooldown, ADMFLAG_BAN); - RegAdminCmd("sm_ew_reloadconfig", Command_ReloadConfig, ADMFLAG_CONFIG); - RegAdminCmd("sm_ewdebugarray", Command_DebugArray, ADMFLAG_CONFIG); - - HookEvent("round_start", Event_RoundStart, EventHookMode_Pre); - HookEvent("round_end", Event_RoundEnd, EventHookMode_Pre); - HookEvent("player_death", Event_PlayerDeath, EventHookMode_Pre); - - CreateTimer(1.0, Timer_DisplayHUD, _, TIMER_REPEAT); - CreateTimer(1.0, Timer_Cooldowns, _, TIMER_REPEAT); - - LoadTranslations("entWatch.phrases"); - LoadTranslations("common.phrases"); - - AutoExecConfig(true, "plugin.entWatch"); - - g_hOnBanForward = CreateGlobalForward("entWatch_OnClientBanned", ET_Ignore, Param_Cell, Param_Cell, Param_Cell); - g_hOnUnbanForward = CreateGlobalForward("entWatch_OnClientUnbanned", ET_Ignore, Param_Cell, Param_Cell); - - if (g_bLateLoad) - { - for (new i = 1; i <= MaxClients; i++) - { - if (!IsClientInGame(i) || IsFakeClient(i)) - continue; - - OnClientPutInServer(i); - OnClientCookiesCached(i); - } - } - - new Handle:hGameConf = LoadGameConfigFile("plugin.entWatch"); - if(hGameConf == INVALID_HANDLE) - { - SetFailState("Couldn't load plugin.entWatch game config!"); - return; - } - if(GameConfGetOffset(hGameConf, "GetSlot") == -1) - { - CloseHandle(hGameConf); - SetFailState("Couldn't get GetSlot offset from game config!"); - return; - } - if(GameConfGetOffset(hGameConf, "BumpWeapon") == -1) - { - CloseHandle(hGameConf); - SetFailState("Couldn't get BumpWeapon offset from game config!"); - return; - } - if(GameConfGetOffset(hGameConf, "OnPickedUp") == -1) - { - CloseHandle(hGameConf); - SetFailState("Couldn't get OnPickedUp offset from game config!"); - return; - } - - // 320 CBaseCombatWeapon::GetSlot(void)const - StartPrepSDKCall(SDKCall_Entity); - if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "GetSlot")) - { - CloseHandle(hGameConf); - SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"GetSlot\" failed!"); - return; - } - PrepSDKCall_SetReturnInfo(SDKType_PlainOldData, SDKPass_Plain); - g_hGetSlot = EndPrepSDKCall(); - - // 397 CCSPlayer::BumpWeapon(CBaseCombatWeapon *) - StartPrepSDKCall(SDKCall_Player); - if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "BumpWeapon")) - { - CloseHandle(hGameConf); - SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"BumpWeapon\" failed!"); - return; - } - PrepSDKCall_SetReturnInfo(SDKType_Bool, SDKPass_Plain); - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hBumpWeapon = EndPrepSDKCall(); - - // 300 CBaseCombatWeapon::OnPickedUp(CBaseCombatCharacter *) - StartPrepSDKCall(SDKCall_Entity); - if(!PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, "OnPickedUp")) - { - CloseHandle(hGameConf); - SetFailState("PrepSDKCall_SetFromConf(hGameConf, SDKConf_Virtual, \"OnPickedUp\" failed!"); - return; - } - PrepSDKCall_AddParameter(SDKType_CBaseEntity, SDKPass_Pointer); - g_hOnPickedUp = EndPrepSDKCall(); - - g_Offset_m_toggle_state = GameConfGetOffset(hGameConf, "CBaseButton_m_toggle_state"); - CloseHandle(hGameConf); - - if(g_hGetSlot == INVALID_HANDLE) - { - SetFailState("Couldn't prepare GetSlot SDKCall!"); - return; - } - if(g_hGetSlot == INVALID_HANDLE) - { - SetFailState("Couldn't prepare BumpWeapon SDKCall!"); - return; - } - if(g_hOnPickedUp == INVALID_HANDLE) - { - SetFailState("Couldn't prepare OnPickedUp SDKCall!"); - return; - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Main ban function -//---------------------------------------------------------------------------------------------------- -EBanClient(client, const String:sLength[], admin) -{ - new iBanLen = StringToInt(sLength); - new iBanDuration = (iBanLen - GetTime()) / 60; - - if (admin == 0) - { - Format(g_sRestrictedBy[client], sizeof(g_sRestrictedBy[]), "Console"); - SetClientCookie(client, g_hCookie_RestrictedBy, "Console"); - } - else - { - new String:sAdminSID[64]; - GetClientAuthId(admin, AuthId_Steam2, sAdminSID, sizeof(sAdminSID)); - Format(g_sRestrictedBy[client], sizeof(g_sRestrictedBy[]), "%s (%N)", sAdminSID, admin); - - SetClientCookie(client, g_hCookie_RestrictedBy, sAdminSID); - } - - if (iBanLen == 0) - { - iBanDuration = 0; - g_bRestricted[client] = true; - - LogAction(admin, client, "\"%L\" restricted \"%L\"", admin, client); - } - else if (iBanLen == 1) - { - iBanDuration = -1; - g_iRestrictedLength[client] = 1; - SetClientCookie(client, g_hCookie_RestrictedLength, "1"); - - LogAction(admin, client, "\"%L\" restricted \"%L\" permanently", admin, client); - } - else - { - g_iRestrictedLength[client] = iBanLen; - SetClientCookie(client, g_hCookie_RestrictedLength, sLength); - - LogAction(admin, client, "\"%L\" restricted \"%L\" for %d minutes", admin, client, iBanDuration); - } - - new String:sIssueTime[64]; - Format(sIssueTime, sizeof(sIssueTime), "%d", GetTime()); - - g_iRestrictedIssued[client] = GetTime(); - SetClientCookie(client, g_hCookie_RestrictedIssued, sIssueTime); - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%srestricted \x07%s%N", color_tag, color_name, admin, color_warning, color_name, client); - - Call_StartForward(g_hOnBanForward); - Call_PushCell(admin); - Call_PushCell(iBanDuration); - Call_PushCell(client); - Call_Finish(); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Main unban function -//---------------------------------------------------------------------------------------------------- -EUnbanClient(client, admin) -{ - g_bRestricted[client] = false; - g_iRestrictedLength[client] = 0; - g_iRestrictedIssued[client] = 0; - g_sRestrictedBy[client][0] = '\0'; - SetClientCookie(client, g_hCookie_RestrictedLength, "0"); - SetClientCookie(client, g_hCookie_RestrictedBy, ""); - SetClientCookie(client, g_hCookie_RestrictedIssued, ""); - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%sunrestricted \x07%s%N", color_tag, color_name, admin, color_warning, color_name, client); - LogAction(admin, client, "\"%L\" unrestricted \"%L\"", admin, client); - - Call_StartForward(g_hOnUnbanForward); - Call_PushCell(admin); - Call_PushCell(client); - Call_Finish(); -} -//---------------------------------------------------------------------------------------------------- -// Purpose: Safeguard against adminmenu unloading -//---------------------------------------------------------------------------------------------------- -public OnLibraryRemoved(const String:sName[]) -{ - if (StrEqual(sName, "adminmenu")) - g_hAdminMenu = INVALID_HANDLE; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Add our entries to the main admin menu -//---------------------------------------------------------------------------------------------------- -public OnAdminMenuReady(Handle:hAdminMenu) -{ - if (hAdminMenu == g_hAdminMenu) - { - return; - } - - g_hAdminMenu = hAdminMenu; - - new TopMenuObject:hMenuObj = AddToTopMenu(g_hAdminMenu, "entWatch_commands", TopMenuObject_Category, AdminMenu_Commands_Handler, INVALID_TOPMENUOBJECT); - - if (hMenuObj == INVALID_TOPMENUOBJECT) - { - return; - } - - AddToTopMenu(g_hAdminMenu, "entWatch_banlist", TopMenuObject_Item, Handler_EBanList, hMenuObj, "sm_ebanlist", ADMFLAG_BAN); - AddToTopMenu(g_hAdminMenu, "entWatch_ban", TopMenuObject_Item, Handler_EBan, hMenuObj, "sm_eban", ADMFLAG_BAN); - AddToTopMenu(g_hAdminMenu, "entWatch_transfer", TopMenuObject_Item, Handler_Transfer, hMenuObj, "sm_etransfer", ADMFLAG_BAN); - AddToTopMenu(g_hAdminMenu, "entWatch_unban", TopMenuObject_Item, Handler_EUnban, hMenuObj, "sm_eunban", ADMFLAG_BAN); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Menu Stuff -//---------------------------------------------------------------------------------------------------- -public AdminMenu_Commands_Handler(Handle:hMenu, TopMenuAction:hAction, TopMenuObject:hObjID, iParam1, String:sBuffer[], iMaxlen) -{ - if (hAction == TopMenuAction_DisplayOption) - { - Format(sBuffer, iMaxlen, "%s", "entWatch Commands", iParam1); - } - else if (hAction == TopMenuAction_DisplayTitle) - { - Format(sBuffer, iMaxlen, "%s", "entWatch Commands:", iParam1); - } -} - -public Handler_EBanList(Handle:hMenu, TopMenuAction:hAction, TopMenuObject:hObjID, iParam1, String:sBuffer[], iMaxlen) -{ - if (hAction == TopMenuAction_DisplayOption) - { - Format(sBuffer, iMaxlen, "%s", "List Banned Clients", iParam1); - } - else if (hAction == TopMenuAction_SelectOption) - { - Menu_List(iParam1); - } -} - -public Handler_EBan(Handle:hMenu, TopMenuAction:hAction, TopMenuObject:hObjID, iParam1, String:sBuffer[], iMaxlen) -{ - if (hAction == TopMenuAction_DisplayOption) - { - Format(sBuffer, iMaxlen, "%s", "Ban a Client", iParam1); - } - else if (hAction == TopMenuAction_SelectOption) - { - Menu_EBan(iParam1); - } -} - -public Handler_Transfer(Handle:hMenu, TopMenuAction:hAction, TopMenuObject:hObjID, iParam1, String:sBuffer[], iMaxlen) -{ - if (hAction == TopMenuAction_DisplayOption) - { - Format(sBuffer, iMaxlen, "%s", "Transfer an item", iParam1); - } - else if (hAction == TopMenuAction_SelectOption) - { - Menu_Transfer(iParam1); - } -} - -public Handler_EUnban(Handle:hMenu, TopMenuAction:hAction, TopMenuObject:hObjID, iParam1, String:sBuffer[], iMaxlen) -{ - if (hAction == TopMenuAction_DisplayOption) - { - Format(sBuffer, iMaxlen, "%s", "Unban a Client", iParam1); - } - else if (hAction == TopMenuAction_SelectOption) - { - Menu_EUnban(iParam1); - } -} - -Menu_List(client) -{ - new iBannedClients; - - new Handle:hListMenu = CreateMenu(MenuHandler_Menu_List); - SetMenuTitle(hListMenu, "[entWatch] Banned Clients:"); - SetMenuExitBackButton(hListMenu, true); - - for (new i = 1; i < MaxClients + 1; i++) - { - if (IsClientInGame(i) && AreClientCookiesCached(i)) - { - decl String:sBanLen[32]; - GetClientCookie(i, g_hCookie_RestrictedLength, sBanLen, sizeof(sBanLen)); - new iBanLen = StringToInt(sBanLen); - - if ((iBanLen != 0 && iBanLen >= GetTime()) || iBanLen == 1 || g_bRestricted[i]) - { - new iUserID = GetClientUserId(i); - decl String:sUserID[32]; - decl String:sBuff[64]; - Format(sBuff, sizeof(sBuff), "%N (#%i)", i, iUserID); - Format(sUserID, sizeof(sUserID), "%d", iUserID); - - AddMenuItem(hListMenu, sUserID, sBuff); - iBannedClients++; - } - } - } - - if (!iBannedClients) - AddMenuItem(hListMenu, "", "No Banned Clients.", ITEMDRAW_DISABLED); - - DisplayMenu(hListMenu, client, MENU_TIME_FOREVER); -} - -Menu_EBan(client) -{ - new Handle:hEBanMenu = CreateMenu(MenuHandler_Menu_EBan); - SetMenuTitle(hEBanMenu, "[entWatch] Ban a Client:"); - SetMenuExitBackButton(hEBanMenu, true); - AddTargetsToMenu2(hEBanMenu, client, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_CONNECTED); - - DisplayMenu(hEBanMenu, client, MENU_TIME_FOREVER); -} - -Menu_Transfer(client) -{ - new Handle:hTransferMenu = CreateMenu(MenuHandler_Menu_Transfer); - new String:sMenuTemp[64]; - new String:sIndexTemp[16]; - new iHeldCount = 0; - SetMenuTitle(hTransferMenu, "[entWatch] Transfer an item:"); - SetMenuExitBackButton(hTransferMenu, true); - - for (new i = 0; i < entArraySize; i++) - { - if (entArray[i][ent_allowtransfer]) - { - if (entArray[i][ent_ownerid] != -1) - { - IntToString(i, sIndexTemp, sizeof(sIndexTemp)); - Format(sMenuTemp, sizeof(sMenuTemp), "%s | %N (#%i)", entArray[i][ent_name], entArray[i][ent_ownerid], GetClientUserId(entArray[i][ent_ownerid])); - AddMenuItem(hTransferMenu, sIndexTemp, sMenuTemp, ITEMDRAW_DEFAULT); - iHeldCount++; - } - } - } - - if (!iHeldCount) - AddMenuItem(hTransferMenu, "", "No transferable items currently held.", ITEMDRAW_DISABLED); - - DisplayMenu(hTransferMenu, client, MENU_TIME_FOREVER); -} - -Menu_EUnban(client) -{ - new iBannedClients; - - new Handle:hEUnbanMenu = CreateMenu(MenuHandler_Menu_EUnban); - SetMenuTitle(hEUnbanMenu, "[entWatch] Unban a Client:"); - SetMenuExitBackButton(hEUnbanMenu, true); - - for (new i = 1; i < MaxClients + 1; i++) - { - if (IsClientInGame(i) && AreClientCookiesCached(i)) - { - decl String:sBanLen[32]; - GetClientCookie(i, g_hCookie_RestrictedLength, sBanLen, sizeof(sBanLen)); - new iBanLen = StringToInt(sBanLen); - - if ((iBanLen != 0 && iBanLen >= GetTime()) || iBanLen == 1 || g_bRestricted[i]) - { - new iUserID = GetClientUserId(i); - decl String:sUserID[32]; - decl String:sBuff[64]; - Format(sBuff, sizeof(sBuff), "%N (#%i)", i, iUserID); - Format(sUserID, sizeof(sUserID), "%d", iUserID); - - AddMenuItem(hEUnbanMenu, sUserID, sBuff); - iBannedClients++; - } - } - } - - if (!iBannedClients) - AddMenuItem(hEUnbanMenu, "", "No Banned Clients.", ITEMDRAW_DISABLED); - - DisplayMenu(hEUnbanMenu, client, MENU_TIME_FOREVER); -} - -public MenuHandler_Menu_List(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - } - - case MenuAction_Select: - { - decl String:sOption[32]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new target = GetClientOfUserId(StringToInt(sOption)); - - if (target == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Player no longer available", color_tag, color_warning); - - if (g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - else - CloseHandle(hMenu); - } - else - { - Menu_ListTarget(iParam1, target); - } - } - } -} - -public MenuHandler_Menu_EBan(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - } - - case MenuAction_Select: - { - decl String:sOption[32]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new target = GetClientOfUserId(StringToInt(sOption)); - - if (target == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Player no longer available", color_tag, color_warning); - - if (g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - else - CloseHandle(hMenu); - } - else - { - Menu_EBanTime(iParam1, target); - } - } - } -} - -public MenuHandler_Menu_Transfer(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - } - - case MenuAction_Select: - { - decl String:sOption[32]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new iEntityIndex = StringToInt(sOption); - - if (entArray[iEntityIndex][ent_ownerid] != -1) - { - Menu_TransferTarget(iParam1, iEntityIndex); - } - else - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Item no longer available.", color_tag, color_warning); - } - } - } -} - -public MenuHandler_Menu_EUnban(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack && g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - } - - case MenuAction_Select: - { - decl String:sOption[32]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new target = GetClientOfUserId(StringToInt(sOption)); - - if (target == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Player no longer available", color_tag, color_warning); - - if (g_hAdminMenu != INVALID_HANDLE) - DisplayTopMenu(g_hAdminMenu, iParam1, TopMenuPosition_LastCategory); - else - CloseHandle(hMenu); - } - else - { - EUnbanClient(target, iParam1); - } - } - } -} - -Menu_TransferTarget(client, iEntityIndex) -{ - new Handle:hTransferTarget = CreateMenu(MenuHandler_Menu_TransferTarget); - new String:sMenuTemp[64]; - new String:sIndexTemp[32]; - SetMenuTitle(hTransferTarget, "[entWatch] Transfer target:"); - SetMenuExitBackButton(hTransferTarget, true); - - g_iAdminMenuTarget[client] = iEntityIndex; - Format(sIndexTemp, sizeof(sIndexTemp), "%i", GetClientUserId(client)); - Format(sMenuTemp, sizeof(sMenuTemp), "%N (#%s)", client, sIndexTemp); - AddMenuItem(hTransferTarget, sIndexTemp, sMenuTemp, ITEMDRAW_DEFAULT); - - for (new i = 1; i < MAXPLAYERS; i++) - { - if (!IsClientInGame(i)) - continue; - - if (IsFakeClient(i)) - continue; - - if (GetClientTeam(i) != GetClientTeam(entArray[iEntityIndex][ent_ownerid])) - continue; - - if (i == client) - continue; - - Format(sIndexTemp, sizeof(sIndexTemp), "%i", GetClientUserId(i)); - Format(sMenuTemp, sizeof(sMenuTemp), "%N (#%s)", i, sIndexTemp); - AddMenuItem(hTransferTarget, sIndexTemp, sMenuTemp, ITEMDRAW_DEFAULT); - } - - DisplayMenu(hTransferTarget, client, MENU_TIME_FOREVER); -} - -public MenuHandler_Menu_TransferTarget(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch (hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack) - Menu_Transfer(iParam1); - } - - case MenuAction_Select: - { - decl String:sOption[64]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new iEntityIndex = g_iAdminMenuTarget[iParam1]; - new receiver = GetClientOfUserId(StringToInt(sOption)); - - if (receiver == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sReceiver is not valid anymore.", color_tag, color_warning); - return; - } - - if (entArray[iEntityIndex][ent_allowtransfer]) - { - if (entArray[iEntityIndex][ent_ownerid] != -1) - { - if (IsValidEdict(entArray[iEntityIndex][ent_weaponid])) - { - new iCurOwner = entArray[iEntityIndex][ent_ownerid]; - - if (GetClientTeam(receiver) != GetClientTeam(iCurOwner)) - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sThe receivers team differs from the targets team.", color_tag, color_warning); - return; - } - - new String:buffer_classname[64]; - GetEdictClassname(entArray[iEntityIndex][ent_weaponid], buffer_classname, sizeof(buffer_classname)); - - CS_DropWeapon(iCurOwner, entArray[iEntityIndex][ent_weaponid], false); - GivePlayerItem(iCurOwner, buffer_classname); - - if (entArray[iEntityIndex][ent_chat]) - { - entArray[iEntityIndex][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - entArray[iEntityIndex][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - } - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered all items from \x07%s%N \x07%sto \x07%s%N", color_tag, color_name, iParam1, color_warning, color_name, iCurOwner, color_warning, color_name, receiver); - - LogAction(iParam1, iCurOwner, "\"%L\" transfered all items from \"%L\" to \"%L\"", iParam1, iCurOwner, receiver); - } - } - else - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sItem is not valid anymore.", color_tag, color_warning); - } - } - } - } -} - -Menu_EBanTime(client, target) -{ - new Handle:hEBanMenuTime = CreateMenu(MenuHandler_Menu_EBanTime); - SetMenuTitle(hEBanMenuTime, "[entWatch] Ban Time for %N:", target); - SetMenuExitBackButton(hEBanMenuTime, true); - - g_iAdminMenuTarget[client] = target; - AddMenuItem(hEBanMenuTime, "0", "Temporary"); - AddMenuItem(hEBanMenuTime, "10", "10 Minutes"); - AddMenuItem(hEBanMenuTime, "60", "1 Hour"); - AddMenuItem(hEBanMenuTime, "1440", "1 Day"); - AddMenuItem(hEBanMenuTime, "10080", "1 Week"); - AddMenuItem(hEBanMenuTime, "40320", "1 Month"); - AddMenuItem(hEBanMenuTime, "1", "Permanent"); - - DisplayMenu(hEBanMenuTime, client, MENU_TIME_FOREVER); -} - -public MenuHandler_Menu_EBanTime(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack) - Menu_EBan(iParam1); - } - - case MenuAction_Select: - { - decl String:sOption[64]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new target = g_iAdminMenuTarget[iParam1]; - - if (target == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Player no longer available", color_tag, color_warning); - Menu_EBan(iParam1); - } - else - { - if (StrEqual(sOption, "0")) - { - EBanClient(target, "0", iParam1); - } - else if (StrEqual(sOption, "1")) - { - EBanClient(target, "1", iParam1); - } - else - { - new String:sBanLen[64]; - Format(sBanLen, sizeof(sBanLen), "%d", GetTime() + (StringToInt(sOption) * 60)); - - EBanClient(target, sBanLen, iParam1); - } - } - } - } -} - -Menu_ListTarget(client, target) -{ - new Handle:hListTargetMenu = CreateMenu(MenuHandler_Menu_ListTarget); - SetMenuTitle(hListTargetMenu, "[entWatch] Banned Client: %N", target); - SetMenuExitBackButton(hListTargetMenu, true); - - new String:sBanExpiryDate[64]; - new String:sBanIssuedDate[64]; - new String:sBanDuration[64]; - new String:sBannedBy[64]; - new String:sUserID[32]; - new iBanExpiryDate = g_iRestrictedLength[target]; - new iBanIssuedDate = g_iRestrictedIssued[target]; - new iBanDuration = (iBanExpiryDate - iBanIssuedDate) / 60; - new iUserID = GetClientUserId(target); - - FormatTime(sBanExpiryDate, sizeof(sBanExpiryDate), NULL_STRING, iBanExpiryDate); - FormatTime(sBanIssuedDate, sizeof(sBanIssuedDate), NULL_STRING, iBanIssuedDate); - Format(sUserID, sizeof(sUserID), "%d", iUserID); - - if (!g_bRestricted[target]) - { - if (iBanExpiryDate == 1) - { - Format(sBanDuration, sizeof(sBanDuration), "Duration: Permanent"); - Format(sBanExpiryDate, sizeof(sBanExpiryDate), "Expires: Never"); - } - else - { - Format(sBanDuration, sizeof(sBanDuration), "Duration: %d %s", iBanDuration, SingularOrMultiple(iBanDuration)?"Minutes":"Minute"); - Format(sBanExpiryDate, sizeof(sBanExpiryDate), "Expires: %s", sBanExpiryDate); - } - } - else - { - Format(sBanDuration, sizeof(sBanDuration), "Duration: Temporary"); - Format(sBanExpiryDate, sizeof(sBanExpiryDate), "Expires: On Map Change"); - } - - Format(sBanIssuedDate, sizeof(sBanIssuedDate), "Issued on: %s", !(iBanIssuedDate == 0)?sBanIssuedDate:"Unknown"); - Format(sBannedBy, sizeof(sBannedBy), "Admin SID: %s", g_sRestrictedBy[target][0]?g_sRestrictedBy[target]:"Unknown"); - - AddMenuItem(hListTargetMenu, "", sBannedBy, ITEMDRAW_DISABLED); - AddMenuItem(hListTargetMenu, "", sBanIssuedDate, ITEMDRAW_DISABLED); - AddMenuItem(hListTargetMenu, "", sBanExpiryDate, ITEMDRAW_DISABLED); - AddMenuItem(hListTargetMenu, "", sBanDuration, ITEMDRAW_DISABLED); - AddMenuItem(hListTargetMenu, "", "", ITEMDRAW_SPACER); - AddMenuItem(hListTargetMenu, sUserID, "Unban"); - - DisplayMenu(hListTargetMenu, client, MENU_TIME_FOREVER); -} - -public MenuHandler_Menu_ListTarget(Handle:hMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch(hAction) - { - case MenuAction_End: - CloseHandle(hMenu); - - case MenuAction_Cancel: - { - if (iParam2 == MenuCancel_ExitBack) - Menu_List(iParam1); - } - - case MenuAction_Select: - { - decl String:sOption[32]; - GetMenuItem(hMenu, iParam2, sOption, sizeof(sOption)); - new target = GetClientOfUserId(StringToInt(sOption)); - - if (target == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch]\x07%s Player no longer available", color_tag, color_warning); - Menu_List(iParam1); - } - else - { - EUnbanClient(target, iParam1); - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Set variables -//---------------------------------------------------------------------------------------------------- -public OnMapStart() -{ - CleanData(); - LoadColors(); - LoadConfig(); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Hook RoundStart event -//---------------------------------------------------------------------------------------------------- -public Action:Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast) -{ - if (g_bConfigLoaded && g_bRoundTransition) - { - CPrintToChatAll("\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "welcome"); - } - - g_bRoundTransition = false; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Hook RoundEnd event -//---------------------------------------------------------------------------------------------------- -public Action:Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast) -{ - if (g_bConfigLoaded && !g_bRoundTransition) - { - for (new index = 0; index < entArraySize; index++) - { - SDKUnhook(entArray[index][ent_buttonid], SDKHook_Use, OnButtonUse); - entArray[index][ent_weaponid] = -1; - entArray[index][ent_buttonid] = -1; - entArray[index][ent_ownerid] = -1; - entArray[index][ent_cooldowntime] = -1; - entArray[index][ent_uses] = 0; - } - } - - g_bRoundTransition = true; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Set client cookies once cached -//---------------------------------------------------------------------------------------------------- -public OnClientCookiesCached(client) -{ - new String:buffer_cookie[32]; - GetClientCookie(client, g_hCookie_Display, buffer_cookie, sizeof(buffer_cookie)); - g_bDisplay[client] = bool:StringToInt(buffer_cookie); - - //GetClientCookie(client, g_hCookie_Restricted, buffer_cookie, sizeof(buffer_cookie)); - //g_bRestricted[client] = bool:StringToInt(buffer_cookie); - - GetClientCookie(client, g_hCookie_RestrictedLength, buffer_cookie, sizeof(buffer_cookie)); - - if (StringToInt(buffer_cookie) != 1 && StringToInt(buffer_cookie) <= GetTime()) - { - g_iRestrictedLength[client] = 0; - SetClientCookie(client, g_hCookie_RestrictedLength, "0"); - } - else - { - g_iRestrictedLength[client] = StringToInt(buffer_cookie); - } - - GetClientCookie(client, g_hCookie_RestrictedIssued, buffer_cookie, sizeof(buffer_cookie)); - g_iRestrictedIssued[client] = StringToInt(buffer_cookie); - - GetClientCookie(client, g_hCookie_RestrictedBy, buffer_cookie, sizeof(buffer_cookie)); - Format(g_sRestrictedBy[client], sizeof(g_sRestrictedBy[]), "%s", buffer_cookie); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Hook weapons and update banned clients to new method -//---------------------------------------------------------------------------------------------------- -public OnClientPutInServer(client) -{ - SDKHook(client, SDKHook_WeaponDropPost, OnWeaponDrop); - SDKHook(client, SDKHook_WeaponEquipPost, OnWeaponEquip); - SDKHook(client, SDKHook_WeaponCanUse, OnWeaponCanUse); - - g_bRestricted[client] = false; - - if (!AreClientCookiesCached(client)) - { - g_bDisplay[client] = false; - //g_bRestricted[client] = false; - g_iRestrictedLength[client] = 0; - } - else - { - decl String:restricted[32]; - GetClientCookie(client, g_hCookie_Restricted, restricted, sizeof(restricted)); - - if (StringToInt(restricted) == 1) - { - SetClientCookie(client, g_hCookie_RestrictedLength, "1"); - SetClientCookie(client, g_hCookie_Restricted, "0"); - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Notify of Disconnect if they had a special weapon and unhook weapons -//---------------------------------------------------------------------------------------------------- -public OnClientDisconnect(client) -{ - if (g_bConfigLoaded && !g_bRoundTransition) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_ownerid] != -1 && entArray[index][ent_ownerid] == client) - { - entArray[index][ent_ownerid] = -1; - - if (entArray[index][ent_forcedrop] && IsValidEdict(entArray[index][ent_weaponid])) - CS_DropWeapon(client, entArray[index][ent_weaponid], false); - - if (entArray[index][ent_chat]) - { - new String:buffer_steamid[32]; - GetClientAuthId(client, AuthId_Steam2, buffer_steamid, sizeof(buffer_steamid)); - ReplaceString(buffer_steamid, sizeof(buffer_steamid), "STEAM_", "", true); - - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(client) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, client, color_disconnect, color_steamid, buffer_steamid, color_disconnect, color_disconnect, "disconnect", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - } - } - } - } - - SDKUnhook(client, SDKHook_WeaponDropPost, OnWeaponDrop); - SDKUnhook(client, SDKHook_WeaponEquipPost, OnWeaponEquip); - SDKUnhook(client, SDKHook_WeaponCanUse, OnWeaponCanUse); - - g_bDisplay[client] = false; - g_bRestricted[client] = false; - g_iRestrictedLength[client] = 0; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Notify of Death if they had a special weapon -//---------------------------------------------------------------------------------------------------- -public Action:Event_PlayerDeath(Handle:event, const String:name[], bool:dontBroadcast) -{ - new client = GetClientOfUserId(GetEventInt(event, "userid")); - - if (g_bConfigLoaded && !g_bRoundTransition) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_ownerid] != -1 && entArray[index][ent_ownerid] == client) - { - entArray[index][ent_ownerid] = -1; - - if (entArray[index][ent_forcedrop] && IsValidEdict(entArray[index][ent_weaponid])) - CS_DropWeapon(client, entArray[index][ent_weaponid], false); - - if (entArray[index][ent_chat]) - { - new String:buffer_steamid[32]; - GetClientAuthId(client, AuthId_Steam2, buffer_steamid, sizeof(buffer_steamid)); - ReplaceString(buffer_steamid, sizeof(buffer_steamid), "STEAM_", "", true); - - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(client) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, client, color_death, color_steamid, buffer_steamid, color_death, color_death, "death", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - } - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Notify when they pick up a special weapon -//---------------------------------------------------------------------------------------------------- -public Action:OnWeaponEquip(client, weapon) -{ - if (g_bConfigLoaded && !g_bRoundTransition && IsValidEdict(weapon)) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_hammerid] == Entity_GetHammerID(weapon)) - { - if (entArray[index][ent_weaponid] != -1 && entArray[index][ent_weaponid] == weapon) - { - entArray[index][ent_ownerid] = client; - - if (entArray[index][ent_chat]) - { - new String:buffer_steamid[32]; - GetClientAuthId(client, AuthId_Steam2, buffer_steamid, sizeof(buffer_steamid)); - ReplaceString(buffer_steamid, sizeof(buffer_steamid), "STEAM_", "", true); - - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(client) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, client, color_pickup, color_steamid, buffer_steamid, color_pickup, color_pickup, "pickup", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - } - - break; - } - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Notify when they drop a special weapon -//---------------------------------------------------------------------------------------------------- -public Action:OnWeaponDrop(client, weapon) -{ - if (g_bConfigLoaded && !g_bRoundTransition && IsValidEdict(weapon)) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_hammerid] == Entity_GetHammerID(weapon)) - { - if (entArray[index][ent_weaponid] != -1 && entArray[index][ent_weaponid] == weapon) - { - entArray[index][ent_ownerid] = -1; - - if (entArray[index][ent_chat]) - { - new String:buffer_steamid[32]; - GetClientAuthId(client, AuthId_Steam2, buffer_steamid, sizeof(buffer_steamid)); - ReplaceString(buffer_steamid, sizeof(buffer_steamid), "STEAM_", "", true); - - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(client) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, client, color_drop, color_steamid, buffer_steamid, color_drop, color_drop, "drop", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - } - - break; - } - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Prevent banned players from picking up special weapons -//---------------------------------------------------------------------------------------------------- -public Action:OnWeaponCanUse(client, weapon) -{ - if (g_bConfigLoaded && !g_bRoundTransition && IsValidEdict(weapon)) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_hammerid] == Entity_GetHammerID(weapon)) - { - if (entArray[index][ent_weaponid] == -1) - { - entArray[index][ent_weaponid] = weapon; - - if (entArray[index][ent_buttonid] == -1 && entArray[index][ent_mode] != 0) - { - new String:buffer_targetname[32]; - Entity_GetTargetName(weapon, buffer_targetname, sizeof(buffer_targetname)); - - new button = -1; - while ((button = FindEntityByClassname(button, entArray[index][ent_buttonclass])) != -1) - { - if (IsValidEdict(button)) - { - new String:buffer_parentname[32]; - Entity_GetParentName(button, buffer_parentname, sizeof(buffer_parentname)); - - if (StrEqual(buffer_targetname, buffer_parentname)) - { - SDKHook(button, SDKHook_Use, OnButtonUse); - entArray[index][ent_buttonid] = button; - break; - } - } - } - } - } - - if (entArray[index][ent_weaponid] == weapon) - { - if (entArray[index][ent_blockpickup]) - { - return Plugin_Handled; - } - - if (g_bRestricted[client] || (!AreClientCookiesCached(client))) - { - return Plugin_Handled; - } - - if (g_iRestrictedLength[client] != 1 && g_iRestrictedLength[client] != 0 && g_iRestrictedLength[client] <= GetTime()) - { - //g_bRestricted[client] = false; - g_iRestrictedLength[client] = 0; - - SetClientCookie(client, g_hCookie_RestrictedLength, "0"); - //SetClientCookie(client, g_hCookie_Restricted, "0"); - - return Plugin_Continue; - } - - if (g_iRestrictedLength[client] > GetTime() || g_iRestrictedLength[client] == 1) - { - return Plugin_Handled; - } - - return Plugin_Continue; - } - } - } - } - - return Plugin_Continue; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Notify when they use a special weapon -//---------------------------------------------------------------------------------------------------- -public Action:OnButtonUse(button, activator, caller, UseType:type, Float:value) -{ - if (g_bConfigLoaded && !g_bRoundTransition && IsValidEdict(button)) - { - int iOffset = FindDataMapInfo(button, "m_bLocked"); - if (iOffset != -1 && GetEntData(button, iOffset, 1)) - return Plugin_Handled; - - if (g_Offset_m_toggle_state != -1) - { - new String:sClassname[32]; - if (GetEntityClassname(button, sClassname, sizeof(sClassname)) && StrEqual(sClassname, "func_button")) - { - new m_toogle_state = GetEntData(button, g_Offset_m_toggle_state, 4); - if (m_toogle_state != 1) - return Plugin_Handled; - } - } - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_buttonid] != -1 && entArray[index][ent_buttonid] == button) - { - if (entArray[index][ent_ownerid] != activator && entArray[index][ent_ownerid] != caller) - return Plugin_Handled; - - if (entArray[index][ent_hasfiltername]) - DispatchKeyValue(activator, "targetname", entArray[index][ent_filtername]); - - new String:buffer_steamid[32]; - GetClientAuthId(activator, AuthId_Steam2, buffer_steamid, sizeof(buffer_steamid)); - ReplaceString(buffer_steamid, sizeof(buffer_steamid), "STEAM_", "", true); - - if (entArray[index][ent_mode] == 1) - { - return Plugin_Changed; - } - else if (entArray[index][ent_mode] == 2 && entArray[index][ent_cooldowntime] <= -1) - { - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(activator) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, activator, color_use, color_steamid, buffer_steamid, color_use, color_use, "use", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - - entArray[index][ent_cooldowntime] = entArray[index][ent_cooldown]; - return Plugin_Changed; - } - else if (entArray[index][ent_mode] == 3 && entArray[index][ent_uses] < entArray[index][ent_maxuses]) - { - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(activator) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, activator, color_use, color_steamid, buffer_steamid, color_use, color_use, "use", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - - entArray[index][ent_uses]++; - return Plugin_Changed; - } - else if (entArray[index][ent_mode] == 4 && entArray[index][ent_uses] < entArray[index][ent_maxuses] && entArray[index][ent_cooldowntime] <= -1) - { - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(activator) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, activator, color_use, color_steamid, buffer_steamid, color_use, color_use, "use", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - - entArray[index][ent_cooldowntime] = entArray[index][ent_cooldown]; - entArray[index][ent_uses]++; - return Plugin_Changed; - } - else if (entArray[index][ent_mode] == 5 && entArray[index][ent_cooldowntime] <= -1) - { - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == GetClientTeam(activator) || !IsPlayerAlive(ply) || CheckCommandAccess(ply, "entWatch_chat", ADMFLAG_CHAT))) - { - CPrintToChat(ply, "\x07%s[entWatch] \x07%s%N \x07%s(\x07%s%s\x07%s) \x07%s%t \x07%s%s", color_tag, color_name, activator, color_use, color_steamid, buffer_steamid, color_use, color_use, "use", entArray[index][ent_color], entArray[index][ent_name]); - } - } - } - - entArray[index][ent_uses]++; - if (entArray[index][ent_uses] >= entArray[index][ent_maxuses]) - { - entArray[index][ent_cooldowntime] = entArray[index][ent_cooldown]; - entArray[index][ent_uses] = 0; - } - - return Plugin_Changed; - } - - return Plugin_Handled; - } - } - } - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Display current special weapon holders -//---------------------------------------------------------------------------------------------------- -public Action:Timer_DisplayHUD(Handle:timer) -{ - if (GetConVarBool(g_hCvar_DisplayEnabled)) - { - if (g_bConfigLoaded && !g_bRoundTransition) - { - new String:buffer_teamtext[5][250]; - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_hud] && entArray[index][ent_ownerid] != -1) - { - new String:buffer_temp[128]; - - if (GetConVarBool(g_hCvar_DisplayCooldowns)) - { - if (entArray[index][ent_mode] == 2) - { - if (entArray[index][ent_cooldowntime] > 0) - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_cooldowntime], entArray[index][ent_ownerid]); - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%s]: %N\n", entArray[index][ent_shortname], "R", entArray[index][ent_ownerid]); - } - } - else if (entArray[index][ent_mode] == 3) - { - if (entArray[index][ent_uses] < entArray[index][ent_maxuses]) - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d/%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_uses], entArray[index][ent_maxuses], entArray[index][ent_ownerid]); - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%s]: %N\n", entArray[index][ent_shortname], "D", entArray[index][ent_ownerid]); - } - } - else if (entArray[index][ent_mode] == 4) - { - if (entArray[index][ent_cooldowntime] > 0) - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_cooldowntime], entArray[index][ent_ownerid]); - } - else - { - if (entArray[index][ent_uses] < entArray[index][ent_maxuses]) - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d/%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_uses], entArray[index][ent_maxuses], entArray[index][ent_ownerid]); - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%s]: %N\n", entArray[index][ent_shortname], "D", entArray[index][ent_ownerid]); - } - } - } - else if (entArray[index][ent_mode] == 5) - { - if (entArray[index][ent_cooldowntime] > 0) - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_cooldowntime], entArray[index][ent_ownerid]); - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%d/%d]: %N\n", entArray[index][ent_shortname], entArray[index][ent_uses], entArray[index][ent_maxuses], entArray[index][ent_ownerid]); - } - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s[%s]: %N\n", entArray[index][ent_shortname], "N/A", entArray[index][ent_ownerid]); - } - } - else - { - Format(buffer_temp, sizeof(buffer_temp), "%s: %N\n", entArray[index][ent_shortname], entArray[index][ent_ownerid]); - } - - if (strlen(buffer_temp) + strlen(buffer_teamtext[GetClientTeam(entArray[index][ent_ownerid])]) <= sizeof(buffer_teamtext[])) - { - StrCat(buffer_teamtext[GetClientTeam(entArray[index][ent_ownerid])], sizeof(buffer_teamtext[]), buffer_temp); - } - } - } - - for (new ply = 1; ply <= MaxClients; ply++) - { - if (IsClientConnected(ply) && IsClientInGame(ply)) - { - if (g_bDisplay[ply]) - { - new String:buffer_text[250]; - - for (new teamid = 0; teamid < sizeof(buffer_teamtext); teamid++) - { - if (!GetConVarBool(g_hCvar_ModeTeamOnly) || (GetConVarBool(g_hCvar_ModeTeamOnly) && GetClientTeam(ply) == teamid || !IsPlayerAlive(ply))) - { - if (strlen(buffer_teamtext[teamid]) + strlen(buffer_text) <= sizeof(buffer_text)) - { - StrCat(buffer_text, sizeof(buffer_text), buffer_teamtext[teamid]); - } - } - } - - new Handle:hBuffer = StartMessageOne("KeyHintText", ply); - BfWriteByte(hBuffer, 1); - BfWriteString(hBuffer, buffer_text); - EndMessage(); - } - } - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Calculate cooldown time -//---------------------------------------------------------------------------------------------------- -public Action:Timer_Cooldowns(Handle:timer) -{ - if (g_bConfigLoaded && !g_bRoundTransition) - { - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_cooldowntime] >= 0) - { - entArray[index][ent_cooldowntime]--; - } - } - } -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Toggle HUD -//---------------------------------------------------------------------------------------------------- -public Action:Command_ToggleHUD(client, args) -{ - if (AreClientCookiesCached(client)) - { - if (g_bDisplay[client]) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "display disabled"); - SetClientCookie(client, g_hCookie_Display, "0"); - g_bDisplay[client] = false; - } - else - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "display enabled"); - SetClientCookie(client, g_hCookie_Display, "1"); - g_bDisplay[client] = true; - } - } - else - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "cookies loading"); - } - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Check status -//---------------------------------------------------------------------------------------------------- -public Action:Command_Status(client, args) -{ - if (args > 0 && CheckCommandAccess(client, "", ADMFLAG_BAN, true)) - { - decl String:Arguments[64]; - decl String:CStatus[64]; - new target = -1; - GetCmdArg(1, Arguments, sizeof(Arguments)); - target = FindTarget(client, Arguments); - - if (target == -1) - { - return Plugin_Handled; - } - - if (AreClientCookiesCached(target)) - { - GetClientCookie(target, g_hCookie_RestrictedLength, CStatus, sizeof(CStatus)); - - if (g_bRestricted[target]) - { - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s is temporarily restricted.", color_tag, color_warning, color_name, target, color_warning); - - return Plugin_Handled; - } - - if (StringToInt(CStatus) == 0) - { - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s is not restricted.", color_tag, color_warning, color_name, target, color_warning); - - return Plugin_Handled; - } - else if (StringToInt(CStatus) == 1) - { - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s is permanently restricted.", color_tag, color_warning, color_name, target, color_warning); - - return Plugin_Handled; - } - else if (StringToInt(CStatus) <= GetTime()) - { - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s is not restricted.", color_tag, color_warning, color_name, target, color_warning); - g_iRestrictedLength[target] = 0; - SetClientCookie(target, g_hCookie_RestrictedLength, "0"); - - return Plugin_Handled; - } - - decl String:RemainingTime[128]; - decl String:FRemainingTime[128]; - GetClientCookie(target, g_hCookie_RestrictedLength, RemainingTime, sizeof(RemainingTime)); - new tstamp = (StringToInt(RemainingTime) - GetTime()); - - new days = (tstamp / 86400); - new hours = ((tstamp / 3600) % 24); - new minutes = ((tstamp / 60) % 60); - new seconds = (tstamp % 60); - - if (tstamp > 86400) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s, %d %s, %d %s", days, SingularOrMultiple(days)?"Days":"Day", hours, SingularOrMultiple(hours)?"Hours":"Hour", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else if (tstamp > 3600) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s, %d %s", hours, SingularOrMultiple(hours)?"Hours":"Hour", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else if (tstamp > 60) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s is restricted for another: \x04%s", color_tag, color_warning, color_name, target, color_warning, FRemainingTime); - - return Plugin_Handled; - } - else - { - CReplyToCommand(client, "\x07%s[entWatch]\x07%s \x07%s%N\x07%s's cookies haven't loaded yet.", color_tag, color_warning, color_name, target, color_warning); - return Plugin_Handled; - } - } - - if (g_bRestricted[client]) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "status restricted"); - - return Plugin_Handled; - } - - if (AreClientCookiesCached(client)) - { - if (g_iRestrictedLength[client] >= 1) - { - if (g_iRestrictedLength[client] != 1 && g_iRestrictedLength[client] != 0 && g_iRestrictedLength[client] <= GetTime()) - { - g_iRestrictedLength[client] = 0; - SetClientCookie(client, g_hCookie_RestrictedLength, "0"); - - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "status unrestricted"); - return Plugin_Handled; - } - - if (g_iRestrictedLength[client] == 1) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t \x04(permanent)", color_tag, color_warning, "status restricted"); - - return Plugin_Handled; - } - else if (g_iRestrictedLength[client] > 1) - { - decl String:RemainingTime[128]; - decl String:FRemainingTime[128]; - GetClientCookie(client, g_hCookie_RestrictedLength, RemainingTime, sizeof(RemainingTime)); - new tstamp = (StringToInt(RemainingTime) - GetTime()); - - new days = (tstamp / 86400); - new hours = ((tstamp / 3600) % 24); - new minutes = ((tstamp / 60) % 60); - new seconds = (tstamp % 60); - - if (tstamp > 86400) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s, %d %s, %d %s", days, SingularOrMultiple(days)?"Days":"Day", hours, SingularOrMultiple(hours)?"Hours":"Hour", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else if (tstamp > 3600) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s, %d %s", hours, SingularOrMultiple(hours)?"Hours":"Hour", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else if (tstamp > 60) - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s, %d %s", minutes, SingularOrMultiple(minutes)?"Minutes":"Minute", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - else - Format(FRemainingTime, sizeof(FRemainingTime), "%d %s", seconds, SingularOrMultiple(seconds)?"Seconds":"Second"); - - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t \x04(%s)", color_tag, color_warning, "status restricted", FRemainingTime); - - return Plugin_Handled; - } - - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "status restricted"); - } - else - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "status unrestricted"); - } - } - else - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%s%t", color_tag, color_warning, "cookies loading"); - } - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Ban a client -//---------------------------------------------------------------------------------------------------- -public Action:Command_Restrict(client, args) -{ - if (GetCmdArgs() < 1) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_eban ", color_tag, color_warning); - return Plugin_Handled; - } - - char sArgs[64]; - char sTargetName[MAX_TARGET_LENGTH]; - int iTargets[MAXPLAYERS]; - int iTargetCount; - bool bIsML; - - GetCmdArg(1, sArgs, sizeof(sArgs)); - - if ((iTargetCount = ProcessTargetString( - sArgs, - client, - iTargets, - MAXPLAYERS, - COMMAND_FILTER_NO_BOTS, - sTargetName, - sizeof(sTargetName), - bIsML)) <= 0) - { - ReplyToTargetError(client, iTargetCount); - return Plugin_Handled; - } - - if (GetCmdArgs() > 1) - { - decl String:sLen[64]; - decl String:Flength[64]; - GetCmdArg(2, sLen, sizeof(sLen)); - - Format(Flength, sizeof(Flength), "%d", GetTime() + (StringToInt(sLen) * 60)); - - if (StringToInt(sLen) == 0) - { - EBanClient(iTargets[0], "1", client); - - return Plugin_Handled; - } - else if (StringToInt(sLen) > 0) - { - EBanClient(iTargets[0], Flength, client); - } - - return Plugin_Handled; - } - - EBanClient(iTargets[0], "0", client); - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Lists the clients that are currently on the server and banned -//---------------------------------------------------------------------------------------------------- -public Action:Command_EBanlist(client, args) -{ - decl String:sBuff[4096]; - new bool:bFirst = true; - Format(sBuff, sizeof(sBuff), "No players found."); - - for (new i = 1; i < MaxClients + 1; i++) - { - if (!IsClientInGame(i)) - continue; - - if (AreClientCookiesCached(i)) - { - decl String:sBanLen[32]; - GetClientCookie(i, g_hCookie_RestrictedLength, sBanLen, sizeof(sBanLen)); - new iBanLen = StringToInt(sBanLen); - - if ((iBanLen != 0 && iBanLen >= GetTime()) || iBanLen == 1) - { - if (bFirst) - { - bFirst = false; - Format(sBuff, sizeof(sBuff), ""); - } - else - { - Format(sBuff, sizeof(sBuff), "%s, ", sBuff); - } - - new iUserID = GetClientUserId(i); - Format(sBuff, sizeof(sBuff), "%s%N (#%i)", sBuff, i, iUserID); - } - } - else if (g_bRestricted[i]) - { - if (bFirst) - { - bFirst = false; - Format(sBuff, sizeof(sBuff), ""); - } - else - { - Format(sBuff, sizeof(sBuff), "%s, ", sBuff); - } - - new iUserID = GetClientUserId(i); - Format(sBuff, sizeof(sBuff), "%s%N (#%i)", sBuff, i, iUserID); - } - } - - CReplyToCommand(client, "\x07%s[entWatch]\x07%s Currently e-banned: \x07%s%s", color_tag, color_warning, color_name, sBuff); - Format(sBuff, sizeof(sBuff), ""); - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Unban a client -//---------------------------------------------------------------------------------------------------- -public Action:Command_Unrestrict(client, args) -{ - if (GetCmdArgs() < 1) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_eunban ", color_tag, color_warning); - return Plugin_Handled; - } - - new String:target_argument[64]; - GetCmdArg(1, target_argument, sizeof(target_argument)); - - new target = -1; - if ((target = FindTarget(client, target_argument, true)) == -1) - { - return Plugin_Handled; - } - - EUnbanClient(target, client); - - return Plugin_Handled; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Transfer a special weapon from a client to another -//---------------------------------------------------------------------------------------------------- -public Action:Command_Transfer(client, args) -{ - if (GetCmdArgs() < 2) - { - CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_etransfer ", color_tag, color_warning); - - return Plugin_Handled; - } - - new bool:bFoundWeapon = false; - new iEntityIndex = -1; - new iWeaponCount = 0; - new target = -1; - new receiver = -1; - - new String:target_argument[64]; - GetCmdArg(1, target_argument, sizeof(target_argument)); - - new String:receiver_argument[64]; - GetCmdArg(2, receiver_argument, sizeof(receiver_argument)); - - if ((receiver = FindTarget(client, receiver_argument, false)) == -1) - return Plugin_Handled; - - if (g_bConfigLoaded && !g_bRoundTransition) - { - if (target_argument[0] == '$') - { - strcopy(target_argument, sizeof(target_argument), target_argument[1]); - - for (new i = 0; i < entArraySize; i++) - { - if (StrEqual(target_argument, entArray[i][ent_name], false) || StrEqual(target_argument, entArray[i][ent_shortname], false)) - { - - iWeaponCount++; - bFoundWeapon = true; - iEntityIndex = i; - } - } - } - else - { - target = FindTarget(client, target_argument, false); - - if (target != -1) - { - if (GetClientTeam(target) != GetClientTeam(receiver)) - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sThe receivers team differs from the targets team.", color_tag, color_warning); - return Plugin_Handled; - } - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_ownerid] != -1) - { - if (entArray[index][ent_ownerid] == target) - { - if (entArray[index][ent_allowtransfer]) - { - if (IsValidEdict(entArray[index][ent_weaponid])) - { - new String:buffer_classname[64]; - GetEdictClassname(entArray[index][ent_weaponid], buffer_classname, sizeof(buffer_classname)); - - CS_DropWeapon(target, entArray[index][ent_weaponid], false); - GivePlayerItem(target, buffer_classname); - - if (entArray[index][ent_chat]) - { - entArray[index][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entArray[index][ent_weaponid]); - entArray[index][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entArray[index][ent_weaponid]); - } - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered all items from \x07%s%N \x07%sto \x07%s%N", color_tag, color_name, client, color_warning, color_name, target, color_warning, color_name, receiver); - - LogAction(client, target, "\"%L\" transfered all items from \"%L\" to \"%L\"", client, target, receiver); - - return Plugin_Handled; - } - } - } - } - } - } - else - { - return Plugin_Handled; - } - } - } - - if (iWeaponCount > 1) - { - new Handle:hEdictMenu = CreateMenu(EdictMenu_Handler); - new String:sMenuTemp[64]; - new String:sIndexTemp[16]; - new iHeldCount = 0; - SetMenuTitle(hEdictMenu, "[entWatch] Edict targets:"); - - for (new i = 0; i < entArraySize; i++) - { - if (StrEqual(target_argument, entArray[i][ent_name], false) || StrEqual(target_argument, entArray[i][ent_shortname], false)) - { - if (entArray[i][ent_allowtransfer]) - { - if (entArray[i][ent_ownerid] != -1) - { - IntToString(i, sIndexTemp, sizeof(sIndexTemp)); - Format(sMenuTemp, sizeof(sMenuTemp), "%s | %N (#%i)", entArray[i][ent_name], entArray[i][ent_ownerid], GetClientUserId(entArray[i][ent_ownerid])); - AddMenuItem(hEdictMenu, sIndexTemp, sMenuTemp, ITEMDRAW_DEFAULT); - iHeldCount++; - } - /*else //not a good idea - { - IntToString(i, sIndexTemp, sizeof(sIndexTemp)); - Format(sMenuTemp, sizeof(sMenuTemp), "%s", entArray[i][ent_name]); - AddMenuItem(hEdictMenu, sIndexTemp, sMenuTemp, ITEMDRAW_DEFAULT); - }*/ - } - } - } - - if (iHeldCount == 1) - { - iEntityIndex = StringToInt(sIndexTemp); - - if (entArray[iEntityIndex][ent_allowtransfer]) - { - if (entArray[iEntityIndex][ent_ownerid] != -1) - { - if (IsValidEdict(entArray[iEntityIndex][ent_weaponid])) - { - new iCurOwner = entArray[iEntityIndex][ent_ownerid]; - - if (GetClientTeam(receiver) != GetClientTeam(iCurOwner)) - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sThe receivers team differs from the targets team.", color_tag, color_warning); - CloseHandle(hEdictMenu); - return Plugin_Handled; - } - - new String:buffer_classname[64]; - GetEdictClassname(entArray[iEntityIndex][ent_weaponid], buffer_classname, sizeof(buffer_classname)); - - CS_DropWeapon(iCurOwner, entArray[iEntityIndex][ent_weaponid], false); - GivePlayerItem(iCurOwner, buffer_classname); - - if (entArray[iEntityIndex][ent_chat]) - { - entArray[iEntityIndex][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - entArray[iEntityIndex][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - } - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered all items from \x07%s%N \x07%sto \x07%s%N", color_tag, color_name, client, color_warning, color_name, iCurOwner, color_warning, color_name, receiver); - - LogAction(client, iCurOwner, "\"%L\" transfered all items from \"%L\" to \"%L\"", client, iCurOwner, receiver); - } - } - else - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sTarget is not valid.", color_tag, color_warning); - } - } - - CloseHandle(hEdictMenu); - } - else if (iHeldCount >= 2) - { - g_iAdminMenuTarget[client] = receiver; - DisplayMenu(hEdictMenu, client, MENU_TIME_FOREVER); - } - else - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sNo one is currently holding that item.", color_tag, color_warning); - CloseHandle(hEdictMenu); - } - } - else - { - if (entArray[iEntityIndex][ent_allowtransfer]) - { - if (entArray[iEntityIndex][ent_ownerid] != -1) - { - if (IsValidEdict(entArray[iEntityIndex][ent_weaponid])) - { - new iCurOwner = entArray[iEntityIndex][ent_ownerid]; - - new String:buffer_classname[64]; - GetEdictClassname(entArray[iEntityIndex][ent_weaponid], buffer_classname, sizeof(buffer_classname)); - - CS_DropWeapon(iCurOwner, entArray[iEntityIndex][ent_weaponid], false); - GivePlayerItem(iCurOwner, buffer_classname); - - if (entArray[iEntityIndex][ent_chat]) - { - entArray[iEntityIndex][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - entArray[iEntityIndex][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - } - - bFoundWeapon = true; - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered all items from \x07%s%N \x07%sto \x07%s%N", color_tag, color_name, client, color_warning, color_name, iCurOwner, color_warning, color_name, receiver); - - LogAction(client, iCurOwner, "\"%L\" transfered all items from \"%L\" to \"%L\"", client, iCurOwner, receiver); - } - } - else - { - new entity = Entity_GetEntityFromHammerID(entArray[iEntityIndex][ent_hammerid]); - - if (entArray[iEntityIndex][ent_chat]) - { - entArray[iEntityIndex][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entity); - entArray[iEntityIndex][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entity); - } - - bFoundWeapon = true; - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered \x07%s%s \x07%sto \x07%s%N", color_tag, color_name, client, color_warning, entArray[iEntityIndex][ent_color], entArray[iEntityIndex][ent_name], color_warning, color_name, receiver); - - LogAction(client, -1, "\"%L\" transfered \"%s\" to \"%L\"", client, entArray[iEntityIndex][ent_name], receiver); - } - } - } - - if (!bFoundWeapon) - CPrintToChat(client, "\x07%s[entWatch] \x07%sInvalid item name.", color_tag, color_warning); - - return Plugin_Handled; -} - -public EdictMenu_Handler(Handle:hEdictMenu, MenuAction:hAction, iParam1, iParam2) -{ - switch (hAction) - { - case MenuAction_End: - CloseHandle(hEdictMenu); - - case MenuAction_Select: - { - new String:sSelected[32]; - GetMenuItem(hEdictMenu, iParam2, sSelected, sizeof(sSelected)); - new iEntityIndex = StringToInt(sSelected); - new receiver = g_iAdminMenuTarget[iParam1]; - - if (receiver == 0) - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sReceiver is not valid anymore.", color_tag, color_warning); - return; - } - - if (entArray[iEntityIndex][ent_allowtransfer]) - { - if (entArray[iEntityIndex][ent_ownerid] != -1) - { - if (IsValidEdict(entArray[iEntityIndex][ent_weaponid])) - { - new iCurOwner = entArray[iEntityIndex][ent_ownerid]; - - if (GetClientTeam(receiver) != GetClientTeam(iCurOwner)) - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sThe receivers team differs from the targets team.", color_tag, color_warning); - return; - } - - new String:buffer_classname[64]; - GetEdictClassname(entArray[iEntityIndex][ent_weaponid], buffer_classname, sizeof(buffer_classname)); - - CS_DropWeapon(iCurOwner, entArray[iEntityIndex][ent_weaponid], false); - GivePlayerItem(iCurOwner, buffer_classname); - - if (entArray[iEntityIndex][ent_chat]) - { - entArray[iEntityIndex][ent_chat] = false; - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - entArray[iEntityIndex][ent_chat] = true; - } - else - { - FixedEquipPlayerWeapon(receiver, entArray[iEntityIndex][ent_weaponid]); - } - - CPrintToChatAll("\x07%s[entWatch] \x07%s%N \x07%stransfered all items from \x07%s%N \x07%sto \x07%s%N", color_tag, color_name, iParam1, color_warning, color_name, iCurOwner, color_warning, color_name, receiver); - - LogAction(iParam1, iCurOwner, "\"%L\" transfered all items from \"%L\" to \"%L\"", iParam1, iCurOwner, receiver); - } - } - else - { - CPrintToChat(iParam1, "\x07%s[entWatch] \x07%sItem is not valid anymore.", color_tag, color_warning); - } - } - } - } -} - -public Action:Command_DebugArray(client, args) -{ - if (g_bConfigLoaded && !g_bRoundTransition) - { - for (new i = 0; i < entArraySize; i++) - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sInfo at \x07%sindex \x04%i\x07%s: \x07%sWeaponID \x04%i\x07%s | \x07%sOwnerID \x04%i\x07%s | \x07%sHammerID \x04%i\x07%s | \x07%sName\x07%s \"\x04%s\x07%s\" | \x07%sShortName\x07%s \"\x04%s\x07%s\"", color_tag, color_warning, color_pickup, i, color_warning, color_pickup, entArray[i][ent_weaponid], color_warning, color_pickup, entArray[i][ent_ownerid], color_warning, color_pickup, entArray[i][ent_hammerid], color_warning, color_pickup, color_warning, entArray[i][ent_name], color_warning, color_pickup, color_warning, entArray[i][ent_shortname], color_warning); - } - } - else - { - CPrintToChat(client, "\x07%s[entWatch] \x07%sConfig file has not yet loaded or the round is transitioning.", color_tag, color_warning); - } - - return Plugin_Handled; -} - - -CleanData() -{ - for (new index = 0; index < entArraySize; index++) - { - Format(entArray[index][ent_name], 32, ""); - Format(entArray[index][ent_shortname], 32, ""); - Format(entArray[index][ent_color], 32, ""); - Format(entArray[index][ent_buttonclass], 32, ""); - Format(entArray[index][ent_filtername], 32, ""); - entArray[index][ent_hasfiltername] = false; - entArray[index][ent_blockpickup] = false; - entArray[index][ent_allowtransfer] = false; - entArray[index][ent_forcedrop] = false; - entArray[index][ent_chat] = false; - entArray[index][ent_hud] = false; - entArray[index][ent_hammerid] = -1; - entArray[index][ent_weaponid] = -1; - entArray[index][ent_buttonid] = -1; - entArray[index][ent_ownerid] = -1; - entArray[index][ent_mode] = 0; - entArray[index][ent_uses] = 0; - entArray[index][ent_maxuses] = 0; - entArray[index][ent_cooldown] = 0; - entArray[index][ent_cooldowntime] = -1; - } - - for (new index = 0; index < triggerSize; index++) - { - triggerArray[index] = 0; - } - - entArraySize = 0; - triggerSize = 0; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Load color settings -//---------------------------------------------------------------------------------------------------- -stock LoadColors() -{ - new Handle:hKeyValues = CreateKeyValues("colors"); - new String:buffer_config[128]; - new String:buffer_path[PLATFORM_MAX_PATH]; - new String:buffer_temp[16]; - - GetConVarString(g_hCvar_ConfigColor, buffer_config, sizeof(buffer_config)); - Format(buffer_path, sizeof(buffer_path), "cfg/sourcemod/entwatch/colors/%s.cfg", buffer_config); - FileToKeyValues(hKeyValues, buffer_path); - - KvRewind(hKeyValues); - - KvGetString(hKeyValues, "color_tag", buffer_temp, sizeof(buffer_temp)); - Format(color_tag, sizeof(color_tag), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_name", buffer_temp, sizeof(buffer_temp)); - Format(color_name, sizeof(color_name), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_steamid", buffer_temp, sizeof(buffer_temp)); - Format(color_steamid, sizeof(color_steamid), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_use", buffer_temp, sizeof(buffer_temp)); - Format(color_use, sizeof(color_use), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_pickup", buffer_temp, sizeof(buffer_temp)); - Format(color_pickup, sizeof(color_pickup), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_drop", buffer_temp, sizeof(buffer_temp)); - Format(color_drop, sizeof(color_drop), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_disconnect", buffer_temp, sizeof(buffer_temp)); - Format(color_disconnect, sizeof(color_disconnect), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_death", buffer_temp, sizeof(buffer_temp)); - Format(color_death, sizeof(color_death), "%s", buffer_temp); - - KvGetString(hKeyValues, "color_warning", buffer_temp, sizeof(buffer_temp)); - Format(color_warning, sizeof(color_warning), "%s", buffer_temp); - - CloseHandle(hKeyValues); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: Load configurations -//---------------------------------------------------------------------------------------------------- -stock LoadConfig() -{ - new Handle:hKeyValues = CreateKeyValues("entities"); - new String:buffer_map[128]; - new String:buffer_path[PLATFORM_MAX_PATH]; - new String:buffer_path_override[PLATFORM_MAX_PATH]; - new String:buffer_temp[32]; - new buffer_amount; - - GetCurrentMap(buffer_map, sizeof(buffer_map)); - Format(buffer_path, sizeof(buffer_path), "cfg/sourcemod/entwatch/maps/%s.cfg", buffer_map); - Format(buffer_path_override, sizeof(buffer_path_override), "cfg/sourcemod/entwatch/maps/%s_override.cfg", buffer_map); - if (FileExists(buffer_path_override)) - { - FileToKeyValues(hKeyValues, buffer_path_override); - LogMessage("Loading %s", buffer_path_override); - } - else - { - FileToKeyValues(hKeyValues, buffer_path); - LogMessage("Loading %s", buffer_path); - } - - KvRewind(hKeyValues); - if (KvGotoFirstSubKey(hKeyValues)) - { - g_bConfigLoaded = true; - entArraySize = 0; - triggerSize = 0; - - do - { - KvGetString(hKeyValues, "maxamount", buffer_temp, sizeof(buffer_temp)); - buffer_amount = StringToInt(buffer_temp); - - for (new i = 0; i < buffer_amount; i++) - { - KvGetString(hKeyValues, "name", buffer_temp, sizeof(buffer_temp)); - Format(entArray[entArraySize][ent_name], 32, "%s", buffer_temp); - - KvGetString(hKeyValues, "shortname", buffer_temp, sizeof(buffer_temp)); - Format(entArray[entArraySize][ent_shortname], 32, "%s", buffer_temp); - - KvGetString(hKeyValues, "color", buffer_temp, sizeof(buffer_temp)); - Format(entArray[entArraySize][ent_color], 32, "%s", buffer_temp); - - KvGetString(hKeyValues, "buttonclass", buffer_temp, sizeof(buffer_temp)); - Format(entArray[entArraySize][ent_buttonclass], 32, "%s", buffer_temp); - - KvGetString(hKeyValues, "filtername", buffer_temp, sizeof(buffer_temp)); - Format(entArray[entArraySize][ent_filtername], 32, "%s", buffer_temp); - - KvGetString(hKeyValues, "hasfiltername", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_hasfiltername] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "blockpickup", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_blockpickup] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "allowtransfer", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_allowtransfer] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "forcedrop", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_forcedrop] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "chat", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_chat] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "hud", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_hud] = StrEqual(buffer_temp, "true", false); - - KvGetString(hKeyValues, "hammerid", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_hammerid] = StringToInt(buffer_temp); - - KvGetString(hKeyValues, "mode", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_mode] = StringToInt(buffer_temp); - - KvGetString(hKeyValues, "maxuses", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_maxuses] = StringToInt(buffer_temp); - - KvGetString(hKeyValues, "cooldown", buffer_temp, sizeof(buffer_temp)); - entArray[entArraySize][ent_cooldown] = StringToInt(buffer_temp); - - KvGetString(hKeyValues, "trigger", buffer_temp, sizeof(buffer_temp)); - - new tindex = StringToInt(buffer_temp); - if(tindex) - { - triggerArray[triggerSize] = tindex; - triggerSize++; - } - - entArraySize++; - } - } - while (KvGotoNextKey(hKeyValues)); - } - else - { - g_bConfigLoaded = false; - - LogMessage("Could not load %s", buffer_path); - } - - CloseHandle(hKeyValues); -} - -public Action:Command_ReloadConfig(client,args) -{ - CleanData(); - LoadColors(); - LoadConfig(); - - return Plugin_Handled; -} - -public OnEntityCreated(entity, const String:classname[]) -{ - if (triggerSize > 0 && StrContains(classname, "trigger_", false) != -1 && IsValidEntity(entity)) - { - SDKHook(entity, SDKHook_Spawn, OnEntitySpawned); - } -} - -public OnEntitySpawned(entity) -{ - decl String:classname[32]; - if(Entity_GetClassName(entity, classname, 32)) - { - if (IsValidEntity(entity) && StrContains(classname, "trigger_", false) != -1) - { - new hid = Entity_GetHammerID(entity); - for (new index = 0; index < triggerSize; index++) - { - if(hid == triggerArray[index]) - { - SDKHook(entity, SDKHook_Touch, OnTrigger); - SDKHook(entity, SDKHook_EndTouch, OnTrigger); - SDKHook(entity, SDKHook_StartTouch, OnTrigger); - } - } - } - } -} - -public Action:Command_Cooldown(client, args) -{ - if (args < 2) - { - ReplyToCommand(client, "[SM] Usage: sm_setcooldown "); - return Plugin_Handled; - } - - new String:hid[32], String:cooldown[10]; - - GetCmdArg(1, hid, sizeof(hid)); - GetCmdArg(2, cooldown, sizeof(cooldown)); - - new hammerid = StringToInt(hid); - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_hammerid] == hammerid) - { - entArray[index][ent_cooldown] = StringToInt(cooldown); - } - } - - return Plugin_Handled; -} - -public Action:OnTrigger(entity, other) -{ - if (MaxClients >= other && 0 < other) { - if (IsClientConnected(other)) { - if (g_bRestricted[other]) { - return Plugin_Handled; - } - - if (g_iRestrictedLength[other] != 1 && g_iRestrictedLength[other] != 0 && g_iRestrictedLength[other] <= GetTime()) - { - g_iRestrictedLength[other] = 0; - SetClientCookie(other, g_hCookie_RestrictedLength, "0"); - - return Plugin_Continue; - } - - if (g_iRestrictedLength[other] > GetTime() || g_iRestrictedLength[other] == 1) - { - return Plugin_Handled; - } - } - } - - return Plugin_Continue; -} - -bool:SingularOrMultiple(int num) -{ - if (num > 1 || num == 0) - { - return true; - } - - return false; -} - -public Native_IsClientBanned(Handle:hPlugin, iArgC) -{ - new client = GetNativeCell(1); - - if (client < 1 || client > MaxClients || !IsClientInGame(client) || !AreClientCookiesCached(client)) - { - ThrowNativeError(SP_ERROR_PARAM, "Invalid client/client is not in game or client cookies are not yet loaded"); - return false; - } - - new String:sBuff[64]; - GetClientCookie(client, g_hCookie_RestrictedLength, sBuff, sizeof(sBuff)); - new iBanLen = StringToInt(sBuff); - - if ((iBanLen != 0 && iBanLen >= GetTime()) || iBanLen == 1) - { - SetNativeCellRef(2, iBanLen); - return true; - } - - return true; -} - -public Native_BanClient(Handle:hPlugin, iArgC) -{ - new client = GetNativeCell(1); - new bool:bIsTemporary = GetNativeCell(2); - new iBanLen = GetNativeCell(3); - - if (client < 1 || client > MaxClients || !IsClientInGame(client) || !AreClientCookiesCached(client)) - { - ThrowNativeError(SP_ERROR_PARAM, "Invalid client/client is not in game or client cookies are not yet loaded"); - return false; - } - - if (bIsTemporary) - { - EBanClient(client, "0", 0); - - return true; - } - - if (iBanLen == 0) - { - EBanClient(client, "1", 0); - - return true; - } - else - { - iBanLen = GetTime() + (iBanLen * 60); - - if (iBanLen <= GetTime()) - { - ThrowNativeError(SP_ERROR_PARAM, "Invalid ban length given"); - return false; - } - } - - new String:sBanLen[64]; - Format(sBanLen, sizeof(sBanLen), "%d", iBanLen); - - EBanClient(client, sBanLen, 0); - - return true; -} - -public Native_UnbanClient(Handle:hPlugin, iArgC) -{ - new client = GetNativeCell(1); - - if (client < 1 || client > MaxClients || !IsClientInGame(client) || !AreClientCookiesCached(client)) - { - ThrowNativeError(SP_ERROR_PARAM, "Invalid client/client is not in game or client cookies are not yet loaded"); - return false; - } - - EUnbanClient(client, 0); - - return true; -} - -public Native_IsSpecialItem(Handle:hPlugin, iArgC) -{ - if (!g_bConfigLoaded) - { - return false; - } - - new entity = GetNativeCell(1); - if (entity < MaxClients || !IsValidEdict(entity) || !IsValidEntity(entity)) - { - return false; - } - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_buttonid] == entity) - { - return true; - } - } - - return false; -} - -public Native_HasSpecialItem(Handle:hPlugin, iArgC) -{ - if (!g_bConfigLoaded) - { - return false; - } - - new client = GetNativeCell(1); - - if (client < 1 || client > MaxClients || !IsClientInGame(client)) - { - ThrowNativeError(SP_ERROR_PARAM, "Invalid client/client is not in game"); - return false; - } - - for (new index = 0; index < entArraySize; index++) - { - if (entArray[index][ent_ownerid] == client) - { - return true; - } - } - - return false; -} - -stock FixedEquipPlayerWeapon(client, weapon) -{ - new iWeaponSlot = SDKCall(g_hGetSlot, weapon); - new WeaponInSlot = GetPlayerWeaponSlot(client, iWeaponSlot); - if(WeaponInSlot != -1) - CS_DropWeapon(client, WeaponInSlot, false); - - if(SDKCall(g_hBumpWeapon, client, weapon)) - SDKCall(g_hOnPickedUp, weapon, client); -} diff --git a/entWatch/scripting/include/entWatch.inc b/entWatch/scripting/include/entWatch.inc deleted file mode 100644 index 0e6a2f27..00000000 --- a/entWatch/scripting/include/entWatch.inc +++ /dev/null @@ -1,150 +0,0 @@ -#if defined _entWatch_include - #endinput -#endif -#define _entWatch_include - -/** - * Checks if a client is currently banned, if an integer variable is referenced the time of unban will be assigned to it. - * - * @param client Client index to check for ban - * @param iTimeStamp Pass an integer variable by reference and it will contain the UNIX timestamp when the player will be unbanned - * @return True if user is banned, false otherwise - * - * On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded - */ -native bool:entWatch_IsClientBanned(client, &iTimeStamp); - -/** - * Bans a client from using special items. - * - * @param client Client index to ban - * @param IsTemporary If the ban should be temporary pass true here - * @param iLength Length of ban in minutes, pass 0 here for a permanent ban - * @return True on success, false otherwsie - * - * On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded - */ -native bool:entWatch_BanClient(client, bool:bIsTemporary=false, iLength=0); - -/** - * Unbans a previously ebanned Client. - * - * @param client Client index to unban - * @return True on success, false otherwsie - * - * On error/errors: Invalid client index/client is not in game or client cookies are not yet loaded - */ -native bool:entWatch_UnbanClient(client); - -/** - * Checks if an entity is a special item. - * - * @param entity Entity index to check - * @return True if entity is a special item, false otherwsie - */ -native bool:entWatch_IsSpecialItem(entity); - -/** - * Checks if a client has a special item. - * - * @param client Client index to check - * @return True if client has a special item, false otherwsie - */ -native bool:entWatch_HasSpecialItem(client); - -/** - * Called when a client is e-banned by any means - * - * @param admin Admin index that issued the ban - * @param iLength Length of the ban in UNIX time - * @param client Client index that was banned - * - * @return None - */ -forward entWatch_OnClientBanned(admin, iLenght, client); - -/** - * Called when a client is e-unbanned by any means - * - * @param admin Admin index that removed the ban - * @param client Client index that was unbanned - * @return None - */ -forward entWatch_OnClientUnbanned(admin, client); - -//---------------------------------------------------------------------------------------------------- -// Purpose: SMLib -//---------------------------------------------------------------------------------------------------- -stock Entity_GetTargetName(entity, String:buffer[], size) -{ - return GetEntPropString(entity, Prop_Data, "m_iName", buffer, size); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: SMLib -//---------------------------------------------------------------------------------------------------- -stock Entity_GetParentName(entity, String:buffer[], size) -{ - return GetEntPropString(entity, Prop_Data, "m_iParent", buffer, size); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: SMLib -//---------------------------------------------------------------------------------------------------- -stock Entity_GetHammerID(entity) -{ - return GetEntProp(entity, Prop_Data, "m_iHammerID"); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: SMLib -//---------------------------------------------------------------------------------------------------- -stock Entity_GetClassName(entity, String:buffer[], size) -{ - GetEntPropString(entity, Prop_Data, "m_iClassname", buffer, size); - - if (buffer[0] == '\0') { - return false; - } - - return true; -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: SMLib -//---------------------------------------------------------------------------------------------------- -stock Entity_GetEntityFromHammerID(hammerID) -{ - for (new i = 0; i < 4096; i++) - { - if (IsValidEntity(i) && Entity_GetHammerID(i) == hammerID) - { - if (IsValidEntity(i)) - return i; - } - } - - return -1; -} - -public SharedPlugin:__pl_entWatch = -{ - name = "entWatch", - file = "entWatch.smx", -#if defined REQUIRE_PLUGIN - required = 1 -#else - required = 0 -#endif -}; - -#if !defined REQUIRE_PLUGIN -public __pl_entWatch_SetNTVOptional() -{ - MarkNativeAsOptional("entWatch_IsClientBanned"); - MarkNativeAsOptional("entWatch_BanClient"); - MarkNativeAsOptional("entWatch_UnbanClient"); - MarkNativeAsOptional("entWatch_IsSpecialItem"); - MarkNativeAsOptional("entWatch_HasSpecialItem"); -} -#endif diff --git a/entWatch/translations/entWatch.phrases.txt b/entWatch/translations/entWatch.phrases.txt deleted file mode 100644 index f6b81ed3..00000000 --- a/entWatch/translations/entWatch.phrases.txt +++ /dev/null @@ -1,47 +0,0 @@ -"Phrases" -{ - "welcome" - { - "en" "The current map is supported by this plugin." - } - "use" - { - "en" "used" - } - "pickup" - { - "en" "has picked up" - } - "drop" - { - "en" "has dropped" - } - "death" - { - "en" "has died with" - } - "disconnect" - { - "en" "disconnected with" - } - "cookies loading" - { - "en" "Please wait. Your settings are still loading." - } - "status restricted" - { - "en" "You are currently restricted." - } - "status unrestricted" - { - "en" "You are currently unrestricted." - } - "display enabled" - { - "en" "The hud is now enabled." - } - "display disabled" - { - "en" "The hud is now disabled." - } -} \ No newline at end of file diff --git a/entWatch/translations/fr/entWatch.phrases.txt b/entWatch/translations/fr/entWatch.phrases.txt deleted file mode 100644 index 70f233be..00000000 --- a/entWatch/translations/fr/entWatch.phrases.txt +++ /dev/null @@ -1,47 +0,0 @@ -"Phrases" -{ - "welcome" - { - "fr" "La map actuelle fonctionne avec ce plugin." - } - "use" - { - "fr" "a utilisé" - } - "pickup" - { - "fr" "a pris" - } - "drop" - { - "fr" "a jeté" - } - "death" - { - "fr" "est mort avec" - } - "disconnect" - { - "fr" "s'est deconnecté avec" - } - "cookies loading" - { - "fr" "Merci d'attendre. Vos réglages sont en cours de chargement." - } - "status restricted" - { - "fr" "Vous êtes actuellement restreint." - } - "status unrestricted" - { - "fr" "Vous n'êtes pas restreint." - } - "display enabled" - { - "fr" "Le hud est maintenant activé." - } - "display disabled" - { - "fr" "Le hud est maintenant désactivé." - } -} \ No newline at end of file diff --git a/entWatch/translations/ru/entWatch.phrases.txt b/entWatch/translations/ru/entWatch.phrases.txt deleted file mode 100644 index c85e6103..00000000 --- a/entWatch/translations/ru/entWatch.phrases.txt +++ /dev/null @@ -1,47 +0,0 @@ -"Phrases" -{ - "welcome" - { - "ru" "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð° работы Ñ Ñтим плагином." - } - "use" - { - "ru" "иÑпользовал" - } - "pickup" - { - "ru" "подобрал" - } - "drop" - { - "ru" "выброÑил" - } - "death" - { - "ru" "умер и ÑброÑил" - } - "disconnect" - { - "ru" "отключилÑÑ Ð¸Ð· игры Ñ" - } - "cookies loading" - { - "ru" "ПожалуйÑта ждите. Ваши параметры наÑтройки вÑе еще загружаютÑÑ." - } - "status restricted" - { - "ru" "Вам запрещено юзать Ñпец. оружие." - } - "status unrestricted" - { - "ru" "Вам разрешено юзать Ñпец. оружие." - } - "display enabled" - { - "ru" "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Hud теперь включена." - } - "display disabled" - { - "ru" "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Hud теперь выключена." - } -} \ No newline at end of file diff --git a/_entWatch4/configs/entwatch/template.txt b/entWatch4/configs/entwatch/template.txt similarity index 68% rename from _entWatch4/configs/entwatch/template.txt rename to entWatch4/configs/entwatch/template.txt index a3a6579f..a04d27f4 100644 --- a/_entWatch4/configs/entwatch/template.txt +++ b/entWatch4/configs/entwatch/template.txt @@ -11,12 +11,18 @@ "triggerid" "0" // The HammerID of the trigger. "display" "0" // The Bitflag for displays. // 1 = CHAT. - // 2 = HUD. - // 3 = CHAT & HUD. - // 4 = USE. - // 5 = CHAT & USE. - // 6 = HUD & USE. + // 2 = USE. + // 3 = CHAT & USE. + // 4 = HUD. + // 5 = CHAT & HUD. + // 6 = USE & HUD. // 7 = ALL. + "slot" "0" // The weapon slot. + // 0 = None + // 1 = Primary + // 2 = Secondary + // 3 = Knife + // 4 = Grenades "mode" "0" // The mode of the item. // 1 = Cooldown. // 2 = Limited uses. @@ -25,4 +31,4 @@ "maxuses" "0" // The maximum amount of uses. "cooldown" "0" // The cooldown between uses. } -} \ No newline at end of file +} diff --git a/entWatch4/configs/entwatch/ze_8bit_v4b.cfg b/entWatch4/configs/entwatch/ze_8bit_v4b.cfg new file mode 100644 index 00000000..38b8df54 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_8bit_v4b.cfg @@ -0,0 +1,101 @@ +"items" +{ + "0" + { + "name" "Heal Magick" + "short" "Heal" + "color" "FFFFFF" + "filter" "Player_Heal" + "weaponid" "220934" + "buttonid" "220997" + "triggerid" "431088" + "display" "7" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Electro Magick" + "short" "Electro" + "color" "3946F6" + "filter" "Player_Electro" + "weaponid" "222777" + "buttonid" "222779" + "triggerid" "219747" + "display" "7" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Stopper Magick" + "short" "Stopper" + "color" "A1381E" + "filter" "Player_Stopper" + "weaponid" "431326" + "buttonid" "431328" + "triggerid" "431256" + "display" "7" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Fire Magick" + "short" "Fire" + "color" "FD4415" + "filter" "Player_Fire" + "weaponid" "483965" + "buttonid" "483967" + "triggerid" "0" + "display" "5" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Cannon Ultimate" + "short" "Ultimate" + "color" "FF0000" + "filter" "Player_Cannon_ultimate" + "weaponid" "409796" + "buttonid" "409793" + "triggerid" "410705" + "display" "7" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Mine" + "short" "Mine" + "color" "000000" + "filter" "Player_Mine" + "weaponid" "472772" + "buttonid" "472774" + "triggerid" "0" + "display" "7" + "mode" "3" + "maxuses" "8" + "cooldown" "10" + } + "6" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFD700" + "filter" "Player_Ammo" + "weaponid" "1003235" + "buttonid" "1003237" + "triggerid" "1002739" + "display" "7" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_abandoned_project_v1_2.cfg b/entWatch4/configs/entwatch/ze_abandoned_project_v1_2.cfg new file mode 100644 index 00000000..3d0082a1 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_abandoned_project_v1_2.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Red Ball" + "short" "Rball" + "color" "FF0000" + "filter" "filtronucleo" + "weaponid" "5127" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Green Ball" + "short" "Gball" + "color" "04B404" + "filter" "filtronucleo2" + "weaponid" "5129" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Turret" + "short" "Turret" + "color" "111111" + "filter" "torreta_0" + "weaponid" "561736" + "buttonid" "561738" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "3" + { + "name" "Turret" + "short" "Turret" + "color" "111111" + "filter" "torreta_1" + "weaponid" "561787" + "buttonid" "561789" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "4" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "FF0000" + "filter" "lanzallamero" + "weaponid" "562339" + "buttonid" "562341" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_alien_shooter_v7.cfg b/entWatch4/configs/entwatch/ze_alien_shooter_v7.cfg new file mode 100644 index 00000000..023472f2 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_alien_shooter_v7.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Electro" + "short" "Electro" + "color" "0072FF" + "filter" "Filter_Electro" + "weaponid" "82185" + "buttonid" "82187" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Fire" + "short" "Fire" + "color" "FF0000" + "filter" "Filter_Fire" + "weaponid" "85797" + "buttonid" "85799" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "Filter_Heal" + "weaponid" "87600" + "buttonid" "87667" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "3" + { + "name" "Wind" + "short" "Wind" + "color" "04B404" + "filter" "Filter_Wind" + "weaponid" "88534" + "buttonid" "88601" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "4" + { + "name" "Bio" + "short" "Bio" + "color" "20BC59" + "filter" "Filter_Bio" + "weaponid" "89477" + "buttonid" "89472" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } +} diff --git a/entWatch4/configs/entwatch/ze_alien_vs_predator_v5.cfg b/entWatch4/configs/entwatch/ze_alien_vs_predator_v5.cfg new file mode 100644 index 00000000..b04b938c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_alien_vs_predator_v5.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Push Gun" + "short" "Push" + "color" "04B404" + "filter" "bootro" + "weaponid" "2532529" + "buttonid" "2532531" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "4" + "cooldown" "15" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "Filter_Heal" + "weaponid" "9191195" + "buttonid" "9191192" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "49" + } + "1" + { + "name" "Bomb" + "short" "Bomb" + "color" "4A8AE2" + "filter" "" + "weaponid" "2468646" + "buttonid" "9027758" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ancient_wrath_v1_fix2.cfg b/entWatch4/configs/entwatch/ze_ancient_wrath_v1_fix2.cfg new file mode 100644 index 00000000..506c24b8 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ancient_wrath_v1_fix2.cfg @@ -0,0 +1,111 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ammo Gun" + "short" "Ammo" + "color" "FFCC33" + "filter" "weapon_ammorefill_player" + "weaponid" "2063283" + "buttonid" "2063138" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Rift Gun" + "short" "Rift" + "color" "9900FF" + "filter" "weapon_electro_player" + "weaponid" "2068427" + "buttonid" "2068424" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + "2" + { + "name" "Inferno Gun" + "short" "Inferno" + "color" "FF3700" + "filter" "weapon_flamethrower_player" + "weaponid" "2070457" + "buttonid" "2070459" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Growth Gun" + "short" "Growth" + "color" "669900" + "filter" "weapon_earth_player" + "weaponid" "2073008" + "buttonid" "2073003" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "4" + { + "name" "Tornado Gun" + "short" "Tornado" + "color" "0099CC" + "filter" "weapon_push_player" + "weaponid" "2073926" + "buttonid" "2073928" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + + // Zombie - Items + "5" + { + "name" "Quadralex" + "short" "Quadralex" + "color" "E4A1FF" + "filter" "" + "weaponid" "2109516" + "buttonid" "" + "triggerid" "2109507" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Rusher" + "short" "Rusher" + "color" "9900FF" + "filter" "" + "weaponid" "2109055" + "buttonid" "" + "triggerid" "2109046" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ancient_wrath_v2_test27.cfg b/entWatch4/configs/entwatch/ze_ancient_wrath_v2_test27.cfg new file mode 100644 index 00000000..123d5da4 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ancient_wrath_v2_test27.cfg @@ -0,0 +1,111 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ammo Gun" + "short" "Ammo" + "color" "FFCC33" + "filter" "weapon_ammorefill_player" + "weaponid" "4791896" + "buttonid" "4791891" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "1" + { + "name" "Rift Gun" + "short" "Rift" + "color" "9900FF" + "filter" "weapon_electro_player" + "weaponid" "4792261" + "buttonid" "4792258" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "2" + { + "name" "Inferno Gun" + "short" "Inferno" + "color" "FF3700" + "filter" "weapon_flamethrower_player" + "weaponid" "4792537" + "buttonid" "4792539" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Growth Gun" + "short" "Growth" + "color" "669900" + "filter" "weapon_earth_player" + "weaponid" "4793316" + "buttonid" "4793318" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "4" + { + "name" "Tornado Gun" + "short" "Tornado" + "color" "0099CC" + "filter" "weapon_push_player" + "weaponid" "4793530" + "buttonid" "4793527" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + + // Zombie - Items + "5" + { + "name" "Quadralex" + "short" "Quadralex" + "color" "E4A1FF" + "filter" "" + "weaponid" "2109516" + "buttonid" "" + "triggerid" "2109507" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Rusher" + "short" "Rusher" + "color" "9900FF" + "filter" "" + "weaponid" "2109055" + "buttonid" "" + "triggerid" "2109046" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_antartika_b2.cfg b/entWatch4/configs/entwatch/ze_antartika_b2.cfg new file mode 100644 index 00000000..056caf29 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_antartika_b2.cfg @@ -0,0 +1,34 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Banana Gun" + "short" "Banana" + "color" "EEFF00" + "filter" "banana" + "weaponid" "600295" + "buttonid" "600299" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Penis Gun" + "short" "Penis" + "color" "FF005D" + "filter" "" + "weaponid" "600240" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ashen_keep_v0_3.cfg b/entWatch4/configs/entwatch/ze_ashen_keep_v0_3.cfg new file mode 100644 index 00000000..764fe0ed --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ashen_keep_v0_3.cfg @@ -0,0 +1,109 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Burning Orb" + "short" "Burning Orb" + "color" "EA6309" + "filter" "flameuser" + "weaponid" "1015926" + "buttonid" "1015928" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "1" + { + "name" "Glacial Orb" + "short" "Glacial Orb" + "color" "6DE3FC" + "filter" "iceuser" + "weaponid" "1015959" + "buttonid" "1015961" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "2" + { + "name" "Lightning Orb" + "short" "Lightning Orb" + "color" "F9EF77" + "filter" "thunderuser" + "weaponid" "1015992" + "buttonid" "1015994" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "3" + { + "name" "Gust Orb" + "short" "Gust Orb" + "color" "8AEEC3" + "filter" "gustuser" + "weaponid" "1016176" + "buttonid" "1016178" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "4" + { + "name" "Divine Orb" + "short" "Divine Orb" + "color" "E0FDFE" + "filter" "divineuser" + "weaponid" "1016025" + "buttonid" "1016027" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Abyssal Orb" + "short" "Abyssal Orb" + "color" "D10C96" + "filter" "abyssuser" + "weaponid" "1016076" + "buttonid" "1016078" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Celestial Embrace" + "short" "Celestial Embrace" + "color" "FDCCFD" + "filter" "" + "weaponid" "1016062" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} \ No newline at end of file diff --git a/entWatch4/configs/entwatch/ze_atix_extinction_b7.cfg b/entWatch4/configs/entwatch/ze_atix_extinction_b7.cfg new file mode 100644 index 00000000..f0a4ce0f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_atix_extinction_b7.cfg @@ -0,0 +1,66 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Pushgun" + "short" "Pushgun" + "color" "0072FF" + "filter" "" + "weaponid" "443964" + "buttonid" "443953" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "21" + } + "1" + { + "name" "Napalm Launcher" + "short" "Napalm Launcher" + "color" "0072FF" + "filter" "" + "weaponid" "507423" + "buttonid" "507432" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "32" + "cooldown" "4" + } + "2" + { + "name" "Ammo Box" + "short" "Ammo" + "color" "0072FF" + "filter" "" + "weaponid" "483667" + "buttonid" "483669" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + + // Zombie - Items + "3" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "FF0000" + "filter" "" + "weaponid" "442275" + "buttonid" "0" + "triggerid" "442281" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_avalanche_reboot_beta7.cfg b/entWatch4/configs/entwatch/ze_avalanche_reboot_beta7.cfg new file mode 100644 index 00000000..664b51e2 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_avalanche_reboot_beta7.cfg @@ -0,0 +1,124 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Blue Spark" + "short" "Spark" + "color" "0000FF" + "filter" "ct_elec" + "weaponid" "1986587" + "buttonid" "1986584" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Icy Vortex" + "short" "Ice" + "color" "00BBFF" + "filter" "ct_ice" + "weaponid" "2570216" + "buttonid" "2570079" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "ct_ammo" + "weaponid" "1986862" + "buttonid" "1986794" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "ct_heal" + "weaponid" "1986724" + "buttonid" "1986721" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "4" + { + "name" "Venom Beam" + "short" "Poison" + "color" "00FF33" + "filter" "ct_poison" + "weaponid" "1986515" + "buttonid" "1986512" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "12" + } + "5" + { + "name" "Flame Beam" + "short" "Fire" + "color" "FF3300" + "filter" "ct_fire" + "weaponid" "1986376" + "buttonid" "1986373" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "12" + } + "6" + { + "name" "Electric Beam" + "short" "Beam" + "color" "00FFAA" + "filter" "ct_beam" + "weaponid" "2445121" + "buttonid" "2445190" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "2" + } + "7" + { + "name" "Wind Blaster" + "short" "Wind" + "color" "FF55FF" + "filter" "ct_push" + "weaponid" "2704265" + "buttonid" "2704262" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_bathroom_v2_5s.cfg b/entWatch4/configs/entwatch/ze_bathroom_v2_5s.cfg new file mode 100644 index 00000000..a695c1f2 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_bathroom_v2_5s.cfg @@ -0,0 +1,34 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Sponge Builder" + "short" "Builder" + "color" "D60046" + "filter" "zbran_houba_filtr" + "weaponid" "534670" + "buttonid" "787441" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "52" + } + "1" + { + "name" "Mouse Trap" + "short" "Mouse Trap" + "color" "FEE000" + "filter" "zbran_pasticka_filtr" + "weaponid" "511906" + "buttonid" "787542" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "42" + } +} diff --git a/entWatch4/configs/entwatch/ze_biohazard2_rpd_v4e_004.cfg b/entWatch4/configs/entwatch/ze_biohazard2_rpd_v4e_004.cfg new file mode 100644 index 00000000..00c0a35a --- /dev/null +++ b/entWatch4/configs/entwatch/ze_biohazard2_rpd_v4e_004.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "2F2F2F" + "filter" "" + "weaponid" "256847" + "buttonid" "" + "triggerid" "0" + "display" "7" + "slot" "4" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_biohazard_manor_v4a_004.cfg b/entWatch4/configs/entwatch/ze_biohazard_manor_v4a_004.cfg new file mode 100644 index 00000000..56b4cdd4 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_biohazard_manor_v4a_004.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Flamethrower" + "short" "Flame" + "color" "DB0000" + "filter" "Player_Fire" + "weaponid" "782412" + "buttonid" "782420" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_biohazard_v2b_004.cfg b/entWatch4/configs/entwatch/ze_biohazard_v2b_004.cfg new file mode 100644 index 00000000..3e114b4c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_biohazard_v2b_004.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire" + "short" "Fire" + "color" "DB0000" + "filter" "" + "weaponid" "1000" + "buttonid" "1001" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } +} diff --git a/entWatch4/configs/entwatch/ze_bioshock_v7.cfg b/entWatch4/configs/entwatch/ze_bioshock_v7.cfg new file mode 100644 index 00000000..dd390451 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_bioshock_v7.cfg @@ -0,0 +1,188 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Insect Swarm Plasmid" + "short" "Insect Swarm" + "color" "04B404" + "filter" "" + "weaponid" "24222" + "buttonid" "24224" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "10" + } + "1" + { + "name" "Incinerate Plasmid" + "short" "Incinerate" + "color" "FF0000" + "filter" "" + "weaponid" "20392" + "buttonid" "20394" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "5" + } + "2" + { + "name" "Sonic Boom Plasmid" + "short" "Sonic Boom" + "color" "A1A1A1" + "filter" "" + "weaponid" "20538" + "buttonid" "20540" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "10" + } + "3" + { + "name" "Electro Bolt Plasmid" + "short" "Electro Bolt" + "color" "BCCD00" + "filter" "" + "weaponid" "20244" + "buttonid" "20246" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "11" + } + "4" + { + "name" "Gravity Well Plasmid" + "short" "Gravity Well" + "color" "DFDFDF" + "filter" "" + "weaponid" "5063227" + "buttonid" "5063229" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "18" + } + "5" + { + "name" "Winter Blast Plasmid" + "short" "Winter Blast" + "color" "CCE100" + "filter" "" + "weaponid" "5082173" + "buttonid" "5082175" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "13" + } + + // Human - Misc + "6" + { + "name" "Ionic Gel" + "short" "Ionic Gel" + "color" "BCCD00" + "filter" "" + "weaponid" "22991" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Fuse Wire" + "short" "Fuse Wire" + "color" "BCCD00" + "filter" "" + "weaponid" "22713" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "mode" "0" + "slot" "2" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Nitroglycerin" + "short" "Nitroglycerin" + "color" "BCCD00" + "filter" "" + "weaponid" "3694018" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "EMP Bomb" + "short" "EMP Bomb" + "color" "BCCD00" + "filter" "" + "weaponid" "3613358" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "10" + { + "name" "Little Sister" + "short" "Little Sister" + "color" "FF69B4" + "filter" "" + "weaponid" "2251059" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "Big Daddy" + "short" "Big Daddy" + "color" "7CFC00" + "filter" "" + "weaponid" "2251077" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_boredom_v543656.cfg b/entWatch4/configs/entwatch/ze_boredom_v543656.cfg new file mode 100644 index 00000000..5244cc4b --- /dev/null +++ b/entWatch4/configs/entwatch/ze_boredom_v543656.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Interdimensional Wooden Vortex" + "short" "Wood" + "color" "C000C0" + "filter" "" + "weaponid" "216850" + "buttonid" "216844" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Seagull Launcher" + "short" "Seagull" + "color" "FFFFFF" + "filter" "" + "weaponid" "217604" + "buttonid" "217598" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "7" + } + "2" + { + "name" "Pomodoro Seeds" + "short" "Pomodoro" + "color" "00FF00" + "filter" "" + "weaponid" "227120" + "buttonid" "227114" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Diary of Empty Thoughts" + "short" "Diary" + "color" "0000FF" + "filter" "" + "weaponid" "226233" + "buttonid" "226227" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Flaming Hot Penis" + "short" "Flame" + "color" "FFC000" + "filter" "" + "weaponid" "210956" + "buttonid" "211255" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "5" + { + "name" "Thick Banana Juice" + "short" "Banana" + "color" "FFFF00" + "filter" "" + "weaponid" "215366" + "buttonid" "215373" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "6" + { + "name" "Stanley Kubrick Soul" + "short" "Kubrick" + "color" "FFC0F0" + "filter" "" + "weaponid" "216558" + "buttonid" "216555" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Zombie - Items + "7" + { + "name" "Kamikaze Bum-Bum" + "short" "Kamikaze" + "color" "FF0000" + "filter" "" + "weaponid" "478149" + "buttonid" "478154" + "triggerid" "478151" + "display" "7" + "slot" "3" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "8" + { + "name" "Twinkle Flavoured Butter" + "short" "Butter" + "color" "FFFF00" + "filter" "" + "weaponid" "478365" + "buttonid" "478370" + "triggerid" "478367" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "9" + { + "name" "Zombie Shrink" + "short" "Shrink" + "color" "FFFFFF" + "filter" "" + "weaponid" "478383" + "buttonid" "478388" + "triggerid" "478385" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "10" + { + "name" "Jelly Bean Ecstacy" + "short" "Ecstacy" + "color" "00FF00" + "filter" "" + "weaponid" "478413" + "buttonid" "478418" + "triggerid" "478415" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } +} diff --git a/entWatch4/configs/entwatch/ze_bowser_in_the_fire_sea_v1e.cfg b/entWatch4/configs/entwatch/ze_bowser_in_the_fire_sea_v1e.cfg new file mode 100644 index 00000000..fa334678 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_bowser_in_the_fire_sea_v1e.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Color Lift" + "short" "Lift" + "color" "FF80FF" + "filter" "" + "weaponid" "237001" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Health Mushroom" + "short" "Health" + "color" "FFFFFF" + "filter" "health_mushroom_player" + "weaponid" "272566" + "buttonid" "276328" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Poison Fire Mushroom" + "short" "Poison" + "color" "8000FF" + "filter" "poison_mushroom" + "weaponid" "280094" + "buttonid" "280161" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Wind Fire Mushroom" + "short" "Wind" + "color" "00FF00" + "filter" "wind_fire_mushroom" + "weaponid" "286845" + "buttonid" "286865" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Power Star" + "short" "Power" + "color" "FFFF00" + "filter" "star" + "weaponid" "330419" + "buttonid" "330421" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_castlevania_v1_3.cfg b/entWatch4/configs/entwatch/ze_castlevania_v1_3.cfg new file mode 100644 index 00000000..1fedf95a --- /dev/null +++ b/entWatch4/configs/entwatch/ze_castlevania_v1_3.cfg @@ -0,0 +1,308 @@ +"items" +{ + // Human - Specials + "0" + { + "name" "Alucard" + "short" "Alucard" + "color" "FFFFFF" + "filter" "" + "weaponid" "114094" + "buttonid" "114118" //114102 -> Main attack, special specified. + "triggerid" "0" //112051 -> func_button, no trigger. + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "1" + { + "name" "Belmont" + "short" "Belmont" + "color" "FFFFFF" + "filter" "" + "weaponid" "114258" + "buttonid" "114414" //114266 -> Main attack, special specified. + "triggerid" "0" //112232 -> func_button, no trigger. + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "100" + } + "2" + { + "name" "Healer" + "short" "Healer" + "color" "FFFFFF" + "filter" "" + "weaponid" "115464" + "buttonid" "115483" //115466 -> Main attack, special specified. + "triggerid" "115478" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "3" + { + "name" "Holy Knight" + "short" "Holy Knight" + "color" "FFFFFF" + "filter" "" + "weaponid" "118372" + "buttonid" "118395" //115466 -> Main attack, special specified. + "triggerid" "118369" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "21" + } + "4" + { + "name" "VIP" + "short" "VIP" + "color" "FFFFFF" + "filter" "" + "weaponid" "116503" + "buttonid" "116589" //116513 -> Main attack, special specified. + "triggerid" "116505" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "32" + } + + // Human - Items + "5" + { + "name" "Holy Water" + "short" "Holy Water" + "color" "0000FF" + "filter" "" + "weaponid" "111680" + "buttonid" "111686" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Cross" + "short" "Cross" + "color" "0000FF" + "filter" "" + "weaponid" "111794" + "buttonid" "111796" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Dagger" + "short" "Dagger" + "color" "0000FF" + "filter" "" + "weaponid" "111928" + "buttonid" "111905" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Holy Cross" + "short" "Holy Cross" + "color" "0000FF" + "filter" "" + "weaponid" "112075" + "buttonid" "112070" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Storm Beacon" + "short" "Storm Beacon" + "color" "0000FF" + "filter" "" + "weaponid" "112256" + "buttonid" "112262" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Torch" + "short" "Torch" + "color" "0000FF" + "filter" "" + "weaponid" "113954" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "Torch Bag" + "short" "Torch Bag" + "color" "0000FF" + "filter" "" + "weaponid" "113988" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Ammo Spawner" + "short" "Ammo Spawner" + "color" "0000FF" + "filter" "" + "weaponid" "114678" + "buttonid" "114680" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "13" + { + "name" "Big Sword" + "short" "Big Sword" + "color" "0000FF" + "filter" "" + "weaponid" "117991" + "buttonid" "117993" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "Holy Five" + "short" "Holy Five" + "color" "0000FF" + "filter" "" + "weaponid" "118132" + "buttonid" "118129" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "15" + { + "name" "Sprint" + "short" "Sprint" + "color" "0000FF" + "filter" "" + "weaponid" "118149" + "buttonid" "118151" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "16" + { + "name" "Barricade" + "short" "Barricade" + "color" "0000FF" + "filter" "" + "weaponid" "115761" + "buttonid" "115758" + "triggerid" "0" + "display" "0" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "17" + { + "name" "Weapon Holder" + "short" "Weapon Holder" + "color" "0000FF" + "filter" "" + "weaponid" "118496" + "buttonid" "118491" + "triggerid" "0" + "display" "0" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "18" + { + "name" "NPC Spawner" + "short" "NPC Spawner" + "color" "FF0000" + "filter" "" + "weaponid" "116463" + "buttonid" "116468" + "triggerid" "116465" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "19" + { + "name" "Weapon Holder" + "short" "Weapon Holder" + "color" "FF0000" + "filter" "" + "weaponid" "118872" + "buttonid" "118876" + "triggerid" "118888" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_christmas_infection_v2_3.cfg b/entWatch4/configs/entwatch/ze_christmas_infection_v2_3.cfg new file mode 100644 index 00000000..0acf7ba2 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_christmas_infection_v2_3.cfg @@ -0,0 +1,262 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Icewall" + "short" "Icewall" + "color" "Icewall" + "filter" "icewall" + "weaponid" "361395" + "buttonid" "361423" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "66" + } + "1" + { + "name" "Magical Lantern" + "short" "Lantern" + "color" "00FFAA" + "filter" "lant" + "weaponid" "364139" + "buttonid" "364141" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "61" + } + "2" + { + "name" "Mines" + "short" "Mines" + "color" "F53D3D" + "filter" "zpres" + "weaponid" "365900" + "buttonid" "365895" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "6" + "cooldown" "0" + } + "3" + { + "name" "Unlimited Ammo" + "short" "Ammo" + "color" "00CC03" + "filter" "tree" + "weaponid" "366934" + "buttonid" "366929" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "51" + } + "4" + { + "name" "Snowball Launcher" + "short" "Snowballs" + "color" "47FFFC" + "filter" "snow" + "weaponid" "373567" + "buttonid" "373574" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "5" + { + "name" "Napalm Candle" + "short" "Candle" + "color" "FF7300" + "filter" "we1" + "weaponid" "372103" + "buttonid" "372100" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Core" + "short" "Core" + "color" "CC0000" + "filter" "" + "weaponid" "753917" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Banana Gun" + "short" "Banana" + "color" "EEFF00" + "filter" "banana" + "weaponid" "932778" + "buttonid" "1122955" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "8" + { + "name" "Penis Gun" + "short" "Penis" + "color" "FF005D" + "filter" "" + "weaponid" "900562" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Hat Gun" + "short" "Hat" + "color" "DD4411" + "filter" "" + "weaponid" "900523" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + + // Zombie - Items + "10" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "healfil" + "weaponid" "381242" + "buttonid" "3282" + "triggerid" "381278" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "56" + } + "11" + { + "name" "Christmas Ogre" + "short" "Ogre" + "color" "B40404" + "filter" "" + "weaponid" "386892" + "buttonid" "0" + "triggerid" "386993" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Ice Boomerang" + "short" "Boomerang" + "color" "0087E8" + "filter" "boomer" + "weaponid" "392708" + "buttonid" "3282" + "triggerid" "392720" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "13" + { + "name" "Fog" + "short" "Fog" + "color" "969696" + "filter" "fog" + "weaponid" "399172" + "buttonid" "399176" + "triggerid" "399325" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "14" + { + "name" "Whirlpool Summoner" + "short" "Whirlpool" + "color" "B40404" + "filter" "tornado" + "weaponid" "1028432" + "buttonid" "1028429" + "triggerid" "1054333" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "15" + { + "name" "Trampoline Placer" + "short" "Trampoline" + "color" "B40404" + "filter" "tramp" + "weaponid" "1062968" + "buttonid" "1062970" + "triggerid" "1062965" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "76" + } + "16" + { + "name" "Zombie King" + "short" "Zombie King" + "color" "D4AF37" + "filter" "" + "weaponid" "1104667" + "buttonid" "0" + "triggerid" "1104669" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_chroma_v0_4.cfg b/entWatch4/configs/entwatch/ze_chroma_v0_4.cfg new file mode 100644 index 00000000..0bceb904 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_chroma_v0_4.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Red-Cyan" + "short" "Red" + "color" "FA6464" + "filter" "rcitemuser" + "weaponid" "521169" + "buttonid" "521173" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Green-Magenta" + "short" "Green" + "color" "64FA64" + "filter" "gmitemuser" + "weaponid" "523179" + "buttonid" "523246" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Blue-Yellow" + "short" "Blue" + "color" "6464FA" + "filter" "byitemuser" + "weaponid" "524594" + "buttonid" "524661" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Chromatic Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "healitemuser" + "weaponid" "525032" + "buttonid" "525099" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } +} diff --git a/entWatch4/configs/entwatch/ze_crashbandicoot_v1fix.cfg b/entWatch4/configs/entwatch/ze_crashbandicoot_v1fix.cfg new file mode 100644 index 00000000..8b97beca --- /dev/null +++ b/entWatch4/configs/entwatch/ze_crashbandicoot_v1fix.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Apple Cannon" + "short" "Cannon" + "color" "0040FF" + "filter" "tappo_kantaja" + "weaponid" "432248" + "buttonid" "432245" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_cyberderp_v1_4.cfg b/entWatch4/configs/entwatch/ze_cyberderp_v1_4.cfg new file mode 100644 index 00000000..bef676cc --- /dev/null +++ b/entWatch4/configs/entwatch/ze_cyberderp_v1_4.cfg @@ -0,0 +1,111 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Frost Wave" + "short" "Frost Wave" + "color" "6EE4FF" + "filter" "IceOwner" + "weaponid" "175887" + "buttonid" "179072" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "66" + } + "1" + { + "name" "Aeolus' Spirit" + "short" "Aeolus' Spirit" + "color" "7CFF40" + "filter" "WindOwner" + "weaponid" "179589" + "buttonid" "179721" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "66" + } + "2" + { + "name" "Flame of Udun" + "short" "Flame of Udun" + "color" "DB4AE8" + "filter" "player_flame" + "weaponid" "299591" + "buttonid" "299596" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "3" + { + "name" "Projectile Deflector" + "short" "Deflector" + "color" "B40404" + "filter" "" + "weaponid" "316089" + "buttonid" "316255" + "triggerid" "316091" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Slightly Cursed Hexahedron" + "short" "Hexahedron" + "color" "B40404" + "filter" "Miniboss" + "weaponid" "784705" + "buttonid" "793054" + "triggerid" "784715" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "5" + { + "name" "Boss" + "short" "Boss" + "color" "B40404" + "filter" "" + "weaponid" "259063" + "buttonid" "0" + "triggerid" "259049" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Painter" + "short" "Painter" + "color" "B40404" + "filter" "" + "weaponid" "304674" + "buttonid" "0" + "triggerid" "304676" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_dark_souls_ptd_v0_4.cfg b/entWatch4/configs/entwatch/ze_dark_souls_ptd_v0_4.cfg new file mode 100644 index 00000000..097cfa33 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_dark_souls_ptd_v0_4.cfg @@ -0,0 +1,246 @@ +"items" +{ + // Human - Items + "0" + { + "name" "White Dragon Breath" + "short" "White Dragon Breath" + "color" "01A9DB" + "filter" "WDB_Owner" + "weaponid" "9910" + "buttonid" "9918" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (4-14) + "cooldown" "0" // 7 + } + "1" + { + "name" "Chaos Storm" + "short" "Chaos Storm" + "color" "DF3A01" + "filter" "ChSt_Owner" + "weaponid" "10008" + "buttonid" "10005" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (3-13) + "cooldown" "0" // 10 + } + "2" + { + "name" "Sooling Sunlight" + "short" "Sooling Sunlight" + "color" "F7FE2E" + "filter" "SS_Owner" + "weaponid" "10423" + "buttonid" "731461" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (3-13) + "cooldown" "0" // 15 + } + "3" + { + "name" "Wrath of the Gods" + "short" "Wrath of the Gods" + "color" "EFFBFB" + "filter" "WOTG_Owner" + "weaponid" "10509" + "buttonid" "10506" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (6-16) + "cooldown" "0" // 1.05 + } + "4" + { + "name" "Dark Orb" + "short" "Dark Orb" + "color" "2A0A29" + "filter" "DO_Owner" + "weaponid" "10681" + "buttonid" "10676" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (3-13) + "cooldown" "0" // 2.5 + } + "5" + { + "name" "Hidden Body" + "short" "Hidden Body" + "color" "5E610B" + "filter" "HiBo_Owner" + "weaponid" "10719" + "buttonid" "10716" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (2-12) + "cooldown" "0" // 7.5 + } + "6" + { + "name" "Estus Flask" + "short" "Estus Flask" + "color" "D7DF01" + "filter" "EF_Owner" + "weaponid" "514824" + "buttonid" "514821" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // 5 + "cooldown" "0" // 4.5 + } + "7" + { + "name" "Ash Estus Flask" + "short" "Ash Estus Flask" + "color" "01A9DB" + "filter" "AEF_Owner" + "weaponid" "515837" + "buttonid" "515834" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // 3 + "cooldown" "0" // 4.5 + } + "8" + { + "name" "Lightning Spear" + "short" "Lightning Spear" + "color" "FFFF00" + "filter" "LS_Owner" + "weaponid" "515333" + "buttonid" "515328" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (7-17) + "cooldown" "0" // 2.5 + } + "9" + { + "name" "Great Heavy Soul Arrow" + "short" "Great Heavy Soul Arrow" + "color" "0080FF" + "filter" "GHSA_Owner" + "weaponid" "515527" + "buttonid" "515522" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // Maxuses can vary (10-20) + "cooldown" "0" // 2.5 + } + "10" + { + "name" "Green Blossom" + "short" "Green Blossom" + "color" "00FF40" + "filter" "Salad_Owner" + "weaponid" "666978" + "buttonid" "666975" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // 3 + "cooldown" "0" // 4.5 + } + "11" + { + "name" "Darkstorm" + "short" "Darkstorm" + "color" "2A0A29" + "filter" "DaSt_Owner" + "weaponid" "1156847" + "buttonid" "1156844" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" // 2 + "cooldown" "0" // 10 + } + + // Zombie - Items + "12" + { + "name" "[ZM] Power Within" + "short" "Power Within" + "color" "DF0101" + "filter" "PW_Owner" + "weaponid" "666608" + "buttonid" "666675" + "triggerid" "666683" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "13" + { + "name" "[ZM] Toxic Mist" + "short" "Toxic Mist" + "color" "6A0888" + "filter" "PM_Owner" + "weaponid" "666074" + "buttonid" "666141" + "triggerid" "666147" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "[ZM] Black Flame" + "short" "Black Flame" + "color" "CD853F" + "filter" "BF_Owner" + "weaponid" "1561358" + "buttonid" "1561279" + "triggerid" "1561374" + "display" "7" + "slot" "3" + "mode" "3" + "maxuses" "10" + "cooldown" "3" // 2.5 + } + "15" + { + "name" "[ZM] Poison Mist" + "short" "Poison Mist" + "color" "80C436" + "filter" "ZMPoison_Owner" + "weaponid" "1702534" + "buttonid" "1702526" + "triggerid" "1702531" + "display" "7" + "slot" "3" + "mode" "3" + "maxuses" "10" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_deadcore_s6.cfg b/entWatch4/configs/entwatch/ze_deadcore_s6.cfg new file mode 100644 index 00000000..f61bcab6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_deadcore_s6.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Cannon" + "short" "Cannon" + "color" "00FFFF" + "filter" "cannon1" + "weaponid" "609101" + "buttonid" "1427217" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "3" + } + "1" + { + "name" "Cannon" + "short" "Cannon" + "color" "00FFFF" + "filter" "cannon2" + "weaponid" "1259831" + "buttonid" "1259833" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "3" + } + "2" + { + "name" "Cannon" + "short" "Cannon" + "color" "00FFFF" + "filter" "cannon3" + "weaponid" "1261070" + "buttonid" "1261072" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "3" + } +} diff --git a/entWatch4/configs/entwatch/ze_death_star_escape_v4_3.cfg b/entWatch4/configs/entwatch/ze_death_star_escape_v4_3.cfg new file mode 100644 index 00000000..b26164e0 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_death_star_escape_v4_3.cfg @@ -0,0 +1,34 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Blue Lightsaber" + "short" "Blue Saber" + "color" "0000FF" + "filter" "Player_Fire" + "weaponid" "1480205" + "buttonid" "1480191" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "1" + { + "name" "Red Lightsaber" + "short" "Red Saber" + "color" "FF0000" + "filter" "Player_Earth" + "weaponid" "1544598" + "buttonid" "1544582" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_doom3_v1.cfg b/entWatch4/configs/entwatch/ze_doom3_v1.cfg new file mode 100644 index 00000000..c18e0aeb --- /dev/null +++ b/entWatch4/configs/entwatch/ze_doom3_v1.cfg @@ -0,0 +1,186 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Soul Cube" + "short" "Cube" + "color" "111111" + "filter" "cubdux1" + "weaponid" "2009" + "buttonid" "2003" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "12" + } + "1" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "228800" + "filter" "" + "weaponid" "2083" + "buttonid" "3538" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Electro Grenade" + "short" "Electro" + "color" "21FFFC" + "filter" "grenades1" + "weaponid" "3135" + "buttonid" "3142" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "3" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "oxx" + "weaponid" "3202" + "buttonid" "3200" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "4" + { + "name" "Heart of Hell" + "short" "Heart" + "color" "FF0000" + "filter" "oxx1" + "weaponid" "3309" + "buttonid" "3311" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Pushgun" + "short" "Push" + "color" "22FF88" + "filter" "oxx11" + "weaponid" "3320" + "buttonid" "3322" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "6" + { + "name" "Minigun" + "short" "Minigun" + "color" "FFFF00" + "filter" "krub1" + "weaponid" "3993" + "buttonid" "3988" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "13" + } + "7" + { + "name" "BFG" + "short" "BFG" + "color" "EE0000" + "filter" "grenades1tru" + "weaponid" "1520691" + "buttonid" "1520408" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "15" + } + + // Zombie - Items + "8" + { + "name" "Spider" + "short" "ZSpider" + "color" "EE0000" + "filter" "imps1" + "weaponid" "1900" + "buttonid" "1902" + "triggerid" "2952" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "8" + } + "9" + { + "name" "Spider" + "short" "ZSpider" + "color" "EE0000" + "filter" "pauchixaxx" + "weaponid" "1929" + "buttonid" "1934" + "triggerid" "1930" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "7" + } + "10" + { + "name" "Pinky" + "short" "ZPinky" + "color" "EE0000" + "filter" "sobaka" + "weaponid" "1918" + "buttonid" "1919" + "triggerid" "1916" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "11" + { + "name" "Skelet" + "short" "ZSkelet" + "color" "EE0000" + "filter" "skelets1" + "weaponid" "1938" + "buttonid" "1942" + "triggerid" "1940" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "9" + } +} diff --git a/entWatch4/configs/entwatch/ze_doom_v1_1.cfg b/entWatch4/configs/entwatch/ze_doom_v1_1.cfg new file mode 100644 index 00000000..444b25f0 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_doom_v1_1.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Berserker" + "short" "Berserker" + "color" "FF0000" + "filter" "berserker" + "weaponid" "26895" + "buttonid" "26887" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "BFG" + "short" "BFG" + "color" "0000FF" + "filter" "bfg_own" + "weaponid" "26859" + "buttonid" "26845" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Megasphere" + "short" "Megasphere" + "color" "00FF00" + "filter" "megasphere" + "weaponid" "26879" + "buttonid" "26881" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "3" + { + "name" "Soulsphere" + "short" "Soulsphere" + "color" "FFFFFF" + "filter" "soulsphere" + "weaponid" "26854" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Soulsphere" + "short" "Soulsphere" + "color" "FFFFFF" + "filter" "soulsphere2" + "weaponid" "26740" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Soulsphere" + "short" "Soulsphere" + "color" "FFFFFF" + "filter" "soulsphere3" + "weaponid" "26767" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_dreamin_v2_1s_fix4.cfg b/entWatch4/configs/entwatch/ze_dreamin_v2_1s_fix4.cfg new file mode 100644 index 00000000..b96dd760 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_dreamin_v2_1s_fix4.cfg @@ -0,0 +1,96 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Snow" + "short" "Snow" + "color" "00FFFF" + "filter" "snow_user" + "weaponid" "124959" + "buttonid" "125032" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Wind" + "short" "Wind" + "color" "00FF00" + "filter" "wind_user" + "weaponid" "17000" + "buttonid" "17009" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Freezer" + "short" "Freezer" + "color" "0000FF" + "filter" "freezer_user" + "weaponid" "26872" + "buttonid" "26874" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Recovery" + "short" "Recovery" + "color" "FFFFFF" + "filter" "recovery_user" + "weaponid" "17090" + "buttonid" "17087" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Zombie - Items + "4" + { + "name" "Gravity" + "short" "Gravity" + "color" "FF00FF" + "filter" "gravity_user" + "weaponid" "125388" + "buttonid" "125385" + "triggerid" "125634" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "5" + { + "name" "Nuke" + "short" "Nuke" + "color" "FF0000" + "filter" "nuke_user" + "weaponid" "125393" + "buttonid" "125395" + "triggerid" "125403" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } +} diff --git a/entWatch4/configs/entwatch/ze_eden_a3s.cfg b/entWatch4/configs/entwatch/ze_eden_a3s.cfg new file mode 100644 index 00000000..80e7f454 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_eden_a3s.cfg @@ -0,0 +1,16 @@ +"items" +{ + "0" + { + "name" "(de)Bugger." + "short" "debugger" + "color" "686868" + "filter" "" + "weaponid" "35470" + "buttonid" "35594" + "display" "5" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_eternal_journey_v1_1.cfg b/entWatch4/configs/entwatch/ze_eternal_journey_v1_1.cfg new file mode 100644 index 00000000..83ebe031 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_eternal_journey_v1_1.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal Staff" + "short" "Heal" + "color" "00FA9A" + "filter" "heal_player" + "weaponid" "18729416" + "buttonid" "18729420" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Tornado Staff" + "short" "Tornado" + "color" "C0C0C0" + "filter" "tornado_player" + "weaponid" "18753722" + "buttonid" "18753583" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Freeze Staff" + "short" "Freeze" + "color" "00BFFF" + "filter" "freeze_player" + "weaponid" "18718079" + "buttonid" "18717942" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "3" + { + "name" "Earth Staff" + "short" "Earth" + "color" "CD853F" + "filter" "earth_player" + "weaponid" "18776809" + "buttonid" "18776672" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Fire Staff" + "short" "Fire" + "color" "FF4500" + "filter" "fire_player" + "weaponid" "17301106" + "buttonid" "17301329" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Ultimate Staff" + "short" "Ultimate" + "color" "D8BFD8" + "filter" "ultimate_player" + "weaponid" "19321023" + "buttonid" "19320947" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "15" + } + + // Zombie - Items + "6" + { + "name" "Cromcruach" + "short" "Cromcruach" + "color" "C0C0C0" + "filter" "zmskin2_player" + "weaponid" "18809475" + "buttonid" "0" + "triggerid" "18809472" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Glasgavelen" + "short" "Glasgavelen" + "color" "C0C0C0" + "filter" "zmskin1_player" + "weaponid" "18808768" + "buttonid" "0" + "triggerid" "18808765" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "[ZM] Fire" + "short" "[ZM] Fire" + "color" "FF4500" + "filter" "zmfire_player" + "weaponid" "18790442" + "buttonid" "18790366" + "triggerid" "18790723" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "9" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "9400D3" + "filter" "zmgravity_player" + "weaponid" "18791994" + "buttonid" "18791923" + "triggerid" "18791991" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "10" + { + "name" "[ZM] Freeze" + "short" "[ZM] Freeze" + "color" "00BFFF" + "filter" "zmfreeze_player" + "weaponid" "18805946" + "buttonid" "18805808" + "triggerid" "18805943" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_evernight_a3_4_css2.cfg b/entWatch4/configs/entwatch/ze_evernight_a3_4_css2.cfg new file mode 100644 index 00000000..465c5d82 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_evernight_a3_4_css2.cfg @@ -0,0 +1,156 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Shadow" + "short" "Shadow" + "color" "5D6D7E" + "filter" "Item_Shadow_User" + "weaponid" "177360" + "buttonid" "177362" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Light" + "short" "Light" + "color" "FFFFFF" + "filter" "Item_Light_User" + "weaponid" "177504" + "buttonid" "177506" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Wind" + "short" "Wind" + "color" "76D7C4" + "filter" "Item_Wind_User" + "weaponid" "177789" + "buttonid" "177794" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Ice" + "short" "Ice" + "color" "3498DB" + "filter" "Item_Ice_User" + "weaponid" "177929" + "buttonid" "177931" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Thunder" + "short" "Thunder" + "color" "85C1E9" + "filter" "Item_Thunder_User" + "weaponid" "178069" + "buttonid" "178071" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Fire" + "short" "Fire" + "color" "F39C12" + "filter" "Item_Fire_User" + "weaponid" "178213" + "buttonid" "178210" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Zombies - Items + "6" + { + "name" "[ZM] Fire" + "short" "[ZM] Fire" + "color" "F39C12" + "filter" "Item_ZFire_User" + "weaponid" "176978" + "buttonid" "176982" + "triggerid" "177062" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "7" + { + "name" "[ZM] Ice" + "short" "[ZM] Ice" + "color" "3498DB" + "filter" "Item_ZIce_User" + "weaponid" "2424762" + "buttonid" "177138" + "triggerid" "2424764" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "8" + { + "name" "[ZM] Wind" + "short" "[ZM] Wind" + "color" "76D7C4" + "filter" "Item_ZWind_User" + "weaponid" "2424770" + "buttonid" "176172" + "triggerid" "2424767" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "9" + { + "name" "[ZM] Thunder" + "short" "[ZM] Thunder" + "color" "85C1E9" + "filter" "Item_ZThunder_User" + "weaponid" "2424840" + "buttonid" "1127593" + "triggerid" "2424837" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } +} diff --git a/entWatch4/configs/entwatch/ze_fapescape_rote_v1_3f.cfg b/entWatch4/configs/entwatch/ze_fapescape_rote_v1_3f.cfg new file mode 100644 index 00000000..2f72b3c9 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_fapescape_rote_v1_3f.cfg @@ -0,0 +1,139 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Wall Spawner" + "short" "Wall" + "color" "AD4100" + "filter" "blockade" + "weaponid" "326008" + "buttonid" "325989" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "2" + } + "1" + { + "name" "Electro Gun" + "short" "Electro" + "color" "BCCD00" + "filter" "electric" + "weaponid" "326171" + "buttonid" "326315" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "EyeTech Launcher" + "short" "Launcher" + "color" "120061" + "filter" "launcher" + "weaponid" "326586" + "buttonid" "326588" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "2" + } + "3" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "heal" + "weaponid" "325974" + "buttonid" "325899" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "4" + { + "name" "Push Gun" + "short" "Push" + "color" "00D8D5" + "filter" "push" + "weaponid" "326086" + "buttonid" "326088" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "5" + { + "name" "Flamethrower" + "short" "Flame" + "color" "BB0000" + "filter" "flamethrower" + "weaponid" "326332" + "buttonid" "326334" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "10" + } + "6" + { + "name" "Ammo" + "short" "Ammo" + "color" "AD4100" + "filter" "ammowep" + "weaponid" "326492" + "buttonid" "326494" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Pipe Bomb" + "short" "Bomb" + "color" "DC143C" + "filter" "pipe" + "weaponid" "326600" + "buttonid" "326602" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "5" + "cooldown" "2" + } + "8" + { + "name" "EyeTech Cannon" + "short" "Cannon" + "color" "AD4100" + "filter" "cannon" + "weaponid" "326711" + "buttonid" "326713" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_fapescape_v1_2.cfg b/entWatch4/configs/entwatch/ze_fapescape_v1_2.cfg new file mode 100644 index 00000000..972d8578 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_fapescape_v1_2.cfg @@ -0,0 +1,184 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Uber Cannon" + "short" "Uber" + "color" "120061" + "filter" "uber" + "weaponid" "25307" + "buttonid" "25300" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "150" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "heal" + "weaponid" "1889" + "buttonid" "1891" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Ammo Box" + "short" "Ammo" + "color" "AD4100" + "filter" "kuulid" + "weaponid" "4509" + "buttonid" "4524" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Explosive Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "mineboom" + "weaponid" "1881" + "buttonid" "1879" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "5" + "cooldown" "2" + } + "4" + { + "name" "Flamethrower" + "short" "Flame" + "color" "BB0000" + "filter" "flamethrower" + "weaponid" "1952" + "buttonid" "1946" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Grenade Spawner" + "short" "Grenade" + "color" "AD4100" + "filter" "nades" + "weaponid" "1868" + "buttonid" "1869" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Wall Spawner" + "short" "Wall" + "color" "AD4100" + "filter" "blockage" + "weaponid" "1923" + "buttonid" "1921" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "2" + } + "7" + { + "name" "Push Gun" + "short" "Push" + "color" "00D8D5" + "filter" "push" + "weaponid" "1893" + "buttonid" "1894" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "8" + { + "name" "Hand Cannon" + "short" "Cannon" + "color" "AD4100" + "filter" "kahur" + "weaponid" "4555" + "buttonid" "4553" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Banana Gun" + "short" "Banana" + "color" "E0E800" + "filter" "banana" + "weaponid" "424414" + "buttonid" "424447" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "15" + "cooldown" "2" + } + "10" + { + "name" "Kim" + "short" "Kim" + "color" "FD5E5E" + "filter" "" + "weaponid" "2874" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "Päss" + "short" "Pass" + "color" "FD5E5E" + "filter" "" + "weaponid" "2886" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffvii_cosmo_canyon_v5fix.cfg b/entWatch4/configs/entwatch/ze_ffvii_cosmo_canyon_v5fix.cfg new file mode 100644 index 00000000..adc7f515 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffvii_cosmo_canyon_v5fix.cfg @@ -0,0 +1,235 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Gravity Materia" + "short" "Gravity" + "color" "2A2A2A" + "filter" "Gravity_Owner" + "weaponid" "323441" + "buttonid" "323443" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Electro Materia" + "short" "Electro" + "color" "0072FF" + "filter" "Electro_Owner" + "weaponid" "323285" + "buttonid" "323354" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "4" + "maxuses" "2" + "cooldown" "60" + } + "2" + { + "name" "Fire Materia" + "short" "Fire" + "color" "FF0000" + "filter" "Fire_Owner" + "weaponid" "323126" + "buttonid" "323128" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Bio Materia" + "short" "Bio" + "color" "990033" + "filter" "Bio_Owner" + "weaponid" "323363" + "buttonid" "323367" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Heal Materia" + "short" "Heal" + "color" "FFFFFF" + "filter" "Heal_Owner" + "weaponid" "323052" + "buttonid" "323121" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Earth Materia" + "short" "Earth" + "color" "965F00" + "filter" "Earth_Owner" + "weaponid" "323735" + "buttonid" "323737" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Wind Materia" + "short" "Wind" + "color" "04B404" + "filter" "Wind_Owner" + "weaponid" "323517" + "buttonid" "323519" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Ultima Materia" + "short" "Ultima" + "color" "00FF00" + "filter" "Ultima_Owner" + "weaponid" "323814" + "buttonid" "323816" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "15" + } + "8" + { + "name" "Sleep Materia" + "short" "Sleep" + "color" "2A2A2A" + "filter" "Sleep_Owner" + "weaponid" "524758" + "buttonid" "524762" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Human - Potion + "9" + { + "name" "Phoenix Down" + "short" "Phoenix Down" + "color" "00BFFF" + "filter" "Potion_Owner" + "weaponid" "2576537" + "buttonid" "2576539" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Items + "10" + { + "name" "[ZM] Ice Materia" + "short" "[ZM] Ice" + "color" "00BFFF" + "filter" "Ice_Z_Owner" + "weaponid" "1589580" + "buttonid" "1589574" + "triggerid" "1589577" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "11" + { + "name" "[ZM] Fire Materia" + "short" "[ZM] Fire" + "color" "B22222" + "filter" "Fire_Z_Owner" + "weaponid" "1576012" + "buttonid" "1576006" + "triggerid" "1576009" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "12" + { + "name" "[ZM] Poison Materia" + "short" "[ZM] Poison" + "color" "7CFC00" + "filter" "Poison_Z_Owner" + "weaponid" "2102221" + "buttonid" "2102228" + "triggerid" "2102223" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "13" + { + "name" "[ZM] Confuse Materia" + "short" "[ZM] Confuse" + "color" "9B27D1" + "filter" "Confuse_Owner" + "weaponid" "3468411" + "buttonid" "3468276" + "triggerid" "3468413" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + + // Zombie - Misc + "14" + { + "name" "[ZM] Pampa" + "short" "[ZM] Pampa" + "color" "9B27D1" + "filter" "CactusZM_Z_Owner" + "weaponid" "1446677" + "buttonid" "0" + "triggerid" "1446670" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/_entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg b/entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg similarity index 91% rename from _entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg rename to entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg index d444c37b..17e7f8fe 100644 --- a/_entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg +++ b/entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v5_3.cfg @@ -1,5 +1,6 @@ "items" { + // Human - Items "0" { "name" "Gravity Materia" @@ -10,6 +11,7 @@ "buttonid" "1587" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" @@ -23,7 +25,8 @@ "weaponid" "1546" "buttonid" "1544" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -38,6 +41,7 @@ "buttonid" "1422" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" @@ -52,6 +56,7 @@ "buttonid" "1398" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" @@ -66,6 +71,7 @@ "buttonid" "1494" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "50" @@ -80,6 +86,7 @@ "buttonid" "1463" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" @@ -94,6 +101,7 @@ "buttonid" "1440" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" @@ -108,6 +116,7 @@ "buttonid" "1364" "triggerid" "0" "display" "7" + "slot" "2" "mode" "3" "maxuses" "1" "cooldown" "20" diff --git a/entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v6_b08.cfg b/entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v6_b08.cfg new file mode 100644 index 00000000..e3403ec0 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffvii_mako_reactor_v6_b08.cfg @@ -0,0 +1,184 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Gravity Materia" + "short" "Gravity" + "color" "2A2A2A" + "filter" "player_gravity" + "weaponid" "2908185" + "buttonid" "2908117" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "1" + { + "name" "Electro Materia" + "short" "Electro" + "color" "0072FF" + "filter" "player_electro" + "weaponid" "2908013" + "buttonid" "2907945" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Fire Materia" + "short" "Fire" + "color" "FF0000" + "filter" "player_fire" + "weaponid" "2907860" + "buttonid" "2907792" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "3" + { + "name" "Ice Materia" + "short" "Ice" + "color" "00FFFF" + "filter" "player_ice" + "weaponid" "2907354" + "buttonid" "2907286" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "4" + { + "name" "Heal Materia" + "short" "Heal" + "color" "FFFFFF" + "filter" "player_heal" + "weaponid" "2907132" + "buttonid" "2907064" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "5" + { + "name" "Earth Materia" + "short" "Earth" + "color" "965F00" + "filter" "player_earth" + "weaponid" "2908100" + "buttonid" "2908032" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "6" + { + "name" "Wind Materia" + "short" "Wind" + "color" "04B404" + "filter" "player_wind" + "weaponid" "2906834" + "buttonid" "2906766" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "7" + { + "name" "Aqua Materia" + "short" "Aqua" + "color" "9DE7EB" + "filter" "player_water" + "weaponid" "2907705" + "buttonid" "2907637" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "8" + { + "name" "Bio Materia" + "short" "Bio" + "color" "39F374" + "filter" "player_bio" + "weaponid" "2906432" + "buttonid" "2906364" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "9" + { + "name" "Barrier Materia" + "short" "Barrier" + "color" "E2EF7F" + "filter" "player_barrier" + "weaponid" "2906517" + "buttonid" "2906449" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "10" + { + "name" "Mimic Materia" + "short" "Mimic" + "color" "EC4CF4" + "filter" "player_mimic" + "weaponid" "4525325" + "buttonid" "4525251" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "11" + { + "name" "Ultima Materia" + "short" "Ultima" + "color" "00FF00" + "filter" "player_ultima" + "weaponid" "2906602" + "buttonid" "2906534" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffvii_temple_ancient_v3_3.cfg b/entWatch4/configs/entwatch/ze_ffvii_temple_ancient_v3_3.cfg new file mode 100644 index 00000000..1871dbe8 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffvii_temple_ancient_v3_3.cfg @@ -0,0 +1,109 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Earth" + "short" "Earth" + "color" "8B4513" + "filter" "filter_gravity" + "weaponid" "1699278" + "buttonid" "1699210" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "1" + { + "name" "Poison" + "short" "Poison" + "color" "00FF00" + "filter" "filter_electro" + "weaponid" "1699960" + "buttonid" "1699821" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Fire" + "short" "Fire" + "color" "FF0000" + "filter" "filter_fire" + "weaponid" "1699377" + "buttonid" "1699368" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "3" + { + "name" "Ice" + "short" "Ice" + "color" "00FFFF" + "filter" "filter_ice" + "weaponid" "1699054" + "buttonid" "1699056" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "filter_heal" + "weaponid" "1699816" + "buttonid" "1699677" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "5" + { + "name" "Wind" + "short" "Wind" + "color" "04B404" + "filter" "filter_wind" + "weaponid" "1699673" + "buttonid" "1699668" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "6" + { + "name" "Crystal" + "short" "Crystal" + "color" "00FF00" + "filter" "crystal_pistol" + "weaponid" "1677880" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_feywood_b3_1.cfg b/entWatch4/configs/entwatch/ze_ffxii_feywood_b3_1.cfg new file mode 100644 index 00000000..1b904e05 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_feywood_b3_1.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal Magick" + "short" "Heal" + "color" "F55884" + "filter" "Heal_Owner" + "weaponid" "1841349" + "buttonid" "1841424" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Wind Magick" + "short" "Wind" + "color" "04B404" + "filter" "Wind_Owner" + "weaponid" "1841928" + "buttonid" "1841930" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Dark Magick" + "short" "Dark" + "color" "8B689F" + "filter" "Darkaga_Owner" + "weaponid" "1841846" + "buttonid" "1841848" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Ice Magick" + "short" "Ice" + "color" "00FFFF" + "filter" "Blizzard_Owner" + "weaponid" "1841762" + "buttonid" "1841766" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "4" + { + "name" "Electro Magick" + "short" "Electro" + "color" "BCCD00" + "filter" "Electro_Owner" + "weaponid" "1841678" + "buttonid" "1841751" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "5" + { + "name" "Fire Magick" + "short" "Fire" + "color" "FF0000" + "filter" "Fire_Owner" + "weaponid" "1841431" + "buttonid" "1841435" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "6" + { + "name" "Berserk Magick" + "short" "Berserk" + "color" "FF8000" + "filter" "Berserk_Owner" + "weaponid" "3764112" + "buttonid" "3764040" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "7" + { + "name" "[ZM] Warp Magick" + "short" "[ZM] Warp" + "color" "FF00FF" + "filter" "Warp_Z_Owner" + "weaponid" "1871651" + "buttonid" "1871580" + "triggerid" "1871583" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "8" + { + "name" "[ZM] Dark Magick" + "short" "[ZM] Dark" + "color" "8B689F" + "filter" "Darkaga_Z_Owner" + "weaponid" "1871410" + "buttonid" "1871339" + "triggerid" "1871407" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "9" + { + "name" "[ZM] Fire Magick" + "short" "[ZM] Fire" + "color" "FF0000" + "filter" "Fire_Z_Owner" + "weaponid" "1870326" + "buttonid" "1870328" + "triggerid" "1870323" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "10" + { + "name" "[ZM] Heal Magick" + "short" "[ZM] Heal" + "color" "FFFFFF" + "filter" "Heal_Z_Owner" + "weaponid" "1869948" + "buttonid" "1869880" + "triggerid" "1869877" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_paramina_rift_v1_4.cfg b/entWatch4/configs/entwatch/ze_ffxii_paramina_rift_v1_4.cfg new file mode 100644 index 00000000..da0a8445 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_paramina_rift_v1_4.cfg @@ -0,0 +1,235 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ice Magick" + "short" "Ice" + "color" "00FFFF" + "filter" "" + "weaponid" "2511987" + "buttonid" "2511991" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Heal Magick" + "short" "Heal" + "color" "FFFFFF" + "filter" "" + "weaponid" "2511901" + "buttonid" "2511898" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Fire Magick" + "short" "Fire" + "color" "FF8000" + "filter" "" + "weaponid" "2511907" + "buttonid" "2511911" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Poison Magick" + "short" "Poison" + "color" "40FF80" + "filter" "" + "weaponid" "2512074" + "buttonid" "2512063" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Wind Magick" + "short" "Wind" + "color" "00B400" + "filter" "" + "weaponid" "2512217" + "buttonid" "2512214" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Human - Potions + "5" + { + "name" "HP Potion" + "short" "HP Potion" + "color" "0040FF" + "filter" "" + "weaponid" "2512545" + "buttonid" "2512547" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "6" + { + "name" "HI Potion" + "short" "HI Potion" + "color" "0040FF" + "filter" "" + "weaponid" "2512687" + "buttonid" "2512617" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "7" + { + "name" "Ammo Potion" + "short" "Ammo Potion" + "color" "0040FF" + "filter" "" + "weaponid" "2512759" + "buttonid" "2512689" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "8" + { + "name" "Speed Potion" + "short" "Speed Potion" + "color" "0040FF" + "filter" "" + "weaponid" "2512831" + "buttonid" "2512761" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "9" + { + "name" "Holy Potion" + "short" "Holy Potion" + "color" "0040FF" + "filter" "" + "weaponid" "2512903" + "buttonid" "2512833" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "14" + } + + // Human - Esper + "10" + { + "name" "Esper Mateus" + "short" "Esper" + "color" "00BFFF" + "filter" "" + "weaponid" "2513397" + "buttonid" "2513401" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "10" + } + + // Zombie - Items + "11" + { + "name" "[ZM] Warp Magick" + "short" "[ZM] Warp" + "color" "B40404" + "filter" "" + "weaponid" "2511649" + "buttonid" "2511578" + "triggerid" "2511646" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "12" + { + "name" "[ZM] Lure Magick" + "short" "[ZM] Lure" + "color" "B40404" + "filter" "" + "weaponid" "2511748" + "buttonid" "2511745" + "triggerid" "2511750" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "85" + } + "13" + { + "name" "[ZM] Fire Magick" + "short" "[ZM] Fire" + "color" "B40404" + "filter" "" + "weaponid" "2512450" + "buttonid" "2512438" + "triggerid" "2512447" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "14" + { + "name" "[ZM] Frost Magick" + "short" "[ZM] Frost" + "color" "B40404" + "filter" "" + "weaponid" "2512303" + "buttonid" "2512291" + "triggerid" "2512300" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_ridorana_cataract_t5_3.cfg b/entWatch4/configs/entwatch/ze_ffxii_ridorana_cataract_t5_3.cfg new file mode 100644 index 00000000..1e768e24 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_ridorana_cataract_t5_3.cfg @@ -0,0 +1,172 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal Magick" + "short" "Heal" + "color" "FFFFFF" + "filter" "Heal_Owner" + "weaponid" "29413" + "buttonid" "29484" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Wind Magick" + "short" "Wind" + "color" "04B404" + "filter" "Wind_Owner" + "weaponid" "29972" + "buttonid" "29974" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Dark Magick" + "short" "Dark" + "color" "8B689F" + "filter" "Darkaga_Owner" + "weaponid" "29894" + "buttonid" "29896" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "3" + { + "name" "Ice Magick" + "short" "Ice" + "color" "00FFFF" + "filter" "Blizzard_Owner" + "weaponid" "29814" + "buttonid" "29818" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "4" + { + "name" "Electro Magick" + "short" "Electro" + "color" "BCCD00" + "filter" "Electro_Owner" + "weaponid" "29734" + "buttonid" "29803" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Fire Magick" + "short" "Fire" + "color" "FF0000" + "filter" "Fire_Owner" + "weaponid" "29491" + "buttonid" "29495" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Ultima Sword" + "short" "Ultima" + "color" "EFFF16" + "filter" "Berserk_Owner" + "weaponid" "36679" + "buttonid" "36607" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + + // Zombie - Items + "7" + { + "name" "[ZM] Warp Magick" + "short" "[ZM] Warp" + "color" "FF7700" + "filter" "Warp_Z_Owner" + "weaponid" "30795" + "buttonid" "30724" + "triggerid" "30727" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "8" + { + "name" "[ZM] Dark Magick" + "short" "[ZM] Dark" + "color" "8B689F" + "filter" "Darkaga_Z_Owner" + "weaponid" "30712" + "buttonid" "30641" + "triggerid" "30709" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "9" + { + "name" "[ZM] Fire Magick" + "short" "[ZM] Fire" + "color" "FF7700" + "filter" "Fire_Z_Owner" + "weaponid" "30486" + "buttonid" "30488" + "triggerid" "30483" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "10" + { + "name" "[ZM] Heal Magick" + "short" "[ZM] Heal" + "color" "8B689F" + "filter" "Heal_Z_Owner" + "weaponid" "30269" + "buttonid" "30201" + "triggerid" "30198" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_westersand_v2d.cfg b/entWatch4/configs/entwatch/ze_ffxii_westersand_v2d.cfg new file mode 100644 index 00000000..7bfd9b53 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_westersand_v2d.cfg @@ -0,0 +1,124 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Wind Magic" + "short" "Wind" + "color" "00FF00" + "filter" "target_wind" + "weaponid" "84865" + "buttonid" "84862" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Ice Magic" + "short" "Ice" + "color" "0814FF" + "filter" "target_ice" + "weaponid" "575922" + "buttonid" "575926" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Heal Magic" + "short" "Heal" + "color" "FFFFFF" + "filter" "target_heal" + "weaponid" "83068" + "buttonid" "83000" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "3" + { + "name" "Earth Magic" + "short" "Earth" + "color" "965F00" + "filter" "target_earth" + "weaponid" "430688" + "buttonid" "430690" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "4" + { + "name" "Fire Magic" + "short" "Fire" + "color" "FF7300" + "filter" "target_fire" + "weaponid" "83760" + "buttonid" "83762" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "5" + { + "name" "Holy Magic" + "short" "Holy" + "color" "FFFFFF" + "filter" "target_holy" + "weaponid" "87311" + "buttonid" "87586" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + "6" + { + "name" "Chocobo" + "short" "Chocobo" + "color" "FF0000" + "filter" "" + "weaponid" "133419" + "buttonid" "241297" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Chocobo" + "short" "Chocobo" + "color" "FF0000" + "filter" "" + "weaponid" "430758" + "buttonid" "430751" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_westersand_v5_2.cfg b/entWatch4/configs/entwatch/ze_ffxii_westersand_v5_2.cfg new file mode 100644 index 00000000..b53a1b7d --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_westersand_v5_2.cfg @@ -0,0 +1,233 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Wind Staff" + "short" "Wind" + "color" "00FF00" + "filter" "windcaster" + "weaponid" "476266" + "buttonid" "475368" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Water Staff" + "short" "Water" + "color" "0814FF" + "filter" "watercaster" + "weaponid" "476264" + "buttonid" "475300" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Heal Staff" + "short" "Heal" + "color" "FFFFFF" + "filter" "healcaster" + "weaponid" "476258" + "buttonid" "475572" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Electro Staff" + "short" "Electro" + "color" "FFFF00" + "filter" "electrocaster" + "weaponid" "476260" + "buttonid" "475504" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "4" + { + "name" "Earth Staff" + "short" "Earth" + "color" "965F00" + "filter" "earthcaster" + "weaponid" "476268" + "buttonid" "475708" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "5" + { + "name" "Fire Staff" + "short" "Fire" + "color" "FF7300" + "filter" "firecaster" + "weaponid" "695050" + "buttonid" "695052" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "6" + { + "name" "Holy Staff" + "short" "Holy" + "color" "FFFFFF" + "filter" "holycaster" + "weaponid" "476256" + "buttonid" "475640" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + + // Human - Specials + "7" + { + "name" "Ashe Cloak" + "short" "Ashe" + "color" "0040FF" + "filter" "" + "weaponid" "777862" + "buttonid" "0" + "triggerid" "777859" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Balthier Cloak" + "short" "Balthier" + "color" "0040FF" + "filter" "" + "weaponid" "796352" + "buttonid" "0" + "triggerid" "796354" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Basch Cloak" + "short" "Basch" + "color" "0040FF" + "filter" "" + "weaponid" "777766" + "buttonid" "0" + "triggerid" "777763" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "10" + { + "name" "[ZM] Warp" + "short" "[ZM] Warp" + "color" "FF0000" + "filter" "warpcaster" + "weaponid" "476523" + "buttonid" "476520" + "triggerid" "476525" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } + "11" + { + "name" "[ZM] Lure" + "short" "[ZM] Lure" + "color" "FF0000" + "filter" "lurecaster" + "weaponid" "476278" + "buttonid" "476345" + "triggerid" "476348" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } + "12" + { + "name" "[ZM] Blind" + "short" "[ZM] Blind" + "color" "FF0000" + "filter" "blindcaster" + "weaponid" "476360" + "buttonid" "476357" + "triggerid" "476362" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } + "13" + { + "name" "[ZM] Chocobo" + "short" "[ZM] Chocobo" + "color" "FF0000" + "filter" "" + "weaponid" "795408" + "buttonid" "0" + "triggerid" "795568" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "[ZM] Chocobo" + "short" "[ZM] Chocobo" + "color" "FF0000" + "filter" "" + "weaponid" "795464" + "buttonid" "0" + "triggerid" "795580" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxii_westersand_v7_2.cfg b/entWatch4/configs/entwatch/ze_ffxii_westersand_v7_2.cfg new file mode 100644 index 00000000..b781379d --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxii_westersand_v7_2.cfg @@ -0,0 +1,248 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Wind Staff" + "short" "Wind" + "color" "04B404" + "filter" "Player_Staff_Wind" + "weaponid" "474260" + "buttonid" "474253" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "1" + { + "name" "Water Staff" + "short" "Water" + "color" "0814FF" + "filter" "Player_Staff_Water" + "weaponid" "473926" + "buttonid" "473919" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Heal Staff" + "short" "Heal" + "color" "FFFFFF" + "filter" "Player_Staff_Heal" + "weaponid" "474682" + "buttonid" "728802" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Electro Staff" + "short" "Electro" + "color" "BCCD00" + "filter" "Player_Staff_Electro" + "weaponid" "474435" + "buttonid" "474422" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Earth Staff" + "short" "Earth" + "color" "965F00" + "filter" "Player_Staff_Earth" + "weaponid" "474010" + "buttonid" "474081" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "5" + { + "name" "Fire Staff" + "short" "Fire" + "color" "FF0000" + "filter" "Player_Staff_Fire" + "weaponid" "474249" + "buttonid" "474171" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Holy Staff" + "short" "Holy" + "color" "A1A1A1" + "filter" "Player_Staff_Holy" + "weaponid" "474103" + "buttonid" "474085" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + + // Human - Specials + "7" + { + "name" "Ashe Cloak" + "short" "Ashe" + "color" "0040FF" + "filter" "" + "weaponid" "479440" + "buttonid" "0" + "triggerid" "479437" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Vaan Cloak" + "short" "Vaan" + "color" "0040FF" + "filter" "" + "weaponid" "479356" + "buttonid" "0" + "triggerid" "479358" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Balthier Cloak" + "short" "Balthier" + "color" "0040FF" + "filter" "" + "weaponid" "479085" + "buttonid" "0" + "triggerid" "479082" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Basch Cloak" + "short" "Basch" + "color" "0040FF" + "filter" "" + "weaponid" "478923" + "buttonid" "0" + "triggerid" "478920" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "11" + { + "name" "[ZM] Warp" + "short" "[ZM] Warp" + "color" "B40404" + "filter" "Player_Knife_Warp" + "weaponid" "473843" + "buttonid" "473845" + "triggerid" "473840" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "12" + { + "name" "[ZM] Invisibility" + "short" "[ZM] Invisibility" + "color" "B40404" + "filter" "Player_Knife_Invis" + "weaponid" "474656" + "buttonid" "474588" + "triggerid" "474658" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "13" + { + "name" "[ZM] Lure" + "short" "[ZM] Lure" + "color" "B40404" + "filter" "Player_Knife_Lure" + "weaponid" "474985" + "buttonid" "475056" + "triggerid" "474982" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "14" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "B40404" + "filter" "Player_Knife_Blind" + "weaponid" "475298" + "buttonid" "475300" + "triggerid" "475295" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "15" + { + "name" "[ZM] Chocobo" + "short" "[ZM] Chocobo" + "color" "FF0000" + "filter" "" + "weaponid" "1608309" + "buttonid" "0" + "triggerid" "1608306" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/_entWatch4/configs/entwatch/ze_ffxii_westersand_v8beta6.cfg b/entWatch4/configs/entwatch/ze_ffxii_westersand_v8zeta1.cfg similarity index 83% rename from _entWatch4/configs/entwatch/ze_ffxii_westersand_v8beta6.cfg rename to entWatch4/configs/entwatch/ze_ffxii_westersand_v8zeta1.cfg index b4c8280c..61b59ef7 100644 --- a/_entWatch4/configs/entwatch/ze_ffxii_westersand_v8beta6.cfg +++ b/entWatch4/configs/entwatch/ze_ffxii_westersand_v8zeta1.cfg @@ -1,121 +1,7 @@ "items" { - // Zombie - Items - "0" - { - "name" "Zombie Lure" - "short" "Zombie Lure" - "color" "FF0000" - "filter" "Player_Knife_Lure" - "weaponid" "2665489" - "buttonid" "2665560" - "triggerid" "2667155" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "1" - { - "name" "Zombie Blind" - "short" "Zombie Blind" - "color" "FF0000" - "filter" "Player_Knife_Blind" - "weaponid" "2665770" - "buttonid" "2665772" - "triggerid" "2667152" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "2" - { - "name" "Zombie Warp" - "short" "Zombie Warp" - "color" "FF0000" - "filter" "Player_Knife_Warp" - "weaponid" "2666579" - "buttonid" "2666581" - "triggerid" "2667149" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "3" - { - "name" "Zombie Invisibility" - "short" "Zombie Invisibility" - "color" "FF0000" - "filter" "Player_Knife_Invis" - "weaponid" "2666721" - "buttonid" "2666653" - "triggerid" "2666723" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "4" - { - "name" "Zombie Shield" - "short" "Zombie Shield" - "color" "FF0000" - "filter" "Player_Knife_Shield" - "weaponid" "2666977" - "buttonid" "2666981" - "triggerid" "2666974" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "5" - { - "name" "Zombie Heal" - "short" "Zombie Heal" - "color" "FF0000" - "filter" "Player_Knife_Heal" - "weaponid" "2667303" - "buttonid" "2667229" - "triggerid" "2667226" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "6" - { - "name" "Zombie Fire" - "short" "Zombie Fire" - "color" "FF0000" - "filter" "Player_Knife_Fire" - "weaponid" "2708384" - "buttonid" "2708251" - "triggerid" "2708528" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - "7" - { - "name" "Zombie Frost" - "short" "Zombie Frost" - "color" "FF0000" - "filter" "Player_Knife_Frost" - "weaponid" "2708451" - "buttonid" "2708520" - "triggerid" "2708525" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "90" - } - // Human - Items - "8" + "1" { "name" "Water Staff" "short" "Water" @@ -125,11 +11,12 @@ "buttonid" "2665844" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "65" } - "9" + "2" { "name" "Fire Staff" "short" "Fire" @@ -139,11 +26,12 @@ "buttonid" "2666016" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "65" } - "10" + "3" { "name" "Heal Staff" "short" "Heal" @@ -153,11 +41,12 @@ "buttonid" "2666177" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "60" } - "11" + "4" { "name" "Earth Staff" "short" "Earth" @@ -167,11 +56,12 @@ "buttonid" "2665924" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "65" } - "12" + "5" { "name" "Electro Staff" "short" "Electro" @@ -181,11 +71,12 @@ "buttonid" "2666341" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "65" } - "13" + "6" { "name" "Wind Staff" "short" "Wind" @@ -195,11 +86,12 @@ "buttonid" "2666409" "triggerid" "0" "display" "7" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "65" } - "14" + "7" { "name" "Holy Staff" "short" "Holy" @@ -209,13 +101,14 @@ "buttonid" "2666019" "triggerid" "0" "display" "7" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - + // Human - Misc - "15" + "8" { "name" "Solo Winner" "short" "Solo Winner" @@ -225,9 +118,131 @@ "buttonid" "4270234" "triggerid" "0" "display" "7" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } + + // Zombie - Items + "9" + { + "name" "[ZM] Lure" + "short" "[ZM] Lure" + "color" "FF0000" + "filter" "Player_Knife_Lure" + "weaponid" "2665489" + "buttonid" "2665560" + "triggerid" "2667155" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "10" + { + "name" "[ZM] Blind" + "short" "[ZM] Blind" + "color" "FF0000" + "filter" "Player_Knife_Blind" + "weaponid" "2665770" + "buttonid" "2665772" + "triggerid" "2667152" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "11" + { + "name" "[ZM] Warp" + "short" "[ZM] Warp" + "color" "FF0000" + "filter" "Player_Knife_Warp" + "weaponid" "2666579" + "buttonid" "2666581" + "triggerid" "2667149" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "12" + { + "name" "[ZM] Invisibility" + "short" "[ZM] Invisibility" + "color" "FF0000" + "filter" "Player_Knife_Invis" + "weaponid" "2666721" + "buttonid" "2666653" + "triggerid" "2666723" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "13" + { + "name" "[ZM] Shield" + "short" "[ZM] Shield" + "color" "FF0000" + "filter" "Player_Knife_Shield" + "weaponid" "2666977" + "buttonid" "2666981" + "triggerid" "2666974" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "14" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "FF0000" + "filter" "Player_Knife_Heal" + "weaponid" "2667303" + "buttonid" "2667229" + "triggerid" "2667226" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "15" + { + "name" "[ZM] Fire" + "short" "[ZM] Fire" + "color" "FF0000" + "filter" "Player_Knife_Fire" + "weaponid" "2708384" + "buttonid" "2708251" + "triggerid" "2708528" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "16" + { + "name" "[ZM] Frost" + "short" "[ZM] Frost" + "color" "FF0000" + "filter" "Player_Knife_Frost" + "weaponid" "2708451" + "buttonid" "2708520" + "triggerid" "2708525" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } } - \ No newline at end of file diff --git a/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v4_5s.cfg b/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v4_5s.cfg new file mode 100644 index 00000000..773e7511 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v4_5s.cfg @@ -0,0 +1,126 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Limit Break" + "short" "Limit Break" + "color" "FFFFE0" + "filter" "limit_filter" + "weaponid" "190185" + "buttonid" "190193" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Mount Nightmare" + "short" "Mount Nightmare" + "color" "3EFF3E" + "filter" "nightmare_filter" + "weaponid" "122252" + "buttonid" "122257" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Summoner Shadow Flare" + "short" "Summoner Shadow Flare" + "color" "ADD8E6" + "filter" "shadowflare_filter" + "weaponid" "122287" + "buttonid" "122289" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Paladin Shield Oath" + "short" "Paladin Shield Oath" + "color" "FF8C00" + "filter" "shield_Filter" + "weaponid" "122360" + "buttonid" "122370" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "4" + { + "name" "White Mage Benediction" + "short" "White Mage Benediction" + "color" "FFFFFF" + "filter" "benediction_filter" + "weaponid" "122408" + "buttonid" "122405" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "150" + } + "5" + { + "name" "Black Mage Flare" + "short" "Black Mage Flare" + "color" "FF4040" + "filter" "flare_filter" + "weaponid" "122422" + "buttonid" "122433" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "6" + { + "name" "Bird Armys Paeon" + "short" "Bird Armys Paeon" + "color" "FFA500" + "filter" "armys_filter" + "weaponid" "122443" + "buttonid" "122445" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + + // Zombie - Items + "7" + { + "name" "Holm Gang" + "short" "Holm Gang" + "color" "FF0000" + "filter" "holmgang_filter" + "weaponid" "392538" + "buttonid" "392535" + "triggerid" "401536" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "95" + } +} diff --git a/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v5_2f.cfg b/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v5_2f.cfg new file mode 100644 index 00000000..b7baf58e --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ffxiv_wanderers_palace_v5_2f.cfg @@ -0,0 +1,281 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Blizzard Element" + "short" "Blizzard" + "color" "00FFFF" + "filter" "Player_Human_Blizzard" + "weaponid" "6008547" + "buttonid" "6008549" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Heal Element" + "short" "Heal" + "color" "FFFFFF" + "filter" "Player_Human_Heal" + "weaponid" "6008852" + "buttonid" "6008856" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Thunder Element" + "short" "Thunder" + "color" "8000FF" + "filter" "Player_Human_Thunder" + "weaponid" "6008559" + "buttonid" "6008552" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Potions + "3" + { + "name" "Damage Potion" + "short" "Damage" + "color" "0080FF" + "filter" "Player_Human_Damage" + "weaponid" "6008493" + "buttonid" "6008490" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "6" + } + "4" + { + "name" "Poison Potion" + "short" "Poison" + "color" "00FF00" + "filter" "Player_Human_Poison" + "weaponid" "6008485" + "buttonid" "6008487" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "6" + } + + // Human - Misc + "5" + { + "name" "Lalafell" + "short" "Lalafell" + "color" "FFFF00" + "filter" "" + "weaponid" "6007050" + "buttonid" "0" + "triggerid" "6007052" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Knight Sword" + "short" "Knight" + "color" "79DBFF" + "filter" "Player_Human_Knight" + "weaponid" "6008466" + "buttonid" "6008468" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "7" + { + "name" "Oath Element" + "short" "Oath" + "color" "FFFF80" + "filter" "Player_Human_Oath" + "weaponid" "6006844" + "buttonid" "6006839" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "8" + { + "name" "Bahamut Summon" + "short" "Bahamut" + "color" "6F6F6F" + "filter" "Player_Human_Bahamut" + "weaponid" "6006269" + "buttonid" "6006273" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + + // Zombie - Items + "9" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "8000FF" + "filter" "Player_Zombie_Gravity" + "weaponid" "6007303" + "buttonid" "6007295" + "triggerid" "6007300" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "10" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "FFFFFF" + "filter" "Player_Zombie_Heal" + "weaponid" "6008042" + "buttonid" "6008034" + "triggerid" "6008039" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "11" + { + "name" "[ZM] Ice" + "short" "[ZM] Ice" + "color" "00FFFF" + "filter" "Player_Zombie_Ice" + "weaponid" "6008636" + "buttonid" "6008638" + "triggerid" "6008643" + "display" "7" + "slot" "3" + "mode" "3" + "maxuses" "2" + "cooldown" "50" + } + "12" + { + "name" "[ZM] Malefic" + "short" "[ZM] Malefic" + "color" "00FFFF" + "filter" "Player_Zombie_Malefic" + "weaponid" "6008053" + "buttonid" "6008047" + "triggerid" "6008050" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "13" + { + "name" "[ZM] Seymour Natus" + "short" "[ZM] Seymour" + "color" "8000FF" + "filter" "Player_Zombie_Seymour" + "weaponid" "6006573" + "buttonid" "6006503" + "triggerid" "6006575" + "display" "7" + "slot" "3" + "mode" "3" + "maxuses" "2" + "cooldown" "20" + } + "14" + { + "name" "[ZM] Bahamut Wing" + "short" "[ZM] Bahamut" + "color" "00FFFF" + "filter" "Player_Zombie_Bahamut" + "weaponid" "6006090" + "buttonid" "6006094" + "triggerid" "6006087" + "display" "7" + "slot" "3" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + "15" + { + "name" "[ZM] Vyraal" + "short" "[ZM] Vyraal" + "color" "C0C0C0" + "filter" "Player_Zombie_Vyraal" + "weaponid" "6006814" + "buttonid" "6006821" + "triggerid" "6006816" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "16" + { + "name" "[ZM] Alteci" + "short" "[ZM] Alteci" + "color" "C0C0C0" + "filter" "Player_Zombie_Alteci" + "weaponid" "6007341" + "buttonid" "0" + "triggerid" "6007338" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "17" + { + "name" "[ZM] Garuda" + "short" "[ZM] Garuda" + "color" "F06E00" + "filter" "Player_Zombie_Garuda" + "weaponid" "6007281" + "buttonid" "0" + "triggerid" "6007278" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_fiendlordkeep_v4_2.cfg b/entWatch4/configs/entwatch/ze_fiendlordkeep_v4_2.cfg new file mode 100644 index 00000000..bd4c7ba5 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_fiendlordkeep_v4_2.cfg @@ -0,0 +1,141 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire" + "short" "Fire" + "color" "FFAA00" + "filter" "Player_Fire" + "weaponid" "801772" + "buttonid" "801774" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Lightning" + "short" "Lightning" + "color" "F3FF33" + "filter" "Player_Lightning" + "weaponid" "801947" + "buttonid" "801949" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Dark Bomb" + "short" "Shadow" + "color" "412A42" + "filter" "Player_Shadow" + "weaponid" "802173" + "buttonid" "802175" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Ice" + "short" "Ice" + "color" "06F0FF" + "filter" "Player_Ice" + "weaponid" "801760" + "buttonid" "801762" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Cure" + "short" "Cure" + "color" "F9FF98" + "filter" "Player_Cure" + "weaponid" "801860" + "buttonid" "802352" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Haste" + "short" "Haste" + "color" "FF0000" + "filter" "Player_Haste" + "weaponid" "801780" + "buttonid" "801777" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "6" + { + "name" "Recuperate" + "short" "ZM Heal" + "color" "136F17" + "filter" "Player_Recuperate" + "weaponid" "809148" + "buttonid" "809219" + "triggerid" "809143" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "7" + { + "name" "Lock All" + "short" "ZM Lock" + "color" "A5A5A5" + "filter" "Player_Lockall" + "weaponid" "801627" + "buttonid" "801632" + "triggerid" "801629" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "8" + { + "name" "R-Series Robot" + "short" "ZM Robot" + "color" "003865" + "filter" "Player_RSeries" + "weaponid" "1381607" + "buttonid" "1381604" + "triggerid" "1381609" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_gameshow_v1_2.cfg b/entWatch4/configs/entwatch/ze_gameshow_v1_2.cfg new file mode 100644 index 00000000..e3210528 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_gameshow_v1_2.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Monkey Bomb" + "short" "Bomb" + "color" "4C4CFF" + "filter" "mine_filter" + "weaponid" "1246980" + "buttonid" "1318677" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "4" + "cooldown" "2" + } + "1" + { + "name" "Push Gun" + "short" "Push Gun" + "color" "4C4CFF" + "filter" "push_filter" + "weaponid" "1247066" + "buttonid" "1372264" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + "2" + { + "name" "Freeze Gun" + "short" "Freeze Gun" + "color" "4C4CFF" + "filter" "freeze_filter" + "weaponid" "1247221" + "buttonid" "1372425" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } +} diff --git a/entWatch4/configs/entwatch/ze_gods_wrath_v3_8b.cfg b/entWatch4/configs/entwatch/ze_gods_wrath_v3_8b.cfg new file mode 100644 index 00000000..28bd2903 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_gods_wrath_v3_8b.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Burner Gun" + "short" "Burner Gun" + "color" "FF0000" + "filter" "" + "weaponid" "116712" + "buttonid" "123327" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "1" + { + "name" "Burner Gun" + "short" "Burner Gun" + "color" "00FF00" + "filter" "" + "weaponid" "128073" + "buttonid" "128064" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "8" + } + "2" + { + "name" "The Bow" + "short" "The Bow" + "color" "FF7F00" + "filter" "" + "weaponid" "124212" + "buttonid" "124209" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "8" + } +} diff --git a/entWatch4/configs/entwatch/ze_got_the_north_b4.cfg b/entWatch4/configs/entwatch/ze_got_the_north_b4.cfg new file mode 100644 index 00000000..cf750739 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_got_the_north_b4.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Axe" + "short" "Axe" + "color" "0040FF" + "filter" "" + "weaponid" "2973909" + "buttonid" "0" + "triggerid" "2973992" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Sword" + "short" "Sword" + "color" "0040FF" + "filter" "" + "weaponid" "2973920" + "buttonid" "0" + "triggerid" "2974010" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Bow" + "short" "Bow" + "color" "0040FF" + "filter" "" + "weaponid" "2973935" + "buttonid" "0" + "triggerid" "2974001" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Heal" + "short" "Heal" + "color" "0040FF" + "filter" "Can_Use_Heal" + "weaponid" "2976276" + "buttonid" "2976278" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "4" + { + "name" "Ammo" + "short" "Ammo" + "color" "0040FF" + "filter" "Can_Use_Ammo" + "weaponid" "2976263" + "buttonid" "2976195" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Barricade" + "short" "Barricade" + "color" "0040FF" + "filter" "" + "weaponid" "1688610" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_grau_s2.cfg b/entWatch4/configs/entwatch/ze_grau_s2.cfg new file mode 100644 index 00000000..78b6d0d4 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_grau_s2.cfg @@ -0,0 +1,81 @@ +"items" +{ + // Zombie - Items + "0" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item1_gr" + "weaponid" "298159" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item2_gr" + "weaponid" "298201" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item3_gr" + "weaponid" "377002" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Triggers + "3" + { + "name" "Trigger 1" + "triggerid" "377100" + } + "4" + { + "name" "Trigger 2" + "triggerid" "377233" + } + "5" + { + "name" "Trigger 3" + "triggerid" "299257" + } + "6" + { + "name" "Trigger 4" + "triggerid" "299269" + } + "7" + { + "name" "Trigger 5" + "triggerid" "299755" + } + "8" + { + "name" "Trigger 6" + "triggerid" "299762" + } +} diff --git a/entWatch4/configs/entwatch/ze_gris_fyk.cfg b/entWatch4/configs/entwatch/ze_gris_fyk.cfg new file mode 100644 index 00000000..52bb8de6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_gris_fyk.cfg @@ -0,0 +1,66 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "" + "weaponid" "638075" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "1" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item1" + "weaponid" "1019078" + "buttonid" "1019029" + "triggerid" "938570" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item2" + "weaponid" "1021495" + "buttonid" "0" + "triggerid" "938581" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Item" + "short" "Item" + "color" "FF0000" + "filter" "item3" + "weaponid" "1020939" + "buttonid" "0" + "triggerid" "936853" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_hellz_rescuebase_v5_b1.cfg b/entWatch4/configs/entwatch/ze_hellz_rescuebase_v5_b1.cfg new file mode 100644 index 00000000..03cb8715 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_hellz_rescuebase_v5_b1.cfg @@ -0,0 +1,81 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The White Knight" + "short" "White Knight" + "color" "FFFFFF" + "filter" "Skin_White_Knight" + "weaponid" "2645603" + "buttonid" "2687054" + "triggerid" "2654673" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Minigun" + "short" "Minigun" + "color" "0040FF" + "filter" "Skin_Minigun" + "weaponid" "2693317" + "buttonid" "2693319" + "triggerid" "2703461" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "4" + } + "2" + { + "name" "DJ" + "short" "DJ" + "color" "0040FF" + "filter" "" + "weaponid" "3168314" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "4" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "3" + { + "name" "Balrog" + "short" "Balrog" + "color" "B40404" + "filter" "Monster_Balrog" + "weaponid" "2598782" + "buttonid" "0" + "triggerid" "2598784" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Antlion" + "short" "Antlion" + "color" "B40404" + "filter" "Monster_Antlion" + "weaponid" "2590943" + "buttonid" "0" + "triggerid" "2590949" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_holmes_escape_pf_2014c.cfg b/entWatch4/configs/entwatch/ze_holmes_escape_pf_2014c.cfg new file mode 100644 index 00000000..e8c25fcf --- /dev/null +++ b/entWatch4/configs/entwatch/ze_holmes_escape_pf_2014c.cfg @@ -0,0 +1,169 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "2B76C6" + "filter" "" + "weaponid" "117992" + "buttonid" "119541" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "5" + } + "1" + { + "name" "Hover Boots" + "short" "Boots" + "color" "2B76C6" + "filter" "" + "weaponid" "123432" + "buttonid" "128250" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "2" + { + "name" "Shotgun" + "short" "Shotgun" + "color" "2B76C6" + "filter" "" + "weaponid" "135333" + "buttonid" "135338" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "15" + } + "3" + { + "name" "Secret Documents" + "short" "Documents" + "color" "2B76C6" + "filter" "" + "weaponid" "106959" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Devil Eye of Destruction" + "short" "Laser" + "color" "2B76C6" + "filter" "" + "weaponid" "395793" + "buttonid" "395866" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Soda Can" + "short" "Heal" + "color" "2B76C6" + "filter" "" + "weaponid" "351880" + "buttonid" "352081" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "73" + } + "6" + { + "name" "Ninja Suit" + "short" "Ninja" + "color" "2B76C6" + "filter" "" + "weaponid" "350847" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Slowdown" + "short" "Slowdown" + "color" "2B76C6" + "filter" "" + "weaponid" "197286" + "buttonid" "369510" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "8" + { + "name" "Soda Shield" + "short" "Shield" + "color" "2B76C6" + "filter" "" + "weaponid" "174311" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Headcrab" + "short" "Headcrab" + "color" "2B76C6" + "filter" "" + "weaponid" "179099" + "buttonid" "0" + "triggerid" "179096" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Tesla Suit" + "short" "Tesla" + "color" "2B76C6" + "filter" "" + "weaponid" "145318" + "buttonid" "0" + "triggerid" "145372" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_horizon_sky_escape_b1s.cfg b/entWatch4/configs/entwatch/ze_horizon_sky_escape_b1s.cfg new file mode 100644 index 00000000..97c9f972 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_horizon_sky_escape_b1s.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Book" + "short" "Book" + "color" "FFFFFF" + "filter" "stage1_tele_trigger" + "weaponid" "385304" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_icecap_derp_unloze_v420.cfg b/entWatch4/configs/entwatch/ze_icecap_derp_unloze_v420.cfg new file mode 100644 index 00000000..61424163 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_icecap_derp_unloze_v420.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Cock" + "short" "Cock" + "color" "FF2828" + "filter" "" + "weaponid" "145599" + "buttonid" "145608" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "1" + { + "name" "Cock" + "short" "Cock" + "color" "7DBEFF" + "filter" "" + "weaponid" "213802" + "buttonid" "213811" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "2" + { + "name" "Cock" + "short" "Cock" + "color" "F4F4F4" + "filter" "" + "weaponid" "266867" + "buttonid" "266876" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_industrial_dejavu_v3_3_1.cfg b/entWatch4/configs/entwatch/ze_industrial_dejavu_v3_3_1.cfg new file mode 100644 index 00000000..a2f19cce --- /dev/null +++ b/entWatch4/configs/entwatch/ze_industrial_dejavu_v3_3_1.cfg @@ -0,0 +1,126 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Push Gun" + "short" "Push" + "color" "00D8D5" + "filter" "push" + "weaponid" "114509" + "buttonid" "114500" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "66" + } + "1" + { + "name" "Ammo Box" + "short" "Ammo" + "color" "AD4100" + "filter" "ammo" + "weaponid" "117260" + "buttonid" "117335" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "2" + { + "name" "Freezegun" + "short" "Freeze" + "color" "21FFFC" + "filter" "coolr" + "weaponid" "118065" + "buttonid" "695664" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "3" + { + "name" "Laser Wall" + "short" "Wall" + "color" "6459C9" + "filter" "laser" + "weaponid" "119767" + "buttonid" "119773" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "4" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "EB6036" + "filter" "we1" + "weaponid" "2730" + "buttonid" "113819" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "9" + { + "name" "Heal" + "short" "Heal" + "color" "F5F5F5" + "filter" "heal" + "weaponid" "122959" + "buttonid" "3282" + "triggerid" "122951" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "10" + { + "name" "Rage" + "short" "Rage" + "color" "E00250" + "filter" "ragezm" + "weaponid" "122959" + "buttonid" "3283" + "triggerid" "124350" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } + "11" + { + "name" "Vortex" + "short" "Vortex" + "color" "F5F5F5" + "filter" "heal" + "weaponid" "129343" + "buttonid" "3284" + "triggerid" "129335" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } +} diff --git a/entWatch4/configs/entwatch/ze_infected_sewers_v6_5.cfg b/entWatch4/configs/entwatch/ze_infected_sewers_v6_5.cfg new file mode 100644 index 00000000..f458b9ce --- /dev/null +++ b/entWatch4/configs/entwatch/ze_infected_sewers_v6_5.cfg @@ -0,0 +1,81 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Pusher" + "short" "Pusher" + "color" "007EBB" + "filter" "" + "weaponid" "1699567" + "buttonid" "1699634" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Minigun" + "short" "Minigun" + "color" "15D6D6" + "filter" "" + "weaponid" "1346602" + "buttonid" "1346604" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "FF2828" + "filter" "" + "weaponid" "1335512" + "buttonid" "1336137" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "3" + { + "name" "Key" + "short" "Key" + "color" "C10000" + "filter" "" + "weaponid" "4082828" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "4" + { + "name" "Bloodsucker" + "short" "Bloodsucker" + "color" "C10000" + "filter" "" + "weaponid" "1303227" + "buttonid" "1303224" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_infected_tramway_v3_3.cfg b/entWatch4/configs/entwatch/ze_infected_tramway_v3_3.cfg new file mode 100644 index 00000000..6ef27f52 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_infected_tramway_v3_3.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Blue P90" + "short" "Blue P90" + "color" "0000FF" + "filter" "" + "weaponid" "196705" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "White P90" + "short" "White P90" + "color" "FFFFFF" + "filter" "" + "weaponid" "196631" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "P90 with Plans" + "short" "Plans" + "color" "0080FF" + "filter" "" + "weaponid" "196869" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Yellow P90" + "short" "Yellow P90" + "color" "FFFF00" + "filter" "" + "weaponid" "196983" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_isla_nublar_v2_1.cfg b/entWatch4/configs/entwatch/ze_isla_nublar_v2_1.cfg new file mode 100644 index 00000000..76c7af4c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_isla_nublar_v2_1.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Shotgun" + "short" "Shotgun" + "color" "AD4100" + "filter" "shotgunname" + "weaponid" "83112" + "buttonid" "84213" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "7" + "cooldown" "2" + } + "1" + { + "name" "Shotgun" + "short" "Shotgun" + "color" "A63F02" + "filter" "shotgunname2" + "weaponid" "1497581" + "buttonid" "1497585" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "8" + "cooldown" "2" + } + "2" + { + "name" "Medkit" + "short" "Medkit" + "color" "FF0000" + "filter" "medkitname" + "weaponid" "2044364" + "buttonid" "2044351" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_italy_town_v3.cfg b/entWatch4/configs/entwatch/ze_italy_town_v3.cfg new file mode 100644 index 00000000..31e39bc1 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_italy_town_v3.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Sword" + "short" "Sword" + "color" "B0BCBF" + "filter" "" + "weaponid" "7444" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "8B7D8C" + "filter" "" + "weaponid" "296846" + "buttonid" "572144" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "FC5151" + "filter" "we1" + "weaponid" "2730" + "buttonid" "38096" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Cold Gun" + "short" "Cold Gun" + "color" "3D6EF5" + "filter" "coolr" + "weaponid" "39556" + "buttonid" "695664" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_johnny_nukem_b8_3.cfg b/entWatch4/configs/entwatch/ze_johnny_nukem_b8_3.cfg new file mode 100644 index 00000000..1ddf65f6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_johnny_nukem_b8_3.cfg @@ -0,0 +1,109 @@ +"items" +{ + // Human - Items + "0" + { + "name" "UFO" + "short" "UFO" + "color" "2A2A2A" + "filter" "UFO_Owner" + "weaponid" "310976" + "buttonid" "310978" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Rainbow Flamethrower" + "short" "Flamethrower" + "color" "FF0000" + "filter" "flamethrower" + "weaponid" "312056" + "buttonid" "311975" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Bubble Gun" + "short" "Bubble" + "color" "3B5998" + "filter" "electric" + "weaponid" "309378" + "buttonid" "309380" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Mountain Dew" + "short" "Heal" + "color" "FFFFFF" + "filter" "Heal_Owner" + "weaponid" "310117" + "buttonid" "310114" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "30" + } + "4" + { + "name" "Ammo Taco Box" + "short" "Ammo" + "color" "ffb028" + "filter" "kuulid" + "weaponid" "594280" + "buttonid" "594273" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "60" + } + "5" + { + "name" "Pink Elephants" + "short" "Mines" + "color" "FF69B4" + "filter" "mineboom" + "weaponid" "643708" + "buttonid" "643710" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "5" + "cooldown" "2" + } + "6" + { + "name" "Rebel Chainsaw" + "short" "Chainsaw" + "color" "EE32FF" + "filter" "" + "weaponid" "645629" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_journey_v1_2.cfg b/entWatch4/configs/entwatch/ze_journey_v1_2.cfg new file mode 100644 index 00000000..4e96ecad --- /dev/null +++ b/entWatch4/configs/entwatch/ze_journey_v1_2.cfg @@ -0,0 +1,109 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Burning Orb" + "short" "Burning Orb" + "color" "EA6309" + "filter" "flameuser" + "weaponid" "163621" + "buttonid" "163623" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "1" + { + "name" "Glacial Orb" + "short" "Glacial Orb" + "color" "6DE3FC" + "filter" "iceuser" + "weaponid" "163673" + "buttonid" "163675" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "2" + { + "name" "Lightning Orb" + "short" "Lightning Orb" + "color" "F9EF77" + "filter" "thunderuser" + "weaponid" "163717" + "buttonid" "163719" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "3" + { + "name" "Gust Orb" + "short" "Gust Orb" + "color" "8AEEC3" + "filter" "gustuser" + "weaponid" "615586" + "buttonid" "615588" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "4" + { + "name" "Divine Orb" + "short" "Divine Orb" + "color" "E0FDFE" + "filter" "divineuser" + "weaponid" "163793" + "buttonid" "163795" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Abyssal Orb" + "short" "Abyssal Orb" + "color" "D10C96" + "filter" "abyssuser" + "weaponid" "562519" + "buttonid" "562521" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Celestial Embrace" + "short" "Celestial Embrace" + "color" "FDCCFD" + "filter" "" + "weaponid" "163847" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_jungle_escape_v1_2.cfg b/entWatch4/configs/entwatch/ze_jungle_escape_v1_2.cfg new file mode 100644 index 00000000..ea401c1f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_jungle_escape_v1_2.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Electro" + "short" "Electro" + "color" "BCCD00" + "filter" "item_1" + "weaponid" "53788" + "buttonid" "53860" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "1" + { + "name" "Ice" + "short" "Ice" + "color" "00FFFF" + "filter" "item_2" + "weaponid" "87317" + "buttonid" "87424" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "2" + { + "name" "Wurzel Push" + "short" "Push" + "color" "04B404" + "filter" "item_3" + "weaponid" "122719" + "buttonid" "122934" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "25" + } + "3" + { + "name" "Wurzel Sculpture" + "short" "Wall" + "color" "965F00" + "filter" "item_4" + "weaponid" "567697" + "buttonid" "567784" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "10" + "cooldown" "2" + } + "4" + { + "name" "Cura Bubble" + "short" "Bubble" + "color" "FFFFFF" + "filter" "item_5" + "weaponid" "1313204" + "buttonid" "1313361" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "5" + { + "name" "Crystal" + "short" "Crystal" + "color" "7C7B74" + "filter" "" + "weaponid" "456745" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_jurassic_park_story_v1.cfg b/entWatch4/configs/entwatch/ze_jurassic_park_story_v1.cfg new file mode 100644 index 00000000..65283bd9 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_jurassic_park_story_v1.cfg @@ -0,0 +1,34 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "FF0000" + "filter" "" + "weaponid" "2546808" + "buttonid" "2546805" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Tazer" + "short" "Tazer" + "color" "0000FF" + "filter" "" + "weaponid" "2546876" + "buttonid" "2546881" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_kraznov_poopata.cfg b/entWatch4/configs/entwatch/ze_kraznov_poopata.cfg new file mode 100644 index 00000000..aa6e7c1e --- /dev/null +++ b/entWatch4/configs/entwatch/ze_kraznov_poopata.cfg @@ -0,0 +1,34 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Basket" + "short" "Earth" + "color" "FFA500" + "filter" "" + "weaponid" "32091" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Penis Gun" + "short" "Penis" + "color" "FF005D" + "filter" "" + "weaponid" "42586" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_l0v0l_v1_4.cfg b/entWatch4/configs/entwatch/ze_l0v0l_v1_4.cfg new file mode 100644 index 00000000..f50ee62c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_l0v0l_v1_4.cfg @@ -0,0 +1,231 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal" + "short" "Heal" + "color" "00FFFF" + "filter" "player_heal" + "weaponid" "431583" + "buttonid" "431580" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "1" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "player_ammo" + "weaponid" "431658" + "buttonid" "431660" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Rainbow Beam" + "short" "Rainbow Beam" + "color" "ADFF2F" + "filter" "player_beam" + "weaponid" "893904" + "buttonid" "893768" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "3" + { + "name" "Push" + "short" "Push" + "color" "00FFFF" + "filter" "player_wind" + "weaponid" "905720" + "buttonid" "905722" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Slower Sphere" + "short" "Slower Sphere" + "color" "00FF00" + "filter" "player_poison" + "weaponid" "1157477" + "buttonid" "1157474" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "5" + { + "name" "Fire Toilet" + "short" "Fire Toilet" + "color" "FF4500" + "filter" "player_firet" + "weaponid" "1355119" + "buttonid" "1355045" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "6" + { + "name" "Ice Toilet" + "short" "Ice Toilet" + "color" "1E90FF" + "filter" "player_icet" + "weaponid" "1355201" + "buttonid" "1355196" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "7" + { + "name" "Electric Toilet" + "short" "Electric Toilet" + "color" "0000FF" + "filter" "player_elect" + "weaponid" "1355344" + "buttonid" "1355348" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "8" + { + "name" "Poison Toilet" + "short" "Poison Toilet" + "color" "00FF00" + "filter" "player_poisont" + "weaponid" "1355429" + "buttonid" "1355424" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "9" + { + "name" "Gravity Toilet" + "short" "Gravity Toilet" + "color" "FF00FF" + "filter" "player_gravityt" + "weaponid" "1355507" + "buttonid" "1355502" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "10" + { + "name" "Earth Toilet" + "short" "Earth Toilet" + "color" "CD853F" + "filter" "player_eartht" + "weaponid" "1355587" + "buttonid" "1355584" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "11" + { + "name" "Water Toilet" + "short" "Water Toilet" + "color" "1E90FF" + "filter" "player_watert" + "weaponid" "1355730" + "buttonid" "1355660" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "12" + { + "name" "Wind Toilet" + "short" "Wind Toilet" + "color" "00FFFF" + "filter" "player_pusht" + "weaponid" "1355879" + "buttonid" "1355874" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + + // Zombie - Items + "13" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "FF00FF" + "filter" "player_zgravity" + "weaponid" "432888" + "buttonid" "432893" + "triggerid" "432885" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "14" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "F08080" + "filter" "player_zheal" + "weaponid" "433324" + "buttonid" "433189" + "triggerid" "433326" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_last_man_standing_v5_1.cfg b/entWatch4/configs/entwatch/ze_last_man_standing_v5_1.cfg new file mode 100644 index 00000000..5abb1f2f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_last_man_standing_v5_1.cfg @@ -0,0 +1,413 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Mech" + "short" "Mech" + "color" "0040FF" + "filter" "human_mech" + "weaponid" "5142827" + "buttonid" "0" + "triggerid" "5142814" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Juggernaut" + "short" "Juggernaut" + "color" "0040FF" + "filter" "monster" + "weaponid" "7667056" + "buttonid" "0" + "triggerid" "7667058" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Turbo Device" + "short" "Turbo Device" + "color" "0040FF" + "filter" "" + "weaponid" "7666559" + "buttonid" "7668852" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "3" + { + "name" "Immunizer" + "short" "Immunizer" + "color" "0040FF" + "filter" "" + "weaponid" "7665854" + "buttonid" "7668843" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Thunder Gun" + "short" "Thunder Gun" + "color" "0040FF" + "filter" "" + "weaponid" "7665869" + "buttonid" "7668846" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "4" + "cooldown" "0" + } + "5" + { + "name" "Portal Gun" + "short" "Portal Gun" + "color" "0040FF" + "filter" "" + "weaponid" "7665891" + "buttonid" "7668840" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Zero Gravity Gun" + "short" "Zero Gravity Gun" + "color" "0040FF" + "filter" "" + "weaponid" "7665898" + "buttonid" "7668837" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + "7" + { + "name" "Gauss Rifle" + "short" "Gauss Rifle" + "color" "0040FF" + "filter" "" + "weaponid" "7665914" + "buttonid" "7668834" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "8" + { + "name" "Turret" + "short" "Turret" + "color" "0040FF" + "filter" "player_turret_carrier" + "weaponid" "7665924" + "buttonid" "7668831" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Mines" + "short" "Mines" + "color" "0040FF" + "filter" "weapon_carrier_mines" + "weaponid" "7665942" + "buttonid" "7668825" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Mutator Backpack" + "short" "Mutator Backpack" + "color" "0040FF" + "filter" "" + "weaponid" "7666080" + "buttonid" "7668849" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "11" + { + "name" "Immunizer Backpack" + "short" "Immunizer Backpack" + "color" "0040FF" + "filter" "" + "weaponid" "7666755" + "buttonid" "7668858" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Ammo Crate" + "short" "Ammo Crate" + "color" "0040FF" + "filter" "" + "weaponid" "7666765" + "buttonid" "7668855" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "13" + { + "name" "M60" + "short" "M60" + "color" "0040FF" + "filter" "" + "weaponid" "7666846" + "buttonid" "7668828" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Misc + "14" + { + "name" "Train Driver" + "short" "Train Driver" + "color" "0040FF" + "filter" "" + "weaponid" "5140523" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "15" + { + "name" "Fuel Can" + "short" "Fuel Can" + "color" "0040FF" + "filter" "" + "weaponid" "5161017" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "16" + { + "name" "Guard NPC" + "short" "Guard NPC" + "color" "0040FF" + "filter" "" + "weaponid" "7666731" + "buttonid" "0" + "triggerid" "0" + "display" "0" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "17" + { + "name" "Boss" + "short" "Boss" + "color" "B40404" + "filter" "zombie_boss" + "weaponid" "5142542" + "buttonid" "0" + "triggerid" "5140075" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "18" + { + "name" "Summoner" + "short" "Summoner" + "color" "B40404" + "filter" "zombie_summoner" + "weaponid" "7666199" + "buttonid" "0" + "triggerid" "7666194" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "19" + { + "name" "Jumper" + "short" "Jumper" + "color" "B40404" + "filter" "zombie_jumper" + "weaponid" "7666220" + "buttonid" "0" + "triggerid" "7666208" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "20" + { + "name" "Alma" + "short" "Alma" + "color" "B40404" + "filter" "zombie_alma" + "weaponid" "7666234" + "buttonid" "0" + "triggerid" "7666227" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "21" + { + "name" "Vortigaunt" + "short" "Vortigaunt" + "color" "B40404" + "filter" "zombie_vortigaunt" + "weaponid" "7666255" + "buttonid" "0" + "triggerid" "7666248" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "22" + { + "name" "Tank" + "short" "Tank" + "color" "B40404" + "filter" "zombie_tank" + "weaponid" "7666394" + "buttonid" "0" + "triggerid" "7666410" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "23" + { + "name" "Antlion" + "short" "Antlion" + "color" "B40404" + "filter" "zombie_antlion" + "weaponid" "7666442" + "buttonid" "0" + "triggerid" "7666439" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "24" + { + "name" "Predator" + "short" "Predator" + "color" "B40404" + "filter" "zombie_predator" + "weaponid" "7666506" + "buttonid" "0" + "triggerid" "7666503" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "25" + { + "name" "Freezer" + "short" "Freezer" + "color" "B40404" + "filter" "zombie_freezer" + "weaponid" "7666525" + "buttonid" "0" + "triggerid" "7666517" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "26" + { + "name" "Shockwave" + "short" "Shockwave" + "color" "B40404" + "filter" "zombie_shocker" + "weaponid" "7667132" + "buttonid" "0" + "triggerid" "7667125" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_legoland_crackheads_v2.cfg b/entWatch4/configs/entwatch/ze_legoland_crackheads_v2.cfg new file mode 100644 index 00000000..8217c23f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_legoland_crackheads_v2.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Cooler Gun" + "short" "Cooler Gun" + "color" "2E93E6" + "filter" "we1" + "weaponid" "313080" + "buttonid" "313162" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "1" + { + "name" "Builder" + "short" "Builder" + "color" "B3A189" + "filter" "we2" + "weaponid" "67314" + "buttonid" "67311" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "5" + "cooldown" "0" + } + "2" + { + "name" "Builder" + "short" "Builder" + "color" "B3A189" + "filter" "we3" + "weaponid" "140208" + "buttonid" "140213" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "5" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_lila_panic_escape_v3_1.cfg b/entWatch4/configs/entwatch/ze_lila_panic_escape_v3_1.cfg new file mode 100644 index 00000000..4a85e8bd --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lila_panic_escape_v3_1.cfg @@ -0,0 +1,96 @@ +"entities" +{ + // Human - Items + "0" + { + "name" "Fire Barrel" + "short" "Fire Barrel" + "color" "FF4000" + "filter" "" + "weaponid" "353152" + "buttonid" "353149" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Freeze Bottle" + "short" "Freeze Bottle" + "color" "00BFFF" + "filter" "" + "weaponid" "354622" + "buttonid" "354554" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Heal" + "short" "Heal" + "color" "AEB404" + "filter" "" + "weaponid" "344578" + "buttonid" "344580" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "3" + { + "name" "Laser Field" + "short" "Laser Field" + "color" "40FF00" + "filter" "" + "weaponid" "23028" + "buttonid" "23025" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Ammo Crate" + "short" "Ammo Crate" + "color" "8A2908" + "filter" "" + "weaponid" "462044" + "buttonid" "461974" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + + // Zombie - Items + "5" + { + "name" "Suicidal Bomber" + "short" "Suicidal Bomber" + "color" "FF0000" + "filter" "" + "weaponid" "409715" + "buttonid" "0" + "triggerid" "421153" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_helms_deep_v5.cfg b/entWatch4/configs/entwatch/ze_lotr_helms_deep_v5.cfg new file mode 100644 index 00000000..190462c7 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_helms_deep_v5.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Zombie - Items + "0" + { + "name" "Explosive Torch" + "short" "Torch" + "color" "FF0000" + "filter" "" + "weaponid" "1004" + "buttonid" "" + "triggerid" "1002" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_isengard_v2_3.cfg b/entWatch4/configs/entwatch/ze_lotr_isengard_v2_3.cfg new file mode 100644 index 00000000..ae1a9124 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_isengard_v2_3.cfg @@ -0,0 +1,83 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal Staff" + "short" "Heal" + "color" "00FFFF" + "filter" "heal" + "weaponid" "11815272" + "buttonid" "11815269" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "6" + } + "1" + { + "name" "Torch" + "short" "Torch" + "color" "FFA500" + "filter" "" + "weaponid" "492831" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Specials + "2" + { + "name" "Gandalf" + "short" "Gandalf" + "color" "CCCCCC" + "filter" "" + "weaponid" "9421300" + "buttonid" "0" + "triggerid" "9421836" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Ent" + "short" "Ent" + "color" "00AA00" + "filter" "ent_rock" + "weaponid" "8954463" + "buttonid" "9656657" + "triggerid" "8627309" + "display" "7" + "slot" "3" + "mode" "3" + "maxuses" "4" + "cooldown" "20" + } + + // Zombie - Items + "4" + { + "name" "Spider" + "short" "Spider" + "color" "800000" + "filter" "" + "weaponid" "10778352" + "buttonid" "0" + "triggerid" "2620225" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_minas_tiret_v4_1.cfg b/entWatch4/configs/entwatch/ze_lotr_minas_tiret_v4_1.cfg new file mode 100644 index 00000000..cd5d804a --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_minas_tiret_v4_1.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The Ring" + "short" "Ring" + "color" "FFDD21" + "filter" "" + "weaponid" "320437" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Saruman's Staff" + "short" "Saruman" + "color" "222222" + "filter" "saruman" + "weaponid" "324135" + "buttonid" "324143" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "2" + { + "name" "Gandalf's Staff" + "short" "Gandalf" + "color" "FFFFFF" + "filter" "gandalf" + "weaponid" "339820" + "buttonid" "339799" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg new file mode 100644 index 00000000..563ecf36 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg @@ -0,0 +1,457 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The White Knight" + "short" "White Knight" + "color" "FFFFFF" + "filter" "" + "weaponid" "2384422" + "buttonid" "2384433" + "triggerid" "4042883" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Gandalf" + "short" "Gandalf" + "color" "FFFFFF" + "filter" "" + "weaponid" "2347448" + "buttonid" "0" + "triggerid" "4042880" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Horse" + "short" "Horse" + "color" "0040FF" + "filter" "" + "weaponid" "2347138" + "buttonid" "0" + "triggerid" "4042877" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Oil Vase" + "short" "Oil" + "color" "0040FF" + "filter" "" + "weaponid" "5349903" + "buttonid" "0" + "triggerid" "5310773" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Ammo Barrel" + "short" "Ammo" + "color" "0040FF" + "filter" "" + "weaponid" "1397716" + "buttonid" "0" + "triggerid" "4042874" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Armor" + "short" "Armor" + "color" "0040FF" + "filter" "" + "weaponid" "6082267" + "buttonid" "0" + "triggerid" "4042868" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Flag" + "short" "Flag" + "color" "0040FF" + "filter" "" + "weaponid" "1397990" + "buttonid" "0" + "triggerid" "4042865" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Misc + "7" + { + "name" "Torch" + "short" "Torch" + "color" "FF9600" + "filter" "" + "weaponid" "2568929" + "buttonid" "0" + "triggerid" "0" + "display" "1" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Torch" + "short" "Torch" + "color" "FF9600" + "filter" "" + "weaponid" "2569006" + "buttonid" "0" + "triggerid" "0" + "display" "0" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Barricades + "9" + { + "name" "Barricade - Explosive Barrel" + "short" "Explosive Barrel" + "color" "FFFFFF" + "filter" "" + "weaponid" "3334835" + "buttonid" "1000014" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "10" + { + "name" "Barricade - Toilet" + "short" "Toilet" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277483" + "buttonid" "1000001" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "11" + { + "name" "Barricade - Bench" + "short" "Bench" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277481" + "buttonid" "1000002" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "12" + { + "name" "Barricade - Shelf" + "short" "Shelf" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277479" + "buttonid" "1000003" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "13" + { + "name" "Barricade - Fence" + "short" "Fence" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277477" + "buttonid" "1000004" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "14" + { + "name" "Barricade - Basket" + "short" "Basket" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277475" + "buttonid" "1000005" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "15" + { + "name" "Barricade - Plank" + "short" "Plank" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277471" + "buttonid" "1000006" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "16" + { + "name" "Barricade - Bell" + "short" "Bell" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277469" + "buttonid" "1000007" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "17" + { + "name" "Barricade - Haybale" + "short" "Haybale" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277461" + "buttonid" "1000008" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "18" + { + "name" "Barricade - Big Boulder" + "short" "Big Boulder" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277465" + "buttonid" "1000009" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "19" + { + "name" "Barricade - Boulder" + "short" "Boulder" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277459" + "buttonid" "1000010" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "20" + { + "name" "Barricade - Barrel" + "short" "Barrel" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277457" + "buttonid" "1000011" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "21" + { + "name" "Barricade - Table" + "short" "Table" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277463" + "buttonid" "1000012" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "22" + { + "name" "Barricade - Crate" + "short" "Crate" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277445" + "buttonid" "1000013" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Items + "23" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397962" + "buttonid" "0" + "triggerid" "4042890" + "display" "4" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "24" + { + "name" "TNT" + "short" "TNT" + "color" "B40404" + "filter" "" + "weaponid" "2231787" + "buttonid" "0" + "triggerid" "4042893" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "25" + { + "name" "Troll" + "short" "Troll" + "color" "B40404" + "filter" "" + "weaponid" "1397647" + "buttonid" "0" + "triggerid" "4042899" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "26" + { + "name" "Balrog" + "short" "Balrog" + "color" "B40404" + "filter" "" + "weaponid" "2420963" + "buttonid" "0" + "triggerid" "4042902" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "27" + { + "name" "Nazgul" + "short" "Nazgul" + "color" "B40404" + "filter" "" + "weaponid" "1518692" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Triggers + "28" + { + "name" "Extreme Totem" + "triggerid" "4658425" + } + "29" + { + "name" "Extreme TNT" + "triggerid" "4658428" + } + "30" + { + "name" "Extreme Troll" + "triggerid" "4658434" + } + "31" + { + "name" "Stage 1 Nazgul" + "triggerid" "4963264" + } + "32" + { + "name" "Stage 4 Nazgul" + "triggerid" "4963466" + } +} diff --git a/_entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_3.cfg similarity index 64% rename from _entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg rename to entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_3.cfg index 12000751..d0875b9c 100644 --- a/_entWatch4/configs/entwatch/ze_lotr_minas_tirith_v2_2fix.cfg +++ b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_3.cfg @@ -10,7 +10,8 @@ "weaponid" "2384422" "buttonid" "2384433" "triggerid" "4042883" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -24,7 +25,8 @@ "weaponid" "2347448" "buttonid" "0" "triggerid" "4042880" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -38,26 +40,13 @@ "weaponid" "2347138" "buttonid" "0" "triggerid" "4042877" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } "3" - { - "name" "Horse" - "short" "Horse" - "color" "0040FF" - "filter" "" - "weaponid" "2347177" - "buttonid" "0" - "triggerid" "4042877" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "4" { "name" "Oil Vase" "short" "Oil" @@ -66,12 +55,13 @@ "weaponid" "5349903" "buttonid" "0" "triggerid" "5310773" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "5" + "4" { "name" "Ammo Barrel" "short" "Ammo" @@ -80,26 +70,13 @@ "weaponid" "1397716" "buttonid" "0" "triggerid" "4042874" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "6" - { - "name" "Armor" - "short" "Armor" - "color" "0040FF" - "filter" "" - "weaponid" "6082283" - "buttonid" "0" - "triggerid" "4042868" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "7" + "5" { "name" "Armor" "short" "Armor" @@ -108,12 +85,13 @@ "weaponid" "6082267" "buttonid" "0" "triggerid" "4042868" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "8" + "6" { "name" "Flag" "short" "Flag" @@ -123,183 +101,14 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "9" - { - "name" "Flag" - "short" "Flag" - "color" "0040FF" - "filter" "" - "weaponid" "1398014" - "buttonid" "0" - "triggerid" "4042865" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "10" - { - "name" "Flag" - "short" "Flag" - "color" "0040FF" - "filter" "" - "weaponid" "1398000" - "buttonid" "0" - "triggerid" "4042865" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "11" - { - "name" "Flag" - "short" "Flag" - "color" "0040FF" - "filter" "" - "weaponid" "1398006" - "buttonid" "0" - "triggerid" "4042865" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "12" - { - "name" "Flag" - "short" "Flag" - "color" "0040FF" - "filter" "" - "weaponid" "1398012" - "buttonid" "0" - "triggerid" "4042865" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Zombie - Items - "13" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397962" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "14" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397968" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "15" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397974" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "16" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397980" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "17" - { - "name" "TNT" - "short" "TNT" - "color" "B40404" - "filter" "" - "weaponid" "2231787" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "18" - { - "name" "Troll" - "short" "Troll" - "color" "B40404" - "filter" "" - "weaponid" "1397647" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "19" - { - "name" "Balrog" - "short" "Balrog" - "color" "B40404" - "filter" "" - "weaponid" "2420963" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "20" - { - "name" "Nazgul" - "short" "Nazgul" - "color" "B40404" - "filter" "" - "weaponid" "1518692" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - + // Human - Misc - "21" + "7" { "name" "Torch" "short" "Torch" @@ -309,11 +118,12 @@ "buttonid" "0" "triggerid" "0" "display" "1" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "22" + "8" { "name" "Torch" "short" "Torch" @@ -322,207 +132,347 @@ "weaponid" "2569006" "buttonid" "0" "triggerid" "0" - "display" "1" + "display" "0" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - + // Human - Barricades - "23" + "9" { "name" "Barricade - Explosive Barrel" - "short" "Barricade" + "short" "Explosive Barrel" "color" "FFFFFF" "filter" "" "weaponid" "3334835" - "buttonid" "4277722" + "buttonid" "1000014" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } + "10" + { + "name" "Barricade - Toilet" + "short" "Toilet" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277483" + "buttonid" "1000001" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "11" + { + "name" "Barricade - Bench" + "short" "Bench" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277481" + "buttonid" "1000002" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "12" + { + "name" "Barricade - Shelf" + "short" "Shelf" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277479" + "buttonid" "1000003" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "13" + { + "name" "Barricade - Fence" + "short" "Fence" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277477" + "buttonid" "1000004" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "14" + { + "name" "Barricade - Basket" + "short" "Basket" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277475" + "buttonid" "1000005" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "15" + { + "name" "Barricade - Plank" + "short" "Plank" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277471" + "buttonid" "1000006" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "16" + { + "name" "Barricade - Bell" + "short" "Bell" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277469" + "buttonid" "1000007" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "17" + { + "name" "Barricade - Haybale" + "short" "Haybale" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277461" + "buttonid" "1000008" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "18" + { + "name" "Barricade - Big Boulder" + "short" "Big Boulder" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277465" + "buttonid" "1000009" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "19" + { + "name" "Barricade - Boulder" + "short" "Boulder" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277459" + "buttonid" "1000010" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "20" + { + "name" "Barricade - Barrel" + "short" "Barrel" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277457" + "buttonid" "1000011" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "21" + { + "name" "Barricade - Table" + "short" "Table" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277463" + "buttonid" "1000012" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "22" + { + "name" "Barricade - Crate" + "short" "Crate" + "color" "FFFFFF" + "filter" "" + "weaponid" "4277445" + "buttonid" "1000013" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Items + "23" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397962" + "buttonid" "0" + "triggerid" "4042890" + "display" "4" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } "24" { - "name" "Barricade - Toilet" - "short" "Barricade" - "color" "FFFFFF" + "name" "TNT" + "short" "TNT" + "color" "B40404" "filter" "" - "weaponid" "4277483" - "buttonid" "4277618" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" + "weaponid" "2231787" + "buttonid" "0" + "triggerid" "4042893" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" "cooldown" "0" } "25" { - "name" "Barricade - Bench" - "short" "Barricade" - "color" "FFFFFF" + "name" "Ladder" + "short" "Ladder" + "color" "B40404" "filter" "" - "weaponid" "4277481" - "buttonid" "4277627" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" + "weaponid" "1397571" + "buttonid" "1000015" + "triggerid" "4042896" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" "cooldown" "0" } "26" { - "name" "Barricade - Shelf" - "short" "Barricade" - "color" "FFFFFF" + "name" "Troll" + "short" "Troll" + "color" "B40404" "filter" "" - "weaponid" "4277479" - "buttonid" "4277634" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" + "weaponid" "1397647" + "buttonid" "0" + "triggerid" "4042899" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" "cooldown" "0" } "27" { - "name" "Barricade - Fence" - "short" "Barricade" - "color" "FFFFFF" + "name" "Balrog" + "short" "Balrog" + "color" "B40404" "filter" "" - "weaponid" "4277477" - "buttonid" "4277645" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" + "weaponid" "2420963" + "buttonid" "0" + "triggerid" "4042902" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" "cooldown" "0" } "28" { - "name" "Barricade - Basket" - "short" "Barricade" - "color" "FFFFFF" + "name" "Nazgul" + "short" "Nazgul" + "color" "B40404" "filter" "" - "weaponid" "4277475" - "buttonid" "4277697" + "weaponid" "1518692" + "buttonid" "0" "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" "cooldown" "0" } + + // Zombie - Triggers + "29" { - "name" "Barricade - Plank" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277471" - "buttonid" "4277682" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Extreme Totem" + "triggerid" "4658425" } "30" { - "name" "Barricade - Bell" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277469" - "buttonid" "4277678" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Extreme TNT" + "triggerid" "4658428" } "31" { - "name" "Barricade - Haybale" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277461" - "buttonid" "4277652" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Extreme Ladder" + "triggerid" "4658431" } "32" { - "name" "Barricade - Big Boulder" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277465" - "buttonid" "4277708" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Extreme Troll" + "triggerid" "4658434" } "33" { - "name" "Barricade - Boulder" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277459" - "buttonid" "4277711" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Stage 1 Nazgul" + "triggerid" "4963264" } "34" { - "name" "Barricade - Barrel" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277457" - "buttonid" "4277722" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "35" - { - "name" "Barricade - Table" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277463" - "buttonid" "4277725" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "36" - { - "name" "Barricade - Crate" - "short" "Barricade" - "color" "FFFFFF" - "filter" "" - "weaponid" "4277445" - "buttonid" "4277732" - "triggerid" "0" - "display" "4" - "mode" "2" - "maxuses" "1" - "cooldown" "0" + "name" "Stage 4 Nazgul" + "triggerid" "4963466" } } diff --git a/_entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg similarity index 82% rename from _entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg rename to entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg index 2f9d0676..4ecd2543 100644 --- a/_entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg +++ b/entWatch4/configs/entwatch/ze_lotr_minas_tirith_v3_5.cfg @@ -10,7 +10,8 @@ "weaponid" "2384422" "buttonid" "2384433" "triggerid" "4042883" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -24,7 +25,8 @@ "weaponid" "2347448" "buttonid" "0" "triggerid" "4042880" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -38,7 +40,8 @@ "weaponid" "2347138" "buttonid" "0" "triggerid" "4042877" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -52,7 +55,8 @@ "weaponid" "2347177" "buttonid" "0" "triggerid" "4042877" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -66,7 +70,8 @@ "weaponid" "5349903" "buttonid" "0" "triggerid" "5310773" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -80,7 +85,8 @@ "weaponid" "1397716" "buttonid" "0" "triggerid" "4042874" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -94,7 +100,8 @@ "weaponid" "6082283" "buttonid" "0" "triggerid" "4042868" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -108,7 +115,8 @@ "weaponid" "6082267" "buttonid" "0" "triggerid" "4042868" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -123,6 +131,7 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -137,6 +146,7 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -151,6 +161,7 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -165,6 +176,7 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -179,155 +191,13 @@ "buttonid" "0" "triggerid" "4042865" "display" "0" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - - // Zombie - Items - "13" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397962" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "14" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397968" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "15" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397974" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "16" - { - "name" "Totem" - "short" "Totem" - "color" "B40404" - "filter" "" - "weaponid" "1397980" - "buttonid" "0" - "triggerid" "0" - "display" "0" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "17" - { - "name" "TNT" - "short" "TNT" - "color" "B40404" - "filter" "" - "weaponid" "2231787" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "18" - { - "name" "Ladder" - "short" "Ladder" - "color" "B40404" - "filter" "" - "weaponid" "1397546" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "19" - { - "name" "Ladder" - "short" "Ladder" - "color" "B40404" - "filter" "" - "weaponid" "1397571" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "20" - { - "name" "Troll" - "short" "Troll" - "color" "B40404" - "filter" "" - "weaponid" "1397647" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "21" - { - "name" "Balrog" - "short" "Balrog" - "color" "B40404" - "filter" "" - "weaponid" "2420963" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "22" - { - "name" "Nazgul" - "short" "Nazgul" - "color" "B40404" - "filter" "" - "weaponid" "1518692" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - // Human - Misc - "23" + "13" { "name" "Torch" "short" "Torch" @@ -337,11 +207,12 @@ "buttonid" "0" "triggerid" "0" "display" "1" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "24" + "14" { "name" "Torch" "short" "Torch" @@ -351,13 +222,14 @@ "buttonid" "0" "triggerid" "0" "display" "1" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - + // Human - Barricades - "25" + "15" { "name" "Barricade - Explosive Barrel" "short" "Barricade" @@ -366,12 +238,13 @@ "weaponid" "3334835" "buttonid" "4277722" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "26" + "16" { "name" "Barricade - Toilet" "short" "Barricade" @@ -380,12 +253,13 @@ "weaponid" "4277483" "buttonid" "4277618" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "27" + "17" { "name" "Barricade - Bench" "short" "Barricade" @@ -394,12 +268,13 @@ "weaponid" "4277481" "buttonid" "4277627" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "28" + "18" { "name" "Barricade - Shelf" "short" "Barricade" @@ -408,12 +283,13 @@ "weaponid" "4277479" "buttonid" "4277634" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "29" + "19" { "name" "Barricade - Fence" "short" "Barricade" @@ -422,12 +298,13 @@ "weaponid" "4277477" "buttonid" "4277645" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "30" + "20" { "name" "Barricade - Basket" "short" "Barricade" @@ -436,12 +313,13 @@ "weaponid" "4277475" "buttonid" "4277697" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "31" + "21" { "name" "Barricade - Plank" "short" "Barricade" @@ -450,12 +328,13 @@ "weaponid" "4277471" "buttonid" "4277682" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "32" + "22" { "name" "Barricade - Bell" "short" "Barricade" @@ -464,12 +343,13 @@ "weaponid" "4277469" "buttonid" "4277678" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "33" + "23" { "name" "Barricade - Haybale" "short" "Barricade" @@ -478,12 +358,13 @@ "weaponid" "4277461" "buttonid" "4277652" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "34" + "24" { "name" "Barricade - Big Boulder" "short" "Barricade" @@ -492,12 +373,13 @@ "weaponid" "4277465" "buttonid" "4277708" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "35" + "25" { "name" "Barricade - Boulder" "short" "Barricade" @@ -506,12 +388,13 @@ "weaponid" "4277459" "buttonid" "4277711" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "36" + "26" { "name" "Barricade - Barrel" "short" "Barricade" @@ -520,12 +403,13 @@ "weaponid" "4277457" "buttonid" "4277722" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "37" + "27" { "name" "Barricade - Table" "short" "Barricade" @@ -534,12 +418,13 @@ "weaponid" "4277463" "buttonid" "4277725" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "38" + "28" { "name" "Barricade - Crate" "short" "Barricade" @@ -548,9 +433,189 @@ "weaponid" "4277445" "buttonid" "4277732" "triggerid" "0" - "display" "4" + "display" "2" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } + + // Zombie - Items + "29" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397962" + "buttonid" "0" + "triggerid" "4042890" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "30" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397968" + "buttonid" "0" + "triggerid" "4042890" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "31" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397974" + "buttonid" "0" + "triggerid" "4658425" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "32" + { + "name" "Totem" + "short" "Totem" + "color" "B40404" + "filter" "" + "weaponid" "1397980" + "buttonid" "0" + "triggerid" "4658425" + "display" "0" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "33" + { + "name" "TNT" + "short" "TNT" + "color" "B40404" + "filter" "" + "weaponid" "2231787" + "buttonid" "0" + "triggerid" "4042893" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "34" + { + "name" "Ladder" + "short" "Ladder" + "color" "B40404" + "filter" "" + "weaponid" "1397546" + "buttonid" "0" + "triggerid" "4042896" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "35" + { + "name" "Ladder" + "short" "Ladder" + "color" "B40404" + "filter" "" + "weaponid" "1397571" + "buttonid" "0" + "triggerid" "4658431" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "36" + { + "name" "Troll" + "short" "Troll" + "color" "B40404" + "filter" "" + "weaponid" "1397647" + "buttonid" "0" + "triggerid" "4042899" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "37" + { + "name" "Balrog" + "short" "Balrog" + "color" "B40404" + "filter" "" + "weaponid" "2420963" + "buttonid" "0" + "triggerid" "4042902" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "38" + { + "name" "Nazgul" + "short" "Nazgul" + "color" "B40404" + "filter" "" + "weaponid" "1518692" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Triggers + "39" + { + "name" "Extreme TNT" + "triggerid" "4658428" + } + "40" + { + "name" "Extreme Troll" + "triggerid" "4658434" + } + "41" + { + "name" "Stage 4 Balrog" + "triggerid" "5544470" + } + "42" + { + "name" "Stage 1 Nazgul" + "triggerid" "4963264" + } + "43" + { + "name" "Stage 4 Nazgul" + "triggerid" "4963466" + } } diff --git a/entWatch4/configs/entwatch/ze_lotr_mines_of_moria_v6_3.cfg b/entWatch4/configs/entwatch/ze_lotr_mines_of_moria_v6_3.cfg new file mode 100644 index 00000000..640df71c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_mines_of_moria_v6_3.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The Ring" + "short" "Ring" + "color" "FFDD21" + "filter" "" + "weaponid" "2233" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Saruman's Staff" + "short" "Saruman" + "color" "222222" + "filter" "saruman" + "weaponid" "2266" + "buttonid" "34102" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Gandalf's Staff" + "short" "Gandalf" + "color" "FFFFFF" + "filter" "gandalf" + "weaponid" "2282" + "buttonid" "33990" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_mount_doom_v3.cfg b/entWatch4/configs/entwatch/ze_lotr_mount_doom_v3.cfg new file mode 100644 index 00000000..1dac4ae6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_mount_doom_v3.cfg @@ -0,0 +1,51 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The Ring" + "short" "Ring" + "color" "FFDD21" + "filter" "" + "weaponid" "1938" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Earendil Light" + "short" "Light" + "color" "FFFFFF" + "filter" "erendili" + "weaponid" "1987" + "buttonid" "1995" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + + // Zombie - Items + "2" + { + "name" "Nazgul" + "short" "Nazgul" + "color" "FF0000" + "filter" "" + "weaponid" "1385" + "buttonid" "" + "triggerid" "2253" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_lotr_mount_doom_v4_2.cfg b/entWatch4/configs/entwatch/ze_lotr_mount_doom_v4_2.cfg new file mode 100644 index 00000000..1dac4ae6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_lotr_mount_doom_v4_2.cfg @@ -0,0 +1,51 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The Ring" + "short" "Ring" + "color" "FFDD21" + "filter" "" + "weaponid" "1938" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Earendil Light" + "short" "Light" + "color" "FFFFFF" + "filter" "erendili" + "weaponid" "1987" + "buttonid" "1995" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + + // Zombie - Items + "2" + { + "name" "Nazgul" + "short" "Nazgul" + "color" "FF0000" + "filter" "" + "weaponid" "1385" + "buttonid" "" + "triggerid" "2253" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_madness_v2_1.cfg b/entWatch4/configs/entwatch/ze_madness_v2_1.cfg new file mode 100644 index 00000000..d7c6a417 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_madness_v2_1.cfg @@ -0,0 +1,307 @@ +"items" +{ + // Human - Items + "0" + { + "name" "C4" + "short" "C4" + "color" "FFFFFF" + "filter" "c4user1" + "weaponid" "19017" + "buttonid" "19019" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Pod" + "short" "Pod" + "color" "FFFFFF" + "filter" "" + "weaponid" "48890" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Hammer" + "short" "Hammer" + "color" "FFFFFF" + "filter" "hammeruser" + "weaponid" "67365" + "buttonid" "68326" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Nade Crate" + "short" "Nade Crate" + "color" "FFFFFF" + "filter" "nadeuser" + "weaponid" "81744" + "buttonid" "81746" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Bouncy Bed" + "short" "Bouncy Bed" + "color" "FFFFFF" + "filter" "beduser" + "weaponid" "87361" + "buttonid" "87369" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Force Gun" + "short" "Force Gun" + "color" "FFFFFF" + "filter" "forceuser" + "weaponid" "87938" + "buttonid" "87942" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Dragonslayer" + "short" "Dragonslayer" + "color" "FFFFFF" + "filter" "sworduser" + "weaponid" "108083" + "buttonid" "108085" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Freeze Mines" + "short" "Freeze Mines" + "color" "FFFFFF" + "filter" "freezeuser" + "weaponid" "118137" + "buttonid" "118145" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Umbrella" + "short" "Umbrella" + "color" "FFFFFF" + "filter" "umbrellauser" + "weaponid" "151641" + "buttonid" "155113" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Tetromino" + "short" "Tetromino" + "color" "FFFFFF" + "filter" "cadeuser" + "weaponid" "155296" + "buttonid" "155304" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "DDR" + "short" "DDR" + "color" "FFFFFF" + "filter" "danceuser" + "weaponid" "169871" + "buttonid" "169873" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "Molotov" + "short" "Molotov" + "color" "FFFFFF" + "filter" "molotovuser" + "weaponid" "221119" + "buttonid" "221125" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Screwdriver" + "short" "Screwdriver" + "color" "FFFFFF" + "filter" "screwuser" + "weaponid" "276689" + "buttonid" "276691" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "13" + { + "name" "Decoy" + "short" "Decoy" + "color" "FFFFFF" + "filter" "decoyuser" + "weaponid" "328606" + "buttonid" "328615" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "Forklift" + "short" "Forklift" + "color" "FFFFFF" + "filter" "forkliftuser" + "weaponid" "345308" + "buttonid" "345310" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + + // Zombie - Items + "15" + { + "name" "Gravity Zombie" + "short" "Gravity Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "72467" + "buttonid" "75660" + "triggerid" "76250" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "16" + { + "name" "Fire Zombie" + "short" "Fire Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "76625" + "buttonid" "76627" + "triggerid" "76551" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "17" + { + "name" "Wind Zombie" + "short" "Wind Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "79481" + "buttonid" "79486" + "triggerid" "79483" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "18" + { + "name" "Barrel Zombie" + "short" "Barrel Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "216448" + "buttonid" "216450" + "triggerid" "216725" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "19" + { + "name" "Laser Zombie" + "short" "Laser Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "242957" + "buttonid" "243035" + "triggerid" "242963" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_magic_carpet_v1_0.cfg b/entWatch4/configs/entwatch/ze_magic_carpet_v1_0.cfg new file mode 100644 index 00000000..04c7fc13 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_magic_carpet_v1_0.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Shield" + "short" "Shield" + "color" "004488" + "filter" "shielduser" + "weaponid" "8158" + "buttonid" "28228" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_minecraft_adventure_v1_2c.cfg b/entWatch4/configs/entwatch/ze_minecraft_adventure_v1_2c.cfg new file mode 100644 index 00000000..c54c4dd5 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_minecraft_adventure_v1_2c.cfg @@ -0,0 +1,154 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Sword" + "short" "Sword" + "color" "0000FF" + "filter" "" + "weaponid" "13270" + "buttonid" "193544" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "1" + { + "name" "Bow and Arrows" + "short" "Bow" + "color" "8B4513" + "filter" "" + "weaponid" "1657983" + "buttonid" "1657977" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "9" + } + "2" + { + "name" "River Axe" + "short" "Axe" + "color" "8B4513" + "filter" "" + "weaponid" "94227" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Diamond Pickaxe" + "short" "Pickaxe" + "color" "43C6DB" + "filter" "" + "weaponid" "120494" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "" + "weaponid" "182215" + "buttonid" "182281" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Flint" + "short" "Flint" + "color" "7D7D7D" + "filter" "" + "weaponid" "515304" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "6" + { + "name" "Steel" + "short" "Steel" + "color" "FFFFFF" + "filter" "" + "weaponid" "515276" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Firemines" + "short" "Firemines" + "color" "7D0000" + "filter" "" + "weaponid" "948183" + "buttonid" "948192" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Wall" + "short" "Wall" + "color" "7D7D7D" + "filter" "" + "weaponid" "948269" + "buttonid" "948278" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "13" + "cooldown" "1" + } + "9" + { + "name" "Dragon Egg" + "short" "Egg" + "color" "5A005A" + "filter" "" + "weaponid" "1175908" + "buttonid" "1175905" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "5" + } +} diff --git a/entWatch4/configs/entwatch/ze_minecraft_v1_1a.cfg b/entWatch4/configs/entwatch/ze_minecraft_v1_1a.cfg new file mode 100644 index 00000000..e479c6df --- /dev/null +++ b/entWatch4/configs/entwatch/ze_minecraft_v1_1a.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "The Bow" + "short" "Bow" + "color" "2A5CBA" + "filter" "" + "weaponid" "28664" + "buttonid" "35259" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Sword" + "short" "Sword" + "color" "2A5CBA" + "filter" "" + "weaponid" "178558" + "buttonid" "178513" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "2" + { + "name" "Troll Face" + "short" "Troll" + "color" "879FBA" + "filter" "" + "weaponid" "89624" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Creeper Head" + "short" "Creeper" + "color" "879FBA" + "filter" "" + "weaponid" "24732" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Pumpkin Head" + "short" "Pumpkin" + "color" "879FBA" + "filter" "" + "weaponid" "73093" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_mist_v1_3.cfg b/entWatch4/configs/entwatch/ze_mist_v1_3.cfg new file mode 100644 index 00000000..790808ed --- /dev/null +++ b/entWatch4/configs/entwatch/ze_mist_v1_3.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ice Nova" + "short" "Ice" + "color" "3AC7C9" + "filter" "" + "weaponid" "1068077" + "buttonid" "1068079" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "1" + { + "name" "Acid Flame" + "short" "Flame" + "color" "E26417" + "filter" "" + "weaponid" "1082763" + "buttonid" "1082895" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "2" + { + "name" "Spirit Burst" + "short" "Burst" + "color" "9DAFDC" + "filter" "" + "weaponid" "1084333" + "buttonid" "1084335" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "3" + { + "name" "Toxic Haze" + "short" "Toxic" + "color" "33BA0F" + "filter" "" + "weaponid" "1125887" + "buttonid" "1125956" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Static Field" + "short" "Static" + "color" "D357DE" + "filter" "" + "weaponid" "1086096" + "buttonid" "1086028" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "5" + { + "name" "Cleansing Aura" + "short" "Aura" + "color" "DC89AA" + "filter" "" + "weaponid" "1112064" + "buttonid" "1112131" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_moltentemple_a2.cfg b/entWatch4/configs/entwatch/ze_moltentemple_a2.cfg new file mode 100644 index 00000000..053b658f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_moltentemple_a2.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "211273" + "buttonid" "211401" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "230843" + "buttonid" "230845" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "769462" + "buttonid" "769444" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_moltentemple_a5.cfg b/entWatch4/configs/entwatch/ze_moltentemple_a5.cfg new file mode 100644 index 00000000..053b658f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_moltentemple_a5.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "211273" + "buttonid" "211401" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "230843" + "buttonid" "230845" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Bow" + "short" "Bow" + "color" "2A2A2A" + "filter" "" + "weaponid" "769462" + "buttonid" "769444" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/_entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg b/entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg similarity index 86% rename from _entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg rename to entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg index 296e4ed8..0fdba2f3 100644 --- a/_entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg +++ b/entWatch4/configs/entwatch/ze_mountain_escape_v5_zy.cfg @@ -1,337 +1,7 @@ "items" { - // Zombie - Minas - "0" - { - "name" "Nazgul" - "short" "Nazgul" - "color" "B40404" - "filter" "" - "weaponid" "1783" - "buttonid" "0" - "triggerid" "1803" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "1" - { - "name" "TNT" - "short" "TNT" - "color" "B40404" - "filter" "" - "weaponid" "1407995" - "buttonid" "0" - "triggerid" "1408081" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "2" - { - "name" "Balrog" - "short" "Balrog" - "color" "B40404" - "filter" "" - "weaponid" "2530359" - "buttonid" "0" - "triggerid" "2530356" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Zombie - Paranoid - "3" - { - "name" "Jumper" - "short" "Jumper" - "color" "B40404" - "filter" "" - "weaponid" "11041" - "buttonid" "11028" - "triggerid" "11038" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "5" - } - "4" - { - "name" "Antlion" - "short" "Antlion" - "color" "B40404" - "filter" "" - "weaponid" "11073" - "buttonid" "0" - "triggerid" "11070" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "5" - { - "name" "Titan" - "short" "Titan" - "color" "B40404" - "filter" "" - "weaponid" "11197" - "buttonid" "0" - "triggerid" "11194" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "6" - { - "name" "Zombie Summoner" - "short" "Summoner" - "color" "B40404" - "filter" "" - "weaponid" "204658" - "buttonid" "0" - "triggerid" "451517" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "7" - { - "name" "Bird" - "short" "Bird" - "color" "B40404" - "filter" "" - "weaponid" "1565785" - "buttonid" "1565800" - "triggerid" "1565782" - "display" "7" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "8" - { - "name" "Stopper" - "short" "Stopper" - "color" "B40404" - "filter" "" - "weaponid" "1735652" - "buttonid" "0" - "triggerid" "1735649" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "9" - { - "name" "Pyramid Head" - "short" "Pyramid Head" - "color" "B40404" - "filter" "" - "weaponid" "1910977" - "buttonid" "1910989" - "triggerid" "1910979" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "3" - } - "10" - { - "name" "Scary Zombie" - "short" "Scary Zombie" - "color" "B40404" - "filter" "" - "weaponid" "1958934" - "buttonid" "1958950" - "triggerid" "1958936" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "37" - } - "11" - { - "name" "Crab" - "short" "Crab" - "color" "B40404" - "filter" "" - "weaponid" "3395991" - "buttonid" "0" - "triggerid" "3396008" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Zombie - Random - "12" - { - "name" "Trampoline" - "short" "Trampoline" - "color" "B40404" - "filter" "" - "weaponid" "283070" - "buttonid" "283140" - "triggerid" "283067" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "48" - } - "13" - { - "name" "Vacuum" - "short" "Vacuum" - "color" "B40404" - "filter" "" - "weaponid" "289433" - "buttonid" "289786" - "triggerid" "1408555" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "44" - } - "14" - { - "name" "Rocket Launcher" - "short" "Rocket Launcher" - "color" "B40404" - "filter" "" - "weaponid" "1147636" - "buttonid" "1147803" - "triggerid" "1147642" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "44" - } - "15" - { - "name" "Cube" - "short" "Cube" - "color" "B40404" - "filter" "" - "weaponid" "3554464" - "buttonid" "3554466" - "triggerid" "3554461" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "1" - } - "16" - { - "name" "Raptor" - "short" "Raptor" - "color" "B40404" - "filter" "" - "weaponid" "3756576" - "buttonid" "3756567" - "triggerid" "3756570" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "17" - } - "17" - { - "name" "Shadow Ball" - "short" "Shadow Ball" - "color" "B40404" - "filter" "" - "weaponid" "3922762" - "buttonid" "3922767" - "triggerid" "3922764" - "display" "7" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - - // Human - Minas - "18" - { - "name" "Barricade - Bench" - "short" "Barricade - Bench" - "color" "0040FF" - "filter" "" - "weaponid" "2482022" - "buttonid" "2482024" - "triggerid" "0" - "display" "5" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "19" - { - "name" "Barricade - Fence" - "short" "Barricade - Fence" - "color" "0040FF" - "filter" "" - "weaponid" "2482035" - "buttonid" "2482037" - "triggerid" "0" - "display" "5" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "20" - { - "name" "Barricade - Shelf" - "short" "Barricade - Shelf" - "color" "0040FF" - "filter" "" - "weaponid" "2482048" - "buttonid" "2482050" - "triggerid" "0" - "display" "5" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "21" - { - "name" "Barricade - Crate" - "short" "Barricade - Crate" - "color" "0040FF" - "filter" "" - "weaponid" "2482100" - "buttonid" "2482102" - "triggerid" "0" - "display" "5" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - "22" - { - "name" "Barricade - Haybale" - "short" "Barricade - Haybale" - "color" "0040FF" - "filter" "" - "weaponid" "2482126" - "buttonid" "2482128" - "triggerid" "0" - "display" "5" - "mode" "2" - "maxuses" "1" - "cooldown" "0" - } - // Human - Paper Escaper - "23" + "0" { "name" "Heal" "short" "Heal" @@ -340,12 +10,13 @@ "weaponid" "838069" "buttonid" "838136" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "90" } - "24" + "1" { "name" "Raivb1000" "short" "Raivb1000" @@ -354,14 +25,15 @@ "weaponid" "1188732" "buttonid" "1188734" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - + // Human - Paranoid - "25" + "2" { "name" "Earendil Light" "short" "Earendil" @@ -370,12 +42,13 @@ "weaponid" "1848" "buttonid" "1850" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "60" } - "26" + "3" { "name" "Singularity Cannon" "short" "Singularity" @@ -384,12 +57,13 @@ "weaponid" "766634" "buttonid" "766636" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "4" "cooldown" "16" } - "27" + "4" { "name" "C4" "short" "C4" @@ -398,26 +72,28 @@ "weaponid" "767352" "buttonid" "767363" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "28" + "5" { "name" "VIP" "short" "VIP" "color" "0040FF" "filter" "" "weaponid" "1436876" - "buttonid" "1437079" - "triggerid" "0" - "display" "3" + "buttonid" "0" + "triggerid" "1437079" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "29" + "6" { "name" "Ladder" "short" "Ladder" @@ -426,12 +102,13 @@ "weaponid" "1719258" "buttonid" "1719265" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "30" + "7" { "name" "Minigun" "short" "Minigun" @@ -440,12 +117,13 @@ "weaponid" "2016309" "buttonid" "2016209" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "31" + "8" { "name" "Freezer" "short" "Freezer" @@ -454,12 +132,13 @@ "weaponid" "3260193" "buttonid" "3260205" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "23" } - "32" + "9" { "name" "Annihilator" "short" "Annihilator" @@ -468,14 +147,15 @@ "weaponid" "3261303" "buttonid" "3261305" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - + // Human - Predator - "33" + "10" { "name" "Flamethrower" "short" "Flamethrower" @@ -484,12 +164,13 @@ "weaponid" "1879" "buttonid" "1877" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "34" + "11" { "name" "Pushgun" "short" "Pushgun" @@ -498,12 +179,13 @@ "weaponid" "1904" "buttonid" "1899" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" } - "35" + "12" { "name" "Alien Device" "short" "Device" @@ -512,14 +194,15 @@ "weaponid" "108727" "buttonid" "108594" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - + // Human - Mako - "36" + "13" { "name" "Earth Materia" "short" "Earth" @@ -528,12 +211,13 @@ "weaponid" "1918" "buttonid" "1914" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "55" } - "37" + "14" { "name" "Wind Materia" "short" "Wind" @@ -542,12 +226,13 @@ "weaponid" "1928" "buttonid" "1984" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "70" } - "38" + "15" { "name" "Fire Materia" "short" "Fire" @@ -556,12 +241,13 @@ "weaponid" "1948" "buttonid" "1943" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "60" } - "39" + "16" { "name" "Ice Materia" "short" "Ice" @@ -570,12 +256,13 @@ "weaponid" "1963" "buttonid" "1959" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "60" } - "40" + "17" { "name" "Ultima Materia" "short" "Ultima" @@ -584,12 +271,13 @@ "weaponid" "1975" "buttonid" "1971" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "41" + "18" { "name" "Electro Materia" "short" "Electro" @@ -598,12 +286,13 @@ "weaponid" "2010" "buttonid" "2005" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "4" "maxuses" "3" "cooldown" "70" } - "42" + "19" { "name" "Heal Materia" "short" "Heal" @@ -612,14 +301,15 @@ "weaponid" "791149" "buttonid" "791146" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "50" } - + // Human - Random - "43" + "20" { "name" "Speed Weapon" "short" "Speed" @@ -628,12 +318,13 @@ "weaponid" "1906" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "44" + "21" { "name" "Barricade" "short" "Barricade" @@ -642,12 +333,13 @@ "weaponid" "1422178" "buttonid" "1422175" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "18" "cooldown" "2" } - "45" + "22" { "name" "Invisibility" "short" "Invisibility" @@ -656,12 +348,13 @@ "weaponid" "3285374" "buttonid" "3285447" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "45" } - "46" + "23" { "name" "Mines" "short" "Mines" @@ -670,12 +363,13 @@ "weaponid" "3554386" "buttonid" "3554394" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "4" "cooldown" "0" } - "47" + "24" { "name" "Bunker" "short" "Bunker" @@ -684,9 +378,363 @@ "weaponid" "4479286" "buttonid" "4479288" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } + + // Human - Minas + "25" + { + "name" "Barricade - Bench" + "short" "Barricade - Bench" + "color" "0040FF" + "filter" "" + "weaponid" "2482022" + "buttonid" "2482024" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "26" + { + "name" "Barricade - Fence" + "short" "Barricade - Fence" + "color" "0040FF" + "filter" "" + "weaponid" "2482035" + "buttonid" "2482037" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "27" + { + "name" "Barricade - Shelf" + "short" "Barricade - Shelf" + "color" "0040FF" + "filter" "" + "weaponid" "2482048" + "buttonid" "2482050" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "28" + { + "name" "Barricade - Crate" + "short" "Barricade - Crate" + "color" "0040FF" + "filter" "" + "weaponid" "2482100" + "buttonid" "2482102" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "29" + { + "name" "Barricade - Haybale" + "short" "Barricade - Haybale" + "color" "0040FF" + "filter" "" + "weaponid" "2482126" + "buttonid" "2482128" + "triggerid" "0" + "display" "2" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Minas + "30" + { + "name" "Nazgul" + "short" "Nazgul" + "color" "B40404" + "filter" "" + "weaponid" "1783" + "buttonid" "0" + "triggerid" "413248" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "31" + { + "name" "TNT" + "short" "TNT" + "color" "B40404" + "filter" "" + "weaponid" "1407995" + "buttonid" "0" + "triggerid" "1408081" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "32" + { + "name" "Balrog" + "short" "Balrog" + "color" "B40404" + "filter" "" + "weaponid" "2530359" + "buttonid" "0" + "triggerid" "2530356" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Paranoid + "33" + { + "name" "Jumper" + "short" "Jumper" + "color" "B40404" + "filter" "" + "weaponid" "11041" + "buttonid" "11028" + "triggerid" "11038" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "34" + { + "name" "Antlion" + "short" "Antlion" + "color" "B40404" + "filter" "" + "weaponid" "11073" + "buttonid" "0" + "triggerid" "11070" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "35" + { + "name" "Titan" + "short" "Titan" + "color" "B40404" + "filter" "" + "weaponid" "11197" + "buttonid" "0" + "triggerid" "11194" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "36" + { + "name" "Zombie Summoner" + "short" "Summoner" + "color" "B40404" + "filter" "" + "weaponid" "204658" + "buttonid" "0" + "triggerid" "451517" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "37" + { + "name" "Bird" + "short" "Bird" + "color" "B40404" + "filter" "" + "weaponid" "1565785" + "buttonid" "1565800" + "triggerid" "1565782" + "display" "5" + "slot" "3" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "38" + { + "name" "Stopper" + "short" "Stopper" + "color" "B40404" + "filter" "" + "weaponid" "1735652" + "buttonid" "0" + "triggerid" "1735649" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "39" + { + "name" "Pyramid Head" + "short" "Pyramid Head" + "color" "B40404" + "filter" "" + "weaponid" "1910977" + "buttonid" "1910989" + "triggerid" "1910979" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "3" + } + "40" + { + "name" "Scary Zombie" + "short" "Scary Zombie" + "color" "B40404" + "filter" "" + "weaponid" "1958934" + "buttonid" "1958950" + "triggerid" "1958936" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "37" + } + "41" + { + "name" "Crab" + "short" "Crab" + "color" "B40404" + "filter" "" + "weaponid" "3395991" + "buttonid" "0" + "triggerid" "3396008" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Random + "42" + { + "name" "Trampoline" + "short" "Trampoline" + "color" "B40404" + "filter" "" + "weaponid" "283070" + "buttonid" "283140" + "triggerid" "283067" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "48" + } + "43" + { + "name" "Vacuum" + "short" "Vacuum" + "color" "B40404" + "filter" "" + "weaponid" "289433" + "buttonid" "289786" + "triggerid" "1408555" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "44" + } + "44" + { + "name" "Rocket Launcher" + "short" "Rocket Launcher" + "color" "B40404" + "filter" "" + "weaponid" "1147636" + "buttonid" "1147803" + "triggerid" "1147642" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "44" + } + "45" + { + "name" "Cube" + "short" "Cube" + "color" "B40404" + "filter" "" + "weaponid" "3554464" + "buttonid" "3554466" + "triggerid" "3554461" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "1" + } + "46" + { + "name" "Raptor" + "short" "Raptor" + "color" "B40404" + "filter" "" + "weaponid" "3756576" + "buttonid" "3756567" + "triggerid" "3756570" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "17" + } + "47" + { + "name" "Shadow Ball" + "short" "Shadow Ball" + "color" "B40404" + "filter" "" + "weaponid" "3922762" + "buttonid" "3922767" + "triggerid" "3922764" + "display" "5" + "slot" "3" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } } diff --git a/entWatch4/configs/entwatch/ze_notredame_v1_3.cfg b/entWatch4/configs/entwatch/ze_notredame_v1_3.cfg new file mode 100644 index 00000000..784b78f4 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_notredame_v1_3.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Shotgun" + "short" "Shotgun" + "color" "BB0000" + "filter" "HunchBackC" + "weaponid" "119886" + "buttonid" "121553" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "59" + } + "1" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "BB0000" + "filter" "UndeadC" + "weaponid" "127266" + "buttonid" "127263" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "59" + } + "2" + { + "name" "Super Boost" + "short" "Boost" + "color" "111111" + "filter" "ViolaC" + "weaponid" "125124" + "buttonid" "125126" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "59" + } +} diff --git a/entWatch4/configs/entwatch/ze_paper_escaper_v7_1.cfg b/entWatch4/configs/entwatch/ze_paper_escaper_v7_1.cfg new file mode 100644 index 00000000..76b652ad --- /dev/null +++ b/entWatch4/configs/entwatch/ze_paper_escaper_v7_1.cfg @@ -0,0 +1,216 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Cisneros' Hero Burguer" + "short" "Burguer" + "color" "120061" + "filter" "burg_pl" + "weaponid" "1905" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "heal" + "weaponid" "1984" + "buttonid" "1986" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "2" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "111111" + "filter" "we1" + "weaponid" "2091" + "buttonid" "1993" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Penis Gun" + "short" "Penis Gun" + "color" "FF6EB4" + "filter" "penis" + "weaponid" "2618" + "buttonid" "2616" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "4" + { + "name" "Raivb1000 Prototype" + "short" "Raivb1000" + "color" "120061" + "filter" "cannon" + "weaponid" "2841" + "buttonid" "2842" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Ammo Box" + "short" "Ammo" + "color" "2F2F2F" + "filter" "ammo" + "weaponid" "2971" + "buttonid" "2972" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "6" + { + "name" "Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "" + "weaponid" "3377" + "buttonid" "3378" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "" + "weaponid" "3386" + "buttonid" "3387" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "0080FF" + "filter" "we2" + "weaponid" "3413" + "buttonid" "3437" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "9" + { + "name" "CoolR Gun" + "short" "CoolR" + "color" "0000FF" + "filter" "coolrguy" + "weaponid" "3504" + "buttonid" "3502" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "10" + { + "name" "Speed Weapon" + "short" "Speed" + "color" "00FF00" + "filter" "" + "weaponid" "3792" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "SpaceSuit" + "short" "SpaceSuit" + "color" "0000FF" + "filter" "" + "weaponid" "2242" + "buttonid" "0" + "triggerid" "349562" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Tornado" + "short" "Tornado" + "color" "00B33C" + "filter" "tornado" + "weaponid" "4047" + "buttonid" "4045" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "0" + "cooldown" "120" + } + + // Zombie - Items + "13" + { + "name" "Fast Knife" + "short" "Fast Zombie" + "color" "120061" + "filter" "" + "weaponid" "2342" + "buttonid" "0" + "triggerid" "368520" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/_entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg b/entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg similarity index 85% rename from _entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg rename to entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg index 34b21644..9a5700a4 100644 --- a/_entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg +++ b/entWatch4/configs/entwatch/ze_paranoid_rezurrection_v11_9.cfg @@ -1,197 +1,7 @@ "items" { - // Zombie - Regular items.. + // Human - Regular Items.. "0" - { - "name" "Scary Zombie" - "short" "Scary" - "color" "B40404" - "filter" "" - "weaponid" "145113" - "buttonid" "0" - "triggerid" "145110" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "1" - { - "name" "Barnacle Impulsion Zombie" - "short" "Barnacle" - "color" "B40404" - "filter" "" - "weaponid" "146266" - "buttonid" "146263" - "triggerid" "146260" - "display" "7" - "mode" "1" - "maxuses" "0" - "cooldown" "10" - } - "2" - { - "name" "Jumper" - "short" "Jumper" - "color" "B40404" - "filter" "" - "weaponid" "144229" - "buttonid" "0" - "triggerid" "144236" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "3" - { - "name" "Summoner Zombie" - "short" "Summoner" - "color" "B40404" - "filter" "" - "weaponid" "143988" - "buttonid" "0" - "triggerid" "143985" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "4" - { - "name" "Stopper Zombie" - "short" "Stopper" - "color" "B40404" - "filter" "" - "weaponid" "143893" - "buttonid" "0" - "triggerid" "143885" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Zombie - Boss monsters.. - "5" - { - "name" "T-Rex" - "short" "T-Rex" - "color" "B40404" - "filter" "" - "weaponid" "145960" - "buttonid" "0" - "triggerid" "145962" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "6" - { - "name" "Balrog" - "short" "Balrog" - "color" "B40404" - "filter" "" - "weaponid" "145917" - "buttonid" "0" - "triggerid" "147102" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "7" - { - "name" "Titan" - "short" "Titan" - "color" "B40404" - "filter" "" - "weaponid" "144572" - "buttonid" "0" - "triggerid" "144574" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Zombie - Special items.. - "8" - { - "name" "Vortigaunt" - "short" "Vortigaunt" - "color" "B40404" - "filter" "" - "weaponid" "146131" - "buttonid" "0" - "triggerid" "146053" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "9" - { - "name" "Synth" - "short" "Synth" - "color" "B40404" - "filter" "" - "weaponid" "144625" - "buttonid" "0" - "triggerid" "144622" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "10" - { - "name" "Antlion" - "short" "Antlion" - "color" "B40404" - "filter" "" - "weaponid" "144555" - "buttonid" "0" - "triggerid" "144563" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - "11" - { - "name" "Pyramid Head" - "short" "Pyramid Head" - "color" "B40404" - "filter" "" - "weaponid" "144536" - "buttonid" "147286" - "triggerid" "144538" - "display" "7" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Neutral - Regular Items.. - "12" - { - "name" "Dog" - "short" "Dog" - "color" "CCCCCC" - "filter" "" - "weaponid" "146285" - "buttonid" "0" - "triggerid" "0" - "display" "3" - "mode" "0" - "maxuses" "0" - "cooldown" "0" - } - - // Humans - Regular Items.. - "13" { "name" "Unlimited Ammo Weapon" "short" "Unlimited Ammo" @@ -200,12 +10,13 @@ "weaponid" "145101" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "1" "mode" "0" "maxuses" "0" "cooldown" "0" } - "14" + "1" { "name" "Zombie Radar" "short" "Zombie Radar" @@ -214,12 +25,13 @@ "weaponid" "144352" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "15" + "2" { "name" "Invurnability Weapon" "short" "Invurnability" @@ -228,12 +40,13 @@ "weaponid" "144022" "buttonid" "144013" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "40" } - "16" + "3" { "name" "Teleport Weapon" "short" "Teleport" @@ -242,12 +55,13 @@ "weaponid" "143913" "buttonid" "143907" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - "17" + "4" { "name" "Sprint Weapon" "short" "Sprint" @@ -256,12 +70,13 @@ "weaponid" "143840" "buttonid" "143772" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "30" } - "18" + "5" { "name" "Invisibility Weapon" "short" "Invisibility" @@ -270,12 +85,13 @@ "weaponid" "143756" "buttonid" "143760" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "60" } - "19" + "6" { "name" "Car" "short" "Car" @@ -284,14 +100,15 @@ "weaponid" "145895" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - - // Humans - First maze items.. - "20" + + // Human - First maze items.. + "7" { "name" "Giant Chainsaw" "short" "Chainsaw" @@ -300,12 +117,13 @@ "weaponid" "144787" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "21" + "8" { "name" "Gravity Gun" "short" "Gravity Gun" @@ -314,12 +132,13 @@ "weaponid" "144665" "buttonid" "144662" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "2" } - "22" + "9" { "name" "Flamethrower" "short" "Flamethrower" @@ -328,12 +147,13 @@ "weaponid" "144195" "buttonid" "144116" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - "23" + "10" { "name" "Freezer" "short" "Freezer" @@ -342,12 +162,13 @@ "weaponid" "144101" "buttonid" "144106" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "23" } - "24" + "11" { "name" "MG42" "short" "MG42" @@ -356,12 +177,13 @@ "weaponid" "805697" "buttonid" "805687" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "22" } - "25" + "12" { "name" "Ladder Carrier" "short" "Ladder" @@ -370,12 +192,13 @@ "weaponid" "144215" "buttonid" "144210" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "20" } - "26" + "13" { "name" "Builder" "short" "Builder" @@ -384,12 +207,13 @@ "weaponid" "143902" "buttonid" "143896" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "10" "cooldown" "1" } - "27" + "14" { "name" "Grenade Maker" "short" "Grenade Maker" @@ -398,12 +222,13 @@ "weaponid" "143869" "buttonid" "143866" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "15" "cooldown" "1" } - "28" + "15" { "name" "Rocket Launcher" "short" "Rocket Launcher" @@ -412,12 +237,13 @@ "weaponid" "143855" "buttonid" "143852" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "6" } - "29" + "16" { "name" "Bed Item" "short" "Bed" @@ -426,12 +252,13 @@ "weaponid" "146242" "buttonid" "146239" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "18" } - "30" + "17" { "name" "Heal Item" "short" "Heal" @@ -440,12 +267,13 @@ "weaponid" "146227" "buttonid" "146229" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "40" } - "31" + "18" { "name" "Earendil Light" "short" "Earendil" @@ -454,12 +282,13 @@ "weaponid" "144631" "buttonid" "146921" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "40" } - "32" + "19" { "name" "Gandalf Staff" "short" "Gandalf" @@ -468,14 +297,15 @@ "weaponid" "144243" "buttonid" "147292" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "40" } - - // Humans - Second maze items.. - "33" + + // Human - Second maze items.. + "20" { "name" "Juggernaut" "short" "Juggernaut" @@ -484,12 +314,13 @@ "weaponid" "144513" "buttonid" "146796" "triggerid" "146784" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" } - "32" + "21" { "name" "Singularity Cannon" "short" "Singularity" @@ -498,12 +329,13 @@ "weaponid" "144359" "buttonid" "144364" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "3" "cooldown" "16" } - "32" + "22" { "name" "Thundergun" "short" "Thundergun" @@ -512,12 +344,13 @@ "weaponid" "146155" "buttonid" "146140" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "3" "maxuses" "3" "cooldown" "1" } - "32" + "23" { "name" "Slower Weapon" "short" "Slower" @@ -526,12 +359,13 @@ "weaponid" "144516" "buttonid" "146802" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "1" "maxuses" "0" "cooldown" "50" } - "32" + "24" { "name" "Minigun" "short" "Minigun" @@ -540,14 +374,15 @@ "weaponid" "627131" "buttonid" "627056" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "2" "mode" "0" "maxuses" "0" "cooldown" "0" } - + // Human - Special items.. - "38" + "25" { "name" "Holy Grenade" "short" "Holy Grenade" @@ -556,12 +391,13 @@ "weaponid" "147054" "buttonid" "147056" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "1" "mode" "2" "maxuses" "1" "cooldown" "0" } - "39" + "26" { "name" "Annihilator" "short" "Annihilator" @@ -570,12 +406,216 @@ "weaponid" "145427" "buttonid" "145429" "triggerid" "0" - "display" "7" + "display" "5" + "slot" "2" "mode" "2" "maxuses" "1" "cooldown" "0" } - + + // Zombie - Regular items.. + "27" + { + "name" "Scary Zombie" + "short" "Scary" + "color" "B40404" + "filter" "" + "weaponid" "145113" + "buttonid" "0" + "triggerid" "145110" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "28" + { + "name" "Barnacle Impulsion Zombie" + "short" "Barnacle" + "color" "B40404" + "filter" "" + "weaponid" "146266" + "buttonid" "146263" + "triggerid" "146260" + "display" "5" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "29" + { + "name" "Jumper" + "short" "Jumper" + "color" "B40404" + "filter" "" + "weaponid" "144229" + "buttonid" "0" + "triggerid" "144236" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "30" + { + "name" "Summoner Zombie" + "short" "Summoner" + "color" "B40404" + "filter" "" + "weaponid" "143988" + "buttonid" "0" + "triggerid" "143985" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "31" + { + "name" "Stopper Zombie" + "short" "Stopper" + "color" "B40404" + "filter" "" + "weaponid" "143893" + "buttonid" "0" + "triggerid" "143885" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Boss monsters.. + "32" + { + "name" "T-Rex" + "short" "T-Rex" + "color" "B40404" + "filter" "" + "weaponid" "145960" + "buttonid" "0" + "triggerid" "145962" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "33" + { + "name" "Balrog" + "short" "Balrog" + "color" "B40404" + "filter" "" + "weaponid" "145917" + "buttonid" "0" + "triggerid" "147102" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "34" + { + "name" "Titan" + "short" "Titan" + "color" "B40404" + "filter" "" + "weaponid" "144572" + "buttonid" "0" + "triggerid" "144574" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Special items.. + "35" + { + "name" "Vortigaunt" + "short" "Vortigaunt" + "color" "B40404" + "filter" "" + "weaponid" "146131" + "buttonid" "0" + "triggerid" "146053" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "36" + { + "name" "Synth" + "short" "Synth" + "color" "B40404" + "filter" "" + "weaponid" "144625" + "buttonid" "0" + "triggerid" "144622" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "37" + { + "name" "Antlion" + "short" "Antlion" + "color" "B40404" + "filter" "" + "weaponid" "144555" + "buttonid" "0" + "triggerid" "144563" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "38" + { + "name" "Pyramid Head" + "short" "Pyramid Head" + "color" "B40404" + "filter" "" + "weaponid" "144536" + "buttonid" "147286" + "triggerid" "144538" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Neutral - Regular Items.. + "39" + { + "name" "Dog" + "short" "Dog" + "color" "CCCCCC" + "filter" "" + "weaponid" "146285" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + // Neutral - Gamemode Items.. "40" { @@ -586,7 +626,8 @@ "weaponid" "147300" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -600,7 +641,8 @@ "weaponid" "100001" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "3" "mode" "0" "maxuses" "0" "cooldown" "0" @@ -614,7 +656,8 @@ "weaponid" "1234469" "buttonid" "0" "triggerid" "0" - "display" "3" + "display" "5" + "slot" "4" "mode" "0" "maxuses" "0" "cooldown" "0" diff --git a/entWatch4/configs/entwatch/ze_paranoid_ultimate_v10_4.cfg b/entWatch4/configs/entwatch/ze_paranoid_ultimate_v10_4.cfg new file mode 100644 index 00000000..d37e2f7f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_paranoid_ultimate_v10_4.cfg @@ -0,0 +1,541 @@ +"items" +{ + // Human - Jail items.. + "0" + { + "name" "Unlimited Ammo Weapon" + "short" "Unlimited Ammo" + "color" "0040FF" + "filter" "" + "weaponid" "53253" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "1" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Unlimited Ammo Weapon" + "short" "Unlimited Ammo" + "color" "0040FF" + "filter" "" + "weaponid" "53453" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "1" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Unlimited Ammo Weapon" + "short" "Unlimited Ammo" + "color" "0040FF" + "filter" "" + "weaponid" "116295" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "1" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - First maze items.. + "3" + { + "name" "Bird" + "short" "Bird" + "color" "0040FF" + "filter" "" + "weaponid" "109066" + "buttonid" "0" + "triggerid" "109068" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Zombie Radar" + "short" "Zombie Radar" + "color" "0040FF" + "filter" "" + "weaponid" "125409" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Invurnability Weapon" + "short" "Invurnability" + "color" "0040FF" + "filter" "" + "weaponid" "2494" + "buttonid" "385052" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "6" + { + "name" "Teleport Weapon" + "short" "Teleport" + "color" "0040FF" + "filter" "" + "weaponid" "124997" + "buttonid" "385147" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "7" + { + "name" "Sprint Weapon" + "short" "Sprint" + "color" "0040FF" + "filter" "" + "weaponid" "2504" + "buttonid" "385102" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + "8" + { + "name" "Invisibility Weapon" + "short" "Invisibility" + "color" "0040FF" + "filter" "" + "weaponid" "141379" + "buttonid" "385032" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "42" + } + "9" + { + "name" "Giant Chainsaw" + "short" "Chainsaw" + "color" "0040FF" + "filter" "" + "weaponid" "2459" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Gravity Gun" + "short" "Gravity Gun" + "color" "0040FF" + "filter" "" + "weaponid" "2481" + "buttonid" "385237" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "2" + } + "11" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "0040FF" + "filter" "" + "weaponid" "2361" + "buttonid" "385343" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Freezer" + "short" "Freezer" + "color" "0040FF" + "filter" "" + "weaponid" "2384" + "buttonid" "385358" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "23" + } + "13" + { + "name" "Fence Carrier" + "short" "Fence" + "color" "0040FF" + "filter" "" + "weaponid" "4473" + "buttonid" "385067" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "Builder" + "short" "Builder" + "color" "0040FF" + "filter" "" + "weaponid" "2387" + "buttonid" "385389" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "3" + "maxuses" "15" + "cooldown" "1" + } + "15" + { + "name" "Grenade Maker" + "short" "Grenade Maker" + "color" "0040FF" + "filter" "" + "weaponid" "124867" + "buttonid" "385207" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "3" + "maxuses" "15" + "cooldown" "1" + } + "16" + { + "name" "Rocket Launcher" + "short" "Rocket Launcher" + "color" "0040FF" + "filter" "" + "weaponid" "2435" + "buttonid" "384999" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "6" + } + "17" + { + "name" "Earendil Light" + "short" "Earendil" + "color" "0040FF" + "filter" "" + "weaponid" "178459" + "buttonid" "178465" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "18" + { + "name" "Gandalf Staff" + "short" "Gandalf" + "color" "0040FF" + "filter" "" + "weaponid" "2576" + "buttonid" "2562" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "19" + { + "name" "Turtle Thrower" + "short" "Turtle Thrower" + "color" "0040FF" + "filter" "" + "weaponid" "2479" + "buttonid" "385122" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "20" + { + "name" "Wall Controller" + "short" "Wall Controller" + "color" "0040FF" + "filter" "" + "weaponid" "2519" + "buttonid" "385082" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "21" + { + "name" "Annihilator" + "short" "Annihilator" + "color" "0040FF" + "filter" "" + "weaponid" "2393" + "buttonid" "0" + "triggerid" "377335" + "display" "5" + "slot" "4" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Second maze items.. + "22" + { + "name" "Juggernaut" + "short" "Juggernaut" + "color" "0040FF" + "filter" "" + "weaponid" "2323" + "buttonid" "2335" + "triggerid" "435492" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "23" + { + "name" "Singularity Cannon" + "short" "Singularity" + "color" "0040FF" + "filter" "" + "weaponid" "2354" + "buttonid" "385272" + "triggerid" "0" + "display" "5" + "slot" "1" + "mode" "3" + "maxuses" "3" + "cooldown" "16" + } + "24" + { + "name" "Slower Weapon" + "short" "Slower" + "color" "0040FF" + "filter" "" + "weaponid" "2343" + "buttonid" "385287" + "triggerid" "0" + "display" "5" + "slot" "1" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "25" + { + "name" "Minigun" + "short" "Minigun" + "color" "0040FF" + "filter" "" + "weaponid" "354484" + "buttonid" "385302" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Regular items.. + "26" + { + "name" "Jumper" + "short" "Jumper" + "color" "B40404" + "filter" "" + "weaponid" "2657" + "buttonid" "0" + "triggerid" "2663" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "27" + { + "name" "Summoner Zombie" + "short" "Summoner" + "color" "B40404" + "filter" "" + "weaponid" "2604" + "buttonid" "0" + "triggerid" "2602" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "28" + { + "name" "Stopper Zombie" + "short" "Stopper" + "color" "B40404" + "filter" "" + "weaponid" "2579" + "buttonid" "0" + "triggerid" "2581" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "29" + { + "name" "Teleporter Zombie" + "short" "Teleporter" + "color" "B40404" + "filter" "" + "weaponid" "2593" + "buttonid" "0" + "triggerid" "2590" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Boss monsters.. + "30" + { + "name" "Titan" + "short" "Titan" + "color" "B40404" + "filter" "" + "weaponid" "2240" + "buttonid" "0" + "triggerid" "2241" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Special items.. + "31" + { + "name" "Synth" + "short" "Synth" + "color" "B40404" + "filter" "" + "weaponid" "3864" + "buttonid" "0" + "triggerid" "3865" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "32" + { + "name" "Antlion" + "short" "Antlion" + "color" "B40404" + "filter" "" + "weaponid" "276514" + "buttonid" "0" + "triggerid" "276509" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "33" + { + "name" "Pyramid Head" + "short" "Pyramid Head" + "color" "B40404" + "filter" "" + "weaponid" "269108" + "buttonid" "0" + "triggerid" "269110" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Neutral - Gamemode Items.. + "34" + { + "name" "VIP" + "short" "VIP" + "color" "0040FF" + "filter" "" + "weaponid" "1719" + "buttonid" "0" + "triggerid" "4176" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_parking_v3_1.cfg b/entWatch4/configs/entwatch/ze_parking_v3_1.cfg new file mode 100644 index 00000000..ec248bce --- /dev/null +++ b/entWatch4/configs/entwatch/ze_parking_v3_1.cfg @@ -0,0 +1,109 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "0040FF" + "filter" "porteur_flam" + "weaponid" "401224" + "buttonid" "401226" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Minigun" + "short" "Minigun" + "color" "0040FF" + "filter" "porteur_minigun" + "weaponid" "533564" + "buttonid" "533561" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Proxy Mines" + "short" "Mines" + "color" "0040FF" + "filter" "porteur_proximine" + "weaponid" "950639" + "buttonid" "950629" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "15" + "cooldown" "15" + } + "3" + { + "name" "Grenade Launcher" + "short" "Grenade" + "color" "0040FF" + "filter" "porteur_grenadel" + "weaponid" "472136" + "buttonid" "472129" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "4" + { + "name" "Drone" + "short" "Drone" + "color" "0040FF" + "filter" "porteur_drone" + "weaponid" "977151" + "buttonid" "977153" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Ammo Dispenser" + "short" "Ammo" + "color" "0040FF" + "filter" "porteur_bullet" + "weaponid" "964600" + "buttonid" "964605" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + "6" + { + "name" "Electro Gun" + "short" "Electro" + "color" "0040FF" + "filter" "porteur_electro" + "weaponid" "962780" + "buttonid" "962782" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "10" + } +} diff --git a/entWatch4/configs/entwatch/ze_pidaras_v1_4fix3.cfg b/entWatch4/configs/entwatch/ze_pidaras_v1_4fix3.cfg new file mode 100644 index 00000000..e6d24e16 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pidaras_v1_4fix3.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Shotgun" + "short" "Shotgun" + "color" "D60046" + "filter" "shotgun_player" + "weaponid" "52348" + "buttonid" "52354" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "35" + "cooldown" "2" + } + "1" + { + "name" "Freezer" + "short" "Freezer" + "color" "D60046" + "filter" "freezer_player" + "weaponid" "1394471" + "buttonid" "1394476" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "2" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "D60046" + "filter" "lanceflamme_player" + "weaponid" "52798" + "buttonid" "52959" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Heal" + "short" "Heal" + "color" "D60046" + "filter" "healer_player" + "weaponid" "1220147" + "buttonid" "1221326" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Minigun" + "short" "Minigun" + "color" "D60046" + "filter" "minigun_player" + "weaponid" "48479" + "buttonid" "48404" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "5" + { + "name" "Holy Grenade" + "short" "Holy" + "color" "D60046" + "filter" "holyH" + "weaponid" "1241792" + "buttonid" "1241783" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_pirates_port_royal_v3_6.cfg b/entWatch4/configs/entwatch/ze_pirates_port_royal_v3_6.cfg new file mode 100644 index 00000000..97f56a58 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pirates_port_royal_v3_6.cfg @@ -0,0 +1,126 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Barrel Item" + "short" "Barrel" + "color" "FF8C00" + "filter" "zbran_sudy_filtr" + "weaponid" "3498214" + "buttonid" "3498219" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Bubbles Item" + "short" "Bubbles" + "color" "00BFFF" + "filter" "zbran_buble_filtr" + "weaponid" "3498386" + "buttonid" "3498391" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Heal Item" + "short" "Heal" + "color" "FFFFFF" + "filter" "zbran_heal_filtr" + "weaponid" "3498541" + "buttonid" "3498546" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Wall Item" + "short" "Wall" + "color" "32CD32" + "filter" "zbran_zataras_filtr" + "weaponid" "3498161" + "buttonid" "3498166" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "4" + { + "name" "Sword Item" + "short" "Sword" + "color" "FF0000" + "filter" "zbran_mece_filtr" + "weaponid" "3498185" + "buttonid" "3498190" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "5" + { + "name" "Medallion" + "short" "Medallion" + "color" "FFFF00" + "filter" "medailon_player" + "weaponid" "2058306" + "buttonid" "2058287" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "15" + } + "6" + { + "name" "Second Medallion" + "short" "Medallion" + "color" "FFFF00" + "filter" "" + "weaponid" "6687166" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "7" + { + "name" "Barbossa" + "short" "Barbossa" + "color" "B40404" + "filter" "" + "weaponid" "7560944" + "buttonid" "0" + "triggerid" "7561041" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_pirates_port_royal_v5_4s2.cfg b/entWatch4/configs/entwatch/ze_pirates_port_royal_v5_4s2.cfg new file mode 100644 index 00000000..97f56a58 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pirates_port_royal_v5_4s2.cfg @@ -0,0 +1,126 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Barrel Item" + "short" "Barrel" + "color" "FF8C00" + "filter" "zbran_sudy_filtr" + "weaponid" "3498214" + "buttonid" "3498219" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Bubbles Item" + "short" "Bubbles" + "color" "00BFFF" + "filter" "zbran_buble_filtr" + "weaponid" "3498386" + "buttonid" "3498391" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Heal Item" + "short" "Heal" + "color" "FFFFFF" + "filter" "zbran_heal_filtr" + "weaponid" "3498541" + "buttonid" "3498546" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Wall Item" + "short" "Wall" + "color" "32CD32" + "filter" "zbran_zataras_filtr" + "weaponid" "3498161" + "buttonid" "3498166" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "4" + { + "name" "Sword Item" + "short" "Sword" + "color" "FF0000" + "filter" "zbran_mece_filtr" + "weaponid" "3498185" + "buttonid" "3498190" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "5" + { + "name" "Medallion" + "short" "Medallion" + "color" "FFFF00" + "filter" "medailon_player" + "weaponid" "2058306" + "buttonid" "2058287" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "15" + } + "6" + { + "name" "Second Medallion" + "short" "Medallion" + "color" "FFFF00" + "filter" "" + "weaponid" "6687166" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "7" + { + "name" "Barbossa" + "short" "Barbossa" + "color" "B40404" + "filter" "" + "weaponid" "7560944" + "buttonid" "0" + "triggerid" "7561041" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_pkmn_adventure_v7_2s.cfg b/entWatch4/configs/entwatch/ze_pkmn_adventure_v7_2s.cfg new file mode 100644 index 00000000..cbe4b486 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pkmn_adventure_v7_2s.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Chansey" + "short" "Chansey" + "color" "FFA500" + "filter" "heal_filter" + "weaponid" "135485" + "buttonid" "135477" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "1" + { + "name" "Gardevoir" + "short" "Gardevoir" + "color" "ADD8E6" + "filter" "wall_filter" + "weaponid" "239154" + "buttonid" "239156" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Buizel" + "short" "Buizel" + "color" "1E90FF" + "filter" "water_filter" + "weaponid" "258729" + "buttonid" "258721" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } +} diff --git a/entWatch4/configs/entwatch/ze_pkmn_adventure_v8_6s_fix2.cfg b/entWatch4/configs/entwatch/ze_pkmn_adventure_v8_6s_fix2.cfg new file mode 100644 index 00000000..cbe4b486 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pkmn_adventure_v8_6s_fix2.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Chansey" + "short" "Chansey" + "color" "FFA500" + "filter" "heal_filter" + "weaponid" "135485" + "buttonid" "135477" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "1" + { + "name" "Gardevoir" + "short" "Gardevoir" + "color" "ADD8E6" + "filter" "wall_filter" + "weaponid" "239154" + "buttonid" "239156" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Buizel" + "short" "Buizel" + "color" "1E90FF" + "filter" "water_filter" + "weaponid" "258729" + "buttonid" "258721" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } +} diff --git a/entWatch4/configs/entwatch/ze_pkmn_adventure_v9s_fix.cfg b/entWatch4/configs/entwatch/ze_pkmn_adventure_v9s_fix.cfg new file mode 100644 index 00000000..cbe4b486 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pkmn_adventure_v9s_fix.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Chansey" + "short" "Chansey" + "color" "FFA500" + "filter" "heal_filter" + "weaponid" "135485" + "buttonid" "135477" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "1" + { + "name" "Gardevoir" + "short" "Gardevoir" + "color" "ADD8E6" + "filter" "wall_filter" + "weaponid" "239154" + "buttonid" "239156" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Buizel" + "short" "Buizel" + "color" "1E90FF" + "filter" "water_filter" + "weaponid" "258729" + "buttonid" "258721" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } +} diff --git a/entWatch4/configs/entwatch/ze_pokemon_adventure_v1_1s.cfg b/entWatch4/configs/entwatch/ze_pokemon_adventure_v1_1s.cfg new file mode 100644 index 00000000..b7bcb854 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_pokemon_adventure_v1_1s.cfg @@ -0,0 +1,154 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Potion" + "short" "Potion" + "color" "00FF00" + "filter" "" + "weaponid" "416492" + "buttonid" "416483" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "1" + { + "name" "Potion" + "short" "Potion" + "color" "00FF00" + "filter" "" + "weaponid" "223404" + "buttonid" "223406" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "2" + { + "name" "Potion" + "short" "Potion" + "color" "00FF00" + "filter" "" + "weaponid" "408950" + "buttonid" "408613" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "3" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "" + "weaponid" "416910" + "buttonid" "416898" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "" + "weaponid" "402413" + "buttonid" "402415" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "" + "weaponid" "396246" + "buttonid" "396237" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Gust" + "short" "Wind" + "color" "00FFFF" + "filter" "" + "weaponid" "389965" + "buttonid" "389967" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Gust" + "short" "Wind" + "color" "00FFFF" + "filter" "" + "weaponid" "223415" + "buttonid" "223417" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "8" + { + "name" "Bicycle" + "short" "Bicycle" + "color" "FFFFFF" + "filter" "" + "weaponid" "227514" + "buttonid" "1716406" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Pokeball" + "short" "Pokeball" + "color" "FF0000" + "filter" "" + "weaponid" "223332" + "buttonid" "223327" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_ponchermonkey_shooter_v3_5.cfg b/entWatch4/configs/entwatch/ze_ponchermonkey_shooter_v3_5.cfg new file mode 100644 index 00000000..bd2c2479 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ponchermonkey_shooter_v3_5.cfg @@ -0,0 +1,188 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire Tank" + "short" "Fire" + "color" "BB0000" + "filter" "Player_Fire" + "weaponid" "1888395" + "buttonid" "1888375" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Boulder Tank" + "short" "Boulder" + "color" "09BE00" + "filter" "Player_Boulder" + "weaponid" "1887681" + "buttonid" "1887666" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Gravity Tank" + "short" "Gravity" + "color" "FFFFFF" + "filter" "Player_Gravity" + "weaponid" "1888167" + "buttonid" "1888169" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Wind Tank" + "short" "Wind" + "color" "00D8D5" + "filter" "Player_Wind" + "weaponid" "1896647" + "buttonid" "1896644" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Ice Tank" + "short" "Ice" + "color" "21FFFC" + "filter" "Player_Ice" + "weaponid" "1887420" + "buttonid" "1887417" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Ammo Tank" + "short" "Ammo" + "color" "9FF781" + "filter" "Player_Ammo" + "weaponid" "1886236" + "buttonid" "1886238" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Lightning Tank" + "short" "Lightning" + "color" "FFFF00" + "filter" "Player_Lighting" + "weaponid" "1887871" + "buttonid" "1887873" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Sub Tank" + "short" "Sub" + "color" "0072FF" + "filter" "Player_Heal" + "weaponid" "1887621" + "buttonid" "1887612" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + + // Human - Misc + "8" + { + "name" "SlamJam" + "short" "SlamJam" + "color" "FF0000" + "filter" "Player_BasketBall" + "weaponid" "3031499" + "buttonid" "3031496" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "9" + { + "name" "WaterMelon" + "short" "WaterMelon" + "color" "FFFF00" + "filter" "Player_WaterMelon" + "weaponid" "2407098" + "buttonid" "2407100" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + + // Zombie - Items + "10" + { + "name" "Heal" + "short" "Heal" + "color" "8A15FF" + "filter" "Player_zheal" + "weaponid" "1886515" + "buttonid" "1886510" + "triggerid" "1886517" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "11" + { + "name" "Invisibility" + "short" "Invisibility" + "color" "FFFFFF" + "filter" "Player_zinv" + "weaponid" "1886797" + "buttonid" "1886722" + "triggerid" "1886799" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } +} diff --git a/entWatch4/configs/entwatch/ze_portal_story_v3_2.cfg b/entWatch4/configs/entwatch/ze_portal_story_v3_2.cfg new file mode 100644 index 00000000..f9034978 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_portal_story_v3_2.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Portal Pistol" + "short" "Portal" + "color" "A4DEB2" + "filter" "" + "weaponid" "144878" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Repulsion Gel" + "short" "Repulsion" + "color" "009CFF" + "filter" "rep_carrier" + "weaponid" "165507" + "buttonid" "165439" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Propulsion Gel" + "short" "Propulsion" + "color" "FF8A00" + "filter" "prop_carrier" + "weaponid" "166172" + "buttonid" "166104" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } +} diff --git a/entWatch4/configs/entwatch/ze_potc_iv_v6_1.cfg b/entWatch4/configs/entwatch/ze_potc_iv_v6_1.cfg new file mode 100644 index 00000000..38430714 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_potc_iv_v6_1.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Jack's Pistol" + "short" "Jack's Pistol" + "color" "FF8C00" + "filter" "" + "weaponid" "187114" + "buttonid" "187121" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Light" + "short" "Light" + "color" "DD6625" + "filter" "" + "weaponid" "187198" + "buttonid" "187207" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Chalices" + "short" "Gravity" + "color" "C68967" + "filter" "" + "weaponid" "133279" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_potc_v3_4fix.cfg b/entWatch4/configs/entwatch/ze_potc_v3_4fix.cfg new file mode 100644 index 00000000..0b8c5b1d --- /dev/null +++ b/entWatch4/configs/entwatch/ze_potc_v3_4fix.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Jack's Pistol" + "short" "Jack's Pistol" + "color" "FF8C00" + "filter" "" + "weaponid" "432113" + "buttonid" "521709" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_predator_ultimate_v3.cfg b/entWatch4/configs/entwatch/ze_predator_ultimate_v3.cfg new file mode 100644 index 00000000..d232021f --- /dev/null +++ b/entWatch4/configs/entwatch/ze_predator_ultimate_v3.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Alien Sample" + "short" "Sample" + "color" "0040FF" + "filter" "" + "weaponid" "3756719" + "buttonid" "3756650" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Alien Device" + "short" "Device" + "color" "0040FF" + "filter" "" + "weaponid" "3756906" + "buttonid" "3756903" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Pushgun" + "short" "Push" + "color" "0040FF" + "filter" "" + "weaponid" "3757199" + "buttonid" "3757206" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "15" + } + "3" + { + "name" "Gaussrifle" + "short" "Gauss" + "color" "0040FF" + "filter" "" + "weaponid" "3756496" + "buttonid" "3756493" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "100" + } + "4" + { + "name" "Ammo Dispenser" + "short" "Ammo" + "color" "0040FF" + "filter" "" + "weaponid" "3756390" + "buttonid" "3756318" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + "5" + { + "name" "Claymore Mines" + "short" "Claymore" + "color" "0040FF" + "filter" "" + "weaponid" "3778224" + "buttonid" "3778214" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "10" + "cooldown" "0" + } + "6" + { + "name" "Grenade Launcher" + "short" "Grenade" + "color" "0040FF" + "filter" "" + "weaponid" "3778071" + "buttonid" "3778077" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "15" + "cooldown" "1" + } + "7" + { + "name" "Impulsor" + "short" "Impulsor" + "color" "0040FF" + "filter" "" + "weaponid" "3821404" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "0040FF" + "filter" "" + "weaponid" "3756763" + "buttonid" "3756752" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Minigun" + "short" "Minigun" + "color" "0040FF" + "filter" "" + "weaponid" "3756571" + "buttonid" "3756566" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Misc + "10" + { + "name" "First Aid" + "short" "First Aid" + "color" "0040FF" + "filter" "" + "weaponid" "10000" + "buttonid" "10001" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_ravenholm_v04.cfg b/entWatch4/configs/entwatch/ze_ravenholm_v04.cfg new file mode 100644 index 00000000..5f178d58 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ravenholm_v04.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Crowbar" + "short" "Crowbar" + "color" "DB6323" + "filter" "crowbar_holder" + "weaponid" "4799" + "buttonid" "4785" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } +} diff --git a/entWatch4/configs/entwatch/ze_rizomata_s1_3.cfg b/entWatch4/configs/entwatch/ze_rizomata_s1_3.cfg new file mode 100644 index 00000000..9a8e50f4 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_rizomata_s1_3.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "" + "weaponid" "2169221" + "buttonid" "2169223" + "triggerid" "2167458" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "" + "weaponid" "2170630" + "buttonid" "2170632" + "triggerid" "2167476" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Water" + "short" "Water" + "color" "0000FF" + "filter" "" + "weaponid" "2171387" + "buttonid" "2171391" + "triggerid" "2167494" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "3" + { + "name" "Water" + "short" "Water" + "color" "0000FF" + "filter" "" + "weaponid" "2171364" + "buttonid" "2171368" + "triggerid" "2167485" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "4" + { + "name" "Wind" + "short" "Wind" + "color" "00FF00" + "filter" "" + "weaponid" "2173488" + "buttonid" "2173494" + "triggerid" "2167667" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "5" + { + "name" "Wind" + "short" "Wind" + "color" "00FF00" + "filter" "" + "weaponid" "2173532" + "buttonid" "2173540" + "triggerid" "2167691" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "6" + { + "name" "Earth" + "short" "Earth" + "color" "774C10" + "filter" "" + "weaponid" "2174229" + "buttonid" "2174231" + "triggerid" "2167464" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "7" + { + "name" "Earth" + "short" "Earth" + "color" "774C10" + "filter" "" + "weaponid" "2174216" + "buttonid" "2174222" + "triggerid" "2167479" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + + // Zombie - Items + "8" + { + "name" "Haste" + "short" "Haste" + "color" "FF0000" + "filter" "" + "weaponid" "2173053" + "buttonid" "0" + "triggerid" "2167697" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Curse" + "short" "Curse" + "color" "FF0000" + "filter" "" + "weaponid" "2173055" + "buttonid" "0" + "triggerid" "2167700" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Death" + "short" "Death" + "color" "FF0000" + "filter" "" + "weaponid" "2173187" + "buttonid" "0" + "triggerid" "2167703" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_rtcw_ominous_rumors_v1.cfg b/entWatch4/configs/entwatch/ze_rtcw_ominous_rumors_v1.cfg new file mode 100644 index 00000000..f49148cb --- /dev/null +++ b/entWatch4/configs/entwatch/ze_rtcw_ominous_rumors_v1.cfg @@ -0,0 +1,199 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Unlimited Ammo" + "short" "Ammo" + "color" "6E4E14" + "filter" "gunzman" + "weaponid" "259909" + "buttonid" "259903" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "1" + { + "name" "Unlimited Ammo" + "short" "Ammo" + "color" "6E4E14" + "filter" "gunzman" + "weaponid" "530161" + "buttonid" "530166" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Black Magic" + "short" "Heal" + "color" "000000" + "filter" "medic" + "weaponid" "290794" + "buttonid" "290796" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "3" + { + "name" "Black Magic" + "short" "Heal" + "color" "000000" + "filter" "medic" + "weaponid" "531545" + "buttonid" "531542" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "4" + { + "name" "Black Magic" + "short" "Heal" + "color" "000000" + "filter" "medic" + "weaponid" "102127" + "buttonid" "101994" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "5" + { + "name" "Sandbag Wall" + "short" "Wall" + "color" "D9AB2B" + "filter" "sandy" + "weaponid" "261088" + "buttonid" "261082" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Sandbag Wall" + "short" "Wall" + "color" "D9AB2B" + "filter" "sandy" + "weaponid" "528441" + "buttonid" "528443" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Sandbag Wall" + "short" "Wall" + "color" "D9AB2B" + "filter" "sandy" + "weaponid" "46771" + "buttonid" "46768" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "8" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "E3172B" + "filter" "flamet" + "weaponid" "278540" + "buttonid" "278535" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "Flamethrower" + "short" "Flamethrower" + "color" "E3172B" + "filter" "flamet" + "weaponid" "529449" + "buttonid" "529454" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Bazooka" + "short" "Bazooka" + "color" "39A2CC" + "filter" "bazman" + "weaponid" "520648" + "buttonid" "520645" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "11" + { + "name" "Bazooka" + "short" "Bazooka" + "color" "39A2CC" + "filter" "bazman" + "weaponid" "86058" + "buttonid" "86069" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "12" + { + "name" "Bazooka" + "short" "Bazooka" + "color" "39A2CC" + "filter" "bazman" + "weaponid" "260834" + "buttonid" "260827" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } +} diff --git a/entWatch4/configs/entwatch/ze_s_a_m_v1_3_css.cfg b/entWatch4/configs/entwatch/ze_s_a_m_v1_3_css.cfg new file mode 100644 index 00000000..b8726d05 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_s_a_m_v1_3_css.cfg @@ -0,0 +1,323 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Earth Magic" + "short" "Earth" + "color" "FE9A2E" + "filter" "player_earth" + "weaponid" "40524" + "buttonid" "40526" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Heal Magic" + "short" "Heal" + "color" "2EFE64" + "filter" "player_heal" + "weaponid" "40229" + "buttonid" "40233" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Lightning Magic" + "short" "Lightning" + "color" "013ADF" + "filter" "player_lightning" + "weaponid" "40373" + "buttonid" "40375" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Gravity Magic" + "short" "Gravity" + "color" "F781F3" + "filter" "player_gravity" + "weaponid" "39240" + "buttonid" "39250" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Tornado Magic" + "short" "Tornado" + "color" "EFFBFB" + "filter" "player_wind" + "weaponid" "39326" + "buttonid" "39330" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Water Magic" + "short" "Water" + "color" "2E9AFE" + "filter" "player_water" + "weaponid" "39928" + "buttonid" "39932" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Ultima Magic" + "short" "Ultima" + "color" "FF00BF" + "filter" "player_ultima" + "weaponid" "40079" + "buttonid" "40083" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" // For nuke countdown + } + "7" + { + "name" "Zero Magic" + "short" "Zero" + "color" "00E43D" + "filter" "player_zero" + "weaponid" "2224473" + "buttonid" "2224464" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "8" + { + "name" "Trace" + "short" "Trace" + "color" "58FA58" + "filter" "player_trace" + "weaponid" "224348" + "buttonid" "224356" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "9" + { + "name" "Ominous Thing" + "short" "Ominous" + "color" "FE9A2E" + "filter" "" + "weaponid" "1163512" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Teleport Crystal" + "short" "Tp Crystal" + "color" "2E9AFE" + "filter" "" + "weaponid" "1117642" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "11" + { + "name" "Crystal" + "short" "Crystal" + "color" "2E9AFE" + "filter" "" + "weaponid" "1708704" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Kirito" + "short" "Kirito" + "color" "BB0000" + "filter" "" + "weaponid" "1190131" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "13" + { + "name" "Asuna" + "short" "Asuna" + "color" "BB0000" + "filter" "" + "weaponid" "2381250" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "Shino" + "short" "Shino" + "color" "BB0000" + "filter" "" + "weaponid" "3108351" + "buttonid" "0" + "triggerid" "3108131" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Humans Models - Trigger + "15" + { + "name" "Kirito 1" + "triggerid" "2073442" + } + "16" + { + "name" "Kirito 2" + "triggerid" "1320951" + } + "17" + { + "name" "Kirito 3" + "triggerid" "2530081" + } + "18" + { + "name" "Asuna 1" + "triggerid" "2381365" + } + "19" + { + "name" "Asuna 2" + "triggerid" "2431205" + } + "20" + { + "name" "Asuna 3" + "triggerid" "2530011" + } + + // Zombie - Items + "21" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "FE2E9A" + "filter" "player_zgravity" + "weaponid" "38951" + "buttonid" "38958" + "triggerid" "38953" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "22" + { + "name" "[ZM] Ice" + "short" "[ZM] Ice" + "color" "2ECCFA" + "filter" "player_zice" + "weaponid" "39030" + "buttonid" "39032" + "triggerid" "39104" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "23" + { + "name" "[ZM] Stealth" + "short" "[ZM] Stealth" + "color" "F7FE2E" + "filter" "player_zstealth" + "weaponid" "555550" + "buttonid" "555560" + "triggerid" "555547" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "24" + { + "name" "[ZM] Shield" + "short" "[ZM] Shield" + "color" "2EFEF7" + "filter" "player_zshield" + "weaponid" "640041" + "buttonid" "640051" + "triggerid" "640038" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } +} diff --git a/entWatch4/configs/entwatch/ze_sandstorm_f1.cfg b/entWatch4/configs/entwatch/ze_sandstorm_f1.cfg new file mode 100644 index 00000000..5e8e12b2 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sandstorm_f1.cfg @@ -0,0 +1,141 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Tornado Staff" + "short" "Tornado" + "color" "04B404" + "filter" "tornado_player" + "weaponid" "9898652" + "buttonid" "9898715" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Fire Staff" + "short" "Fire" + "color" "FF0000" + "filter" "fire_player" + "weaponid" "9928378" + "buttonid" "9928380" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Heal Staff" + "short" "Heal" + "color" "7FFFD4" + "filter" "heal_player" + "weaponid" "10044639" + "buttonid" "10044636" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Quicksand Staff" + "short" "Quicksand" + "color" "9ACD32" + "filter" "freeze_player" + "weaponid" "9972336" + "buttonid" "9972329" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Earth Staff" + "short" "Earth" + "color" "D2691E" + "filter" "earth_player" + "weaponid" "9957676" + "buttonid" "9957851" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Sandstorm Staff" + "short" "Sandstorm" + "color" "FFFF00" + "filter" "sandstorm_player" + "weaponid" "10421592" + "buttonid" "10421516" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "15" + } + + // Zombie - Items + "6" + { + "name" "[ZM] Dark" + "short" "[ZM] Dark" + "color" "A020F0" + "filter" "zdark_zm_player" + "weaponid" "10831741" + "buttonid" "10831845" + "triggerid" "10847924" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "[ZM] Fire" + "short" "[ZM] Fire" + "color" "FF4500" + "filter" "zfirez_zm_player" + "weaponid" "10912707" + "buttonid" "10913314" + "triggerid" "10912750" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "8" + { + "name" "[ZM] Antlion" + "short" "[ZM] Antlion" + "color" "228B22" + "filter" "antlion_player" + "weaponid" "10753189" + "buttonid" "0" + "triggerid" "10753417" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_santassination_css2.cfg b/entWatch4/configs/entwatch/ze_santassination_css2.cfg new file mode 100644 index 00000000..a75aec98 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_santassination_css2.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Speeder" + "short" "Speeder" + "color" "0040FF" + "filter" "item_speeder" + "weaponid" "2078800" + "buttonid" "2078724" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "7" + } + "1" + { + "name" "Herder" + "short" "Herder" + "color" "0040FF" + "filter" "item_herder" + "weaponid" "1847126" + "buttonid" "1847050" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "2" + { + "name" "Healing Shitbox" + "short" "Healing Shitbox" + "color" "0040FF" + "filter" "item_medkit" + "weaponid" "1983722" + "buttonid" "1983646" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "3" + { + "name" "Rocket Cannon" + "short" "Rocket Cannon" + "color" "0040FF" + "filter" "item_rocket" + "weaponid" "183120" + "buttonid" "183115" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "8" + } + "4" + { + "name" "Beam Cannon" + "short" "Beam Cannon" + "color" "0040FF" + "filter" "item_laser" + "weaponid" "183400" + "buttonid" "183392" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "1" + } + "5" + { + "name" "Mini Cannon" + "short" "Mini Cannon" + "color" "0040FF" + "filter" "item_minigun" + "weaponid" "183633" + "buttonid" "183625" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_serpentis_temple_v1_1.cfg b/entWatch4/configs/entwatch/ze_serpentis_temple_v1_1.cfg new file mode 100644 index 00000000..ede5197e --- /dev/null +++ b/entWatch4/configs/entwatch/ze_serpentis_temple_v1_1.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Poison Snake" + "short" "Poison" + "color" "09BE00" + "filter" "player_poison" + "weaponid" "247161" + "buttonid" "251273" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Heal Snake" + "short" "Heal" + "color" "FFFFFF" + "filter" "player_heal" + "weaponid" "442004" + "buttonid" "442008" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Fire Snake" + "short" "Fire" + "color" "BB0000" + "filter" "player_fire" + "weaponid" "883204" + "buttonid" "883212" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "3" + { + "name" "Torch" + "short" "Torch" + "color" "FF8000" + "filter" "" + "weaponid" "2297999" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Artefact" + "short" "Artefact" + "color" "FF8000" + "filter" "" + "weaponid" "2724776" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_sg1_missions_v2_1.cfg b/entWatch4/configs/entwatch/ze_sg1_missions_v2_1.cfg new file mode 100644 index 00000000..1784f783 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sg1_missions_v2_1.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "C4" + "short" "C4" + "color" "FF8C00" + "filter" "" + "weaponid" "2919" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Tablet" + "short" "Tablet" + "color" "FFFF00" + "filter" "" + "weaponid" "3159" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Rd" + "short" "Rd" + "color" "FF8C00" + "filter" "" + "weaponid" "434470" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Zat" + "short" "Zat" + "color" "32CD32" + "filter" "" + "weaponid" "435000" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_shaurma_v3_b06.cfg b/entWatch4/configs/entwatch/ze_shaurma_v3_b06.cfg new file mode 100644 index 00000000..cbdf4eab --- /dev/null +++ b/entWatch4/configs/entwatch/ze_shaurma_v3_b06.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Shaurma (Heal)" + "short" "Heal" + "color" "DCDCDC" + "filter" "" + "weaponid" "303879" + "buttonid" "307771" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Vanya's Rifle" + "short" "Rifle" + "color" "DAA520" + "filter" "" + "weaponid" "1060459" + "buttonid" "1060456" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Dmitriy's Flame Thrower" + "short" "Flame" + "color" "C61D1D" + "filter" "" + "weaponid" "1066588" + "buttonid" "1066590" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_shroomforest2_v1.cfg b/entWatch4/configs/entwatch/ze_shroomforest2_v1.cfg new file mode 100644 index 00000000..4b30277a --- /dev/null +++ b/entWatch4/configs/entwatch/ze_shroomforest2_v1.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire" + "short" "Fire" + "color" "BB0000" + "filter" "Player_Fire" + "weaponid" "1217" + "buttonid" "1218" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Earth" + "short" "Earth" + "color" "09BE00" + "filter" "Player_Earth" + "weaponid" "1225" + "buttonid" "1227" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "2" + { + "name" "Gravity" + "short" "Gravity" + "color" "111111" + "filter" "Player_Gravity" + "weaponid" "1248" + "buttonid" "1249" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "3" + { + "name" "Wind" + "short" "Wind" + "color" "00D8D5" + "filter" "Player_Wind" + "weaponid" "1252" + "buttonid" "1253" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "Player_Heal" + "weaponid" "1262" + "buttonid" "1260" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "5" + { + "name" "Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "Player_Mines" + "weaponid" "502867" + "buttonid" "502874" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "6" + "cooldown" "4" + } + "6" + { + "name" "Ice" + "short" "Ice" + "color" "21FFFC" + "filter" "Player_Ice" + "weaponid" "1296" + "buttonid" "1298" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Ammo" + "short" "Ammo" + "color" "9FF781" + "filter" "Player_Ammo" + "weaponid" "1152835" + "buttonid" "1152691" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "8" + { + "name" "Water" + "short" "Water" + "color" "0080FF" + "filter" "Player_Water" + "weaponid" "1716483" + "buttonid" "1716406" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Zombie - Items + "9" + { + "name" "Shroom" + "short" "Shroom" + "color" "00FF00" + "filter" "Player_Zombie_Item" + "weaponid" "1682837" + "buttonid" "1682832" + "triggerid" "1682839" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "10" + { + "name" "Cloud" + "short" "Cloud" + "color" "00FF00" + "filter" "Player_Zombie_Cloud" + "weaponid" "1670353" + "buttonid" "1670262" + "triggerid" "1670350" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } +} diff --git a/entWatch4/configs/entwatch/ze_shroomforest3_b6_2.cfg b/entWatch4/configs/entwatch/ze_shroomforest3_b6_2.cfg new file mode 100644 index 00000000..4cc21904 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_shroomforest3_b6_2.cfg @@ -0,0 +1,308 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire" + "short" "Fire" + "color" "BB0000" + "filter" "Player_Fire" + "weaponid" "576060" + "buttonid" "575849" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Earth" + "short" "Earth" + "color" "09BE00" + "filter" "Player_Earth" + "weaponid" "383013" + "buttonid" "383091" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "2" + { + "name" "Gravity" + "short" "Gravity" + "color" "111111" + "filter" "Player_Gravity" + "weaponid" "462970" + "buttonid" "462828" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "3" + { + "name" "Wind" + "short" "Wind" + "color" "00D8D5" + "filter" "Player_Wind" + "weaponid" "464086" + "buttonid" "464011" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "Player_Heal" + "weaponid" "465019" + "buttonid" "464939" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "5" + { + "name" "Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "Player_Mines" + "weaponid" "464836" + "buttonid" "464805" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "6" + "cooldown" "4" + } + "6" + { + "name" "Ice" + "short" "Ice" + "color" "21FFFC" + "filter" "Player_Ice" + "weaponid" "464343" + "buttonid" "464263" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Ammo" + "short" "Ammo" + "color" "9FF781" + "filter" "Player_Ammo" + "weaponid" "465605" + "buttonid" "465461" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "8" + { + "name" "Water" + "short" "Water" + "color" "0080FF" + "filter" "Player_Water" + "weaponid" "461179" + "buttonid" "461024" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "9" + { + "name" "Electro" + "short" "Electro" + "color" "FFFF00" + "filter" "Player_Electro" + "weaponid" "780400" + "buttonid" "780385" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "10" + { + "name" "Bulbasaur" + "short" "Bulbasaur" + "color" "00FF00" + "filter" "Player_Bulbasaur" + "weaponid" "785303" + "buttonid" "785305" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "11" + { + "name" "Charmander" + "short" "Charmander" + "color" "FF8000" + "filter" "Player_Charmander" + "weaponid" "785338" + "buttonid" "785340" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "12" + { + "name" "Pikachu" + "short" "Pikachu" + "color" "FFFF00" + "filter" "Player_Pikachu" + "weaponid" "785371" + "buttonid" "785373" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "13" + { + "name" "Squirtle" + "short" "Squirtle" + "color" "0080FF" + "filter" "Player_Squirtle" + "weaponid" "785268" + "buttonid" "785270" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "14" + { + "name" "Ditto" + "short" "Ditto" + "color" "FF46A3" + "filter" "Player_Ditto" + "weaponid" "785397" + "buttonid" "785399" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "15" + { + "name" "Shiny Pikachu" + "short" "Shiny Pikachu" + "color" "FF8000" + "filter" "" + "weaponid" "2096294" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Misc + "16" + { + "name" "Key" + "short" "Key" + "color" "808000" + "filter" "" + "weaponid" "466021" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "17" + { + "name" "Pokeball" + "short" "Pokeball" + "color" "FF0000" + "filter" "Player_Pokeball" + "weaponid" "2096304" + "buttonid" "2096309" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "5" + } + "18" + { + "name" "Masterball" + "short" "Masterball" + "color" "FF8A15" + "filter" "Player_Masterball" + "weaponid" "2096328" + "buttonid" "2096333" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Items + "19" + { + "name" "Ghastly" + "short" "Ghastly" + "color" "8A15FF" + "filter" "Player_Ghastly" + "weaponid" "785430" + "buttonid" "785432" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } +} diff --git a/entWatch4/configs/entwatch/ze_shroomforest_v4_5.cfg b/entWatch4/configs/entwatch/ze_shroomforest_v4_5.cfg new file mode 100644 index 00000000..c0a21eb3 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_shroomforest_v4_5.cfg @@ -0,0 +1,171 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Fire" + "short" "Fire" + "color" "BB0000" + "filter" "Player_Fire" + "weaponid" "1373783" + "buttonid" "1373572" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Earth" + "short" "Earth" + "color" "09BE00" + "filter" "Player_Earth" + "weaponid" "1360492" + "buttonid" "1360410" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "2" + { + "name" "Gravity" + "short" "Gravity" + "color" "111111" + "filter" "Player_Gravity" + "weaponid" "1376195" + "buttonid" "1376053" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "3" + { + "name" "Wind" + "short" "Wind" + "color" "00D8D5" + "filter" "Player_Wind" + "weaponid" "1377266" + "buttonid" "1377191" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FF0000" + "filter" "Player_Heal" + "weaponid" "1357854" + "buttonid" "1357777" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "5" + { + "name" "Mines" + "short" "Mines" + "color" "2F2F2F" + "filter" "Player_Mines" + "weaponid" "1358170" + "buttonid" "1358139" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "6" + "cooldown" "4" + } + "6" + { + "name" "Ice" + "short" "Ice" + "color" "21FFFC" + "filter" "Player_Ice" + "weaponid" "1377927" + "buttonid" "1377847" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Ammo" + "short" "Ammo" + "color" "9FF781" + "filter" "Player_Ammo" + "weaponid" "1042444" + "buttonid" "1042429" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "45" + } + "8" + { + "name" "Ultimate Weapon" + "short" "Ultimate" + "color" "120061" + "filter" "Player_Ultima" + "weaponid" "731073" + "buttonid" "731143" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Humans - Misc + "9" + { + "name" "Key" + "short" "Key" + "color" "BEBEBE" + "filter" "" + "weaponid" "1361177" + "buttonid" "" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "Gear Mechanism" + "short" "Gear" + "color" "BEBEBE" + "filter" "" + "weaponid" "1961291" + "buttonid" "" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_sit_caelum_paradisus_b7s.cfg b/entWatch4/configs/entwatch/ze_sit_caelum_paradisus_b7s.cfg new file mode 100644 index 00000000..bfbad49e --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sit_caelum_paradisus_b7s.cfg @@ -0,0 +1,126 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ignis" + "short" "Fire" + "color" "FF6549" + "filter" "igniter" + "weaponid" "3385377" + "buttonid" "3385367" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Terra" + "short" "Earth" + "color" "FFCF68" + "filter" "terraman" + "weaponid" "3384759" + "buttonid" "3384775" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "80" + } + "2" + { + "name" "Ventus" + "short" "Wind" + "color" "25FCC3" + "filter" "ventuser" + "weaponid" "3385038" + "buttonid" "3385026" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "3" + { + "name" "Sanatio" + "short" "HealAmmo" + "color" "C4FAFF" + "filter" "sanatioman" + "weaponid" "3385288" + "buttonid" "3385285" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "4" + { + "name" "ServerMan" + "short" "ServerMan" + "color" "2060AD" + "filter" "" + "weaponid" "3385007" + "buttonid" "0" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "5" + { + "name" "[ZM] Gracies" + "short" "[ZM] Gracies" + "color" "FF0000" + "filter" "gracieser" + "weaponid" "3497457" + "buttonid" "3497536" + "triggerid" "3497524" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "6" + { + "name" "[ZM] Ignis" + "short" "[ZM] Fire" + "color" "FF6549" + "filter" "igniterzm1" + "weaponid" "3496625" + "buttonid" "3496627" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "7" + { + "name" "[ZM] Ignis" + "short" "[ZM] Fire" + "color" "FF6549" + "filter" "igniterzm2" + "weaponid" "3496546" + "buttonid" "3496548" + "triggerid" "0" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_sky_athletic_adv_v9_12s.cfg b/entWatch4/configs/entwatch/ze_sky_athletic_adv_v9_12s.cfg new file mode 100644 index 00000000..23bb76b6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sky_athletic_adv_v9_12s.cfg @@ -0,0 +1,141 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Small Health Light" + "short" "Small Health Light" + "color" "FFFFFF" + "filter" "filter_item_smallheal" + "weaponid" "451782" + "buttonid" "451784" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "1" + { + "name" "Cloud Father" + "short" "Cloud Father" + "color" "FFFFFF" + "filter" "helper_cloud" + "weaponid" "411688" + "buttonid" "411756" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } + "2" + { + "name" "Burning Light" + "short" "Burning Light" + "color" "FF0000" + "filter" "filter_item_burning" + "weaponid" "19643" + "buttonid" "18497" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "35" + } + "3" + { + "name" "Push Light" + "short" "Push Light" + "color" "00FFFF" + "filter" "filter_item_push" + "weaponid" "20852" + "buttonid" "20854" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "40" + } + "4" + { + "name" "Cold Light" + "short" "Cold Light" + "color" "0000FF" + "filter" "filter_item_cold" + "weaponid" "44618" + "buttonid" "44620" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "5" + { + "name" "Big Health Light" + "short" "Big Health Light" + "color" "FFFFFF" + "filter" "filter_item_bigheal" + "weaponid" "81400" + "buttonid" "81402" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + + // Zombie - Item + "6" + { + "name" "Kamikaze Zombie" + "short" "Kamikaze Zombie" + "color" "008000" + "filter" "filter_item_kamikazel" + "weaponid" "254662" + "buttonid" "254989" + "triggerid" "254664" + "display" "7" + "slot" "3" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "7" + { + "name" "Push Zombie" + "short" "Push Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "252204" + "buttonid" "" + "triggerid" "252208" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Hurt Zombie" + "short" "Hurt Zombie" + "color" "FFFFFF" + "filter" "" + "weaponid" "250161" + "buttonid" "" + "triggerid" "250191" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_slender_escape_b4.cfg b/entWatch4/configs/entwatch/ze_slender_escape_b4.cfg new file mode 100644 index 00000000..f1eda973 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_slender_escape_b4.cfg @@ -0,0 +1,141 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Glow Stick" + "short" "Glow Stick" + "color" "3EFF3E" + "filter" "" + "weaponid" "6394" + "buttonid" "6396" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "15" + } + "1" + { + "name" "Flash Light" + "short" "Flash Light" + "color" "FFD700" + "filter" "" + "weaponid" "5250" + "buttonid" "5236" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Lantern" + "short" "Lantern" + "color" "FFD700" + "filter" "user_lantern" + "weaponid" "5681" + "buttonid" "5678" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "42" + } + "3" + { + "name" "Fuel" + "short" "Fuel" + "color" "F8F8FF" + "filter" "" + "weaponid" "129822" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Monkey Bomb" + "short" "Monkey" + "color" "BC8F8F" + "filter" "" + "weaponid" "779005" + "buttonid" "779007" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "5" + { + "name" "Barrel" + "short" "Barrel" + "color" "F8F8FF" + "filter" "" + "weaponid" "61593" + "buttonid" "0" + "triggerid" "61587" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "6" + { + "name" "Spider" + "short" "Spider" + "color" "FFFFFF" + "filter" "" + "weaponid" "738270" + "buttonid" "0" + "triggerid" "738267" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Slender Zombie" + "short" "Slender Zombie" + "color" "FF4040" + "filter" "" + "weaponid" "54062" + "buttonid" "0" + "triggerid" "54064" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "8" + { + "name" "Barrel Boss" + "short" "Barrel Boss" + "color" "FF4040" + "filter" "" + "weaponid" "347178" + "buttonid" "0" + "triggerid" "347180" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_stalker_ultimate_v2_3.cfg b/entWatch4/configs/entwatch/ze_stalker_ultimate_v2_3.cfg new file mode 100644 index 00000000..09882288 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_stalker_ultimate_v2_3.cfg @@ -0,0 +1,111 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Meat Chunk" + "short" "Meat Chunk" + "color" "B8860B" + "filter" "meatchunk_owner" + "weaponid" "371452" + "buttonid" "371454" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Fire Ball" + "short" "Fire Ball" + "color" "800000" + "filter" "fireball_owner" + "weaponid" "371607" + "buttonid" "371604" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Piece of Flesh" + "short" "Piece of Flesh" + "color" "CBCBCB" + "filter" "meatchunk2_owner" + "weaponid" "445548" + "buttonid" "445545" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "3" + { + "name" "Flash" + "short" "Flash" + "color" "00FFFF" + "filter" "flash_owner" + "weaponid" "550582" + "buttonid" "550514" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Night Star" + "short" "Night Star" + "color" "FFD700" + "filter" "nightstar_owner" + "weaponid" "1124387" + "buttonid" "1124389" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "5" + { + "name" "Spike Ball" + "short" "Spike Ball" + "color" "0814FF" + "filter" "urchen_owner" + "weaponid" "1137584" + "buttonid" "1137448" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + + // Human - Misc + "6" + { + "name" "Documents" + "short" "Documents" + "color" "F5F5F5" + "filter" "documents_man" + "weaponid" "763380" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_stalker_ultimate_v3.cfg b/entWatch4/configs/entwatch/ze_stalker_ultimate_v3.cfg new file mode 100644 index 00000000..1e2fc1c7 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_stalker_ultimate_v3.cfg @@ -0,0 +1,155 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Piece of Flesh" + "short" "Flesh" + "color" "CBCBCB" + "filter" "meatchunk2_owner" + "weaponid" "445548" + "buttonid" "445545" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "1" + { + "name" "Flash" + "short" "Flash" + "color" "00FFFF" + "filter" "flash_owner" + "weaponid" "550582" + "buttonid" "550514" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "2" + { + "name" "Spike Ball" + "short" "Spike Ball" + "color" "0814FF" + "filter" "urchen_owner" + "weaponid" "1137584" + "buttonid" "1137448" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "3" + { + "name" "Night Star" + "short" "Night Star" + "color" "FFD700" + "filter" "nightstar_owner" + "weaponid" "1124387" + "buttonid" "1124389" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "4" + { + "name" "Fire Ball" + "short" "Fire Ball" + "color" "800000" + "filter" "fireball_owner" + "weaponid" "371607" + "buttonid" "371604" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Meat Chunk" + "short" "Meat Chunk" + "color" "B8860B" + "filter" "meatchunk_owner" + "weaponid" "371452" + "buttonid" "371454" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "6" + { + "name" "Documents" + "short" "Documents" + "color" "F5F5F5" + "filter" "documents_man" + "weaponid" "763380" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "7" + { + "name" "Prototype N62" + "short" "Gauss" + "color" "F5F5F5" + "filter" "Gauss_Owner" + "weaponid" "2702409" + "buttonid" "2702414" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "4" + "cooldown" "5" + } + // Zombies - Items + "8" + { + "name" "Bloodsucker" + "short" "Bloodsucker" + "color" "B69B73" + "filter" "bloodsucker" + "weaponid" "2582104" + "buttonid" "2582151" + "triggerid" "2582106" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "55" + } + "9" + { + "name" "Controller" + "short" "Controller" + "color" "CCAA77" + "filter" "ZM_Controller" + "weaponid" "2673527" + "buttonid" "2673521" + "triggerid" "2673524" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "15" + } +} diff --git a/entWatch4/configs/entwatch/ze_starwars_v2fix.cfg b/entWatch4/configs/entwatch/ze_starwars_v2fix.cfg new file mode 100644 index 00000000..f1b219dc --- /dev/null +++ b/entWatch4/configs/entwatch/ze_starwars_v2fix.cfg @@ -0,0 +1,94 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Force Heal" + "short" "Heal" + "color" "FFFF00" + "filter" "Player_Jedi_Heal" + "weaponid" "2466" + "buttonid" "1997" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Force Push" + "short" "Push" + "color" "04B404" + "filter" "Player_Jedi_Push" + "weaponid" "2464" + "buttonid" "2397" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Force Grip" + "short" "Grip" + "color" "ADD8E6" + "filter" "Player_Jedi_Slowdown" + "weaponid" "2468" + "buttonid" "2015" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Force Lightning" + "short" "Lightning" + "color" "0000A0" + "filter" "Player_Jedi_Electro" + "weaponid" "2469" + "buttonid" "2022" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Force Speed" + "short" "Speed" + "color" "FFA500" + "filter" "Player_Jedi_Speed" + "weaponid" "2467" + "buttonid" "2029" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Force Rage" + "short" "Rage" + "color" "FFFFFF" + "filter" "Player_Jedi_Rage" + "weaponid" "2465" + "buttonid" "2008" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } +} diff --git a/entWatch4/configs/entwatch/ze_sunkentemple_v3_1s.cfg b/entWatch4/configs/entwatch/ze_sunkentemple_v3_1s.cfg new file mode 100644 index 00000000..c5a08f3c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sunkentemple_v3_1s.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Push" + "short" "Push" + "color" "22FF88" + "filter" "11" + "weaponid" "772831" + "buttonid" "772833" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "33" + "weaponid" "772920" + "buttonid" "772922" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Wall" + "short" "Wall" + "color" "32CD32" + "filter" "22" + "weaponid" "772763" + "buttonid" "772768" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } +} diff --git a/entWatch4/configs/entwatch/ze_sunlight_v2_0.cfg b/entWatch4/configs/entwatch/ze_sunlight_v2_0.cfg new file mode 100644 index 00000000..186dfe44 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_sunlight_v2_0.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Sacrificial Orb" + "short" "Sacrificial Orb" + "color" "E31612" + "filter" "sacrificeuser" + "weaponid" "473242" + "buttonid" "473259" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Eye of the Storm" + "short" "Eye of the Storm" + "color" "1C6BEB" + "filter" "winduser" + "weaponid" "473267" + "buttonid" "473281" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "2" + { + "name" "Melon Launcher" + "short" "Melon Launcher" + "color" "18ED2A" + "filter" "melonuser" + "weaponid" "473301" + "buttonid" "473303" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "3" + { + "name" "Orange Launcher" + "short" "Orange Launcher" + "color" "E3A112" + "filter" "orangeuser" + "weaponid" "473321" + "buttonid" "473323" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } +} diff --git a/entWatch4/configs/entwatch/ze_super_mario_64_v2_b9.cfg b/entWatch4/configs/entwatch/ze_super_mario_64_v2_b9.cfg new file mode 100644 index 00000000..c657fadc --- /dev/null +++ b/entWatch4/configs/entwatch/ze_super_mario_64_v2_b9.cfg @@ -0,0 +1,96 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Toad" + "short" "Toad" + "color" "F3FF0F" + "filter" "" + "weaponid" "394209" + "buttonid" "0" + "triggerid" "400490" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Mario" + "short" "Mario" + "color" "BB0000" + "filter" "" + "weaponid" "394361" + "buttonid" "0" + "triggerid" "1090240" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Yoshi" + "short" "Yoshi" + "color" "00BB00" + "filter" "" + "weaponid" "388811" + "buttonid" "0" + "triggerid" "389247" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Bomb" + "short" "Bomb" + "color" "0F0C23" + "filter" "" + "weaponid" "527813" + "buttonid" "0" + "triggerid" "2336373" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Peach" + "short" "Peach" + "color" "0F0C23" + "filter" "" + "weaponid" "2533150" + "buttonid" "0" + "triggerid" "2533248" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "5" + { + "name" "Bowser" + "short" "Bowser" + "color" "0F0C23" + "filter" "" + "weaponid" "2419015" + "buttonid" "0" + "triggerid" "2419029" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_surf_vortex_v1_9s.cfg b/entWatch4/configs/entwatch/ze_surf_vortex_v1_9s.cfg new file mode 100644 index 00000000..e150399b --- /dev/null +++ b/entWatch4/configs/entwatch/ze_surf_vortex_v1_9s.cfg @@ -0,0 +1,49 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Gravity" + "short" "Gravity" + "color" "FF00FF" + "filter" "" + "weaponid" "65739" + "buttonid" "65736" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "1" + { + "name" "Low Health" + "short" "Low" + "color" "00FFFF" + "filter" "player_filter_low" + "weaponid" "142912" + "buttonid" "142914" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "2" + { + "name" "Ultimate" + "short" "Ultimate" + "color" "00FF00" + "filter" "" + "weaponid" "167533" + "buttonid" "167550" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "5" + } +} diff --git a/entWatch4/configs/entwatch/ze_temple_raider_b4.cfg b/entWatch4/configs/entwatch/ze_temple_raider_b4.cfg new file mode 100644 index 00000000..aa2f5da6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_temple_raider_b4.cfg @@ -0,0 +1,19 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Health Kit" + "short" "Heal" + "color" "E2EE2D" + "filter" "Player_Gun_Heal" + "weaponid" "1880330" + "buttonid" "1880262" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } +} diff --git a/entWatch4/configs/entwatch/ze_tesv_skyrim_v4fix.cfg b/entWatch4/configs/entwatch/ze_tesv_skyrim_v4fix.cfg new file mode 100644 index 00000000..9d4500e6 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_tesv_skyrim_v4fix.cfg @@ -0,0 +1,233 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Nightingale" + "short" "Nightingale" + "color" "191919" + "filter" "" + "weaponid" "7919" + "buttonid" "0" + "triggerid" "6672" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Healmage" + "short" "Healmage" + "color" "FFFFFF" + "filter" "" + "weaponid" "6176" + "buttonid" "0" + "triggerid" "6664" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Dovahkiin" + "short" "Dovahkiin" + "color" "00D8D5" + "filter" "" + "weaponid" "6158" + "buttonid" "0" + "triggerid" "6660" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "3" + { + "name" "Archmage" + "short" "Archmage" + "color" "BB0000" + "filter" "" + "weaponid" "6272" + "buttonid" "0" + "triggerid" "6698" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "4" + { + "name" "Deadric" + "short" "Deadric" + "color" "120061" + "filter" "" + "weaponid" "6137" + "buttonid" "0" + "triggerid" "6655" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Human - Misc + "5" + { + "name" "Freeze Staff" + "short" "Freeze" + "color" "21FFFC" + "filter" "staff" + "weaponid" "5734" + "buttonid" "5738" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "10" + } + "6" + { + "name" "Heal Staff" + "short" "Heal" + "color" "FFFFFF" + "filter" "" + "weaponid" "5076" + "buttonid" "5077" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "2" + "cooldown" "20" + } + "7" + { + "name" "The Elder Scroll" + "short" "Elder Scroll" + "color" "120061" + "filter" "" + "weaponid" "5902" + "buttonid" "5903" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "8" + { + "name" "The Elder Scroll" + "short" "Elder Scroll" + "color" "120061" + "filter" "" + "weaponid" "5086" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "9" + { + "name" "The Torch" + "short" "Torch" + "color" "120061" + "filter" "" + "weaponid" "1766903" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "10" + { + "name" "The Lever" + "short" "Lever" + "color" "120061" + "filter" "" + "weaponid" "1768303" + "buttonid" "0" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "11" + { + "name" "Werewolf" + "short" "Werewolf" + "color" "B40404" + "filter" "" + "weaponid" "1551382" + "buttonid" "0" + "triggerid" "6667" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Troll" + "short" "Troll" + "color" "B40404" + "filter" "" + "weaponid" "1551093" + "buttonid" "0" + "triggerid" "6670" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Giant" + "short" "Giant" + "color" "B40404" + "filter" "" + "weaponid" "1551122" + "buttonid" "0" + "triggerid" "6674" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "12" + { + "name" "Dragonpriest" + "short" "Dragonpriest" + "color" "B40404" + "filter" "" + "weaponid" "1551162" + "buttonid" "0" + "triggerid" "6766" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_tilex_ultimate_v2_14s.cfg b/entWatch4/configs/entwatch/ze_tilex_ultimate_v2_14s.cfg new file mode 100644 index 00000000..a778604b --- /dev/null +++ b/entWatch4/configs/entwatch/ze_tilex_ultimate_v2_14s.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "healer1" + "weaponid" "374229" + "buttonid" "374231" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "healer2" + "weaponid" "928679" + "buttonid" "928681" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "2" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "healer3" + "weaponid" "375991" + "buttonid" "375993" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "3" + { + "name" "Abyss" + "short" "Abyss" + "color" "9524D6" + "filter" "habysser" + "weaponid" "375836" + "buttonid" "375838" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "30" + } +} diff --git a/entWatch4/configs/entwatch/ze_timesplitters_v1_2.cfg b/entWatch4/configs/entwatch/ze_timesplitters_v1_2.cfg new file mode 100644 index 00000000..d5cc6a9a --- /dev/null +++ b/entWatch4/configs/entwatch/ze_timesplitters_v1_2.cfg @@ -0,0 +1,66 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Viola" + "short" "Viola" + "color" "F9429E" + "filter" "" + "weaponid" "8670" + "buttonid" "0" + "triggerid" "8734" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Cortez" + "short" "Cortez" + "color" "FF0000" + "filter" "" + "weaponid" "9252" + "buttonid" "0" + "triggerid" "9247" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "2" + { + "name" "Borg" + "short" "Borg" + "color" "DAB30A" + "filter" "" + "weaponid" "40476" + "buttonid" "0" + "triggerid" "40469" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + + // Zombie - Items + "3" + { + "name" "Scorg" + "short" "Scorg" + "color" "00D8D5" + "filter" "" + "weaponid" "41099" + "buttonid" "0" + "triggerid" "41105" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_toaster_v1_2.cfg b/entWatch4/configs/entwatch/ze_toaster_v1_2.cfg new file mode 100644 index 00000000..9c31af1c --- /dev/null +++ b/entWatch4/configs/entwatch/ze_toaster_v1_2.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Toaster" + "short" "Toaster" + "color" "664A15" + "filter" "" + "weaponid" "204268" + "buttonid" "204265" + "triggerid" "0" + "display" "5" + "slot" "2" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "1" + { + "name" "Peanut Butter" + "short" "Peanut Butter" + "color" "A37621" + "filter" "" + "weaponid" "204361" + "buttonid" "204358" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "4" + } + "2" + { + "name" "Sour Milk" + "short" "Sour Milk" + "color" "EDECE8" + "filter" "" + "weaponid" "204444" + "buttonid" "204441" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "6" + } + "3" + { + "name" "A Jalapeno" + "short" "A Jalapeno" + "color" "F23722" + "filter" "" + "weaponid" "204527" + "buttonid" "204524" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } + "4" + { + "name" "A Metal Ass" + "short" "A Metal Ass" + "color" "125E73" + "filter" "" + "weaponid" "204615" + "buttonid" "204612" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "10" + } +} diff --git a/entWatch4/configs/entwatch/ze_trials_v1fs.cfg b/entWatch4/configs/entwatch/ze_trials_v1fs.cfg new file mode 100644 index 00000000..052c20fa --- /dev/null +++ b/entWatch4/configs/entwatch/ze_trials_v1fs.cfg @@ -0,0 +1,64 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Wall" + "short" "Wall" + "color" "2A2A2A" + "filter" "" + "weaponid" "40294" + "buttonid" "40291" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "1" + { + "name" "Heal" + "short" "Heal" + "color" "0072FF" + "filter" "" + "weaponid" "245145" + "buttonid" "245216" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "50" + } + "2" + { + "name" "Wand" + "short" "Wand" + "color" "FF0000" + "filter" "" + "weaponid" "160150" + "buttonid" "160217" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Mapper Logo" + "short" "Mapper Logo" + "color" "B22222" + "filter" "" + "weaponid" "141223" + "buttonid" "0" + "triggerid" "141302" + "display" "7" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } +} diff --git a/entWatch4/configs/entwatch/ze_tyranny_v5fix.cfg b/entWatch4/configs/entwatch/ze_tyranny_v5fix.cfg new file mode 100644 index 00000000..117be895 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_tyranny_v5fix.cfg @@ -0,0 +1,246 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFF00" + "filter" "player_ammo" + "weaponid" "565799" + "buttonid" "565646" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "1" + { + "name" "Killer" + "short" "Killer" + "color" "CC22CC" + "filter" "player_killer" + "weaponid" "565801" + "buttonid" "565789" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "3" + "maxuses" "1" + "cooldown" "20" + } + "2" + { + "name" "Hedge" + "short" "Hedge" + "color" "32CD32" + "filter" "player_hedge" + "weaponid" "565893" + "buttonid" "565895" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Push" + "short" "Push" + "color" "22FF88" + "filter" "player_push" + "weaponid" "566048" + "buttonid" "566050" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "4" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "player_heal" + "weaponid" "566342" + "buttonid" "566271" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "5" + { + "name" "Gravity" + "short" "Gravity" + "color" "2A2A2A" + "filter" "player_gravity" + "weaponid" "2289102" + "buttonid" "566639" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "6" + { + "name" "Fire" + "short" "Fire" + "color" "CC0000" + "filter" "player_fire" + "weaponid" "566646" + "buttonid" "566560" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "7" + { + "name" "Ice" + "short" "Ice" + "color" "0000FF" + "filter" "player_ice" + "weaponid" "566648" + "buttonid" "566417" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "8" + { + "name" "Lightning" + "short" "Lightning" + "color" "0072FF" + "filter" "player_lightning" + "weaponid" "566650" + "buttonid" "566118" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + + // Zombie - Items + "9" + { + "name" "[ZM] Killer" + "short" "[ZM] Killer" + "color" "BB4433" + "filter" "player_zkiller" + "weaponid" "566669" + "buttonid" "566804" + "triggerid" "566671" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "120" + } + "10" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "FF7777" + "filter" "player_zheal" + "weaponid" "566812" + "buttonid" "566947" + "triggerid" "566814" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } + "11" + { + "name" "[ZM] Fire" + "short" "[ZM] Fire" + "color" "FF4400" + "filter" "player_zfire" + "weaponid" "567096" + "buttonid" "566961" + "triggerid" "567098" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "12" + { + "name" "[ZM] Drug" + "short" "[ZM] Drug" + "color" "0011BB" + "filter" "player_zdrag" + "weaponid" "567263" + "buttonid" "567398" + "triggerid" "567265" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "13" + { + "name" "[ZM] Invisible" + "short" "[ZM] Invisible" + "color" "FFBB00" + "filter" "player_zinv" + "weaponid" "567408" + "buttonid" "567478" + "triggerid" "567410" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "14" + { + "name" "[ZM] Poison" + "short" "[ZM] Poison" + "color" "00DD00" + "filter" "player_zpoison" + "weaponid" "567548" + "buttonid" "567478" + "triggerid" "567550" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } + "15" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "FF0066" + "filter" "player_zgravity" + "weaponid" "567631" + "buttonid" "567192" + "triggerid" "567628" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "90" + } +} diff --git a/entWatch4/configs/entwatch/ze_ut2004_convoy_v2_2_1.cfg b/entWatch4/configs/entwatch/ze_ut2004_convoy_v2_2_1.cfg new file mode 100644 index 00000000..107705bb --- /dev/null +++ b/entWatch4/configs/entwatch/ze_ut2004_convoy_v2_2_1.cfg @@ -0,0 +1,79 @@ +"items" +{ + // Humans - Items + "0" + { + "name" "Lighting Rifle" + "short" "Lighting" + "color" "2BC5D9" + "filter" "lighting_gun_carrier" + "weaponid" "372999" + "buttonid" "370268" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "150" + } + "1" + { + "name" "Rocket Launcher" + "short" "Rocket" + "color" "B81C1C" + "filter" "rocket_launcher_carrier" + "weaponid" "381922" + "buttonid" "711588" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "7" + } + "2" + { + "name" "Redeemer" + "short" "Redeemer" + "color" "FFFFFF" + "filter" "redeemer_carrier" + "weaponid" "633375" + "buttonid" "682853" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "3" + { + "name" "Berserk Combo" + "short" "Berserk" + "color" "EEF51D" + "filter" "berserk_combo_carrier" + "weaponid" "388191" + "buttonid" "391431" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "2" + "maxuses" "1" + "cooldown" "0" + } + "4" + { + "name" "Flak Cannon" + "short" "Flak" + "color" "F5A00C" + "filter" "flak_cannon_carrier" + "weaponid" "381190" + "buttonid" "381283" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "4" + } +} diff --git a/entWatch4/configs/entwatch/ze_v0u0v_a6.cfg b/entWatch4/configs/entwatch/ze_v0u0v_a6.cfg new file mode 100644 index 00000000..9939da86 --- /dev/null +++ b/entWatch4/configs/entwatch/ze_v0u0v_a6.cfg @@ -0,0 +1,231 @@ +"items" +{ + // Human - Items + "0" + { + "name" "Heal" + "short" "Heal" + "color" "FFFFFF" + "filter" "player_heal" + "weaponid" "1735230" + "buttonid" "1735227" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "1" + { + "name" "Ammo" + "short" "Ammo" + "color" "FFFC2C" + "filter" "player_ammo" + "weaponid" "1735305" + "buttonid" "1735307" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "2" + { + "name" "Push" + "short" "Push" + "color" "F31EFE" + "filter" "player_wind" + "weaponid" "1736111" + "buttonid" "1736113" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "60" + } + "3" + { + "name" "Rainbow Beam" + "short" "Beam" + "color" "FEF21E" + "filter" "player_beam" + "weaponid" "1737085" + "buttonid" "1736949" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "65" + } + "4" + { + "name" "Slower Sphere" + "short" "Slow" + "color" "1EFE59" + "filter" "player_poison" + "weaponid" "1737542" + "buttonid" "1737539" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "70" + } + "5" + { + "name" "Fire Toilet" + "short" "Fire" + "color" "FE1E1E" + "filter" "player_firet" + "weaponid" "1942370" + "buttonid" "1942296" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "6" + { + "name" "Ice Toilet" + "short" "Ice" + "color" "1EC2FE" + "filter" "player_icet" + "weaponid" "1942452" + "buttonid" "1942447" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "7" + { + "name" "Electric Toilet" + "short" "Electro" + "color" "FEF61E" + "filter" "player_elect" + "weaponid" "1942595" + "buttonid" "1942599" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "8" + { + "name" "Gravity Toilet" + "short" "Gravity" + "color" "6B6B6B" + "filter" "player_gravityt" + "weaponid" "1942760" + "buttonid" "1942755" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "9" + { + "name" "Earth Toilet" + "short" "Earth" + "color" "91452C" + "filter" "player_eartht" + "weaponid" "1942840" + "buttonid" "1942837" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "10" + { + "name" "Water Toilet" + "short" "Water" + "color" "002A73" + "filter" "player_watert" + "weaponid" "1942983" + "buttonid" "1942913" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "11" + { + "name" "Wind Toilet" + "short" "Wind" + "color" "D9FAF6" + "filter" "player_pusht" + "weaponid" "1943132" + "buttonid" "1943127" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + "12" + { + "name" "Poison Toilet" + "short" "Poison" + "color" "D9FAF6" + "filter" "player_poisont" + "weaponid" "1942680" + "buttonid" "1942675" + "triggerid" "0" + "display" "7" + "slot" "2" + "mode" "1" + "maxuses" "0" + "cooldown" "75" + } + + // Zombie - Items + "13" + { + "name" "[ZM] Gravity" + "short" "[ZM] Gravity" + "color" "FF0000" + "filter" "player_zgravity" + "weaponid" "1736441" + "buttonid" "1736446" + "triggerid" "1736438" + "display" "5" + "slot" "3" + "mode" "0" + "maxuses" "0" + "cooldown" "0" + } + "14" + { + "name" "[ZM] Heal" + "short" "[ZM] Heal" + "color" "FF0000" + "filter" "player_zheal" + "weaponid" "1738106" + "buttonid" "1737971" + "triggerid" "1738108" + "display" "7" + "slot" "3" + "mode" "1" + "maxuses" "0" + "cooldown" "20" + } +} diff --git a/entWatch4/scripting/classes/CConfig.inc b/entWatch4/scripting/classes/CConfig.inc new file mode 100644 index 00000000..3f32d6f5 --- /dev/null +++ b/entWatch4/scripting/classes/CConfig.inc @@ -0,0 +1,209 @@ +#if defined entWatch_class_config_included + #endinput +#endif + +#define entWatch_class_config_included + +methodmap CConfig < Basic +{ + public CConfig() + { + Basic myclass = new Basic(); + + myclass.SetString("sName", ""); + myclass.SetString("sShort", ""); + myclass.SetString("sColor", ""); + myclass.SetString("sFilter", ""); + + myclass.SetInt("iButtonID", 0); + myclass.SetInt("iConfigID", 0); + myclass.SetInt("iWeaponID", 0); + myclass.SetInt("iTriggerID", 0); + + myclass.SetInt("iDisplay", 0); + myclass.SetInt("iSlot", 0); + myclass.SetInt("iMode", 0); + + myclass.SetInt("iMaxUses", 0); + myclass.SetInt("iCooldown", 0); + + return view_as(myclass); + } + + + public bool GetName(char[] buffer, int length) + { + return this.GetString("sName", buffer, length); + } + + public void SetName(const char[] buffer) + { + this.SetString("sName", buffer); + } + + public bool GetShort(char[] buffer, int length) + { + return this.GetString("sShort", buffer, length); + } + + public void SetShort(const char[] buffer) + { + this.SetString("sShort", buffer); + } + + public bool GetColor(char[] buffer, int length) + { + return this.GetString("sColor", buffer, length); + } + + public void SetColor(const char[] buffer) + { + this.SetString("sColor", buffer); + } + + public bool GetFilter(char[] buffer, int length) + { + return this.GetString("sFilter", buffer, length); + } + + public void SetFilter(const char[] buffer) + { + this.SetString("sFilter", buffer); + } + + + property int iButtonID + { + public get() + { + return this.GetInt("iButtonID"); + } + public set(int value) + { + this.SetInt("iButtonID", value); + } + } + + property int iConfigID + { + public get() + { + return this.GetInt("iConfigID"); + } + public set(int value) + { + this.SetInt("iConfigID", value); + } + } + + property int iWeaponID + { + public get() + { + return this.GetInt("iWeaponID"); + } + public set(int value) + { + this.SetInt("iWeaponID", value); + } + } + + property int iTriggerID + { + public get() + { + return this.GetInt("iTriggerID"); + } + public set(int value) + { + this.SetInt("iTriggerID", value); + } + } + + + property int iDisplay + { + public get() + { + return this.GetInt("iDisplay"); + } + public set(int value) + { + this.SetInt("iDisplay", value); + } + } + + property int iSlot + { + public get() + { + return this.GetInt("iSlot"); + } + public set(int value) + { + this.SetInt("iSlot", value); + } + } + + property int iMode + { + public get() + { + return this.GetInt("iMode"); + } + public set(int value) + { + this.SetInt("iMode", value); + } + } + + + property int iMaxUses + { + public get() + { + return this.GetInt("iMaxUses"); + } + public set(int value) + { + this.SetInt("iMaxUses", value); + } + } + + property int iCooldown + { + public get() + { + return this.GetInt("iCooldown"); + } + public set(int value) + { + this.SetInt("iCooldown", value); + } + } + + + property bool bDisplayEventMessages + { + public get() + { + return view_as(this.iDisplay & (1<<0)); + } + } + + property bool bDisplayActivateMessages + { + public get() + { + return view_as(this.iDisplay & (1<<1)); + } + } + + property bool bDisplayInterface + { + public get() + { + return view_as(this.iDisplay & (1<<2)); + } + } +} diff --git a/entWatch4/scripting/classes/CItem.inc b/entWatch4/scripting/classes/CItem.inc new file mode 100644 index 00000000..7c2413e8 --- /dev/null +++ b/entWatch4/scripting/classes/CItem.inc @@ -0,0 +1,159 @@ +#if defined entWatch_class_item_included + #endinput +#endif + +#define entWatch_class_item_included + +methodmap CItem < Basic +{ + public CItem(CConfig value = view_as(INVALID_HANDLE)) + { + Basic myclass = new Basic(); + + myclass.SetHandle("dConfig", value); + + myclass.SetInt("iClient", INVALID_ENT_REFERENCE); + myclass.SetInt("iButton", INVALID_ENT_REFERENCE); + myclass.SetInt("iWeapon", INVALID_ENT_REFERENCE); + myclass.SetInt("iTrigger", INVALID_ENT_REFERENCE); + + myclass.SetInt("iTimesUsed", 0); + myclass.SetInt("iTimeReady", 0); + + myclass.SetFloat("flWait", 0.0); + + return view_as(myclass); + } + + + property CConfig dConfig + { + public get() + { + return view_as(this.GetHandle("dConfig")); + } + public set(CConfig value) + { + this.SetHandle("dConfig", value); + } + } + + + property int iClient + { + public get() + { + return this.GetInt("iClient"); + } + public set(int value) + { + this.SetInt("iClient", value); + } + } + + property int iButton + { + public get() + { + return this.GetInt("iButton"); + } + public set(int value) + { + this.SetInt("iButton", value); + } + } + + property int iWeapon + { + public get() + { + return this.GetInt("iWeapon"); + } + public set(int value) + { + this.SetInt("iWeapon", value); + } + } + + property int iTrigger + { + public get() + { + return this.GetInt("iTrigger"); + } + public set(int value) + { + this.SetInt("iTrigger", value); + } + } + + + property int iTimesUsed + { + public get() + { + return this.GetInt("iTimesUsed"); + } + public set(int value) + { + this.SetInt("iTimesUsed", value); + } + } + + property int iTimeReady + { + public get() + { + return this.GetInt("iTimeReady"); + } + public set(int value) + { + this.SetInt("iTimeReady", value); + } + } + + property float flWait + { + public get() + { + return this.GetFloat("flWait"); + } + public set(float value) + { + this.SetFloat("flWait", value); + } + } + + + property bool bClient + { + public get() + { + return view_as(this.iClient != INVALID_ENT_REFERENCE); + } + } + + property bool bButton + { + public get() + { + return view_as(this.iButton != INVALID_ENT_REFERENCE); + } + } + + property bool bWeapon + { + public get() + { + return view_as(this.iWeapon != INVALID_ENT_REFERENCE); + } + } + + property bool bTrigger + { + public get() + { + return view_as(this.iTrigger != INVALID_ENT_REFERENCE); + } + } +} diff --git a/_entWatch4/scripting/entWatch-core.sp b/entWatch4/scripting/entWatch-core.sp similarity index 53% rename from _entWatch4/scripting/entWatch-core.sp rename to entWatch4/scripting/entWatch-core.sp index f677298e..d1ec0262 100644 --- a/_entWatch4/scripting/entWatch-core.sp +++ b/entWatch4/scripting/entWatch-core.sp @@ -5,21 +5,25 @@ // Description: Handle the core functions of [entWatch] // //==================================================================================================== -#include +#include #pragma newdecls required #include #include #include -#include +#include +#include /* BOOLS */ bool g_bLate; +bool g_bLoaded; +bool g_bLoadPending; +bool g_bIntermission; /* ARRAYS */ ArrayList g_hArray_Items; -ArrayList g_hArray_Config; +ArrayList g_hArray_Configs; /* FORWARDS */ Handle g_hFwd_OnClientItemDrop; @@ -51,8 +55,7 @@ public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int erro g_bLate = bLate; CreateNative("EW_GetItemCount", Native_GetItemCount); - CreateNative("EW_GetItemArray", Native_GetItemArray); - CreateNative("EW_SetItemArray", Native_SetItemArray); + CreateNative("EW_GetItemData", Native_GetItemData); RegPluginLibrary("entWatch-core"); return APLRes_Success; @@ -63,20 +66,23 @@ public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int erro //---------------------------------------------------------------------------------------------------- public void OnPluginStart() { - g_hFwd_OnClientItemDrop = CreateGlobalForward("EW_OnClientItemDrop", ET_Ignore, Param_Array, Param_Cell, Param_Cell); - g_hFwd_OnClientItemDeath = CreateGlobalForward("EW_OnClientItemDeath", ET_Ignore, Param_Array, Param_Cell, Param_Cell); - g_hFwd_OnClientItemPickup = CreateGlobalForward("EW_OnClientItemPickup", ET_Ignore, Param_Array, Param_Cell, Param_Cell); - g_hFwd_OnClientItemActivate = CreateGlobalForward("EW_OnClientItemActivate", ET_Ignore, Param_Array, Param_Cell, Param_Cell); - g_hFwd_OnClientItemDisconnect = CreateGlobalForward("EW_OnClientItemDisconnect", ET_Ignore, Param_Array, Param_Cell, Param_Cell); + g_hFwd_OnClientItemDrop = CreateGlobalForward("EW_OnClientItemDrop", ET_Ignore, Param_Cell, Param_Cell); + g_hFwd_OnClientItemDeath = CreateGlobalForward("EW_OnClientItemDeath", ET_Ignore, Param_Cell, Param_Cell); + g_hFwd_OnClientItemPickup = CreateGlobalForward("EW_OnClientItemPickup", ET_Ignore, Param_Cell, Param_Cell); + g_hFwd_OnClientItemActivate = CreateGlobalForward("EW_OnClientItemActivate", ET_Ignore, Param_Cell, Param_Cell); + g_hFwd_OnClientItemDisconnect = CreateGlobalForward("EW_OnClientItemDisconnect", ET_Ignore, Param_Cell, Param_Cell); - g_hFwd_OnClientItemCanPickup = CreateGlobalForward("EW_OnClientItemCanPickup", ET_Hook, Param_Array, Param_Cell, Param_Cell); - g_hFwd_OnClientItemCanActivate = CreateGlobalForward("EW_OnClientItemCanActivate", ET_Hook, Param_Array, Param_Cell, Param_Cell); + g_hFwd_OnClientItemCanPickup = CreateGlobalForward("EW_OnClientItemCanPickup", ET_Hook, Param_Cell, Param_Cell); + g_hFwd_OnClientItemCanActivate = CreateGlobalForward("EW_OnClientItemCanActivate", ET_Hook, Param_Cell, Param_Cell); - g_hArray_Items = new ArrayList(512); - g_hArray_Config = new ArrayList(512); + g_hArray_Items = new ArrayList(); + g_hArray_Configs = new ArrayList(); + + RegAdminCmd("sm_ereload", Command_ReloadConfig, ADMFLAG_BAN); HookEvent("player_death", OnClientDeath); HookEvent("round_start", OnRoundStart); + HookEvent("round_end", OnRoundEnd); if (g_bLate) { @@ -92,13 +98,60 @@ public void OnPluginStart() } } +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ReloadConfig(int client, int args) +{ + if (g_bLoaded) + { + g_bLoadPending = !g_bLoadPending; + + if (g_bLoadPending) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sConfig load pending, loading at roundstart.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sPending config load cancelled!", "E01B5D", "F16767"); + return Plugin_Handled; + } + } + else + { + g_bLoaded = LoadConfig(); + + if (g_bLoaded) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sConfig load successfull.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sConfig load failed!", "E01B5D", "F16767"); + return Plugin_Handled; + } + } +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnMapStart() +{ + g_bLoaded = LoadConfig(); + + g_bLoadPending = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool LoadConfig() { g_hArray_Items.Clear(); - g_hArray_Config.Clear(); + g_hArray_Configs.Clear(); char sCurrentMap[128]; GetCurrentMap(sCurrentMap, sizeof(sCurrentMap)); @@ -119,7 +172,7 @@ public void OnMapStart() LogMessage("Unable to load config \"%s\"!", sFilePathOverride); delete hConfig; - return; + return false; } else LogMessage("Loaded config \"%s\"", sFilePathOverride); } @@ -130,36 +183,56 @@ public void OnMapStart() LogMessage("Unable to load config \"%s\"!", sFilePathDefault); delete hConfig; - return; + return false; } else LogMessage("Loaded config \"%s\"", sFilePathDefault); } if (hConfig.GotoFirstSubKey()) { + int iConfigID; + do { - any itemArray[items]; - hConfig.GetString("name", itemArray[item_name], sizeof(itemArray[item_name])); - hConfig.GetString("short", itemArray[item_short], sizeof(itemArray[item_short])); - hConfig.GetString("color", itemArray[item_color], sizeof(itemArray[item_color])); - hConfig.GetString("filter", itemArray[item_filter], sizeof(itemArray[item_filter])); + CConfig config = new CConfig(); - itemArray[item_weaponid] = hConfig.GetNum("weaponid"); - itemArray[item_buttonid] = hConfig.GetNum("buttonid"); - itemArray[item_triggerid] = hConfig.GetNum("triggerid"); - itemArray[item_display] = hConfig.GetNum("display"); - itemArray[item_mode] = hConfig.GetNum("mode"); - itemArray[item_maxuses] = hConfig.GetNum("maxuses"); - itemArray[item_cooldown] = hConfig.GetNum("cooldown"); + char sName[64], sShort[64], sColor[64], sFilter[64]; + hConfig.GetString("name", sName, sizeof(sName)); + hConfig.GetString("short", sShort, sizeof(sShort)); + hConfig.GetString("color", sColor, sizeof(sColor)); + hConfig.GetString("filter", sFilter, sizeof(sFilter)); - g_hArray_Config.PushArray(itemArray, sizeof(itemArray)); + config.SetName(sName); + config.SetShort(sShort); + config.SetColor(sColor); + config.SetFilter(sFilter); + + config.iConfigID = iConfigID++; + config.iWeaponID = hConfig.GetNum("weaponid"); + config.iButtonID = hConfig.GetNum("buttonid"); + config.iTriggerID = hConfig.GetNum("triggerid"); + config.iDisplay = hConfig.GetNum("display"); + config.iSlot = hConfig.GetNum("slot"); + config.iMode = hConfig.GetNum("mode"); + config.iMaxUses = hConfig.GetNum("maxuses"); + config.iCooldown = hConfig.GetNum("cooldown"); + + g_hArray_Configs.Push(config); } while (hConfig.GotoNextKey()); } + if (g_bLate) + { + int entity = INVALID_ENT_REFERENCE; + while ((entity = FindEntityByClassname(entity, "*")) != INVALID_ENT_REFERENCE) + { + OnEntitySpawned(entity); + } + } + delete hConfig; - return; + return true; } //---------------------------------------------------------------------------------------------------- @@ -167,17 +240,29 @@ public void OnMapStart() //---------------------------------------------------------------------------------------------------- public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { - if (g_hArray_Items.Length) + if (g_bLoadPending) { - for (int index; index < g_hArray_Items.Length; index++) - { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + g_bLoaded = LoadConfig(); - if (itemArray[item_owned] && itemArray[item_owner] >= 0) - g_hArray_Items.Erase(index); + if (g_bLoaded) + { + CPrintToChatAll("\x07%s[entWatch] \x07%sPending config load successfull.", "E01B5D", "F16767"); } } + + g_bLoadPending = false; + g_bIntermission = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundEnd(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + if (g_hArray_Items.Length) + g_hArray_Items.Clear(); + + g_bIntermission = true; } //---------------------------------------------------------------------------------------------------- @@ -196,29 +281,55 @@ public void OnEntityCreated(int entity, const char[] sClassname) //---------------------------------------------------------------------------------------------------- public void OnEntitySpawned(int entity) { - if (Entity_IsValid(entity) && g_hArray_Config.Length) + if (Entity_IsValid(entity) && g_hArray_Configs.Length) { - for (int index; index < g_hArray_Items.Length; index++) - { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + int iHammerID = Entity_GetHammerID(entity); - if (RegisterItem(itemArray, entity)) + for (int index; index < g_hArray_Configs.Length; index++) + { + CConfig config = g_hArray_Configs.Get(index); + + if (config.iWeaponID && config.iWeaponID == iHammerID) { - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); - return; + if (!RegisterExistingItem(config, entity, REGISTER_WEAPON)) + { + CItem item = new CItem(config); + + if (RegisterItemEntity(item, entity, REGISTER_WEAPON)) + { + g_hArray_Items.Push(item); + + SortADTArrayCustom(g_hArray_Items, SortItemsArray); + } + } } - } - - for (int index; index < g_hArray_Config.Length; index++) - { - any itemArray[items]; - g_hArray_Config.GetArray(index, itemArray, sizeof(itemArray)); - - if (RegisterItem(itemArray, entity)) + else if (config.iButtonID && config.iButtonID == iHammerID) { - g_hArray_Items.PushArray(itemArray, sizeof(itemArray)); - return; + if (!RegisterExistingItem(config, entity, REGISTER_BUTTON)) + { + CItem item = new CItem(config); + + if (RegisterItemEntity(item, entity, REGISTER_BUTTON)) + { + g_hArray_Items.Push(item); + + SortADTArrayCustom(g_hArray_Items, SortItemsArray); + } + } + } + else if (config.iTriggerID && config.iTriggerID == iHammerID) + { + if (!RegisterExistingItem(config, entity, REGISTER_TRIGGER)) + { + CItem item = new CItem(config); + + if (RegisterItemEntity(item, entity, REGISTER_TRIGGER)) + { + g_hArray_Items.Push(item); + + SortADTArrayCustom(g_hArray_Items, SortItemsArray); + } + } } } } @@ -227,43 +338,73 @@ public void OnEntitySpawned(int entity) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -stock bool RegisterItem(any[] itemArray, int entity) +stock bool RegisterExistingItem(CConfig config, int entity, int type) { - if (Entity_IsValid(entity)) + if (Entity_IsValid(entity) && g_hArray_Items.Length) { - if (itemArray[item_weaponid] && itemArray[item_weaponid] == Entity_GetHammerId(entity)) + for (int index; index < g_hArray_Items.Length; index++) { - if (!itemArray[item_weapon] && (Entity_GetOwner(entity) == INVALID_ENT_REFERENCE)) - { - itemArray[item_weapon] = entity; - return true; - } - } - else if (itemArray[item_buttonid] && itemArray[item_buttonid] == Entity_GetHammerId(entity)) - { - if (!itemArray[item_button] && (Entity_GetParent(entity) == INVALID_ENT_REFERENCE || - (itemArray[item_weapon] && Entity_GetParent(entity) == itemArray[item_weapon]))) - { - SDKHook(entity, SDKHook_Use, OnButtonPress); + CItem item = g_hArray_Items.Get(index); - itemArray[item_button] = entity; - return true; - } - } - else if (itemArray[item_triggerid] && itemArray[item_triggerid] == Entity_GetHammerId(entity)) - { - if (!itemArray[item_trigger] && (Entity_GetParent(entity) == INVALID_ENT_REFERENCE || - (itemArray[item_weapon] && Entity_GetParent(entity) == itemArray[item_weapon]))) + if (item.dConfig == config) { - SDKHook(entity, SDKHook_StartTouch, OnTriggerTouch); - SDKHook(entity, SDKHook_EndTouch, OnTriggerTouch); - SDKHook(entity, SDKHook_Touch, OnTriggerTouch); - - itemArray[item_trigger] = entity; - return true; + if (RegisterItemEntity(item, entity, type)) + return true; } } } + + return false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool RegisterItemEntity(CItem item, int entity, int type) +{ + if (Entity_IsValid(entity)) + { + int iOwner = Entity_GetOwner(entity); + int iParent = Entity_GetParent(entity); + + switch(type) + { + case REGISTER_WEAPON: + { + if (!item.bWeapon && (iOwner == INVALID_ENT_REFERENCE)) + { + item.iWeapon = entity; + + return true; + } + } + case REGISTER_BUTTON: + { + if (!item.bButton && (iParent == INVALID_ENT_REFERENCE || (item.bWeapon && iParent == item.iWeapon))) + { + SDKHook(entity, SDKHook_Use, OnButtonPress); + + item.iButton = entity; + + return true; + } + } + case REGISTER_TRIGGER: + { + if (!item.bTrigger && (iParent == INVALID_ENT_REFERENCE || (item.bWeapon && iParent == item.iWeapon))) + { + SDKHook(entity, SDKHook_StartTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_EndTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_Touch, OnTriggerTouch); + + item.iTrigger = entity; + + return true; + } + } + } + } + return false; } @@ -276,34 +417,45 @@ public void OnEntityDestroyed(int entity) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_weapon] && itemArray[item_weapon] == entity) + if (item.bWeapon && item.iWeapon == entity) { - g_hArray_Items.Erase(index); + item.iClient = INVALID_ENT_REFERENCE; + item.iWeapon = INVALID_ENT_REFERENCE; + return; } - - if (itemArray[item_button] && itemArray[item_button] == entity) + else if (item.bButton && item.iButton == entity) { - itemArray[item_button] = INVALID_ENT_REFERENCE; + item.iButton = INVALID_ENT_REFERENCE; - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return; } - - if (itemArray[item_trigger] && itemArray[item_trigger] == entity) + else if (item.bTrigger && item.iTrigger == entity) { - itemArray[item_trigger] = INVALID_ENT_REFERENCE; + item.iTrigger = INVALID_ENT_REFERENCE; - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return; } } } } +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int SortItemsArray(int index1, int index2, Handle array, Handle hndl) +{ + CConfig config1 = view_as(g_hArray_Items.Get(index1)).dConfig; + CConfig config2 = view_as(g_hArray_Items.Get(index2)).dConfig; + + if (config1.iConfigID < config2.iConfigID) return -1; + if (config1.iConfigID > config2.iConfigID) return 1; + + return 0; +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -326,21 +478,21 @@ public void OnClientDisconnect(int client) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_owned] && itemArray[item_owner] == client) + if (item.bClient && item.iClient == client) { - itemArray[item_owner] = INVALID_ENT_REFERENCE; - itemArray[item_owned] = false; + if (item.bWeapon && !(item.dConfig.iSlot == SLOT_NONE || item.dConfig.iSlot == SLOT_KNIFE)) + { + SDKHooks_DropWeapon(item.iClient, item.iWeapon, NULL_VECTOR, NULL_VECTOR); + } + + item.iClient = INVALID_ENT_REFERENCE; Call_StartForward(g_hFwd_OnClientItemDisconnect); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(); - - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); } } } @@ -357,21 +509,21 @@ public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_owned] && itemArray[item_owner] == client) + if (item.bClient && item.iClient == client) { - itemArray[item_owner] = INVALID_ENT_REFERENCE; - itemArray[item_owned] = false; + if (item.bWeapon && !(item.dConfig.iSlot == SLOT_NONE || item.dConfig.iSlot == SLOT_KNIFE)) + { + SDKHooks_DropWeapon(item.iClient, item.iWeapon, NULL_VECTOR, NULL_VECTOR); + } + + item.iClient = INVALID_ENT_REFERENCE; Call_StartForward(g_hFwd_OnClientItemDeath); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(); - - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); } } } @@ -386,21 +538,17 @@ public Action OnWeaponPickup(int client, int weapon) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_weapon] && itemArray[item_weapon] == weapon) + if (item.bWeapon && item.iWeapon == weapon) { - itemArray[item_owner] = client; - itemArray[item_owned] = true; + item.iClient = client; Call_StartForward(g_hFwd_OnClientItemPickup); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(); - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return; } } @@ -416,21 +564,17 @@ public Action OnWeaponDrop(int client, int weapon) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_weapon] && itemArray[item_weapon] == weapon) + if (item.bWeapon && item.iWeapon == weapon) { - itemArray[item_owner] = INVALID_ENT_REFERENCE; - itemArray[item_owned] = false; + item.iClient = INVALID_ENT_REFERENCE; Call_StartForward(g_hFwd_OnClientItemDrop); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(); - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return; } } @@ -450,81 +594,89 @@ public Action OnButtonPress(int button, int client) for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_button] && itemArray[item_button] == button) + if ((item.bButton && item.iButton == button) && + (item.bClient && item.iClient == client)) { - if (itemArray[item_owned] && itemArray[item_owner] == client) + Action aResult; + Call_StartForward(g_hFwd_OnClientItemCanActivate); + Call_PushCell(client); + Call_PushCell(index); + Call_Finish(aResult); + + switch(aResult) { - Action aResult; - Call_StartForward(g_hFwd_OnClientItemCanActivate); - Call_PushArray(itemArray, sizeof(itemArray)); - Call_PushCell(client); - Call_PushCell(index); - Call_Finish(aResult); - - if ((aResult == Plugin_Continue) || (aResult == Plugin_Changed)) + case Plugin_Continue, Plugin_Changed: { - switch(itemArray[item_mode]) + if (HasEntProp(button, Prop_Data, "m_flWait")) { - case(1): + if (item.flWait < GetEngineTime()) { - if (itemArray[item_nextuse] < RoundToCeil(GetEngineTime())) - { - itemArray[item_nextuse] = RoundToCeil(GetEngineTime()) + itemArray[item_cooldown]; - } - else return Plugin_Handled; + item.flWait = GetEngineTime() + GetEntPropFloat(button, Prop_Data, "m_flWait"); } - case(2): - { - if (itemArray[item_uses] < itemArray[item_maxuses]) - { - itemArray[item_uses]++; - } - else return Plugin_Handled; - } - case(3): - { - if (itemArray[item_nextuse] < RoundToCeil(GetEngineTime()) && itemArray[item_uses] < itemArray[item_maxuses]) - { - itemArray[item_nextuse] = RoundToCeil(GetEngineTime()) + itemArray[item_cooldown]; - itemArray[item_uses]++; - } - else return Plugin_Handled; - } - case(4): - { - if (itemArray[item_nextuse] < RoundToCeil(GetEngineTime())) - { - itemArray[item_uses]++; + else return Plugin_Handled; + } - if (itemArray[item_uses] >= itemArray[item_maxuses]) + switch(item.dConfig.iMode) + { + case MODE_COOLDOWN: + { + if (item.iTimeReady < RoundToCeil(GetEngineTime())) + { + item.iTimeReady = RoundToCeil(GetEngineTime()) + item.dConfig.iCooldown; + } + else return Plugin_Handled; + } + case MODE_MAXUSES: + { + if (item.iTimesUsed < item.dConfig.iMaxUses) + { + item.iTimesUsed++; + } + else return Plugin_Handled; + } + case MODE_COOLDOWNMAXUSES: + { + if (item.iTimeReady < RoundToCeil(GetEngineTime()) && item.iTimesUsed < item.dConfig.iMaxUses) + { + item.iTimeReady = RoundToCeil(GetEngineTime()) + item.dConfig.iCooldown; + item.iTimesUsed++; + } + else return Plugin_Handled; + } + case MODE_COOLDOWNCHARGES: + { + if (item.iTimeReady < RoundToCeil(GetEngineTime())) + { + item.iTimesUsed++; + + if (item.iTimesUsed >= item.dConfig.iMaxUses) { - itemArray[item_nextuse] = RoundToCeil(GetEngineTime()) + itemArray[item_cooldown]; - itemArray[item_uses] = 0; + item.iTimeReady = RoundToCeil(GetEngineTime()) + item.dConfig.iCooldown; + item.iTimesUsed = 0; } } else return Plugin_Handled; } } - if (itemArray[item_filter][0]) - Entity_SetName(client, itemArray[item_filter]); + char sFilter[64]; + if (item.dConfig.GetFilter(sFilter, sizeof(sFilter)) && sFilter[0]) + Entity_SetName(client, sFilter); Call_StartForward(g_hFwd_OnClientItemActivate); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(); } - - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); - return aResult; } + + return aResult; } } } + return Plugin_Handled; } @@ -537,23 +689,24 @@ public Action OnTriggerTouch(int trigger, int client) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_trigger] && itemArray[item_trigger] == trigger) + if (item.bTrigger && item.iTrigger == trigger) { + if (g_bIntermission) + return Plugin_Handled; + Action aResult; Call_StartForward(g_hFwd_OnClientItemCanPickup); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(aResult); - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return aResult; } } } + return Plugin_Handled; } @@ -566,23 +719,24 @@ public Action OnWeaponTouch(int client, int weapon) { for (int index; index < g_hArray_Items.Length; index++) { - any itemArray[items]; - g_hArray_Items.GetArray(index, itemArray, sizeof(itemArray)); + CItem item = g_hArray_Items.Get(index); - if (itemArray[item_weapon] && itemArray[item_weapon] == weapon) + if (item.bWeapon && item.iWeapon == weapon) { + if (g_bIntermission) + return Plugin_Handled; + Action aResult; Call_StartForward(g_hFwd_OnClientItemCanPickup); - Call_PushArray(itemArray, sizeof(itemArray)); Call_PushCell(client); Call_PushCell(index); Call_Finish(aResult); - g_hArray_Items.SetArray(index, itemArray, sizeof(itemArray)); return aResult; } } } + return Plugin_Continue; } @@ -597,29 +751,14 @@ public int Native_GetItemCount(Handle hPlugin, int numParams) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public int Native_GetItemArray(Handle hPlugin, int numParams) +public int Native_GetItemData(Handle hPlugin, int numParams) { - any itemArray[items]; - int index = GetNativeCell(1); - int size = GetNativeCell(3); - g_hArray_Items.GetArray(index, itemArray, size); + if ((index < 0) || (index > g_hArray_Items.Length)) + { + return ThrowNativeError(SP_ERROR_INDEX, "Item index %d is invalid.", index); + } - SetNativeArray(2, itemArray, size); -} - -//---------------------------------------------------------------------------------------------------- -// Purpose: -//---------------------------------------------------------------------------------------------------- -public int Native_SetItemArray(Handle hPlugin, int numParams) -{ - any itemArray[items]; - - int index = GetNativeCell(1); - int size = GetNativeCell(3); - - GetNativeArray(2, itemArray, size); - - g_hArray_Items.SetArray(index, itemArray, size); + return view_as(g_hArray_Items.Get(index)); } \ No newline at end of file diff --git a/entWatch4/scripting/entWatch-interface.sp b/entWatch4/scripting/entWatch-interface.sp new file mode 100644 index 00000000..3d620594 --- /dev/null +++ b/entWatch4/scripting/entWatch-interface.sp @@ -0,0 +1,255 @@ +//==================================================================================================== +// +// Name: [entWatch] Interface +// Author: zaCade & Prometheum +// Description: Handle the interface of [entWatch] +// +//==================================================================================================== +#include + +#pragma newdecls required + +#include +#include +#include +#include + +/* COOKIES */ +Handle g_hCookie_InterfaceHidden; + +/* BOOLEANS */ +bool g_bInterfaceHidden[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "[entWatch] Interface", + author = "zaCade & Prometheum", + description = "Handle the interface of [entWatch]", + version = "4.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + LoadTranslations("entWatch.interface.phrases"); + + g_hCookie_InterfaceHidden = RegClientCookie("EW_InterfaceHidden", "", CookieAccess_Private); + + RegConsoleCmd("sm_hud", Command_ToggleHUD); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + CreateTimer(1.0, OnDisplayHUD, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientCookiesCached(int client) +{ + g_bInterfaceHidden[client] = GetClientCookieBool(client, g_hCookie_InterfaceHidden); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bInterfaceHidden[client] = false; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_ToggleHUD(int client, int args) +{ + g_bInterfaceHidden[client] = !g_bInterfaceHidden[client]; + + if (g_bInterfaceHidden[client]) + { + SetClientCookieBool(client, g_hCookie_InterfaceHidden, true); + + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou will now no longer see the HUD.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else + { + SetClientCookieBool(client, g_hCookie_InterfaceHidden, false); + + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou will now see the HUD again.", "E01B5D", "F16767"); + return Plugin_Handled; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnDisplayHUD(Handle timer) +{ + int iHUDPages[3]; + char sHUDPanels[3][8][255] + + for (int index; index < EW_GetItemCount(); index++) + { + CItem item = EW_GetItemData(index); + + if (item.bClient && item.dConfig.bDisplayInterface) + { + char sShort[32]; + item.dConfig.GetShort(sShort, sizeof(sShort)); + + char sLine[96]; + switch(item.dConfig.iMode) + { + case MODE_COOLDOWN: + { + if (item.iTimeReady > RoundToCeil(GetEngineTime())) + { + Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, item.iTimeReady - RoundToCeil(GetEngineTime()), item.iClient); + } + else + { + Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "R", item.iClient); + } + } + case MODE_MAXUSES: + { + if (item.iTimesUsed < item.dConfig.iMaxUses) + { + Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient); + } + else + { + Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "D", item.iClient); + } + } + case MODE_COOLDOWNMAXUSES: + { + if (item.iTimesUsed < item.dConfig.iMaxUses) + { + if (item.iTimeReady > RoundToCeil(GetEngineTime())) + { + Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, item.iTimeReady - RoundToCeil(GetEngineTime()), item.iClient); + } + else + { + Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient); + } + } + else + { + Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "D", item.iClient); + } + } + case MODE_COOLDOWNCHARGES: + { + if (item.iTimeReady > RoundToCeil(GetEngineTime())) + { + Format(sLine, sizeof(sLine), "%s [%d]: %N", sShort, item.iTimeReady - RoundToCeil(GetEngineTime()), item.iClient); + } + else + { + Format(sLine, sizeof(sLine), "%s [%d/%d]: %N", sShort, item.iTimesUsed, item.dConfig.iMaxUses, item.iClient); + } + } + default: + { + Format(sLine, sizeof(sLine), "%s [%s]: %N", sShort, "N/A", item.iClient); + } + } + + switch(GetClientTeam(item.iClient)) + { + case(2): + { + if (strlen(sHUDPanels[1][iHUDPages[1]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[1]++; + + StrCat(sHUDPanels[1][iHUDPages[1]], sizeof(sHUDPanels[][]), sLine); + StrCat(sHUDPanels[1][iHUDPages[1]], sizeof(sHUDPanels[][]), "\n"); + } + case(3): + { + if (strlen(sHUDPanels[2][iHUDPages[2]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[2]++; + + StrCat(sHUDPanels[2][iHUDPages[2]], sizeof(sHUDPanels[][]), sLine); + StrCat(sHUDPanels[2][iHUDPages[2]], sizeof(sHUDPanels[][]), "\n"); + } + } + + if (strlen(sHUDPanels[0][iHUDPages[0]]) + strlen(sLine) + 2 >= sizeof(sHUDPanels[][])) iHUDPages[0]++; + + StrCat(sHUDPanels[0][iHUDPages[0]], sizeof(sHUDPanels[][]), sLine); + StrCat(sHUDPanels[0][iHUDPages[0]], sizeof(sHUDPanels[][]), "\n"); + } + } + + static int iPageUpdate; + static int iPageCurrent[3]; + + if (iPageUpdate >= 5) + { + for (int iPageID; iPageID < 3; iPageID++) + { + if (iPageCurrent[iPageID] >= iHUDPages[iPageID]) + iPageCurrent[iPageID] = 0; + else + iPageCurrent[iPageID]++; + } + + iPageUpdate = 0; + } + else + iPageUpdate++; + + for (int client = 1; client <= MaxClients; client++) + { + if (!IsClientInGame(client) || IsFakeClient(client) || g_bInterfaceHidden[client]) + continue; + + int iPanelID; + switch(GetClientTeam(client)) + { + case(2): iPanelID = 1; + case(3): iPanelID = 2; + } + + if (sHUDPanels[iPanelID][iPageCurrent[iPanelID]][0]) + { + Handle hMessage = StartMessageOne("KeyHintText", client); + BfWriteByte(hMessage, 1); + BfWriteString(hMessage, sHUDPanels[iPanelID][iPageCurrent[iPanelID]]); + EndMessage(); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetClientCookieBool(int client, Handle hCookie, bool value) +{ + char sValue[32]; + IntToString(view_as(value), sValue, sizeof(sValue)); + + SetClientCookie(client, hCookie, sValue); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool GetClientCookieBool(int client, Handle hCookie) +{ + char sValue[32]; + GetClientCookie(client, hCookie, sValue, sizeof(sValue)); + + return view_as(StringToInt(sValue)); +} \ No newline at end of file diff --git a/entWatch4/scripting/entWatch-messages.sp b/entWatch4/scripting/entWatch-messages.sp new file mode 100644 index 00000000..e6323a56 --- /dev/null +++ b/entWatch4/scripting/entWatch-messages.sp @@ -0,0 +1,175 @@ +//==================================================================================================== +// +// Name: [entWatch] Messages +// Author: zaCade & Prometheum +// Description: Handle the chat messages of [entWatch] +// +//==================================================================================================== +#include + +#pragma newdecls required + +#include +#include +#include + +#define MESSAGEFORMAT "\x07%s[entWatch] \x07%s%s \x07%s(\x07%s%s\x07%s) %t \x07%6s%s" + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "[entWatch] Messages", + author = "zaCade & Prometheum", + description = "Handle the chat messages of [entWatch]", + version = "4.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + LoadTranslations("entWatch.messages.phrases"); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDrop(int client, int index) +{ + CItem item = EW_GetItemData(index); + + if (item.dConfig.bDisplayEventMessages) + { + SetGlobalTransTarget(LANG_SERVER); + + char sClientName[32]; + GetClientName(client, sClientName, sizeof(sClientName)); + + char sClientAuth[32]; + GetClientAuthId(client, AuthId_Steam2, sClientAuth, sizeof(sClientAuth)); + + char sItemName[32]; + item.dConfig.GetName(sItemName, sizeof(sItemName)); + + char sItemColor[6]; + item.dConfig.GetColor(sItemColor, sizeof(sItemColor)); + + CRemoveTags(sClientName, sizeof(sClientName)); + CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sClientName, "E562BA", "B2B2B2", sClientAuth, "E562BA", "Item Drop", sItemColor, sItemName); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDeath(int client, int index) +{ + CItem item = EW_GetItemData(index); + + if (item.dConfig.bDisplayEventMessages) + { + SetGlobalTransTarget(LANG_SERVER); + + char sClientName[32]; + GetClientName(client, sClientName, sizeof(sClientName)); + + char sClientAuth[32]; + GetClientAuthId(client, AuthId_Steam2, sClientAuth, sizeof(sClientAuth)); + + char sItemName[32]; + item.dConfig.GetName(sItemName, sizeof(sItemName)); + + char sItemColor[6]; + item.dConfig.GetColor(sItemColor, sizeof(sItemColor)); + + CRemoveTags(sClientName, sizeof(sClientName)); + CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sClientName, "F1B567", "B2B2B2", sClientAuth, "F1B567", "Item Death", sItemColor, sItemName); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemPickup(int client, int index) +{ + CItem item = EW_GetItemData(index); + + if (item.dConfig.bDisplayEventMessages) + { + SetGlobalTransTarget(LANG_SERVER); + + char sClientName[32]; + GetClientName(client, sClientName, sizeof(sClientName)); + + char sClientAuth[32]; + GetClientAuthId(client, AuthId_Steam2, sClientAuth, sizeof(sClientAuth)); + + char sItemName[32]; + item.dConfig.GetName(sItemName, sizeof(sItemName)); + + char sItemColor[6]; + item.dConfig.GetColor(sItemColor, sizeof(sItemColor)); + + CRemoveTags(sClientName, sizeof(sClientName)); + CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sClientName, "C9EF66", "B2B2B2", sClientAuth, "C9EF66", "Item Pickup", sItemColor, sItemName); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemDisconnect(int client, int index) +{ + CItem item = EW_GetItemData(index); + + if (item.dConfig.bDisplayEventMessages) + { + SetGlobalTransTarget(LANG_SERVER); + + char sClientName[32]; + GetClientName(client, sClientName, sizeof(sClientName)); + + char sClientAuth[32]; + GetClientAuthId(client, AuthId_Steam2, sClientAuth, sizeof(sClientAuth)); + + char sItemName[32]; + item.dConfig.GetName(sItemName, sizeof(sItemName)); + + char sItemColor[6]; + item.dConfig.GetColor(sItemColor, sizeof(sItemColor)); + + CRemoveTags(sClientName, sizeof(sClientName)); + CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sClientName, "F1B567", "B2B2B2", sClientAuth, "F1B567", "Item Disconnect", sItemColor, sItemName); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void EW_OnClientItemActivate(int client, int index) +{ + CItem item = EW_GetItemData(index); + + if (item.dConfig.bDisplayActivateMessages) + { + SetGlobalTransTarget(LANG_SERVER); + + char sClientName[32]; + GetClientName(client, sClientName, sizeof(sClientName)); + + char sClientAuth[32]; + GetClientAuthId(client, AuthId_Steam2, sClientAuth, sizeof(sClientAuth)); + + char sItemName[32]; + item.dConfig.GetName(sItemName, sizeof(sItemName)); + + char sItemColor[6]; + item.dConfig.GetColor(sItemColor, sizeof(sItemColor)); + + CRemoveTags(sClientName, sizeof(sClientName)); + CPrintToChatAll(MESSAGEFORMAT, "E01B5D", "EDEDED", sClientName, "67ADDF", "B2B2B2", sClientAuth, "67ADDF", "Item Activate", sItemColor, sItemName); + } +} \ No newline at end of file diff --git a/_entWatch4/scripting/entWatch-restrictions.sp b/entWatch4/scripting/entWatch-restrictions.sp similarity index 50% rename from _entWatch4/scripting/entWatch-restrictions.sp rename to entWatch4/scripting/entWatch-restrictions.sp index ad776f6b..91784f69 100644 --- a/_entWatch4/scripting/entWatch-restrictions.sp +++ b/entWatch4/scripting/entWatch-restrictions.sp @@ -5,15 +5,14 @@ // Description: Handle the restrictions of [entWatch] // //==================================================================================================== -#include #include #pragma newdecls required #include #include -#include #include +#include /* FORWARDS */ Handle g_hFwd_OnClientRestricted; @@ -21,14 +20,20 @@ Handle g_hFwd_OnClientUnrestricted; /* COOKIES */ Handle g_hCookie_RestrictIssued; -Handle g_hCookie_RestrictLength; Handle g_hCookie_RestrictExpire; +Handle g_hCookie_RestrictLength; + +/* BOOLEANS */ +bool g_bRestrictedTemp[MAXPLAYERS+1]; /* INTERGERS */ int g_iRestrictIssued[MAXPLAYERS+1]; int g_iRestrictLength[MAXPLAYERS+1]; int g_iRestrictExpire[MAXPLAYERS+1]; +/* STRINGMAPS */ +StringMap g_hTrie_Storage; + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -65,11 +70,48 @@ public void OnPluginStart() g_hFwd_OnClientUnrestricted = CreateGlobalForward("EW_OnClientUnrestricted", ET_Ignore, Param_Cell, Param_Cell); g_hCookie_RestrictIssued = RegClientCookie("EW_RestrictIssued", "", CookieAccess_Private); - g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private); g_hCookie_RestrictExpire = RegClientCookie("EW_RestrictExpire", "", CookieAccess_Private); + g_hCookie_RestrictLength = RegClientCookie("EW_RestrictLength", "", CookieAccess_Private); + + g_hTrie_Storage = new StringMap(); RegAdminCmd("sm_eban", Command_ClientRestrict, ADMFLAG_BAN); RegAdminCmd("sm_eunban", Command_ClientUnrestrict, ADMFLAG_UNBAN); + + RegConsoleCmd("sm_restrictions", Command_DisplayRestrictions); + RegConsoleCmd("sm_status", Command_DisplayStatus); + + for (int client = 1; client <= MaxClients; client++) + { + if (IsClientConnected(client)) + OnClientPutInServer(client); + + if (AreClientCookiesCached(client)) + OnClientCookiesCached(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + g_hTrie_Storage.Clear(); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPutInServer(int client) +{ + char sAddress[32]; + GetClientIP(client, sAddress, sizeof(sAddress)); + + bool bRestrictedTemp; + if (g_hTrie_Storage.GetValue(sAddress, bRestrictedTemp)) + { + g_bRestrictedTemp[client] = bRestrictedTemp; + } } //---------------------------------------------------------------------------------------------------- @@ -78,8 +120,8 @@ public void OnPluginStart() public void OnClientCookiesCached(int client) { g_iRestrictIssued[client] = GetClientCookieInt(client, g_hCookie_RestrictIssued); - g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength); g_iRestrictExpire[client] = GetClientCookieInt(client, g_hCookie_RestrictExpire); + g_iRestrictLength[client] = GetClientCookieInt(client, g_hCookie_RestrictLength); } //---------------------------------------------------------------------------------------------------- @@ -87,9 +129,18 @@ public void OnClientCookiesCached(int client) //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { + if (g_bRestrictedTemp[client]) + { + char sAddress[32]; + GetClientIP(client, sAddress, sizeof(sAddress)); + + g_hTrie_Storage.SetArray(sAddress, g_bRestrictedTemp[client], true); + } + + g_bRestrictedTemp[client] = false; g_iRestrictIssued[client] = 0; - g_iRestrictLength[client] = 0; g_iRestrictExpire[client] = 0; + g_iRestrictLength[client] = 0; } //---------------------------------------------------------------------------------------------------- @@ -103,28 +154,38 @@ public Action Command_ClientRestrict(int client, int args) return Plugin_Handled; } - char sTarget[32]; - char sLength[32]; - GetCmdArg(1, sTarget, sizeof(sTarget)); - GetCmdArg(2, sLength, sizeof(sLength)); + char sArguments[2][32]; + GetCmdArg(1, sArguments[0], sizeof(sArguments[])); + GetCmdArg(2, sArguments[1], sizeof(sArguments[])); int target; - if ((target = FindTarget(client, sTarget, true)) == -1) + if ((target = FindTarget(client, sArguments[0], true)) == -1) return Plugin_Handled; - int length = StringToInt(sLength); - - if (ClientRestrict(client, target, length)) + if (GetCmdArgs() >= 2) { - if (length) + int length = StringToInt(sArguments[1]); + + if (ClientRestrict(client, target, length)) { - CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s for \x07%s%d\x07%s minutes.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767", "EDEDED", length, "F16767"); - LogAction(client, target, "%L restricted %L for %d minutes.", client, target, length); + if (length) + { + CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s for \x07%s%d\x07%s minutes.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767", "EDEDED", length, "F16767"); + LogAction(client, target, "%L restricted %L for %d minutes.", client, target, length); + } + else + { + CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s permanently.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767"); + LogAction(client, target, "%L restricted %L permanently.", client, target); + } } - else + } + else + { + if (ClientRestrict(client, target, -1)) { - CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s permanently.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767"); - LogAction(client, target, "%L restricted %L permanently.", client, target); + CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s restricted \x07%s%N\x07%s temporarily.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767"); + LogAction(client, target, "%L restricted %L temporarily.", client, target); } } @@ -142,11 +203,11 @@ public Action Command_ClientUnrestrict(int client, int args) return Plugin_Handled; } - char sTarget[32]; - GetCmdArg(1, sTarget, sizeof(sTarget)); + char sArguments[1][32]; + GetCmdArg(1, sArguments[0], sizeof(sArguments[])); int target; - if ((target = FindTarget(client, sTarget, true)) == -1) + if ((target = FindTarget(client, sArguments[0], true)) == -1) return Plugin_Handled; if (ClientUnrestrict(client, target)) @@ -161,7 +222,143 @@ public Action Command_ClientUnrestrict(int client, int args) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public Action EW_OnClientItemCanPickup(any[] itemArray, int client, int index) +public Action Command_DisplayRestrictions(int client, int args) +{ + char aBuf[1024]; + char aBuf2[MAX_NAME_LENGTH]; + + for (int i = 1; i <= MaxClients; i++) + { + if (IsClientInGame(i) && !IsFakeClient(i)) + { + if (ClientRestricted(i)) + { + GetClientName(i, aBuf2, sizeof(aBuf2)); + StrCat(aBuf, sizeof(aBuf), aBuf2); + StrCat(aBuf, sizeof(aBuf), ", "); + } + } + } + + if (strlen(aBuf)) + { + aBuf[strlen(aBuf) - 2] = 0; + CReplyToCommand(client, "\x07%s[entWatch] \x07%sCurrently restricted clients: \x07%s%s", "E01B5D", "F16767", "EDEDED", aBuf); + } + else + CReplyToCommand(client, "\x07%s[entWatch] \x07%sCurrently restricted clients: \x07%snone", "E01B5D", "F16767", "EDEDED"); + + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_DisplayStatus(int client, int args) +{ + if (CheckCommandAccess(client, "", ADMFLAG_BAN) && GetCmdArgs()) + { + char sArguments[1][32]; + GetCmdArg(1, sArguments[0], sizeof(sArguments[])); + + int target; + if ((target = FindTarget(client, sArguments[0], true)) == -1) + return Plugin_Handled; + + if (!AreClientCookiesCached(target)) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s their cookies are still loading.", "E01B5D", "EDEDED", target, "F16767"); + return Plugin_Handled; + } + else if (g_bRestrictedTemp[target]) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently temporarily restricted.", "E01B5D", "EDEDED", target, "F16767"); + return Plugin_Handled; + } + else if (g_iRestrictIssued[target] && g_iRestrictExpire[target] == 0) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently permanently restricted.", "E01B5D", "EDEDED", target, "F16767"); + return Plugin_Handled; + } + else if (g_iRestrictIssued[target] && g_iRestrictExpire[target] >= GetTime()) + { + char sTimeRemaining[64]; + int iTimeRemaining = g_iRestrictExpire[target] - GetTime(); + + int iDays = (iTimeRemaining / 86400); + int iHours = (iTimeRemaining / 3600) % 24; + int iMinutes = (iTimeRemaining / 60) % 60; + int iSeconds = (iTimeRemaining % 60); + + if (iDays) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Days %d Hours %d Minutes %d Seconds", iDays, iHours, iMinutes, iSeconds); + else if (iHours) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Hours %d Minutes %d Seconds", iHours, iMinutes, iSeconds); + else if (iMinutes) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Minutes %d Seconds", iMinutes, iSeconds); + else + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Seconds", iSeconds); + + CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently restricted for another \x07%s%s\x07%s.", "E01B5D", "EDEDED", target, "F16767", "EDEDED", sTimeRemaining, "F16767"); + return Plugin_Handled; + } + else + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%s%N\x07%s is currently not restricted.", "E01B5D", "EDEDED", target, "F16767"); + return Plugin_Handled; + } + } + else + { + if (!AreClientCookiesCached(client)) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYour cookies are still loading.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else if (g_bRestrictedTemp[client]) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently temporarily restricted.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else if (g_iRestrictIssued[client] && g_iRestrictExpire[client] == 0) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently permanently restricted.", "E01B5D", "F16767"); + return Plugin_Handled; + } + else if (g_iRestrictIssued[client] && g_iRestrictExpire[client] >= GetTime()) + { + char sTimeRemaining[64]; + int iTimeRemaining = g_iRestrictExpire[client] - GetTime(); + + int iDays = (iTimeRemaining / 86400); + int iHours = (iTimeRemaining / 3600) % 24; + int iMinutes = (iTimeRemaining / 60) % 60; + int iSeconds = (iTimeRemaining % 60); + + if (iDays) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Days %d Hours %d Minutes %d Seconds", iDays, iHours, iMinutes, iSeconds); + else if (iHours) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Hours %d Minutes %d Seconds", iHours, iMinutes, iSeconds); + else if (iMinutes) + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Minutes %d Seconds", iMinutes, iSeconds); + else + Format(sTimeRemaining, sizeof(sTimeRemaining), "%d Seconds", iSeconds); + + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently restricted for another \x07%s%s\x07%s.", "E01B5D", "F16767", "EDEDED", sTimeRemaining, "F16767"); + return Plugin_Handled; + } + else + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sYou are currently not restricted.", "E01B5D", "F16767"); + return Plugin_Handled; + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action EW_OnClientItemCanPickup(int client, int index) { return ClientRestricted(client)?Plugin_Handled:Plugin_Continue; } @@ -169,7 +366,7 @@ public Action EW_OnClientItemCanPickup(any[] itemArray, int client, int index) //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- -public Action EW_OnClientItemCanActivate(any[] itemArray, int client, int index) +public Action EW_OnClientItemCanActivate(int client, int index) { return ClientRestricted(client)?Plugin_Handled:Plugin_Continue; } @@ -182,17 +379,32 @@ stock bool ClientRestrict(int client, int target, int length) if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || ClientRestricted(target)) return false; - int issued = GetTime(); - int second = length * 60; - int expire = issued + second; + if (length == -1) + { + g_bRestrictedTemp[target] = true; + } + else if (length == 0) + { + g_bRestrictedTemp[target] = false; + g_iRestrictIssued[target] = GetTime(); + g_iRestrictExpire[target] = 0; + g_iRestrictLength[target] = 0; - g_iRestrictIssued[target] = issued; - g_iRestrictLength[target] = length; - g_iRestrictExpire[target] = expire; + SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime()); + SetClientCookieInt(target, g_hCookie_RestrictExpire, 0); + SetClientCookieInt(target, g_hCookie_RestrictLength, 0); + } + else + { + g_bRestrictedTemp[target] = false; + g_iRestrictIssued[target] = GetTime(); + g_iRestrictExpire[target] = GetTime() + (length * 60); + g_iRestrictLength[target] = length; - SetClientCookieInt(target, g_hCookie_RestrictIssued, issued); - SetClientCookieInt(target, g_hCookie_RestrictLength, length); - SetClientCookieInt(target, g_hCookie_RestrictExpire, expire); + SetClientCookieInt(target, g_hCookie_RestrictIssued, GetTime()); + SetClientCookieInt(target, g_hCookie_RestrictExpire, GetTime() + (length * 60)); + SetClientCookieInt(target, g_hCookie_RestrictLength, length); + } Call_StartForward(g_hFwd_OnClientRestricted); Call_PushCell(client); @@ -211,13 +423,14 @@ stock bool ClientUnrestrict(int client, int target) if (!Client_IsValid(client) || !Client_IsValid(target) || !AreClientCookiesCached(target) || !ClientRestricted(target)) return false; + g_bRestrictedTemp[target] = false; g_iRestrictIssued[target] = 0; - g_iRestrictLength[target] = 0; g_iRestrictExpire[target] = 0; + g_iRestrictLength[target] = 0; SetClientCookieInt(target, g_hCookie_RestrictIssued, 0); - SetClientCookieInt(target, g_hCookie_RestrictLength, 0); SetClientCookieInt(target, g_hCookie_RestrictExpire, 0); + SetClientCookieInt(target, g_hCookie_RestrictLength, 0); Call_StartForward(g_hFwd_OnClientUnrestricted); Call_PushCell(client); @@ -239,12 +452,16 @@ stock bool ClientRestricted(int client) if (!AreClientCookiesCached(client)) return true; - //Permanent restriction.. - if (g_iRestrictExpire[client] && g_iRestrictLength[client] == 0) + //Temporary restriction. + if (g_bRestrictedTemp[client]) return true; - //Limited restriction.. - if (g_iRestrictExpire[client] && g_iRestrictExpire[client] >= GetTime()) + //Permanent restriction. + if (g_iRestrictIssued[client] && g_iRestrictExpire[client] == 0) + return true; + + //Normal restriction. + if (g_iRestrictIssued[client] && g_iRestrictExpire[client] >= GetTime()) return true; return false; diff --git a/entWatch4/scripting/entWatch-tools.sp b/entWatch4/scripting/entWatch-tools.sp new file mode 100644 index 00000000..e8f2599f --- /dev/null +++ b/entWatch4/scripting/entWatch-tools.sp @@ -0,0 +1,165 @@ +//==================================================================================================== +// +// Name: [entWatch] Tools +// Author: zaCade & Prometheum +// Description: Handle the tools of [entWatch] +// +//==================================================================================================== +#include + +#pragma newdecls required + +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "[entWatch] Tools", + author = "zaCade & Prometheum", + description = "Handle the tools of [entWatch]", + version = "4.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + LoadTranslations("common.phrases"); + LoadTranslations("entWatch.tools.phrases"); + + RegAdminCmd("sm_etransfer", Command_TransferItem, ADMFLAG_BAN); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_TransferItem(int client, int args) +{ + if (GetCmdArgs() < 2) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sUsage: sm_etransfer <#userid/name> <#userid/name>", "E01B5D", "F16767"); + return Plugin_Handled; + } + + char sArguments[2][32]; + GetCmdArg(1, sArguments[0], sizeof(sArguments[])); + GetCmdArg(2, sArguments[1], sizeof(sArguments[])); + + if (strncmp(sArguments[0], "$", 1, false) == 0) + { + strcopy(sArguments[0], sizeof(sArguments[]), sArguments[0][1]); + + int reciever; + if ((reciever = FindTarget(client, sArguments[1], true)) == -1) + return Plugin_Handled; + + char sName[32]; + char sShort[32]; + char sColor[32]; + + bool bTransfered; + for (int index; index < EW_GetItemCount(); index++) + { + CItem item = EW_GetItemData(index); + + item.dConfig.GetName(sName, sizeof(sName)); + item.dConfig.GetShort(sShort, sizeof(sShort)); + item.dConfig.GetColor(sColor, sizeof(sColor)); + + if (StrContains(sName, sArguments[0], false) != -1 || StrContains(sShort, sArguments[0], false) != -1) + { + if (item.bWeapon && !(item.dConfig.iSlot == SLOT_NONE || item.dConfig.iSlot == SLOT_KNIFE)) + { + int iDisplay = item.dConfig.iDisplay; + + if (item.bClient) + { + SDKHooks_DropWeapon(item.iClient, item.iWeapon, NULL_VECTOR, NULL_VECTOR); + + char sWeaponClass[32]; + GetEntityClassname(item.iWeapon, sWeaponClass, sizeof(sWeaponClass)); + GivePlayerItem(item.iClient, sWeaponClass); + } + + item.dConfig.iDisplay &= ~(1<<0); + + EquipPlayerWeapon(reciever, item.iWeapon); + + item.dConfig.iDisplay = iDisplay; + bTransfered = true; + break; + } + } + } + + if (!bTransfered) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sError: no transferable items found!", "E01B5D", "F16767"); + return Plugin_Handled; + } + + CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s transfered \x07%s%s\x07%s to \x07%s%N\x07%s.", "E01B5D", "EDEDED", client, "F16767", sColor, sName, "F16767", "EDEDED", reciever, "F16767"); + LogAction(client, -1, "%L transfered %s to %L.", client, sName, reciever); + } + else + { + int target; + if ((target = FindTarget(client, sArguments[0], true)) == -1) + return Plugin_Handled; + + int reciever; + if ((reciever = FindTarget(client, sArguments[1], true)) == -1) + return Plugin_Handled; + + if (GetClientTeam(target) != GetClientTeam(reciever)) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sError: teams dont match!", "E01B5D", "F16767"); + return Plugin_Handled; + } + + bool bTransfered; + for (int index; index < EW_GetItemCount(); index++) + { + CItem item = EW_GetItemData(index); + + if (item.bClient && item.iClient == target) + { + if (item.bWeapon && !(item.dConfig.iSlot == SLOT_NONE || item.dConfig.iSlot == SLOT_KNIFE)) + { + int iDisplay = item.dConfig.iDisplay; + + SDKHooks_DropWeapon(item.iClient, item.iWeapon, NULL_VECTOR, NULL_VECTOR); + + char sWeaponClass[32]; + GetEntityClassname(item.iWeapon, sWeaponClass, sizeof(sWeaponClass)); + GivePlayerItem(item.iClient, sWeaponClass); + + item.dConfig.iDisplay &= ~(1<<0); + + EquipPlayerWeapon(reciever, item.iWeapon); + + item.dConfig.iDisplay = iDisplay; + bTransfered = true; + } + } + } + + if (!bTransfered) + { + CReplyToCommand(client, "\x07%s[entWatch] \x07%sError: target has no transferable items!", "E01B5D", "F16767"); + return Plugin_Handled; + } + + CPrintToChatAll("\x07%s[entWatch] \x07%s%N\x07%s transfered all items from \x07%s%N\x07%s to \x07%s%N\x07%s.", "E01B5D", "EDEDED", client, "F16767", "EDEDED", target, "F16767", "EDEDED", reciever, "F16767"); + LogAction(client, target, "%L transfered all items from %L to %L.", client, target, reciever); + } + + return Plugin_Handled; +} \ No newline at end of file diff --git a/entWatch4/scripting/include/entWatch_core.inc b/entWatch4/scripting/include/entWatch_core.inc new file mode 100644 index 00000000..147b91b7 --- /dev/null +++ b/entWatch4/scripting/include/entWatch_core.inc @@ -0,0 +1,61 @@ +#if defined entWatch_core_included + #endinput +#endif + +#define entWatch_core_included + +/* REGISTERS */ +#define REGISTER_WEAPON 1 +#define REGISTER_BUTTON 2 +#define REGISTER_TRIGGER 3 + +/* SLOTS */ +#define SLOT_NONE 0 +#define SLOT_PRIMARY 1 +#define SLOT_SECONDARY 2 +#define SLOT_KNIFE 3 +#define SLOT_GRENADES 4 + +/* MODES */ +#define MODE_COOLDOWN 1 +#define MODE_MAXUSES 2 +#define MODE_COOLDOWNMAXUSES 3 +#define MODE_COOLDOWNCHARGES 4 + +/* CLASSES */ +#include +#include "../classes/CConfig.inc" +#include "../classes/CItem.inc" + +public SharedPlugin __pl_entWatch_core = +{ + name = "entWatch-core", + file = "entWatch-core.smx", + + #if defined REQUIRE_PLUGIN + required = 1 + #else + required = 0 + #endif +}; + +#if !defined REQUIRE_PLUGIN + public void __pl_entWatch_core_SetNTVOptional() + { + MarkNativeAsOptional("EW_GetItemCount"); + MarkNativeAsOptional("EW_GetItemData"); + } +#endif + +native int EW_GetItemCount(); + +native CItem EW_GetItemData(int index); + +forward void EW_OnClientItemDrop(int client, int index); +forward void EW_OnClientItemDeath(int client, int index); +forward void EW_OnClientItemPickup(int client, int index); +forward void EW_OnClientItemActivate(int client, int index); +forward void EW_OnClientItemDisconnect(int client, int index); + +forward Action EW_OnClientItemCanPickup(int client, int index); +forward Action EW_OnClientItemCanActivate(int client, int index); \ No newline at end of file diff --git a/entWatch4/scripting/include/entWatch_helpers.inc b/entWatch4/scripting/include/entWatch_helpers.inc new file mode 100644 index 00000000..504ff33a --- /dev/null +++ b/entWatch4/scripting/include/entWatch_helpers.inc @@ -0,0 +1,132 @@ +#if defined entWatch_helpers_included + #endinput +#endif + +#define entWatch_helpers_included + +/** + * Converts the whole String to lower case. + * Only works with alphabetical characters (not ײִï¢) because Sourcemod suxx ! + * The Output String can be the same as the Input String. + * + * @param input Input String. + * @param output Output String. + * @param size Max Size of the Output string + * @noreturn + */ +stock void String_ToLower(const char[] input, char[] output, int size) +{ + size--; + + int x; + while (input[x] != '\0' || x < size) { + + if (IsCharUpper(input[x])) { + output[x] = CharToLower(input[x]); + } + else { + output[x] = input[x]; + } + + x++; + } + + output[x] = '\0'; +} + +/** +* Checks if the specified index is a player and connected. +* +* @param entity An entity index. +* @param checkConnected Set to false to skip the IsClientConnected check +* @return Returns true if the specified entity index is a player connected, false otherwise. +*/ +stock bool Client_IsValid(int client, bool checkConnected=true) +{ + if (client > 4096) { + client = EntRefToEntIndex(client); + } + + if (client < 1 || client > MaxClients) { + return false; + } + + if (checkConnected && !IsClientConnected(client)) { + return false; + } + + return true; +} + +/** + * Gets the client's current observer target entity. + * + * @param client Client Index. + * @return Observed Entity Index. + */ +stock int Client_GetObserverTarget(int client) +{ + return GetEntPropEnt(client, Prop_Send, "m_hObserverTarget"); +} + +/* + * Checks if an entity is valid and exists. + * + * @param entity Entity Index. + * @return True if the entity is valid, false otherwise. + */ +stock bool Entity_IsValid(int entity) +{ + return IsValidEntity(entity); +} + +/** + * Gets the Hammer-ID of an entity. + * The Hammer Editor gives every entity a unique ID. + * Note: Old maps don't have Hammer-ID's set for entities + * + * @param entity Entity index. + * @return Hammer ID. + */ +stock int Entity_GetHammerID(int entity) +{ + return GetEntProp(entity, Prop_Data, "m_iHammerID"); +} + +/** + * Gets the owner of an entity. + * For example the owner of a weapon entity. + * + * @param entity Entity index. + * @return Ground Entity or -1 + */ +stock int Entity_GetOwner(int entity) +{ + return GetEntPropEnt(entity, Prop_Data, "m_hOwnerEntity"); +} + +/* + * Gets the parent entity of an entity. + * + * @param entity Entity Index. + * @return Entity Index of the parent. + */ +stock int Entity_GetParent(int entity) +{ + return GetEntPropEnt(entity, Prop_Data, "m_pParent"); +} + +/** + * Sets the Name of an entity. + * + * @param entity Entity index. + * @param name The name you want to give. + * @noreturn + */ +stock void Entity_SetName(int entity, const char[] name, any ...) +{ + char format[128]; + VFormat(format, sizeof(format), name, 3); + + DispatchKeyValue(entity, "targetname", format); +} \ No newline at end of file diff --git a/_entWatch4/scripting/include/entWatch_restrictions.inc b/entWatch4/scripting/include/entWatch_restrictions.inc similarity index 80% rename from _entWatch4/scripting/include/entWatch_restrictions.inc rename to entWatch4/scripting/include/entWatch_restrictions.inc index cf6569e7..649efc99 100644 --- a/_entWatch4/scripting/include/entWatch_restrictions.inc +++ b/entWatch4/scripting/include/entWatch_restrictions.inc @@ -4,7 +4,7 @@ #define entWatch_restrictions_included -public SharedPlugin __pl_entWatch_core = +public SharedPlugin __pl_entWatch_restrictions = { name = "entWatch-restrictions", file = "entWatch-restrictions.smx", @@ -17,7 +17,7 @@ public SharedPlugin __pl_entWatch_core = }; #if !defined REQUIRE_PLUGIN - public void __pl_entWatch_core_SetNTVOptional() + public void __pl_entWatch_restrictions_SetNTVOptional() { MarkNativeAsOptional("EW_ClientRestrict"); MarkNativeAsOptional("EW_ClientUnrestrict"); diff --git a/entWatch4/translations/entWatch.interface.phrases.txt b/entWatch4/translations/entWatch.interface.phrases.txt new file mode 100644 index 00000000..7062c23b --- /dev/null +++ b/entWatch4/translations/entWatch.interface.phrases.txt @@ -0,0 +1,3 @@ +"Phrases" +{ +} \ No newline at end of file diff --git a/entWatch4/translations/entWatch.messages.phrases.txt b/entWatch4/translations/entWatch.messages.phrases.txt new file mode 100644 index 00000000..61677be6 --- /dev/null +++ b/entWatch4/translations/entWatch.messages.phrases.txt @@ -0,0 +1,23 @@ +"Phrases" +{ + "Item Drop" + { + "en" "has dropped" + } + "Item Death" + { + "en" "died with" + } + "Item Pickup" + { + "en" "picked up" + } + "Item Disconnect" + { + "en" "disconnected with" + } + "Item Activate" + { + "en" "used" + } +} \ No newline at end of file diff --git a/entWatch4/translations/entWatch.restrictions.phrases.txt b/entWatch4/translations/entWatch.restrictions.phrases.txt new file mode 100644 index 00000000..7062c23b --- /dev/null +++ b/entWatch4/translations/entWatch.restrictions.phrases.txt @@ -0,0 +1,3 @@ +"Phrases" +{ +} \ No newline at end of file diff --git a/entWatch4/translations/entWatch.tools.phrases.txt b/entWatch4/translations/entWatch.tools.phrases.txt new file mode 100644 index 00000000..7062c23b --- /dev/null +++ b/entWatch4/translations/entWatch.tools.phrases.txt @@ -0,0 +1,3 @@ +"Phrases" +{ +} \ No newline at end of file diff --git a/includes/AdminGroups.inc b/includes/AdminGroups.inc new file mode 120000 index 00000000..4cd4601a --- /dev/null +++ b/includes/AdminGroups.inc @@ -0,0 +1 @@ +../AdminGroups/scripting/include/AdminGroups.inc \ No newline at end of file diff --git a/includes/HappyHour.inc b/includes/HappyHour.inc deleted file mode 100644 index 729fc3db..00000000 --- a/includes/HappyHour.inc +++ /dev/null @@ -1,33 +0,0 @@ -#if defined _HappyHour_included - #endinput -#endif - -#define _HappyHour_included - -/** - * Check if it is Happy Hour or not - * - * - * @return True if yes, false if no. - */ -native bool HH_IsItHappyHour(); - - -public SharedPlugin __pl_HappyHour = -{ - name = "HappyHour", - file = "HappyHour.smx", - - #if defined REQUIRE_PLUGIN - required = 1 - #else - required = 0 - #endif -}; - -#if !defined REQUIRE_PLUGIN - public void __pl_HappyHour_SetNTVOptional() - { - MarkNativeAsOptional("HH_IsItHappyHour"); - } -#endif diff --git a/includes/HappyHour.inc b/includes/HappyHour.inc new file mode 120000 index 00000000..cb9a7b5a --- /dev/null +++ b/includes/HappyHour.inc @@ -0,0 +1 @@ +../HappyHour/scripting/include/HappyHour.inc \ No newline at end of file diff --git a/includes/PlayerManager.inc b/includes/PlayerManager.inc new file mode 120000 index 00000000..93c03dbb --- /dev/null +++ b/includes/PlayerManager.inc @@ -0,0 +1 @@ +../PlayerManager/scripting/include/PlayerManager.inc \ No newline at end of file diff --git a/includes/RevEmuAPI.inc b/includes/RevEmuAPI.inc new file mode 100644 index 00000000..02595103 --- /dev/null +++ b/includes/RevEmuAPI.inc @@ -0,0 +1,51 @@ +#if defined _RevEmuAPI_included + #endinput +#endif +#define _RevEmuAPI_included + +/** + * Check if clients usertype is legit. + * + * @param clients The client index. + * + * @return True if valid, false otherwise. + * @error Invalid client index, not connected or fake client. + */ +native bool RevEmu_IsPlayerSteam(int client); + +/** + * Retrieve clients usertype. + * + * @param clients The client index. + * @param type The buffer to write to. + * @param maxlength The maximum buffer length. + * + * @return True on success, false otherwise. + * @error Invalid client index, not connected or fake client. + */ +native bool RevEmu_GetPlayerType(int client, char[] type, int maxlength); + + +public Extension __ext_RevEmuAPI = +{ + name = "RevEmuAPI", + file = "RevEmuAPI.ext", +#if defined AUTOLOAD_EXTENSIONS + autoload = 1, +#else + autoload = 0, +#endif +#if defined REQUIRE_EXTENSIONS + required = 1, +#else + required = 0, +#endif +}; + +#if !defined REQUIRE_EXTENSIONS +public __ext_RevEmuAPI_SetNTVOptional() +{ + MarkNativeAsOptional("RevEmu_IsPlayerSteam"); + MarkNativeAsOptional("RevEmu_GetPlayerType"); +} +#endif diff --git a/includes/Spectate.inc b/includes/Spectate.inc deleted file mode 100644 index c0418311..00000000 --- a/includes/Spectate.inc +++ /dev/null @@ -1,10 +0,0 @@ -#if defined _Spectate_included - #endinput -#endif -#define _Spectate_included -/** - * Called when a client switches to spec by sm_spectate. - * - * @param client Client index of the caller. - */ -forward void OnPlayerSwitchedToSpectateByCommand(int client); \ No newline at end of file diff --git a/includes/Spectate.inc b/includes/Spectate.inc new file mode 120000 index 00000000..70d5c0d1 --- /dev/null +++ b/includes/Spectate.inc @@ -0,0 +1 @@ +../Spectate/include/Spectate.inc \ No newline at end of file diff --git a/includes/StageDisplay.inc b/includes/StageDisplay.inc new file mode 120000 index 00000000..b85a405a --- /dev/null +++ b/includes/StageDisplay.inc @@ -0,0 +1 @@ +../StageDisplay/scripting/include/StageDisplay.inc \ No newline at end of file diff --git a/includes/calladmin.inc b/includes/calladmin.inc new file mode 120000 index 00000000..061a130a --- /dev/null +++ b/includes/calladmin.inc @@ -0,0 +1 @@ +../calladmin_restrictions/scripting/include/calladmin.inc \ No newline at end of file diff --git a/includes/entWatch.inc b/includes/entWatch.inc deleted file mode 120000 index 30296f4d..00000000 --- a/includes/entWatch.inc +++ /dev/null @@ -1 +0,0 @@ -../entWatch/scripting/include/entWatch.inc \ No newline at end of file diff --git a/includes/hlstatsx_loghelper.inc b/includes/hlstatsx_loghelper.inc new file mode 120000 index 00000000..f917fcb7 --- /dev/null +++ b/includes/hlstatsx_loghelper.inc @@ -0,0 +1 @@ +../hlstatsx/scripting/include/hlstatsx_loghelper.inc \ No newline at end of file diff --git a/includes/multicolors/morecolors.inc b/includes/multicolors/morecolors.inc index ecf74136..f88c0ea0 100644 --- a/includes/multicolors/morecolors.inc +++ b/includes/multicolors/morecolors.inc @@ -29,11 +29,11 @@ static Handle sm_show_activity = INVALID_HANDLE; /** * Prints a message to a specific client in the chat area. * Supports color tags. - * + * * @param client Client index. * @param message Message (formatting rules). * @noreturn - * + * * On error/Errors: If the client is not connected an error will be thrown. */ stock void MC_PrintToChat(int client, const char[] message, any ...) { @@ -55,7 +55,7 @@ stock void MC_PrintToChat(int client, const char[] message, any ...) { /** * Prints a message to all clients in the chat area. * Supports color tags. - * + * * @param client Client index. * @param message Message (formatting rules). * @noreturn @@ -79,12 +79,12 @@ stock void MC_PrintToChatAll(const char[] message, any ...) { /** * Prints a message to a specific client in the chat area. * Supports color tags and teamcolor tag. - * + * * @param client Client index. * @param author Author index whose color will be used for teamcolor tag. * @param message Message (formatting rules). * @noreturn - * + * * On error/Errors: If the client or author are not connected an error will be thrown */ stock void MC_PrintToChatEx(int client, int author, const char[] message, any ...) { @@ -116,7 +116,7 @@ stock void MC_PrintToChatEx(int client, int author, const char[] message, any .. * @param author Author index whose color will be used for teamcolor tag. * @param message Message (formatting rules). * @noreturn - * + * * On error/Errors: If the author is not connected an error will be thrown. */ stock void MC_PrintToChatAllEx(int author, const char[] message, any ...) { @@ -143,7 +143,7 @@ stock void MC_PrintToChatAllEx(int author, const char[] message, any ...) { /** * Sends a SayText2 usermessage - * + * * @param client Client to send usermessage to * @param message Message to send * @noreturn @@ -191,7 +191,7 @@ stock void MC_SendMessage(int client, const char[] message, int author = 0) { * MC_PrintToChatAll or MC_PrintToChatAllEx. It causes those functions * to skip the specified client when printing the message. * After printing the message, the client will no longer be skipped. - * + * * @param client Client index * @noreturn */ @@ -204,7 +204,7 @@ stock void MC_SkipNextClient(int client) { /** * Checks if the colors trie is initialized and initializes it if it's not (used internally) - * + * * @return No return */ stock void MC_CheckTrie() { @@ -221,7 +221,7 @@ stock void MC_CheckTrie() { * @param removeTags Optional boolean value to determine whether we're replacing tags with colors, or just removing tags, used by MC_RemoveTags * @param maxlen Optional value for max buffer length, used by MC_RemoveTags * @noreturn - * + * * On error/Errors: If the client index passed for author is invalid or not in game. */ stock void MC_ReplaceColorCodes(char[] buffer, int author = 0, bool removeTags = false, int maxlen = MAX_BUFFER_LENGTH) { @@ -243,16 +243,16 @@ stock void MC_ReplaceColorCodes(char[] buffer, int author = 0, bool removeTags = } int cursor = 0; int value; - char tag[32], buff[32]; + char tag[32], buff[32]; char[] output = new char[maxlen]; - + strcopy(output, maxlen, buffer); // Since the string's size is going to be changing, output will hold the replaced string and we'll search buffer - + Handle regex = CompileRegex("{[a-zA-Z0-9]+}"); for(int i = 0; i < 1000; i++) { // The RegEx extension is quite flaky, so we have to loop here :/. This loop is supposed to be infinite and broken by return, but conditions have been added to be safe. if(MatchRegex(regex, buffer[cursor]) < 1) { - CloseHandle(regex); + delete regex; strcopy(buffer, maxlen, output); return; } @@ -262,11 +262,11 @@ stock void MC_ReplaceColorCodes(char[] buffer, int author = 0, bool removeTags = strcopy(buff, sizeof(buff), tag); ReplaceString(buff, sizeof(buff), "{", ""); ReplaceString(buff, sizeof(buff), "}", ""); - + if(!GetTrieValue(MC_Trie, buff, value)) { continue; } - + if(removeTags) { ReplaceString(output, maxlen, tag, "", false); } else { @@ -279,7 +279,7 @@ stock void MC_ReplaceColorCodes(char[] buffer, int author = 0, bool removeTags = /** * Gets a part of a string - * + * * @param input String to get the part from * @param output Buffer to write to * @param maxlen Max length of output buffer @@ -301,7 +301,7 @@ stock void CSubString(const char[] input, char[] output, int maxlen, int start, /** * Converts a string to lowercase - * + * * @param buffer String to convert * @noreturn */ @@ -334,7 +334,7 @@ stock bool MC_AddColor(const char[] name, int color) { /** * Removes color tags from a message - * + * * @param message Message to remove tags from * @param maxlen Maximum buffer length * @noreturn @@ -345,7 +345,7 @@ stock void MC_RemoveTags(char[] message, int maxlen) { /** * Replies to a command with colors - * + * * @param client Client to reply to * @param message Message (formatting rules) * @noreturn @@ -364,7 +364,7 @@ stock void MC_ReplyToCommand(int client, const char[] message, any ...) { /** * Replies to a command with colors - * + * * @param client Client to reply to * @param author Client to use for {teamcolor} * @param message Message (formatting rules) @@ -383,12 +383,12 @@ stock void MC_ReplyToCommandEx(int client, int author, const char[] message, any } /** - * Displays usage of an admin command to users depending on the - * setting of the sm_show_activity cvar. + * Displays usage of an admin command to users depending on the + * setting of the sm_show_activity cvar. * - * This version does not display a message to the originating client - * if used from chat triggers or menus. If manual replies are used - * for these cases, then this function will suffice. Otherwise, + * This version does not display a message to the originating client + * if used from chat triggers or menus. If manual replies are used + * for these cases, then this function will suffice. Otherwise, * MC_ShowActivity2() is slightly more useful. * Supports color tags. * @@ -402,14 +402,14 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) { if (sm_show_activity == INVALID_HANDLE) sm_show_activity = FindConVar("sm_show_activity"); - + char tag[] = "[SM] "; - + char szBuffer[MC_MAX_MESSAGE_LENGTH]; //char szCMessage[MC_MAX_MESSAGE_LENGTH]; int value = GetConVarInt(sm_show_activity); ReplySource replyto = GetCmdReplySource(); - + char name[MAX_NAME_LENGTH] = "Console"; char sign[MAX_NAME_LENGTH] = "ADMIN"; bool display_in_chat = false; @@ -417,7 +417,7 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) { if (client < 0 || client > MaxClients || !IsClientConnected(client)) ThrowError("Client index %d is invalid", client); - + GetClientName(client, name, sizeof(name)); AdminId id = GetUserAdmin(client); if (id == INVALID_ADMIN_ID @@ -425,13 +425,13 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) { sign = "PLAYER"; } - + /* Display the message to the client? */ if (replyto == SM_REPLY_TO_CONSOLE) { SetGlobalTransTarget(client); VFormat(szBuffer, sizeof(szBuffer), format, 3); - + MC_RemoveTags(szBuffer, sizeof(szBuffer)); PrintToConsole(client, "%s%s\n", tag, szBuffer); display_in_chat = true; @@ -441,16 +441,16 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) { SetGlobalTransTarget(LANG_SERVER); VFormat(szBuffer, sizeof(szBuffer), format, 3); - + MC_RemoveTags(szBuffer, sizeof(szBuffer)); PrintToServer("%s%s\n", tag, szBuffer); } - + if (!value) { return 1; } - + MuCo_LoopClients(i) { if (i == 0 @@ -475,7 +475,7 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 3); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } @@ -494,12 +494,12 @@ stock int MC_ShowActivity(int client, const char[] format, any ...) newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 3); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } } - + return 1; } @@ -518,12 +518,12 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a { if (sm_show_activity == INVALID_HANDLE) sm_show_activity = FindConVar("sm_show_activity"); - + char szBuffer[MC_MAX_MESSAGE_LENGTH]; //char szCMessage[MC_MAX_MESSAGE_LENGTH]; int value = GetConVarInt(sm_show_activity); ReplySource replyto = GetCmdReplySource(); - + char name[MAX_NAME_LENGTH] = "Console"; char sign[MAX_NAME_LENGTH] = "ADMIN"; bool display_in_chat = false; @@ -531,7 +531,7 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a { if (client < 0 || client > MaxClients || !IsClientConnected(client)) ThrowError("Client index %d is invalid", client); - + GetClientName(client, name, sizeof(name)); AdminId id = GetUserAdmin(client); if (id == INVALID_ADMIN_ID @@ -539,13 +539,13 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a { sign = "PLAYER"; } - + /* Display the message to the client? */ if (replyto == SM_REPLY_TO_CONSOLE) { SetGlobalTransTarget(client); VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_RemoveTags(szBuffer, sizeof(szBuffer)); PrintToConsole(client, "%s%s\n", tag, szBuffer); display_in_chat = true; @@ -555,16 +555,16 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a { SetGlobalTransTarget(LANG_SERVER); VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_RemoveTags(szBuffer, sizeof(szBuffer)); PrintToServer("%s%s\n", tag, szBuffer); } - + if (!value) { return 1; } - + MuCo_LoopClients(i) { if (i == 0 @@ -589,7 +589,7 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } @@ -608,18 +608,18 @@ stock int MC_ShowActivityEx(int client, const char[] tag, const char[] format, a newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } } - + return 1; } /** * Displays usage of an admin command to users depending on the setting of the sm_show_activity cvar. - * All users receive a message in their chat text, except for the originating client, + * All users receive a message in their chat text, except for the originating client, * who receives the message based on the current ReplySource. * Supports color tags. * @@ -634,19 +634,19 @@ stock int MC_ShowActivity2(int client, const char[] tag, const char[] format, an { if (sm_show_activity == INVALID_HANDLE) sm_show_activity = FindConVar("sm_show_activity"); - + char szBuffer[MC_MAX_MESSAGE_LENGTH]; //char szCMessage[MC_MAX_MESSAGE_LENGTH]; int value = GetConVarInt(sm_show_activity); // ReplySource replyto = GetCmdReplySource(); - + char name[MAX_NAME_LENGTH] = "Console"; char sign[MAX_NAME_LENGTH] = "ADMIN"; if (client != 0) { if (client < 0 || client > MaxClients || !IsClientConnected(client)) ThrowError("Client index %d is invalid", client); - + GetClientName(client, name, sizeof(name)); AdminId id = GetUserAdmin(client); if (id == INVALID_ADMIN_ID @@ -654,12 +654,12 @@ stock int MC_ShowActivity2(int client, const char[] tag, const char[] format, an { sign = "PLAYER"; } - + SetGlobalTransTarget(client); VFormat(szBuffer, sizeof(szBuffer), format, 4); - - /* We don't display directly to the console because the chat text - * simply gets added to the console, so we don't want it to print + + /* We don't display directly to the console because the chat text + * simply gets added to the console, so we don't want it to print * twice. */ MC_PrintToChatEx(client, client, "%s%s", tag, szBuffer); @@ -668,16 +668,16 @@ stock int MC_ShowActivity2(int client, const char[] tag, const char[] format, an { SetGlobalTransTarget(LANG_SERVER); VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_RemoveTags(szBuffer, sizeof(szBuffer)); PrintToServer("%s%s\n", tag, szBuffer); } - + if (!value) { return 1; } - + MuCo_LoopClients(i) { if (i == 0 @@ -702,7 +702,7 @@ stock int MC_ShowActivity2(int client, const char[] tag, const char[] format, an newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } @@ -721,18 +721,18 @@ stock int MC_ShowActivity2(int client, const char[] tag, const char[] format, an newsign = name; } VFormat(szBuffer, sizeof(szBuffer), format, 4); - + MC_PrintToChatEx(i, client, "%s%s: %s", tag, newsign, szBuffer); } } } - - return 1; + + return 1; } /** * Determines whether a color name exists - * + * * @param color The color name to check * @return True if the color exists, false otherwise */ diff --git a/includes/smjansson.inc b/includes/smjansson.inc index 1d7c9f8f..77494de0 100644 --- a/includes/smjansson.inc +++ b/includes/smjansson.inc @@ -290,7 +290,7 @@ native bool json_object_update_missing(JSONObject hObj, JSONObject hOther); * * // Do something with sKey and hValue * - * CloseHandle(hValue); + * delete hValue; * * hIterator = json_object_iter_next(hObj, hIterator); * } @@ -1575,7 +1575,7 @@ public JSONObject json_pack_object_(const char[] sFormat, int &iPos, Handle hPar if(this_char != 115) { LogError("Object keys must be strings at %d.", iPos); - CloseHandle(hObj); + delete hObj; return view_as(INVALID_HANDLE); } diff --git a/includes/sourcebans.inc b/includes/sourcebans.inc new file mode 120000 index 00000000..c8c52424 --- /dev/null +++ b/includes/sourcebans.inc @@ -0,0 +1 @@ +../sourcebans/scripting/include/sourcebans.inc \ No newline at end of file diff --git a/includes/unloze.inc b/includes/unloze.inc new file mode 100644 index 00000000..0a4a1558 --- /dev/null +++ b/includes/unloze.inc @@ -0,0 +1,30 @@ +#if defined _unloze_ForumIntegration_Included + #endinput +#endif +#define _unloze_ForumIntegration_Included + +typeset HasSteamIDReservedSlotCallback +{ + function void (const char[] sSteam32ID, int Result); + function void (const char[] sSteam32ID, int Result, any Data); +}; + +native void HasSteamIDReservedSlot(const char[] sSteam32ID, HasSteamIDReservedSlotCallback Callback, any Data = 0); + +public SharedPlugin __pl_unloze_ForumIntegration = +{ + name = "UNLOZE Forum Integration", + file = "unloze_ForumIntegration.smx", +#if defined REQUIRE_PLUGIN + required = 1, +#else + required = 0, +#endif +}; + +#if !defined REQUIRE_PLUGIN +public __pl_UNLOZE Forum Integration_SetNTVOptional() +{ + MarkNativeAsOptional("HasSteamIDReservedSlot"); +} +#endif \ No newline at end of file diff --git a/mapchooser_extended/configs/mapchooser_extended.cfg b/mapchooser_extended/configs/mapchooser_extended.cfg index b81cf029..7b2d02f6 100644 --- a/mapchooser_extended/configs/mapchooser_extended.cfg +++ b/mapchooser_extended/configs/mapchooser_extended.cfg @@ -32,48 +32,7 @@ "ze_FFXIV_Wanderers_Palace_v5_2f" {} "ze_FFVII_Temple_Ancient_v3_3" {} } - "2" // cosmo - { - "_max" "1" - "ze_ffvii_cosmo_canyon_v1beta1" {} - "ze_ffvii_cosmo_canyon_v1_1" {} - "ze_ffvii_cosmo_canyon_v2_1" {} - "ze_ffvii_cosmo_canyon_v4fix" {} - "ze_ffvii_cosmo_canyon_v5test2" {} - "ze_ffvii_cosmo_canyon_v5fix" {} - } - "3" // wester - { - "_max" "1" - "ze_ffxii_westersand_v2_11a" {} - "ze_ffxii_westersand_v2d" {} - "ze_FFXII_Westersand_v5_2" {} - "ze_FFXII_Westersand_v7" {} - "ze_FFXII_Westersand_v7_2" {} - } - "4" // mako - { - "_max" "1" - "ze_FFVII_Mako_Reactor_b2" {} - "ze_FFVII_Mako_Reactor_v1_4_1" {} - "ze_FFVII_Mako_Reactor_v3_1" {} - "ze_FFVII_Mako_Reactor_v5_3" {} - "ZE_FFVII_Mako_Reactor_V6_B08" {} - } - "5" // wanderes - { - "_max" "1" - "ze_ffxiv_wanderers_palace_css" {} - "ze_ffxiv_wanderers_palace_v4_5s" {} - "ze_FFXIV_Wanderers_Palace_v5_2f" {} - } - "6" // minas - { - "_max" "1" - "ze_lotr_minas_tirith_v2_2fix" {} - "ze_lotr_minas_tirith_v3_3" {} - } - "7" // rooftop + "2" // rooftop { "_max" "2" "ze_gargantua_v2_0" {} @@ -82,216 +41,444 @@ "ze_rooftop_runaway2_v5" {} "ze_rooftop_reborn_v3_2" {} } + "3" // random + { + "_max" "1" + "ze_random_v9" {} + "ze_random_v10_fix" {} + "ze_random_escape_b7_3" {} + } + "4" // shroom + { + "_max" "2" + "ze_shroomforest2_v1" {} + "ze_shroomforest_v4_5" {} + "ze_shroomforest3_b6_2" {} + } + "5" // pirates + { + "_max" "1" + "ze_pirates_port_royal_v5_4s2" {} + "ze_pirates_port_royal_v3_6" {} + } + "6" // jurassic + { + "_max" "2" + "ze_jurassic_park_story_v1" {} + "ze_jurassicpark_c1v4" {} + "ze_jurassicpark_v2_10_ob" {} + } } - - "ze_Ancient_wrath_v1_fix2" - { - "MinPlayers" "20" - } - - "ze_assassins_creed_v1" - { - "MinPlayers" "20" - } - - "ze_bioshock_v6_3" - { - "MinPlayers" "20" - } - - "ze_castlevania_v1_3" - { - "MinPlayers" "20" - } - - "ze_dark_souls_ptd_v0_4" - { - "MinPlayers" "35" - } - "ze_deadcore_s6" + { + "MinPlayers" "40" + } + "ze_abandoned_project_v1_2" + { + "MinPlayers" "20" + } + "ze_amkoescape_v1337" + { + "MinPlayers" "20" + } + "ze_Ancient_wrath_v1_fix2" + { + "MinPlayers" "20" + } + "ze_antartika_b2" + { + "MinPlayers" "40" + } + "ze_ashen_keep_v0_3" + { + "MinPlayers" "40" + } + "ze_avalanche_reboot_beta3" + { + "MinPlayers" "40" + } + "ze_bathroom_v2_5s" + { + "MinPlayers" "20" + } + "ze_bioshock_v6_3" + { + "MinPlayers" "40" + } + "ze_boredom_v543656" + { + "MinPlayers" "40" + } + "ze_castlevania_v1_3" + { + "MinPlayers" "40" + } + "ze_chicken_ranch_v2_1s" + { + "MinPlayers" "20" + } + "ze_christmas_infection_v2_3" + { + "MinPlayers" "40" + } + "ze_chroma_v0_4" + { + "MinPlayers" "40" + } + "ze_dark_souls_ptd_v0_4" + { + "MinPlayers" "40" + } + "ze_destruction_of_exorath_re3" + { + "MinPlayers" "20" + } + "ze_doom3_v1" { "MinPlayers" "40" } - - "ze_doom_v3_1" - { - "MinPlayers" "35" - } - "ze_fapescape_rote_v1_3f" { - "MinPlayers" "40" + "MinPlayers" "40" } - - "ze_ffvii_cosmo_canyon_v1_1" + "ze_fapescape_v1_2" { - "MinPlayers" "35" + "MinPlayers" "20" } - - "ze_ffvii_cosmo_canyon_v2_1" - { - "MinPlayers" "35" - } - "ze_ffvii_cosmo_canyon_v5fix" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" } - - "ZE_FFVII_Mako_Reactor_V6_B08" + "ze_FFVII_Temple_Ancient_v3_3" { - "MinPlayers" "20" + "MinPlayers" "40" } - "ze_FFXII_Feywood_b3_1" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" + } + "ze_FFVII_Mako_Reactor_v5_3" + { + "MinTime" "2200" + "MaxTime" "1600" + "Cooldown" "45" + "MinPlayers" "20" + } + "ZE_FFVII_Mako_Reactor_V6_B08" + { + "Cooldown" "45" + "MinPlayers" "40" } - "ze_FFXII_Paramina_Rift_v1_4" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" } - "ze_ffxii_ridorana_cataract_t4" { - "MinPlayers" "40" + "MinPlayers" "40" } - - "ze_FFXII_Westersand_v5_2" + "ze_ffxii_westersand_v2d" { - "MinPlayers" "35" + "MinPlayers" "40" } - - "ze_FFXII_Westersand_v7_2" + "ze_ffxii_westersand_v5_2" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" + } + "ze_ffxii_westersand_v7_2" + { + "MinPlayers" "40" + "Cooldown" "45" } - "ze_FFXII_Westersand_v8zeta1" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" + } + "ze_ffxiv_wanderers_palace_v4_5s" + { + "MinPlayers" "40" } "ze_FFXIV_Wanderers_Palace_v5_2f" { - "MinPlayers" "40" + "MinPlayers" "40" + "Cooldown" "45" } "ze_frostdrake_tower_v1s" { - "MinPlayers" "35" + "MinPlayers" "40" } - - "ze_GoT_The_North_b4" + "ze_frozentemple_b8_2" { - "MinPlayers" "35" + "MinPlayers" "20" } - - "ze_grau_s2" - { - "MinPlayers" "40" - } - "ze_gris_fyk" { - "MinPlayers" "40" + "MinPlayers" "40" } - - "ze_harry_potter_v2_1" + "ze_halloween_house_b4s" { - "MinPlayers" "35" + "MinPlayers" "40" + } + "ze_hellz_rescuebase_v5_b1" + { + "MinPlayers" "20" } - "ze_hsc_a4_5" { - "MinPlayers" "40" + "MinPlayers" "40" + } + "ze_industrial_dejavu_v3_3_1" + { + "MinPlayers" "40" + } + "ze_Infected_Sewers_v6_5" + { + "MinPlayers" "40" + } + "ze_interception_b4" + { + "MinPlayers" "20" + } + "ze_johnny_nukem_b8_1" + { + "MinPlayers" "40" + } + "ze_journey_v1_2" + { + "MinPlayers" "40" } - "ze_last_man_standing_v4_2" { - "MinPlayers" "35" + "MinPlayers" "40" + } + "ze_legoland_crackheads_v2" + { + "MinPlayers" "20" + } + "ze_l0v0l_v1_4" + { + "MinPlayers" "20" + } + "ze_lila_panic_escape_v3_1" + { + "MinPlayers" "20" + } + "ze_lolxd_final_s" + { + "MinPlayers" "20" + } + "ze_LOTR_Isengard_v2_3" + { + "MinPlayers" "20" } - "ze_lotr_minas_tirith_v2_2fix" { - "MinPlayers" "35" + "MinTime" "1800" + "MaxTime" "2200" + "MinPlayers" "40" + "Cooldown" "45" } - "ze_lotr_minas_tirith_v3_3" { - "MinPlayers" "35" + "MinTime" "1800" + "MaxTime" "2200" + "MinPlayers" "40" + "Cooldown" "45" } - - "ze_mist_v1_3" + "ze_megaman_a6" { "MinPlayers" "40" } - + "ze_minecraft_adventure_v1_2c" + { + "MinPlayers" "20" + } + "ze_mountain_escape_v5_zy" + { + "MinPlayers" "20" + "Cooldown" "45" + } + "ze_otakuroom_v5_6fs" + { + "MinPlayers" "20" + } + "ze_paper_escaper_v7_1" + { + "MinPlayers" "20" + } + "ze_Paranoid_Rezurrection_v11_9" + { + "MinPlayers" "20" + "Cooldown" "45" + } + "ze_parkers_pit_b8" + { + "MinPlayers" "20" + } + "ze_Parking_v3_1" + { + "MinPlayers" "20" + } + "ze_Pidaras_v1_4fix3" + { + "MinPlayers" "20" + } + "ze_Pirates_Port_Royal_v3_6" + { + "MinPlayers" "20" + } + "ze_pirates_port_royal_v5_4s2" + { + "MinPlayers" "20" + "Cooldown" "45" + } "ze_pizzatime_v4s" { - "MinPlayers" "35" + "MinPlayers" "40" } - - "ze_predator_ultimate_v1_3" + "ze_pkmn_adventure_v8_6s_fix2" { - "MinPlayers" "35" + "MinPlayers" "40" + } + "ze_PoncherMonkey_Shooter_v3_5" + { + "MinPlayers" "40" + } + "ze_portal_story_v3_2" + { + "MinPlayers" "20" } - "ze_predator_ultimate_v3" { - "MinPlayers" "20" + "MinPlayers" "20" } - "ze_rizomata_s1_2" + "ze_project_alcaria_v1_5s" { - "MinPlayers" "40" + "MinPlayers" "20" + } + "ze_prototype_v2" + { + "MinPlayers" "20" + } + "ze_ravenholm_v035fix" + { + "MinPlayers" "20" + } + "ze_rizomata_s1_3" + { + "MinPlayers" "40" + } + "ze_rtcw_ominous_rumors_v1" + { + "MinPlayers" "20" + } + "ze_sandstorm_f1" + { + "MinPlayers" "20" + } + "ze_Serpentis_Temple_v1_1" + { + "MinPlayers" "40" + "Cooldown" "45" + } + "ze_shroomforest_v4_5" + { + "MinPlayers" "20" + "Cooldown" "45" + } + "ze_shroomforest2_v1" + { + "MinPlayers" "20" + "Cooldown" "45" + } + "ze_shroomforest3_b6_2" + { + "MinPlayers" "40" + "Cooldown" "45" + } + "ze_siberia_1990_v1_2c" + { + "MinPlayers" "20" + } + "ze_slender_escape_b4" + { + "MinPlayers" "20" } - "ze_stalker_ultimate_v2_3" { - "MinPlayers" "35" + "MinPlayers" "20" } - "ze_stalker_ultimate_v3" { - "MinPlayers" "20" + "MinPlayers" "20" + } + "ze_stalker_monolit_a5" + { + "MinPlayers" "50" + } + "ze_starwars_v2fix" + { + "MinPlayers" "20" + } + "ze_strange_escape_b3" + { + "MinPlayers" "20" + } + "ze_sunkentemple_v3_1s" + { + "MinPlayers" "20" + } + "ze_sunlight_v2_0" + { + "MinPlayers" "20" + } + "ze_super_mario_64_v2_b5" + { + "MinPlayers" "40" + } + "ze_survivors_b5" + { + "MinPlayers" "40" } - "ze_taboo_carnation_v2" { - "MinPlayers" "40" + "MinPlayers" "40" } - "ze_temple_raider_b4" { - "MinPlayers" "40" + "MinPlayers" "40" } - - "ze_ten_keys_b2fix" + "ze_Temple_v2_1" { - "MinPlayers" "40" + "MinPlayers" "40" } - - "ze_tesv_a3" - { - "MinPlayers" "35" - } - - "ze_TESV_Skyrim_v3" - { - "MinPlayers" "35" - } - "ze_tesv_skyrim_v4fix" { - "MinPlayers" "20" + "MinPlayers" "40" + "Cooldown" "45" } - - "ze_totally_new_wester" + "ze_toaster_v1_2" { - "MinPlayers" "20" + "MinPlayers" "20" } - "ze_UT2004_Convoy_v2_2_1" + "ze_tyranny_v5_2" { - "MinPlayers" "20" + "MinPlayers" "40" } -} + "ze_undertale_g_v1_2s2" + { + "MinPlayers" "20" + } + "ze_ut2004_convoy_v2_2_1" + { + "MinPlayers" "40" + } + "ze_v0u0v_a4" + { + "MinPlayers" "40" + } \ No newline at end of file diff --git a/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg b/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg index 67409091..abda9642 100644 --- a/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg +++ b/mapchooser_extended/configs/mapchooser_extended/cooldowns.cfg @@ -1,3 +1,3 @@ "mapchooser_extended" { -} \ No newline at end of file +} diff --git a/mapchooser_extended/scripting/include/mapchooser_extended.inc b/mapchooser_extended/scripting/include/mapchooser_extended.inc index d1c3804e..d4839baa 100644 --- a/mapchooser_extended/scripting/include/mapchooser_extended.inc +++ b/mapchooser_extended/scripting/include/mapchooser_extended.inc @@ -130,6 +130,15 @@ native int GetMapGroups(const char[] map, int[] groups, int size); // >=0 = Group _max -> Group full native int GetMapGroupRestriction(const char[] map, int client = 0); +native bool GetMapVIPRestriction(const char[] map, int client = 0); + +/** + * Amount of Extends left on the current map + * + * @return amounts of extends left +*/ +native int GetExtendsLeft(); + public SharedPlugin __pl_mapchooser_extended = { name = "mapchooser", diff --git a/mapchooser_extended/scripting/mapchooser_extended.sp b/mapchooser_extended/scripting/mapchooser_extended.sp index 2b6c998a..55daeb2d 100644 --- a/mapchooser_extended/scripting/mapchooser_extended.sp +++ b/mapchooser_extended/scripting/mapchooser_extended.sp @@ -273,6 +273,9 @@ public void OnPluginStart() // Mapchooser Extended Commands RegAdminCmd("mce_reload_maplist", Command_ReloadMaps, ADMFLAG_CHANGEMAP, "mce_reload_maplist - Reload the Official Maplist file."); + RegConsoleCmd("sm_extends", Command_ExtendsLeft, "sm_extends - Shows how many extends are left on the current map."); + RegConsoleCmd("sm_extendsleft", Command_ExtendsLeft, "sm_extendsleft - Shows how many extends are left on the current map."); + g_Cvar_Winlimit = FindConVar("mp_winlimit"); g_Cvar_Maxrounds = FindConVar("mp_maxrounds"); g_Cvar_Fraglimit = FindConVar("mp_fraglimit"); @@ -411,6 +414,8 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max CreateNative("GetMapPlayerRestriction", Native_GetMapPlayerRestriction); CreateNative("GetMapGroups", Native_GetMapGroups); CreateNative("GetMapGroupRestriction", Native_GetMapGroupRestriction); + CreateNative("GetMapVIPRestriction", Native_GetMapVIPRestriction); + CreateNative("GetExtendsLeft", Native_GetExtendsLeft); return APLRes_Success; } @@ -613,6 +618,12 @@ public Action Command_ReloadMaps(int client, int args) InitializeOfficialMapList(); } +public Action Command_ExtendsLeft(int client, int args) +{ + CReplyToCommand(client, "[MCE] Available Extends: %d", GetConVarInt(g_Cvar_Extend) - g_Extends); + return Plugin_Handled; +} + public void OnMapTimeLeftChanged() { if(GetArraySize(g_MapList)) @@ -1181,7 +1192,7 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE) AddMapItem(map); } - CloseHandle(randomizeList); + delete randomizeList; randomizeList = INVALID_HANDLE; } @@ -1222,7 +1233,7 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE) AddMenuItem(g_VoteMenu, VOTE_EXTEND, "Extend Map"); } } - CloseHandle(inputlist); + delete inputlist; } int voteDuration = GetConVarInt(g_Cvar_VoteDuration); @@ -1471,7 +1482,7 @@ public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int p if(g_NativeVotes) NativeVotes_Close(menu); else - CloseHandle(menu); + delete menu; } case MenuAction_Display: @@ -1525,6 +1536,10 @@ public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int p { Format(buffer, sizeof(buffer), "%T", "Custom", param1, map); } + else if(InternalGetMapVIPRestriction(map)) + { + Format(buffer, sizeof(buffer), "%s (%T)", map, "VIP Nomination", param1); + } } if(buffer[0] != '\0') @@ -1686,11 +1701,14 @@ void CreateNextVote() for(int i = 0; i < limit; i++) { int b; - for(int j = 0; j < 10; j++) + for(int j = 0; j < 1000; j++) { b = GetRandomInt(0, GetArraySize(tempMaps) - 1); GetArrayString(tempMaps, b, map, PLATFORM_MAX_PATH); + if(InternalGetMapVIPRestriction(map)) + continue; + if(InternalGetMapTimeRestriction(map) != 0) continue; @@ -1730,7 +1748,7 @@ void CreateNextVote() } delete groupmap; - CloseHandle(tempMaps); + delete tempMaps; } bool CanVoteStart() @@ -2296,6 +2314,37 @@ public int Native_GetMapGroupRestriction(Handle plugin, int numParams) return -1; } +public int Native_GetMapVIPRestriction(Handle plugin, int numParams) +{ + int client = GetNativeCell(2); + int len; + GetNativeStringLength(1, len); + + if(len <= 0) + return false; + + char[] map = new char[len+1]; + GetNativeString(1, map, len+1); + + // Check if client should bypass vip restrictions + if(client > 0 && client < MaxClients) + { + // Client has bypass flag, dont return vip restrictions + if(CheckCommandAccess(client, "sm_nominate_ignore", ADMFLAG_CHEATS)) + return false; + + // Client has vip flag, dont return vip restrictions + if(CheckCommandAccess(client, "sm_nominate_vip", ADMFLAG_CUSTOM1)) + return false; + } + + return InternalGetMapVIPRestriction(map); +} + +public int Native_GetExtendsLeft(Handle plugin, int numParams) +{ + return GetConVarInt(g_Cvar_Extend) - g_Extends; +} stock void AddMapItem(const char[] map) { @@ -2594,6 +2643,18 @@ stock int FindIntInArray(int[] array, int size, int value) return -1; } +stock bool InternalGetMapVIPRestriction(const char[] map) +{ + int VIP = 0; + + if(g_Config && g_Config.JumpToKey(map)) + { + VIP = g_Config.GetNum("VIP", VIP); + g_Config.Rewind(); + } + + return view_as(VIP); +} stock void InternalRestoreMapCooldowns() { diff --git a/mapchooser_extended/scripting/nominations_extended.sp b/mapchooser_extended/scripting/nominations_extended.sp index 7d09db00..ede24df9 100644 --- a/mapchooser_extended/scripting/nominations_extended.sp +++ b/mapchooser_extended/scripting/nominations_extended.sp @@ -75,6 +75,11 @@ Handle g_Cvar_MarkCustomMaps = INVALID_HANDLE; Handle g_Cvar_NominateDelay = INVALID_HANDLE; Handle g_Cvar_InitialDelay = INVALID_HANDLE; +// VIP Nomination Convars +Handle g_Cvar_VIPTimeframe = INVALID_HANDLE; +Handle g_Cvar_VIPTimeframeMinTime = INVALID_HANDLE; +Handle g_Cvar_VIPTimeframeMaxTime = INVALID_HANDLE; + int g_Player_NominationDelay[MAXPLAYERS+1]; int g_NominationDelay; @@ -94,6 +99,10 @@ public void OnPluginStart() g_Cvar_InitialDelay = CreateConVar("sm_nominate_initialdelay", "60.0", "Time in seconds before first Nomination can be made", 0, true, 0.00); g_Cvar_NominateDelay = CreateConVar("sm_nominate_delay", "3.0", "Delay between nominations", 0, true, 0.00, true, 60.00); + g_Cvar_VIPTimeframe = CreateConVar("sm_nominate_vip_timeframe", "1", "Specifies if the should be a timeframe where only VIPs can nominate maps", 0, true, 0.00, true, 1.0); + g_Cvar_VIPTimeframeMinTime = CreateConVar("sm_nominate_vip_timeframe_mintime", "1800", "Start of the timeframe where only VIPs can nominate maps (Format: HHMM)", 0, true, 0000.00, true, 2359.0); + g_Cvar_VIPTimeframeMaxTime = CreateConVar("sm_nominate_vip_timeframe_maxtime", "2200", "End of the timeframe where only VIPs can nominate maps (Format: HHMM)", 0, true, 0000.00, true, 2359.0); + RegConsoleCmd("say", Command_Say); RegConsoleCmd("say_team", Command_Say); @@ -501,6 +510,14 @@ public Action Command_Nominate(int client, int args) return Plugin_Handled; } + bool VIPRestriction = GetMapVIPRestriction(mapname, client); + if(VIPRestriction) + { + CPrintToChat(client, "[NE] %t", "Map Nominate VIP Error"); + + return Plugin_Handled; + } + int TimeRestriction = GetMapTimeRestriction(mapname); if(TimeRestriction) { @@ -611,6 +628,22 @@ public int Handler_NominateListMenu(Menu menu, MenuAction action, int param1, in { delete menu; } + + case MenuAction_DisplayItem: + { + static char display[150]; + static char map[PLATFORM_MAX_PATH]; + GetMenuItem(menu, param2, map, sizeof(map)); + + bool VIPRestriction = GetMapVIPRestriction(map); + if(VIPRestriction) + { + Format(display, sizeof(display), "%s (%T)", map, "VIP Nomination", param1); + return RedrawMenuItem(display); + } + + return 0; + } } return 0; @@ -716,6 +749,12 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p GetClientName(param1, name, MAX_NAME_LENGTH); + if(GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || GetMapGroupRestriction(map, param1) >= 0 || GetMapVIPRestriction(map, param1)) + { + PrintToChat(param1, "[NE] You can't nominate this map right now."); + return 0; + } + NominateResult result = NominateMap(map, false, param1); /* Don't need to check for InvalidMap because the menu did that already */ @@ -757,7 +796,7 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p if((status & MAPSTATUS_DISABLED) == MAPSTATUS_DISABLED) return ITEMDRAW_DISABLED; - if(GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || GetMapGroupRestriction(map, param1) >= 0) + if(GetMapTimeRestriction(map) || GetMapPlayerRestriction(map) || GetMapGroupRestriction(map, param1) >= 0 || GetMapVIPRestriction(map, param1)) return ITEMDRAW_DISABLED; return ITEMDRAW_DEFAULT; @@ -803,6 +842,12 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p else strcopy(buffer, sizeof(buffer), map); + bool VIPRestriction = GetMapVIPRestriction(map); + if(VIPRestriction) + { + Format(buffer, sizeof(buffer), "%s (%T)", buffer, "VIP Restriction", param1); + } + if((status & MAPSTATUS_DISABLED) == MAPSTATUS_DISABLED) { if((status & MAPSTATUS_EXCLUDE_CURRENT) == MAPSTATUS_EXCLUDE_CURRENT) @@ -829,7 +874,6 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p if(TimeRestriction) { Format(display, sizeof(display), "%s (%T)", buffer, "Map Time Restriction", param1, "+", RoundToFloor(float(TimeRestriction / 60)), TimeRestriction % 60); - return RedrawMenuItem(display); } @@ -851,6 +895,11 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p return RedrawMenuItem(display); } + if(VIPRestriction) + { + return RedrawMenuItem(buffer); + } + if(mark && !official) return RedrawMenuItem(buffer); @@ -863,8 +912,21 @@ public int Handler_MapSelectMenu(Menu menu, MenuAction action, int param1, int p stock bool IsNominateAllowed(int client) { - if(BaseComm_IsClientGagged(client)) + if (BaseComm_IsClientGagged(client)) + { + CReplyToCommand(client, "[NE] You are not allowed to nominate maps while you are gagged."); return false; + } + + if (!CheckCommandAccess(client, "sm_tag", ADMFLAG_CUSTOM1)) + { + int VIPTimeRestriction = GetVIPTimeRestriction(); + if(VIPTimeRestriction) + { + CReplyToCommand(client, "[NE] During peak hours only VIPs are allowed to nominate maps. Wait for %d hours and %d minutes or buy VIP at Unloze.com to nominate maps again.", RoundToFloor(float(VIPTimeRestriction / 60)), VIPTimeRestriction % 60); + return false; + } + } CanNominateResult result = CanNominate(); @@ -1104,3 +1166,36 @@ public int Native_RemoveMapsFromNominationPool(Handle plugin, int numArgs) return 0; } + +stock int GetVIPTimeRestriction() +{ + if (!GetConVarBool(g_Cvar_VIPTimeframe)) + return 0; + + char sTime[8]; + FormatTime(sTime, sizeof(sTime), "%H%M"); + + int CurTime = StringToInt(sTime); + int MinTime = GetConVarInt(g_Cvar_VIPTimeframeMinTime); + int MaxTime = GetConVarInt(g_Cvar_VIPTimeframeMaxTime); + + //Wrap around. + CurTime = (CurTime <= MinTime) ? CurTime + 2400 : CurTime; + MaxTime = (MaxTime <= MinTime) ? MaxTime + 2400 : MaxTime; + + if ((MinTime <= CurTime <= MaxTime)) + { + //Wrap around. + MinTime = (MinTime <= CurTime) ? MinTime + 2400 : MinTime; + MinTime = (MinTime <= MaxTime) ? MinTime + 2400 : MinTime; + + // Convert our 'time' to minutes. + CurTime = (RoundToFloor(float(CurTime / 100)) * 60) + (CurTime % 100); + MinTime = (RoundToFloor(float(MinTime / 100)) * 60) + (MinTime % 100); + MaxTime = (RoundToFloor(float(MaxTime / 100)) * 60) + (MaxTime % 100); + + return MaxTime - CurTime; + } + + return 0; +} diff --git a/mapchooser_extended/translations/mapchooser_extended.phrases.txt b/mapchooser_extended/translations/mapchooser_extended.phrases.txt index 9d236787..07ad85a4 100644 --- a/mapchooser_extended/translations/mapchooser_extended.phrases.txt +++ b/mapchooser_extended/translations/mapchooser_extended.phrases.txt @@ -106,6 +106,16 @@ "en" "*{1}" } + "VIP Nomination" + { + "en" "VIP Nomination" + } + + "Map Nominate VIP Error" + { + "en" "Only VIPs can nominate this map." + } + "Map Nominate Time Error" { "#format" "{1:d},{2:d}" @@ -148,6 +158,11 @@ "en" "Group max: {1}" } + "VIP Restriction" + { + "en" "VIP only" + } + "Nomination Removed Time Error" { "#format" "{1:s}" diff --git a/playerscount_in_hostname/scripting/playerscount_in_hostname.sp b/playerscount_in_hostname/scripting/playerscount_in_hostname.sp new file mode 100644 index 00000000..7bb52cb4 --- /dev/null +++ b/playerscount_in_hostname/scripting/playerscount_in_hostname.sp @@ -0,0 +1,61 @@ +#include +#pragma semicolon 1 + +public Plugin:myinfo = +{ + name = "Players count in hostname", + author = "D1maxa", + description = "Showing number of players in name of server", + version = "1.11", + url = "http://forums.alliedmods.net/showthread.php?t=126060" +}; + +new g_NumClients=0; +new Handle:hostname = INVALID_HANDLE; +new Handle:sv_visiblemaxplayers = INVALID_HANDLE; +new Handle:formatted_hostname = INVALID_HANDLE; + +public OnPluginStart() +{ + hostname = FindConVar("hostname"); + sv_visiblemaxplayers = FindConVar("sv_visiblemaxplayers"); + formatted_hostname=CreateConVar("sm_formatted_hostname", "My Server %d/%d", "Formatted string for dynamic hostname",FCVAR_PLUGIN); +} + +public OnMapStart() +{ + g_NumClients=0; +} + + public OnConfigsExecuted() +{ + SetNumberOfPlayersInHostname(); +} + +public OnClientConnected(client) +{ + if(!IsFakeClient(client)) + { + g_NumClients++; + SetNumberOfPlayersInHostname(); + } +} + +public OnClientDisconnect(client) +{ + if(!IsFakeClient(client)) + { + g_NumClients--; + SetNumberOfPlayersInHostname(); + } +} + +SetNumberOfPlayersInHostname() +{ + decl String:my_buf[64]; + decl String:f_hostname[64]; + GetConVarString(formatted_hostname,f_hostname,sizeof(f_hostname)); + Format(my_buf,sizeof(my_buf),f_hostname,g_NumClients,GetConVarInt(sv_visiblemaxplayers)); + SetConVarString(hostname,my_buf); + ServerCommand("heartbeat"); +} diff --git a/sbchecker/scripting/sbchecker.sp b/sbchecker/scripting/sbchecker.sp new file mode 100644 index 00000000..555af4ee --- /dev/null +++ b/sbchecker/scripting/sbchecker.sp @@ -0,0 +1,627 @@ +#include + +#define VERSION "2.3.4" +#define LISTBANS_USAGE "sm_banlist/listban/s <#userid|name> - Lists a user's prior bans" +#define DATABASE_PREFIX "sb" + +Menu g_PlayersMainMenu[MAXPLAYERS]; +int g_CurrentBanID[MAXPLAYERS]; +Database g_DB; + +public Plugin myinfo = +{ + name = "Sourcebans Ban Checker", + author = "Pan32", + description = "Looks up if a player has been a bad boy. Shoutouts to my boy ici", + version = VERSION, + url = "http://www.unloze.com" +}; + +public void OnPluginStart() +{ + LoadTranslations("common.phrases"); + + RegAdminCmd("sm_listbans", OnListSourceBansCmd, ADMFLAG_BAN, LISTBANS_USAGE); + RegAdminCmd("sm_listban", OnListSourceBansCmd, ADMFLAG_BAN, LISTBANS_USAGE); + RegAdminCmd("sm_banlist", OnListSourceBansCmd, ADMFLAG_BAN, LISTBANS_USAGE) + + Database.Connect(OnDatabaseConnected, "sourcebans"); +} + +public void OnMapStart() +{ + for (int i; i < MAXPLAYERS; i++) + { + g_CurrentBanID[i] = 0; + g_PlayersMainMenu[i] = null; + } +} + +public void OnDatabaseConnected(Database db, const char[] error, any data) +{ + if (db == null) + SetFailState("Failed to connect to SB db, %s", error); + + g_DB = db; +} + +public Action OnListSourceBansCmd(int client, int args) +{ + if (args < 1) + { + ReplyToCommand(client, LISTBANS_USAGE); + return Plugin_Handled; + } + + if (client == 0) + { + ReplyToCommand(client, "This command is not supported through console."); + return Plugin_Handled; + } + + if (g_DB == INVALID_HANDLE) + { + ReplyToCommand(client, "Error: database not ready."); + return Plugin_Handled; + } + + char pattern[MAX_TARGET_LENGTH], target_name[MAX_TARGET_LENGTH]; + int target_list[MAXPLAYERS], target_count; + bool tn_is_ml; + + GetCmdArg(1, pattern, sizeof(pattern)); + + if ((target_count = ProcessTargetString(pattern, client, target_list, MAXPLAYERS, COMMAND_FILTER_NO_BOTS|COMMAND_FILTER_NO_MULTI, target_name, sizeof(target_name), tn_is_ml)) <= 0) + { + ReplyToTargetError(client, target_count, true); + return Plugin_Handled; + } + + char auth[32]; + if (!GetClientAuthId(target_list[0], AuthId_Steam2, auth, sizeof(auth)) + || auth[0] == 'B' || auth[9] == 'L') + { + ReplyToCommand(client, "Error: could not retrieve %N's steam id.", target_list[0]); + return Plugin_Handled; + } + + char query[1024]; + char ip[30]; + GetClientIP(target_list[0], ip, sizeof(ip)); + FormatEx(query, sizeof(query), "SELECT bid, created, length, reason, RemoveType FROM %s_bans WHERE ((type = 0 AND %s_bans.authid REGEXP '^STEAM_[0-9]:%s$') OR (type = 1 AND ip = '%s')) AND ((length > '0' AND ends > UNIX_TIMESTAMP()) OR RemoveType IS NOT NULL) ORDER BY created DESC;", DATABASE_PREFIX, DATABASE_PREFIX, auth[8], ip); + + char targetName[MAX_NAME_LENGTH]; + GetClientName(target_list[0], targetName, sizeof(targetName)); + + DataPack pack = new DataPack(); + pack.WriteCell(GetClientUserId(client)); + pack.WriteString(targetName); + + g_DB.Query(OnListBans, query, pack, DBPrio_Low); + + return Plugin_Handled; +} + +public void OnListBans(Database db, DBResultSet results, const char[] error, DataPack pack) +{ + pack.Reset(); + int clientuid = pack.ReadCell(); + int client = GetClientOfUserId(clientuid); + char targetName[MAX_NAME_LENGTH]; + pack.ReadString(targetName, sizeof(targetName)); + delete pack; + + if (client == 0) + return; + + if (db == null) + { + PrintToChat(client, "[SBChecker] Could not establish connection to the database"); + return; + } + + if (results == null) + { + PrintToChat(client, "[SBChecker] DB error while retrieving bans for %s:\n%s", targetName, error); + return; + } + + int count = results.RowCount; + + if (count == 0) + { + PrintToChat(client, "[SBChecker] No bans found for %s.", targetName); + return; + } + + char cBuffer[512]; + + Menu menu = new Menu(SBCheckerCallback); + + Format(cBuffer, sizeof(cBuffer), "Previous bans of %s (%i):\n ", targetName, count); + menu.SetTitle(cBuffer); + + while (results.FetchRow()) + { + char banid[12]; + char createddate[11] = ""; + //char bannedby[MAX_NAME_LENGTH] = ""; + char lenstring[32] = "N/A"; + char reason[28]; + char RemoveType[9] = " "; + + if (!results.IsFieldNull(0)) + { + IntToString(results.FetchInt(0), banid, sizeof(banid)); + } + + if (!results.IsFieldNull(1)) + { + FormatTime(createddate, sizeof(createddate), "%Y-%m-%d", results.FetchInt(1)); + } + + + // NOT NULL + int length = results.FetchInt(2); + if (length == 0) + { + Format(lenstring, sizeof(lenstring), "Permanent"); + } + if (length > 0) + { + CalculateLength(length, lenstring, sizeof(lenstring)); + } + + + // NOT NULL + results.FetchString(3, reason, sizeof(reason)); + + if (!results.IsFieldNull(4)) + { + results.FetchString(4, RemoveType, sizeof(RemoveType)); + if (StrEqual(RemoveType, "E", false)) + Format(RemoveType, sizeof(RemoveType), "Expired"); + + if (StrEqual(RemoveType, "U", false)) + Format(RemoveType, sizeof(RemoveType), "Unbanned"); + } + + Format(cBuffer, sizeof(cBuffer), "%s\n%s(%s)\nReason: %s\n ", createddate, lenstring, RemoveType, reason); + menu.AddItem(banid, cBuffer); + } + menu.ExitButton = true; + menu.Display(client, MENU_TIME_FOREVER); +} + +public int SBCheckerCallback(Menu menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + g_PlayersMainMenu[client] = menu; + char cBanid[12]; + int Banid; + + menu.GetItem(choice, cBanid, sizeof(cBanid)); + Banid = StringToInt(cBanid); + + + g_CurrentBanID[client] = Banid; + RequestBan(client, Banid); + + } + case MenuAction_End: + { + if (choice != MenuEnd_Selected) + delete menu; + } + } +} + +void CalculateLength(int banLength, char[] time, int len) // banLength in secs +{ + static const int secs[6] = {31536000, 2592000, 604800, 86400, 3600, 60 }; + static const char names[6][6] = { "years", "months", "weeks", "days", "hours", "mins" } + + int values[6] + int timeLeft = banLength; + + for (int i; i < 6; i++) + { + values[i] = timeLeft / secs[i]; + timeLeft = timeLeft % secs[i]; + } + + // print based on these ints, if they're 0, skip + + FormatEx(time, len, ""); + + for (int i; i < 6; i++) + { + if(values[i]) + { + Format(time, len, "%s%d %s ", time, values[i], names[i]); + } + } +} + +void RequestBan(int client, int banid) +{ + char query[1024]; + Format(query, sizeof(query), "SELECT %s_bans.bid, ip, name, created, %s_admins.user, ends, length, reason, %s_bans.type, RemoveType, admins2.user, RemovedOn, ureason, COUNT(%s_comments.bid) AS nc FROM %s_bans LEFT JOIN %s_admins ON %s_bans.aid = %s_admins.aid LEFT JOIN %s_admins admins2 ON %s_bans.RemovedBy = admins2.aid LEFT JOIN %s_comments ON %s_comments.bid = %s_bans.bid WHERE (%s_bans.bid = '%i');", DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, banid); + + //PrintToConsole(client, "%s", query); + + DataPack pack = new DataPack(); + pack.WriteCell(client); + pack.WriteCell(GetClientUserId(client)); + + g_DB.Query(DetailBanInfo, query, pack, DBPrio_Low); +} + +public void DetailBanInfo(Database db, DBResultSet results, const char[] error, DataPack pack) +{ + pack.Reset(); + + int client = pack.ReadCell(); + int checkclient = GetClientOfUserId(pack.ReadCell()); + + if (checkclient == 0) + { + delete g_PlayersMainMenu[client]; + return; + } + + + if (db == null) + { + PrintToChat(client, "[SBChecker] Could not establish connection to the database"); + delete g_PlayersMainMenu[client]; + return; + } + + if (results == null) + { + PrintToChat(client, "[SBChecker] DB error while retrieving bans for the requested ban ID:\n%s", error); + delete g_PlayersMainMenu[client]; + return; + } + + int count = results.RowCount; + + if (count == 0) + { + PrintToChat(client, "[SBChecker] No bans found with that ban id."); + delete g_PlayersMainMenu[client]; + return; + } + + results.FetchRow(); + + int banid = results.FetchInt(0); + + char cBuffer[512]; + + Panel panel = new Panel(); + + Format(cBuffer, sizeof(cBuffer), "More information on Ban ID %i:\n ", banid); + panel.SetTitle(cBuffer); + + char nickname[MAX_NAME_LENGTH] = ""; + char createddate[11] = ""; + char bannedby[MAX_NAME_LENGTH] = ""; + char ip[17] = ""; + char lenstring[32] = "N/A"; + char enddate[11] = "N/A"; + char reason[32]; + char RemoveType[9] = " "; + char BanType[12] = ""; + int comments = 0; + bool unbanned = false; + + if (!results.IsFieldNull(1)) + { + results.FetchString(1, ip, sizeof(ip)); + } + + if (!results.IsFieldNull(2)) + { + results.FetchString(2, nickname, sizeof(nickname)); + } + + if (!results.IsFieldNull(3)) + { + FormatTime(createddate, sizeof(createddate), "%Y-%m-%d", results.FetchInt(3)); + } + + if (!results.IsFieldNull(4)) + { + results.FetchString(4, bannedby, sizeof(bannedby)); + } + + if (!results.IsFieldNull(5)) + { + FormatTime(enddate, sizeof(enddate), "%Y-%m-%d", results.FetchInt(5)); + } + + int length = results.FetchInt(6); + if (length == 0) + { + Format(lenstring, sizeof(lenstring), "Permanent"); + } + if (length) + { + CalculateLength(length, lenstring, sizeof(lenstring)); + } + + if (!results.IsFieldNull(7)) + { + results.FetchString(7, reason, sizeof(reason)); + } + + int banidtype = results.FetchInt(8); + if (!banidtype) + Format(BanType, sizeof(BanType), "Steam ID"); + if (banidtype == 1) + Format(BanType, sizeof(BanType), "IP Address"); + + + if (!results.IsFieldNull(9)) + { + results.FetchString(9, RemoveType, sizeof(RemoveType)); + if (StrEqual(RemoveType, "E", false)) + Format(RemoveType, sizeof(RemoveType), "Expired"); + + if (StrEqual(RemoveType, "U", false)) + { + unbanned = true; + Format(RemoveType, sizeof(RemoveType), "Unbanned"); + } + + } + + Format(cBuffer, sizeof(cBuffer), "Banned on: %s", createddate); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Name when banned: %s", nickname); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "IP Address: %s", ip); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Banned by: %s", bannedby); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Length: %s", lenstring); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Reason: %s", reason); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Ends on: %s (%s)", enddate, RemoveType); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Ban Type: %s\n ", BanType); + + panel.DrawText(cBuffer); + + if (unbanned) + { + char removedon[11] = ""; + char removedby[MAX_NAME_LENGTH] = ""; + char ureason[32] = ""; + + if (!results.IsFieldNull(10)) + { + results.FetchString(10, removedby, sizeof(removedby)); + } + + if (!results.IsFieldNull(11)) + { + FormatTime(removedon, sizeof(removedon), "%Y-%m-%d", results.FetchInt(11)); + } + + if (!results.IsFieldNull(12)) + { + results.FetchString(12, ureason, sizeof(ureason)); + } + + Format(cBuffer, sizeof(cBuffer), "Unbanned on: %s", removedon); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Unbanned by: %s", removedby); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Unban reason: %s\n ", ureason); + + panel.DrawText(cBuffer); + + } + + comments = results.FetchInt(13); + + panel.CurrentKey = 2; + + if (!comments) + panel.DrawItem("View Comments (0)", ITEMDRAW_DISABLED); + else + { + Format(cBuffer, sizeof(cBuffer), "View Comments (%i)", comments); + panel.DrawItem(cBuffer); + } + + + panel.CurrentKey = 8; + + panel.DrawItem("Back", ITEMDRAW_CONTROL); + + panel.CurrentKey = 10; + + panel.DrawItem("Exit", ITEMDRAW_CONTROL); + + + //menu.ExitButton = true; + //menu.ExitBackButton = true; + panel.Send(client, DetailBanCallback, MENU_TIME_FOREVER); + delete panel; + +} + +public int DetailBanCallback(Menu menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + if (choice == 2) + RequestComments(client, g_CurrentBanID[client]); + if (choice == 8) + g_PlayersMainMenu[client].Display(client, MENU_TIME_FOREVER); + if (choice == 10) + { + g_CurrentBanID[client] = 0; + delete g_PlayersMainMenu[client]; + } + } + + case MenuAction_Cancel: + { + delete g_PlayersMainMenu[client]; + g_CurrentBanID[client] = 0; + } + } +} + +void RequestComments(int client, int banid) +{ + char query[1024]; + FormatEx(query, sizeof(query), "SELECT added, %s_admins.user, commenttxt FROM %s_comments LEFT JOIN %s_admins ON %s_comments.aid = %s_admins.aid WHERE (%s_comments.bid = '%i');", DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, DATABASE_PREFIX, banid); + + DataPack pack = new DataPack(); + pack.WriteCell(client); + pack.WriteCell(GetClientUserId(client)); + + g_DB.Query(CommentsBanInfo, query, pack, DBPrio_Low); +} + +public void CommentsBanInfo(Database db, DBResultSet results, const char[] error, DataPack pack) +{ + pack.Reset(); + + int client = pack.ReadCell(); + int checkclient = GetClientOfUserId(pack.ReadCell()); + + if (checkclient == 0) + { + delete g_PlayersMainMenu[client]; + g_CurrentBanID[client] = 0; + return; + } + + + if (db == null) + { + PrintToChat(client, "[SBChecker] Could not establish connection to the database, returning to ban information."); + RequestBan( client, g_CurrentBanID[client]); + return; + } + + if (results == null) + { + PrintToChat(client, "[SBChecker] DB error while retrieving comments for the requested ban ID: %s, returning to ban information.", error); + RequestBan(client, g_CurrentBanID[client]); + return; + } + + int count = results.RowCount; + + if (count == 0) + { + PrintToChat(client, "[SBChecker] No comments with that ban id, returning to ban information."); + RequestBan(client, g_CurrentBanID[client]); + return; + } + + char cBuffer[512]; + + Panel panel = new Panel(); + + Format(cBuffer, sizeof(cBuffer), "Comments on Ban ID %i:\n ", g_CurrentBanID[client]); + panel.SetTitle(cBuffer); + + while (results.FetchRow()) + { + char addeddate[11] = ""; + char addedby[MAX_NAME_LENGTH] = ""; + char comment[128] = ""; + + FormatTime(addeddate, sizeof(addeddate), "%Y-%m-%d", results.FetchInt(0)); + + if (!results.IsFieldNull(1)) + { + results.FetchString(1, addedby, sizeof(addedby)); + } + + if (!results.IsFieldNull(2)) + { + results.FetchString(2, comment, sizeof(comment)); + } + + Format(cBuffer, sizeof(cBuffer), "Added on: %s", addeddate); + + panel.DrawItem(cBuffer, ITEMDRAW_DISABLED) + + Format(cBuffer, sizeof(cBuffer), "By: %s", addedby); + + panel.DrawText(cBuffer); + + Format(cBuffer, sizeof(cBuffer), "Comment:\n%s\n ", comment); + + panel.DrawText(cBuffer); + + } + + panel.CurrentKey = 8; + + panel.DrawItem("Back", ITEMDRAW_CONTROL); + + panel.CurrentKey = 10; + + panel.DrawItem("Exit", ITEMDRAW_CONTROL); + + panel.Send(client, CommentsBanCallback, MENU_TIME_FOREVER); + delete panel; +} + +public int CommentsBanCallback(Menu menu, MenuAction action, int client, int choice) +{ + switch(action) + { + case MenuAction_Select: + { + if (choice == 8) + RequestBan(client, g_CurrentBanID[client]); + if (choice == 10) + { + g_CurrentBanID[client] = 0; + delete g_PlayersMainMenu[client]; + } + } + + case MenuAction_Cancel: + { + delete g_PlayersMainMenu[client]; + g_CurrentBanID[client] = 0; + } + } +} \ No newline at end of file diff --git a/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vmt b/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vmt new file mode 100644 index 00000000..38fc2ef1 --- /dev/null +++ b/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vmt @@ -0,0 +1,5 @@ +"vertexlitGeneric" +{ + "$baseTexture" "models/models_kit/hallo_pumpkin" + "$surfaceprop" "watermelon" +} diff --git a/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vtf b/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vtf new file mode 100644 index 00000000..833b8af5 Binary files /dev/null and b/season_halloween/content/materials/models/models_kit/hallo_pumpkin.vtf differ diff --git a/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vmt b/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vmt new file mode 100644 index 00000000..da2493f3 --- /dev/null +++ b/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vmt @@ -0,0 +1,5 @@ +"vertexlitGeneric" +{ + "$baseTexture" "models/models_kit/hallo_pumpkin_skin2" + "$surfaceprop" "plastic" +} diff --git a/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vtf b/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vtf new file mode 100644 index 00000000..6984f9b3 Binary files /dev/null and b/season_halloween/content/materials/models/models_kit/hallo_pumpkin_skin2.vtf differ diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vmt b/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vmt new file mode 100644 index 00000000..94ade616 --- /dev/null +++ b/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/player/microsoft/skeleton/skull1" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vtf b/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vtf new file mode 100644 index 00000000..354550f5 Binary files /dev/null and b/season_halloween/content/materials/models/player/microsoft/skeleton/skull1.vtf differ diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vmt b/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vmt new file mode 100644 index 00000000..81cb2311 --- /dev/null +++ b/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/player/microsoft/skeleton/skull2" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vtf b/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vtf new file mode 100644 index 00000000..c9c1fef9 Binary files /dev/null and b/season_halloween/content/materials/models/player/microsoft/skeleton/skull2.vtf differ diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vmt b/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vmt new file mode 100644 index 00000000..8ebbf6ee --- /dev/null +++ b/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/player/microsoft/skeleton/skull3" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vtf b/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vtf new file mode 100644 index 00000000..7398d2ae Binary files /dev/null and b/season_halloween/content/materials/models/player/microsoft/skeleton/skull3.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vmt b/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vmt new file mode 100644 index 00000000..bdf3d741 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vmt @@ -0,0 +1,14 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/player/techknow/grimreaper/grim" + "$nocull" 1 + "$bumpmap" "models\player\techknow\grimreaper\grim_n" + "$alphatest" 1 + "$halflambert" 1 + //"$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$surfaceprop" "flesh" + "$model" "1" +} \ No newline at end of file diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vtf b/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vtf new file mode 100644 index 00000000..f0636c20 Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/grimreaper/grim.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vmt b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vmt new file mode 100644 index 00000000..ee41cae3 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vmt @@ -0,0 +1,13 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/player/techknow/grimreaper/grim2" + //"$nocull" 1 + "$bumpmap" "models\player\techknow\grimreaper\grim2_n" + "$halflambert" 1 + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$surfaceprop" "flesh" + "$model" "1" +} \ No newline at end of file diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vtf b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vtf new file mode 100644 index 00000000..78eba691 Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim2_n.vtf b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2_n.vtf new file mode 100644 index 00000000..338b3ca2 Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/grimreaper/grim2_n.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/grimreaper/grim_n.vtf b/season_halloween/content/materials/models/player/techknow/grimreaper/grim_n.vtf new file mode 100644 index 00000000..a79e583a Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/grimreaper/grim_n.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/thorn/body.vmt b/season_halloween/content/materials/models/player/techknow/thorn/body.vmt new file mode 100644 index 00000000..40f46886 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/thorn/body.vmt @@ -0,0 +1,16 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\techknow\thorn\body" + "$bumpmap" "models\player\techknow\thorn\body_n" + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$halflambert" 1 + "$phong" "1" + "$phongfresnelranges" "[0.05 0.5 1]" + "$phongalbedotint" "1" + "$phongexponent" "20" + "$phongboost" ".3" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/techknow/thorn/body.vtf b/season_halloween/content/materials/models/player/techknow/thorn/body.vtf new file mode 100644 index 00000000..1373494c Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/thorn/body.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/thorn/body_n.vtf b/season_halloween/content/materials/models/player/techknow/thorn/body_n.vtf new file mode 100644 index 00000000..ce536dcd Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/thorn/body_n.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/thorn/cape.vmt b/season_halloween/content/materials/models/player/techknow/thorn/cape.vmt new file mode 100644 index 00000000..19de5936 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/thorn/cape.vmt @@ -0,0 +1,13 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\techknow\thorn\body" + "$bumpmap" "models\player\techknow\thorn\body_n" + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$halflambert" 1 + "$nocull" 1 + "$translucent" 1 + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/techknow/thorn/collers.vmt b/season_halloween/content/materials/models/player/techknow/thorn/collers.vmt new file mode 100644 index 00000000..22eb8924 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/thorn/collers.vmt @@ -0,0 +1,13 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\techknow\thorn\head" + "$bumpmap" "models\player\techknow\thorn\head_n" + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$halflambert" 1 + "$nocull" 1 + "$translucent" 1 + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/techknow/thorn/head.vmt b/season_halloween/content/materials/models/player/techknow/thorn/head.vmt new file mode 100644 index 00000000..329df4bb --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/thorn/head.vmt @@ -0,0 +1,16 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\techknow\thorn\head" + "$bumpmap" "models\player\techknow\thorn\head_n" + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$halflambert" 1 + "$phong" "1" + "$phongfresnelranges" "[0.05 0.5 1]" + "$phongalbedotint" "1" + "$phongexponent" "20" + "$phongboost" ".3" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/player/techknow/thorn/head.vtf b/season_halloween/content/materials/models/player/techknow/thorn/head.vtf new file mode 100644 index 00000000..418e5663 Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/thorn/head.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/thorn/head_n.vtf b/season_halloween/content/materials/models/player/techknow/thorn/head_n.vtf new file mode 100644 index 00000000..8049ab62 Binary files /dev/null and b/season_halloween/content/materials/models/player/techknow/thorn/head_n.vtf differ diff --git a/season_halloween/content/materials/models/player/techknow/thorn/headlight.vmt b/season_halloween/content/materials/models/player/techknow/thorn/headlight.vmt new file mode 100644 index 00000000..3b95cfc4 --- /dev/null +++ b/season_halloween/content/materials/models/player/techknow/thorn/headlight.vmt @@ -0,0 +1,17 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models\player\techknow\thorn\head" + "$bumpmap" "models\player\techknow\thorn\head_n" + "$envmap" "env_cubemap" + "$envmaptint" "[ .36 .36 .30 ]" + "$envmapconstrast" "1" + "$normalmapalphaenvmapmask" 1 + "$halflambert" 1 + "$selfillum" 1 + "$phong" "1" + "$phongfresnelranges" "[0.05 0.5 1]" + "$phongalbedotint" "1" + "$phongexponent" "20" + "$phongboost" ".3" + "$surfaceprop" "flesh" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vmt b/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vmt new file mode 100644 index 00000000..e47ce71f --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vmt @@ -0,0 +1,68 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\ghost\scary_ghost" + "$detail" "models\syoudous\spooky\misc\fireLayeredSlowTiled512.vtf" + "$detailscale" "3" + "$detailblendfactor" 2 + "$detailblendmode" 1 +// "$color2" "[0 0 12]" + + "$bumpmap" "dev/bump_normal" + "$nocull" "1" + + "$selfillum" "1" + "$selfillumtint" "[.1 .7 12]" + "$selfIllumFresnel" "1" + "$selfIllumFresnelMinMaxExp" "[2 1 .1]" + + "$phong" "1" + "$phongexponent" "1" + "$phongboost" "1" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$phongfresnelranges" "[0 0 20]" +// "$basealphaenvmapmask" "1" + + +// "$basemapalphaphongmask" "1" +// "$envmap" "effects/cubemapper" +// "$envmapcontrast" 1 +// "$envmaptint" "[0.0 2.0 2.5]" + + + "$rimlight" "1" + "$rimlightexponent" "1" + "$rimlightboost" "95" + +"Proxies" + { + "AnimatedTexture" + { + "animatedtexturevar" "$detail" + "animatedtextureframenumvar" "$detailframe" + "animatedtextureframerate" 24 + } + "Sine" + { + "sinemin" ".2" + "sinemax" ".6" + "sineperiod" "1" + "resultVar" "$selfillumtint[1]" + } + "Sine" + { + "sinemin" ".5" + "sinemax" ".2" + "sineperiod" "1.1" + "resultVar" "$selfillumtint[0]" + } + "TextureScroll" + { + "texturescrollvar" "$detailtexturetransform" + "texturescrollrate" -.08 + "texturescrollangle" 45 + } + + + + } +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vtf b/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vtf new file mode 100644 index 00000000..cc7ae0c8 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/ghost/scary_ghost.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/misc/cheap_lightwarp.vtf b/season_halloween/content/materials/models/syoudous/spooky/misc/cheap_lightwarp.vtf new file mode 100644 index 00000000..eac806e4 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/misc/cheap_lightwarp.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/misc/firelayeredslowtiled512.vtf b/season_halloween/content/materials/models/syoudous/spooky/misc/firelayeredslowtiled512.vtf new file mode 100644 index 00000000..261eb872 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/misc/firelayeredslowtiled512.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/misc/pumpkin_detail.vtf b/season_halloween/content/materials/models/syoudous/spooky/misc/pumpkin_detail.vtf new file mode 100644 index 00000000..f2ee92ea Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/misc/pumpkin_detail.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vmt b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vmt new file mode 100644 index 00000000..adbe8c3d --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vmt @@ -0,0 +1,5 @@ +"vertexlitGeneric" +{ + "$baseTexture" "models/syoudous/spooky/pumpkin/hallo_pumpkin" + "$surfaceprop" "watermelon" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vtf b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vtf new file mode 100644 index 00000000..833b8af5 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vmt b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vmt new file mode 100644 index 00000000..302f5d23 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vmt @@ -0,0 +1,5 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/syoudous/spooky/pumpkin/hallo_pumpkin_dim" + "$translucent" "1" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vtf b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vtf new file mode 100644 index 00000000..62f2bb93 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vmt b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vmt new file mode 100644 index 00000000..2d47a139 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vmt @@ -0,0 +1,7 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/syoudous/spooky/pumpkin/hallo_pumpkin_lit" + "$additive" "1" + "$nocull" "1" + "$selfillum" "1" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vtf b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vtf new file mode 100644 index 00000000..60e8937c Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vmt b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vmt new file mode 100644 index 00000000..5036708a --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vmt @@ -0,0 +1,5 @@ +"vertexlitGeneric" +{ + "$baseTexture" "models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2" + "$surfaceprop" "plastic" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vtf b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vtf new file mode 100644 index 00000000..6984f9b3 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vmt b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vmt new file mode 100644 index 00000000..b9ea7c69 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vmt @@ -0,0 +1,33 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\pumpkin\pumpkin" + "$bumpmap" "dev/bump_normal" + + "$detail" "models\syoudous\spooky\misc\pumpkin_detail" + "$detailscale" "1" + "$detailblendfactor" 1 + "$detailblendmode" 5 + + "$phong" "1" + "$phongexponent" "3" + "$phongboost" ".25" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$phongfresnelranges" "[2 0 2]" + "$basemapalphaphongmask" "1" + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "2" // Exponent for phong component of rim lighting + "$rimlightboost" "1" + + "Proxies" + { + "Sine" + { + "sinemax" "1" + "sinemin" ".25" + "sineperiod" ".5" + "resultvar" "$detailblendfactor" + } + } +} \ No newline at end of file diff --git a/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vtf b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vtf new file mode 100644 index 00000000..371744d8 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/pumpkin/pumpkin.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vmt new file mode 100644 index 00000000..bd232d06 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vmt @@ -0,0 +1,22 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\skull\eye_patch01" + + //"$selfillumtint" "[0.3 0.4 1]" + //"$selfIllum" "1" + + + "$phong" "1" + "$phongexponent" "20" + "$phongboost" "18" + "$phongfresnelranges" "[.05 .05 8]" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$halflambert" "0" + + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "2" // Exponent for phong component of rim lighting + "$rimlightboost" ".8" +} + diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vtf new file mode 100644 index 00000000..b214ff81 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/eye_patch01.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vmt new file mode 100644 index 00000000..3d164cbf --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vmt @@ -0,0 +1,17 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\skull\mvm_human_skull" + + "$basemapalphaphongmask" "1" + + "$phong" "1" + "$phongexponent" "5" + "$phongboost" "1" + "$phongfresnelranges" "[.2 1 4]" + + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + + "$rimlight" "0" + "$rimlightexponent" "4" + "$rimlightboost" "1" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vtf new file mode 100644 index 00000000..04bde258 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/mvm_human_skull.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vmt new file mode 100644 index 00000000..0232fdc5 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vmt @@ -0,0 +1,17 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\skull\skull" + "$phong" "1" + "$phongexponent" "10" + "$phongboost" "0.08" + "$phongfresnelranges" "[.1 1 1]" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$halflambert" "0" + "$model" 1 +// "$selfillum" 1 + + // Rim lighting parameters +// "$rimlight" "1" // To enable rim lighting (requires phong) +// "$rimlightexponent" "1" // Exponent for phong component of rim lighting +// "$rimlightboost" "3" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vtf new file mode 100644 index 00000000..0d3fdd38 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/skull.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vmt new file mode 100644 index 00000000..abfefa04 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vmt @@ -0,0 +1,17 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\skull\skull_horns" + "$phong" "1" + "$phongexponent" "10" + "$phongboost" "0.08" + "$phongfresnelranges" "[.1 1 1]" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$halflambert" "0" + "$model" 1 +// "$selfillum" 1 + + // Rim lighting parameters +// "$rimlight" "1" // To enable rim lighting (requires phong) +// "$rimlightexponent" "1" // Exponent for phong component of rim lighting +// "$rimlightboost" "3" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vtf new file mode 100644 index 00000000..07d85fe5 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_horns.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vmt new file mode 100644 index 00000000..1b992575 --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vmt @@ -0,0 +1,16 @@ +"VertexlitGeneric" +{ + "$baseTexture" "models\syoudous\spooky\skull\skull_island01" + "$phong" "1" + "$phongexponent" "10" + "$phongboost" "0.8" + "$phongfresnelranges" "[.1 1 1]" + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + "$halflambert" "0" + $model 1 + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "1" // Exponent for phong component of rim lighting + "$rimlightboost" "3" +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vtf new file mode 100644 index 00000000..a645cf36 Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island01.vtf differ diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vmt b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vmt new file mode 100644 index 00000000..f8b4e67a --- /dev/null +++ b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vmt @@ -0,0 +1,20 @@ +"VertexLitGeneric" +{ + "$basetexture" "models\syoudous\spooky\skull\skull_island_skullhat" +// "$basemapalphaphongmask" 1 + + "$phong" "1" + "$phongexponent" "180" + "$phongboost" "4" + "$phongfresnelranges" "[1 2 4]" + + "$lightwarptexture" "models\syoudous\spooky\misc\cheap_lightwarp" + + + "$halflambert" "0" + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "4" // Exponent for phong component of rim lighting + "$rimlightboost" "2" // Boost for ambient cube component of rim lighting +} diff --git a/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vtf b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vtf new file mode 100644 index 00000000..5591ccdb Binary files /dev/null and b/season_halloween/content/materials/models/syoudous/spooky/skull/skull_island_skullhat.vtf differ diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vmt b/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vmt new file mode 100644 index 00000000..91b18980 --- /dev/null +++ b/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/unloze/cute_skeleton/skull1" + "$surfaceprop" "rock" +} diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vtf b/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vtf new file mode 100644 index 00000000..354550f5 Binary files /dev/null and b/season_halloween/content/materials/models/unloze/cute_skeleton/skull1.vtf differ diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vmt b/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vmt new file mode 100644 index 00000000..04c5a841 --- /dev/null +++ b/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/unloze/cute_skeleton/skull2" + "$surfaceprop" "rock" +} diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vtf b/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vtf new file mode 100644 index 00000000..c9c1fef9 Binary files /dev/null and b/season_halloween/content/materials/models/unloze/cute_skeleton/skull2.vtf differ diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vmt b/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vmt new file mode 100644 index 00000000..c4934886 --- /dev/null +++ b/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$basetexture" "models/unloze/cute_skeleton/skull3" + "$surfaceprop" "rock" +} diff --git a/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vtf b/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vtf new file mode 100644 index 00000000..7398d2ae Binary files /dev/null and b/season_halloween/content/materials/models/unloze/cute_skeleton/skull3.vtf differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx80.vtx b/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx80.vtx new file mode 100644 index 00000000..44431008 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx80.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx90.vtx b/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx90.vtx new file mode 100644 index 00000000..44431008 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_01.dx90.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_01.mdl b/season_halloween/content/models/hh2015/escalados/jackolantern_01.mdl new file mode 100644 index 00000000..d781c99e Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_01.mdl differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_01.vvd b/season_halloween/content/models/hh2015/escalados/jackolantern_01.vvd new file mode 100644 index 00000000..893b5f91 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_01.vvd differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx80.vtx b/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx80.vtx new file mode 100644 index 00000000..c1234f8f Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx80.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx90.vtx b/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx90.vtx new file mode 100644 index 00000000..c1234f8f Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_02.dx90.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_02.mdl b/season_halloween/content/models/hh2015/escalados/jackolantern_02.mdl new file mode 100644 index 00000000..fb4f046f Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_02.mdl differ diff --git a/season_halloween/content/models/hh2015/escalados/jackolantern_02.vvd b/season_halloween/content/models/hh2015/escalados/jackolantern_02.vvd new file mode 100644 index 00000000..0cd96e72 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/jackolantern_02.vvd differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island01.dx80.vtx b/season_halloween/content/models/hh2015/escalados/skull_island01.dx80.vtx new file mode 100644 index 00000000..10f6b6dd Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island01.dx80.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island01.dx90.vtx b/season_halloween/content/models/hh2015/escalados/skull_island01.dx90.vtx new file mode 100644 index 00000000..10f6b6dd Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island01.dx90.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island01.mdl b/season_halloween/content/models/hh2015/escalados/skull_island01.mdl new file mode 100644 index 00000000..8daa79b0 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island01.mdl differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island01.vvd b/season_halloween/content/models/hh2015/escalados/skull_island01.vvd new file mode 100644 index 00000000..ede6c601 Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island01.vvd differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx80.vtx b/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx80.vtx new file mode 100644 index 00000000..0fa0d4bb Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx80.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx90.vtx b/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx90.vtx new file mode 100644 index 00000000..0fa0d4bb Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island_horns.dx90.vtx differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island_horns.mdl b/season_halloween/content/models/hh2015/escalados/skull_island_horns.mdl new file mode 100644 index 00000000..10518fdd Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island_horns.mdl differ diff --git a/season_halloween/content/models/hh2015/escalados/skull_island_horns.vvd b/season_halloween/content/models/hh2015/escalados/skull_island_horns.vvd new file mode 100644 index 00000000..d75b141d Binary files /dev/null and b/season_halloween/content/models/hh2015/escalados/skull_island_horns.vvd differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx80.vtx b/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx80.vtx new file mode 100644 index 00000000..8f737d6b Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx80.vtx differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx90.vtx b/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx90.vtx new file mode 100644 index 00000000..ff825d53 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.dx90.vtx differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.mdl b/season_halloween/content/models/models_kit/hallo_pumpkin_l.mdl new file mode 100644 index 00000000..7aedf714 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.mdl differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.phy b/season_halloween/content/models/models_kit/hallo_pumpkin_l.phy new file mode 100644 index 00000000..b1c3ea54 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.phy differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.sw.vtx b/season_halloween/content/models/models_kit/hallo_pumpkin_l.sw.vtx new file mode 100644 index 00000000..a5bc33b3 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.sw.vtx differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.vvd b/season_halloween/content/models/models_kit/hallo_pumpkin_l.vvd new file mode 100644 index 00000000..15c09f34 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.vvd differ diff --git a/season_halloween/content/models/models_kit/hallo_pumpkin_l.xbox.vtx b/season_halloween/content/models/models_kit/hallo_pumpkin_l.xbox.vtx new file mode 100644 index 00000000..1bc549c6 Binary files /dev/null and b/season_halloween/content/models/models_kit/hallo_pumpkin_l.xbox.vtx differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.dx80.vtx b/season_halloween/content/models/player/microsoft/skeleton.dx80.vtx new file mode 100644 index 00000000..e2fde596 Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.dx80.vtx differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.dx90.vtx b/season_halloween/content/models/player/microsoft/skeleton.dx90.vtx new file mode 100644 index 00000000..31fd29fd Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.dx90.vtx differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.mdl b/season_halloween/content/models/player/microsoft/skeleton.mdl new file mode 100644 index 00000000..40696f05 Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.mdl differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.phy b/season_halloween/content/models/player/microsoft/skeleton.phy new file mode 100644 index 00000000..155e3f1e Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.phy differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.sw.vtx b/season_halloween/content/models/player/microsoft/skeleton.sw.vtx new file mode 100644 index 00000000..3a1600ba Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.sw.vtx differ diff --git a/season_halloween/content/models/player/microsoft/skeleton.vvd b/season_halloween/content/models/player/microsoft/skeleton.vvd new file mode 100644 index 00000000..0087e5f1 Binary files /dev/null and b/season_halloween/content/models/player/microsoft/skeleton.vvd differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx80.vtx b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx80.vtx new file mode 100644 index 00000000..385c947f Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx80.vtx differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx90.vtx b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx90.vtx new file mode 100644 index 00000000..e7f4616c Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.dx90.vtx differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.mdl b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.mdl new file mode 100644 index 00000000..74e4258c Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.mdl differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.phy b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.phy new file mode 100644 index 00000000..42ff3418 Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.phy differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.sw.vtx b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.sw.vtx new file mode 100644 index 00000000..2ead6593 Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.sw.vtx differ diff --git a/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.vvd b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.vvd new file mode 100644 index 00000000..64b794a7 Binary files /dev/null and b/season_halloween/content/models/player/techknow/grimreaper/grim_unloze.vvd differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.dx80.vtx b/season_halloween/content/models/player/techknow/thorn/thorn.dx80.vtx new file mode 100644 index 00000000..0d22264d Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.dx80.vtx differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.dx90.vtx b/season_halloween/content/models/player/techknow/thorn/thorn.dx90.vtx new file mode 100644 index 00000000..509fb6d1 Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.dx90.vtx differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.mdl b/season_halloween/content/models/player/techknow/thorn/thorn.mdl new file mode 100644 index 00000000..0cb8ceb5 Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.mdl differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.phy b/season_halloween/content/models/player/techknow/thorn/thorn.phy new file mode 100644 index 00000000..cef9db9b Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.phy differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.sw.vtx b/season_halloween/content/models/player/techknow/thorn/thorn.sw.vtx new file mode 100644 index 00000000..e57da2ae Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.sw.vtx differ diff --git a/season_halloween/content/models/player/techknow/thorn/thorn.vvd b/season_halloween/content/models/player/techknow/thorn/thorn.vvd new file mode 100644 index 00000000..26cb96b5 Binary files /dev/null and b/season_halloween/content/models/player/techknow/thorn/thorn.vvd differ diff --git a/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx80.vtx b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx80.vtx new file mode 100644 index 00000000..ea31444b Binary files /dev/null and b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx80.vtx differ diff --git a/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx90.vtx b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx90.vtx new file mode 100644 index 00000000..ea31444b Binary files /dev/null and b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.dx90.vtx differ diff --git a/season_halloween/content/models/syoudous/spooky/ghost_no_hat.mdl b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.mdl new file mode 100644 index 00000000..71a56b15 Binary files /dev/null and b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.mdl differ diff --git a/season_halloween/content/models/syoudous/spooky/ghost_no_hat.vvd b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.vvd new file mode 100644 index 00000000..02d79877 Binary files /dev/null and b/season_halloween/content/models/syoudous/spooky/ghost_no_hat.vvd differ diff --git a/season_halloween/content/models/unloze/cute_skeleton.dx80.vtx b/season_halloween/content/models/unloze/cute_skeleton.dx80.vtx new file mode 100644 index 00000000..f697d888 Binary files /dev/null and b/season_halloween/content/models/unloze/cute_skeleton.dx80.vtx differ diff --git a/season_halloween/content/models/unloze/cute_skeleton.dx90.vtx b/season_halloween/content/models/unloze/cute_skeleton.dx90.vtx new file mode 100644 index 00000000..d7ec5582 Binary files /dev/null and b/season_halloween/content/models/unloze/cute_skeleton.dx90.vtx differ diff --git a/season_halloween/content/models/unloze/cute_skeleton.mdl b/season_halloween/content/models/unloze/cute_skeleton.mdl new file mode 100644 index 00000000..3ccece8c Binary files /dev/null and b/season_halloween/content/models/unloze/cute_skeleton.mdl differ diff --git a/season_halloween/content/models/unloze/cute_skeleton.sw.vtx b/season_halloween/content/models/unloze/cute_skeleton.sw.vtx new file mode 100644 index 00000000..678d1d77 Binary files /dev/null and b/season_halloween/content/models/unloze/cute_skeleton.sw.vtx differ diff --git a/season_halloween/content/models/unloze/cute_skeleton.vvd b/season_halloween/content/models/unloze/cute_skeleton.vvd new file mode 100644 index 00000000..7166f1ae Binary files /dev/null and b/season_halloween/content/models/unloze/cute_skeleton.vvd differ diff --git a/season_halloween/scripting/season_halloween.sp b/season_halloween/scripting/season_halloween.sp new file mode 100644 index 00000000..dbfc9223 --- /dev/null +++ b/season_halloween/scripting/season_halloween.sp @@ -0,0 +1,892 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#pragma newdecls required + +/* CONVARS */ +ConVar g_hCVar_CollectablesEnabled; +ConVar g_hCVar_RandomIntervalMin; +ConVar g_hCVar_RandomIntervalMax; +ConVar g_hCVar_InfectionEffectEnabled; +ConVar g_hCVar_MilestoneInfection; +ConVar g_hCVar_MilestoneGrenade; +ConVar g_hCVar_MilestoneSkin; +ConVar g_hCVar_HighscoreDisplay; +ConVar g_hCVar_PlayerRequirement; +ConVar g_hCVar_EntityLimit; + +/* DATABASE */ +Database g_hDatabase; + +/* BOOLS */ +bool g_bEnabled = true; +bool g_bPreAdminChecked[MAXPLAYERS+1]; +bool g_bResponseFailed[MAXPLAYERS+1]; +bool g_bResponsePassed[MAXPLAYERS+1]; + + +/* INTEGERS */ +int g_iCollected[MAXPLAYERS+1]; +int g_iCounter = 0; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE Season Event (Halloween)", + author = "Neon", + description = "UNLOZE Season Event (Halloween)", + version = "2.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + 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); + + HookEvent("round_start", OnRoundStart, EventHookMode_Post); + + RegConsoleCmd("sm_pumpkins", Command_Collected, "Shows the total amount of Pumpkins you have collected so far"); + RegConsoleCmd("sm_pumpkin", Command_Collected, "Shows the total amount of Pumpkins you have collected so far"); + RegConsoleCmd("sm_halloween", Command_Collected, "Shows the total amount of Pumpkins you have collected so far"); + RegConsoleCmd("sm_highscore", Command_HighScore, "Shows the Pumpkin HighScore"); + + AutoExecConfig(); + + char sError[256]; + if (SQL_CheckConfig("season")) + g_hDatabase = SQL_Connect("season", true, sError, sizeof(sError)); + + if (g_hDatabase == null) + LogError("Could not connect to database: %s", sError); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.dx80.vtx"); + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.dx90.vtx"); + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.mdl"); + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.phy"); + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.sw.vtx"); + AddFileToDownloadsTable("models/player/techknow/thorn/thorn.vvd"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/body.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/body.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/body_n.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/cape.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/collers.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/head.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/head.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/head_n.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/thorn/headlight.vmt"); + PrecacheModel("models/player/techknow/thorn/thorn.mdl"); + + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.dx80.vtx"); + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.dx90.vtx"); + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.mdl"); + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.phy"); + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.sw.vtx"); + AddFileToDownloadsTable("models/player/techknow/grimreaper/grim_unloze.vvd"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim_n.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim2.vmt"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim2.vtf"); + AddFileToDownloadsTable("materials/models/player/techknow/grimreaper/grim2_n.vtf"); + PrecacheModel("models/player/techknow/grimreaper/grim_unloze.mdl"); + + AddFileToDownloadsTable("models/player/microsoft/skeleton.dx80.vtx"); + AddFileToDownloadsTable("models/player/microsoft/skeleton.dx90.vtx"); + AddFileToDownloadsTable("models/player/microsoft/skeleton.mdl"); + AddFileToDownloadsTable("models/player/microsoft/skeleton.phy"); + AddFileToDownloadsTable("models/player/microsoft/skeleton.sw.vtx"); + AddFileToDownloadsTable("models/player/microsoft/skeleton.vvd"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull1.vmt"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull1.vtf"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull2.vmt"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull2.vtf"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull3.vmt"); + AddFileToDownloadsTable("materials/models/player/microsoft/skeleton/skull3.vtf"); + PrecacheModel("models/player/microsoft/skeleton.mdl"); + + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.dx80.vtx"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.dx90.vtx"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.mdl"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.phy"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.sw.vtx"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.vvd"); + AddFileToDownloadsTable("models/models_kit/hallo_pumpkin_l.xbox.vtx"); + AddFileToDownloadsTable("materials/models/models_kit/hallo_pumpkin.vmt"); + AddFileToDownloadsTable("materials/models/models_kit/hallo_pumpkin.vtf"); + AddFileToDownloadsTable("materials/models/models_kit/hallo_pumpkin_skin2.vmt"); + AddFileToDownloadsTable("materials/models/models_kit/hallo_pumpkin_skin2.vtf"); + PrecacheModel("models/models_kit/hallo_pumpkin_l.mdl"); + + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_01.dx80.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_01.dx90.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_01.mdl"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_01.vvd"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_dim.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_lit.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/hallo_pumpkin_skin2.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/pumpkin.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/pumpkin/pumpkin.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/misc/cheap_lightwarp.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/misc/firelayeredslowtiled512.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/misc/pumpkin_detail.vtf"); + PrecacheModel("models/hh2015/escalados/jackolantern_01.mdl"); + + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_02.dx80.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_02.dx90.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_02.mdl"); + AddFileToDownloadsTable("models/hh2015/escalados/jackolantern_02.vvd"); + PrecacheModel("models/hh2015/escalados/jackolantern_02.mdl"); + + AddFileToDownloadsTable("models/hh2015/escalados/skull_island_horns.dx80.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island_horns.dx90.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island_horns.mdl"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island_horns.vvd"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/eye_patch01.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/eye_patch01.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/mvm_human_skull.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/mvm_human_skull.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_horns.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_horns.vtf"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_island_skullhat.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_island_skullhat.vtft"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_island01.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/skull/skull_island01.vtf"); + PrecacheModel("models/hh2015/escalados/skull_island_horns.mdl"); + + AddFileToDownloadsTable("models/hh2015/escalados/skull_island01.dx80.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island01.dx90.vtx"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island01.mdl"); + AddFileToDownloadsTable("models/hh2015/escalados/skull_island01.vvd"); + PrecacheModel("models/hh2015/escalados/skull_island01.mdl"); + + AddFileToDownloadsTable("models/syoudous/spooky/ghost_no_hat.dx80.vtx"); + AddFileToDownloadsTable("models/syoudous/spooky/ghost_no_hat.dx90.vtx"); + AddFileToDownloadsTable("models/syoudous/spooky/ghost_no_hat.mdl"); + AddFileToDownloadsTable("models/syoudous/spooky/ghost_no_hat.vvd"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/ghost/scary_ghost.vmt"); + AddFileToDownloadsTable("materials/models/syoudous/spooky/ghost/scary_ghost.vtf"); + PrecacheModel("models/syoudous/spooky/ghost_no_hat.mdl"); + + AddFileToDownloadsTable("models/unloze/cute_skeleton.dx80.vtx"); + AddFileToDownloadsTable("models/unloze/cute_skeleton.dx90.vtx"); + AddFileToDownloadsTable("models/unloze/cute_skeleton.mdl"); + AddFileToDownloadsTable("models/unloze/cute_skeleton.sw.vtx"); + AddFileToDownloadsTable("models/unloze/cute_skeleton.vvd"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull1.vmt"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull1.vtf"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull2.vmt"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull2.vtf"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull3.vmt"); + AddFileToDownloadsTable("materials/models/unloze/cute_skeleton/skull3.vtf"); + PrecacheModel("models/unloze/cute_skeleton.mdl"); + + AddFileToDownloadsTable("sound/unl1/season/witch.wav"); + PrecacheSound("sound/unl1/season/witch.wav"); + + float fRandomInterval = GetRandomFloat(GetConVarFloat(g_hCVar_RandomIntervalMin), GetConVarFloat(g_hCVar_RandomIntervalMax)); + CreateTimer(fRandomInterval, SpawnCollectable, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRebuildAdminCache(AdminCachePart part) +{ + if (part != AdminCache_Admins) + return; + + CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnRebuildAdminCachePost(Handle hTimer) +{ + for (int client = 1; client <= MaxClients; client++) + { + if(g_bResponsePassed[client] && g_bPreAdminChecked[client]) + CheckAndAddFlag(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_iCollected[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_iCollected[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sSteamID32) +{ + if (IsFakeClient(client)) + return; + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT collected FROM halloween_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBConnect, sQuery, GetClientUserId(client)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBConnect(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "collected", iField); + g_iCollected[client] = SQL_FetchInt(rs, iField); + } + + delete rs; + + g_bResponsePassed[client] = true; + if (g_bPreAdminChecked[client]) + NotifyPostAdminCheck(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + g_bPreAdminChecked[client] = true; + + if (g_bResponsePassed[client] || g_bResponseFailed[client]) + return Plugin_Continue; + + RunAdminCacheChecks(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminFilter(int client) +{ + CheckAndAddFlag(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_iCounter = 0; + CreateTimer(10.0, CheckPlayerCount, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CheckPlayerCount(Handle timer) +{ + g_bEnabled = true; + if (GetClientCount(true) < g_hCVar_PlayerRequirement.IntValue) + { + g_bEnabled = false; + CPrintToChatAll("{darkorange}[UNLOZE HALLOWEEN] {white}Minimum Player Requirement to spawn Pumpkins: {green}%d {white} - Currently online: {red}%d{white}.", g_hCVar_PlayerRequirement.IntValue, GetClientCount(true)); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_HighScore(int client, int args) +{ + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * from halloween_table order by collected desc limit %d", g_hCVar_HighscoreDisplay.IntValue); + SQL_TQuery(g_hDatabase, TQueryCBHighscore, sQuery, GetClientUserId(client)); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBHighscore(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + char sName[MAX_NAME_LENGTH]; + char sBuffer[2048] = "{darkorange}[UNLOZE HALLOWEEN] {white}TOP COLLECTORS:\n"; + char sTempBuffer[1024] = ""; + + for(int i = 1; i <= g_hCVar_HighscoreDisplay.IntValue; i++) + { + int iField; + SQL_FetchRow(rs); + + SQL_FieldNameToNum(rs, "name", iField); + SQL_FetchString(rs, iField, sName, sizeof(sName)); + + SQL_FieldNameToNum(rs, "collected", iField); + int iCollected = SQL_FetchInt(rs, iField); + + Format(sTempBuffer, sizeof(sTempBuffer), "{green}%d: %s - {red}%d \n", i, sName, iCollected); + StrCat(sBuffer, sizeof(sBuffer), sTempBuffer); + } + delete rs; + + CPrintToChat(client, sBuffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Collected(int client, int args) +{ + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT collected FROM halloween_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBCollected, sQuery, GetClientUserId(client)); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBCollected(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "collected", iField); + g_iCollected[client] = SQL_FetchInt(rs, iField); + } + else + g_iCollected[client] = 0; + + delete rs; + + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}You have collected {green}%d {white}pumpkins so far.", g_iCollected[client]); + + if ((g_iCollected[client] > g_hCVar_MilestoneInfection.IntValue) && (g_iCollected[client] > g_hCVar_MilestoneSkin.IntValue)) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}You have unlocked {red}all rewards{white} already."); + if (g_iCollected[client] < g_hCVar_MilestoneInfection.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}You need to collect {green}%d {white}more pumpkins to unlock {red}INFECTION EFFECTS{white}.", g_hCVar_MilestoneInfection.IntValue - g_iCollected[client]); + if (g_iCollected[client] < g_hCVar_MilestoneGrenade.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}You need to collect {green}%d {white}more pumpkins to unlock {red}GRENADE SKINS{white}.", g_hCVar_MilestoneGrenade.IntValue - g_iCollected[client]); + if (g_iCollected[client] < g_hCVar_MilestoneSkin.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}You need to collect {green}%d {white}more pumpkins to unlock {red}HALLOWEEN PLAYER SKINS{white}.", g_hCVar_MilestoneSkin.IntValue - g_iCollected[client]); + +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action SpawnCollectable(Handle timer) +{ + float fRandomInterval = GetRandomFloat(g_hCVar_RandomIntervalMin.FloatValue, g_hCVar_RandomIntervalMax.FloatValue); + CreateTimer(fRandomInterval, SpawnCollectable, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); + + if (!(g_hCVar_CollectablesEnabled.BoolValue) || !(g_bEnabled)) + return; + + int iTarget = GetTargetClient(); + + if (!IsValidClient(iTarget, false)) + return; + + float fOrigin[3]; + float fTempOrigin[3]; + GetClientAbsOrigin(iTarget, fOrigin); + + // Rotating + int iRotating = CreateEntityAtOrigin("func_rotating", fOrigin); + DispatchKeyFormat(iRotating, "targetname", "season_rotating_%d", g_iCounter); + DispatchKeyFormat(iRotating, "maxspeed", "20"); + DispatchKeyFormat(iRotating, "spawnflags", "65"); + SpawnAndActivate(iRotating); + + // make the trigger work. + SetEntityBBox(iRotating, view_as({-10.0, -1.0, -1.0}), view_as({1.0, 1.0, 1.0})); + SetEntityProps(iRotating); + + + // Model + int iModel = CreateEntityAtOrigin("prop_dynamic_override", fOrigin); + DispatchKeyFormat(iModel, "targetname", "season_prop_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/models_kit/hallo_pumpkin_l.mdl"); + DispatchKeyFormat(iModel, "modelscale", "1.0"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iRotating); + + int iRandomSkin = GetRandomInt(0, 1); + if (iRandomSkin == 0) + SetVariantString("0"); + else if (iRandomSkin == 1) + SetVariantString("1"); + AcceptEntityInput(iModel, "Skin"); + + + // Particle + fTempOrigin[0] = fOrigin[0]; + fTempOrigin[1] = fOrigin[1]; + fTempOrigin[2] = fOrigin[2] - 10.0; + int iParticle = CreateEntityAtOrigin("info_particle_system", fTempOrigin); + DispatchKeyFormat(iParticle, "targetname", "season_particle_%d", g_iCounter); + DispatchKeyFormat(iParticle, "effect_name", "achieved"); + SpawnAndActivate(iParticle); + ParentToEntity(iParticle, iRotating); + + + // Trigger + int iTrigger = CreateEntityAtOrigin("trigger_multiple", fOrigin); + DispatchKeyFormat(iTrigger, "targetname", "season_trigger_%d", g_iCounter); + DispatchKeyFormat(iTrigger, "spawnflags", "1"); + DispatchKeyFormat(iTrigger, "startdisabled", "1"); + DispatchKeyFormat(iTrigger, "OnUser1", "season_hitbox_%d,FireUser2,,0,1", g_iCounter); + SpawnAndActivate(iTrigger); + ParentToEntity(iTrigger, iRotating); + + // make the trigger work. + SetEntityBBox(iTrigger, view_as({-16.0, -16.0, -1.0}), view_as({16.0, 16.0, 32.0})); + SetEntityProps(iTrigger); + + HookSingleEntityOutput(iTrigger, "OnStartTouch", HookCallbackTrigger, false); + + + // Ambient + int iSound = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSound, "targetname", "season_sound_%d", g_iCounter); + DispatchKeyFormat(iSound, "spawnflags", "49"); + DispatchKeyFormat(iSound, "radius", "2000"); + DispatchKeyFormat(iSound, "message", "unl1/season/witch.wav"); + DispatchKeyFormat(iSound, "volume", "10"); + DispatchKeyFormat(iSound, "health", "10"); + DispatchKeyFormat(iSound, "pitch", "100"); + DispatchKeyFormat(iSound, "pitchstart", "100"); + SpawnAndActivate(iSound); + ParentToEntity(iSound, iRotating); + + + // Hitbox + int iHitbox = CreateEntityAtOrigin("func_physbox_multiplayer", fOrigin); + DispatchKeyFormat(iHitbox, "targetname", "season_hitbox_%d", g_iCounter); + DispatchKeyFormat(iHitbox, "model", "models/models_kit/hallo_pumpkin_l.mdl"); + DispatchKeyFormat(iHitbox, "modelscale", "1.0"); + DispatchKeyFormat(iHitbox, "disableshadows", "1"); + DispatchKeyFormat(iHitbox, "disablereceiveshadows", "1"); + DispatchKeyFormat(iHitbox, "DisableBoneFollowers", "1"); + DispatchKeyFormat(iHitbox, "rendermode", "10"); + DispatchKeyFormat(iHitbox, "PerformanceMode", "1"); + DispatchKeyFormat(iHitbox, "material", "3"); + DispatchKeyFormat(iHitbox, "health", "200"); + DispatchKeyFormat(iHitbox, "physdamagescale", "1.0"); + DispatchKeyFormat(iHitbox, "OnBreak", "season_rotating_%d,KillHierarchy,,2.5,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_particle_%d,Start,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_sound_%d,PlaySound,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_sound_%d,Kill,,2.4,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser1", "season_rotating_%d,KillHierarchy,,59.0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser1", "season_sound_%d,Kill,,59.0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser2", "season_rotating_%d,KillHierarchy,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser2", "season_sound_%d,Kill,,0,1", g_iCounter); + SpawnAndActivate(iHitbox); + ParentToEntity(iHitbox, iRotating); + + HookSingleEntityOutput(iHitbox, "OnBreak", HookCallback, true); + + + AcceptEntityInput(iHitbox, "FireUser1"); + AcceptEntityInput(iTrigger, "Enable"); + + int iEntityLimit = g_hCVar_EntityLimit.IntValue; + + if ((iRotating > iEntityLimit) || (iParticle > iEntityLimit) || (iModel > iEntityLimit) || (iHitbox > iEntityLimit) || (iTrigger > iEntityLimit) || (iSound > iEntityLimit)) + { + AcceptEntityInput(iHitbox, "FireUser2"); + CPrintToChatAll("{darkorange}[UNLOZE HALLOWEEN] {white}Pumpkin removed due to {red}critical amount of entities{white}!"); + } + + g_iCounter += 1; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int GetTargetClient() +{ + int iEligibleClients[MAXPLAYERS+1]; + int iClientCount = 0; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && IsPlayerAlive(i) && (ZR_IsClientHuman(i))) + { + iEligibleClients[iClientCount] = i; + iClientCount += 1; + } + } + + if (iClientCount == 0) + return -1; + + int randomIndex = GetRandomInt(0, iClientCount - 1); + return iEligibleClients[randomIndex]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HookCallbackTrigger(const char[] output, int caller, int activator, float delay) +{ + if (ZR_IsClientZombie(activator)) + { + UnhookSingleEntityOutput(caller, "OnStartTouch", HookCallbackTrigger); + AcceptEntityInput(caller, "FireUser1"); + CPrintToChatAll("{darkorange}[UNLOZE HALLOWEEN] {white}Zombies {red}destroyed{white} a pumpkin!"); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HookCallback(const char[] output, int caller, int activator, float delay) +{ + for (int client = 1; client <= MaxClients; client++) + { + if (IsValidClient(client) && !IsClientSourceTV(client) && IsPlayerAlive(client) && ZR_IsClientHuman(client)) + { + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sName[MAX_NAME_LENGTH]; + GetClientName(client, sName, sizeof(sName)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "INSERT INTO halloween_table (steam_auth,name,collected) VALUES ('%s','%s',1) ON DUPLICATE KEY UPDATE collected=collected+1;", sSteamID, sName); + SQL_FastQuery(g_hDatabase, sQuery); + + g_iCollected[client] += 1; + CheckAndAddFlag(client); + + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}Your Team found a pumpkin! You have collected {green}%d {white}pumpkins so far.", g_iCollected[client]); + if (g_iCollected[client] == g_hCVar_MilestoneInfection.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}Congratulations! You have unlocked {red}INFECTION EFFECTS{white}!"); + + if (g_iCollected[client] == g_hCVar_MilestoneGrenade.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}Congratulations! You have unlocked {red}GRENADE SKINS{white}!"); + + if (g_iCollected[client] == g_hCVar_MilestoneSkin.IntValue) + CPrintToChat(client, "{darkorange}[UNLOZE HALLOWEEN] {white}Congratulations! You have unlocked {red}HALLOWEEN SKINS{white}!"); + } + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (!IsValidClient(attacker)) + return; + + if (g_hCVar_InfectionEffectEnabled.BoolValue && ((g_iCollected[client] >= g_hCVar_MilestoneInfection.IntValue) || g_iCollected[attacker] >= g_hCVar_MilestoneInfection.IntValue)) + { + float fInfectionOrigin[3]; + GetClientAbsOrigin(client, fInfectionOrigin); + + // Rotating + int iRotating = CreateEntityAtOrigin("func_rotating", fInfectionOrigin); + DispatchKeyFormat(iRotating, "targetname", "season_infection_rotating_%d", g_iCounter); + DispatchKeyFormat(iRotating, "maxspeed", "13"); + DispatchKeyFormat(iRotating, "spawnflags", "64"); + DispatchKeyFormat(iRotating, "OnUser1", "!self,KillHierarchy,,45,1"); + DispatchKeyFormat(iRotating, "OnUser2", "!self,KillHierarchy,,0,1"); + DispatchKeyFormat(iRotating, "OnUser3", "!self,Start,,0,1"); + SpawnAndActivate(iRotating); + + // make the trigger work. + SetEntityBBox(iRotating, view_as({-10.0, -1.0, -1.0}), view_as({1.0, 1.0, 1.0})); + SetEntityProps(iRotating); + + + int iModel = CreateEntityAtOrigin("prop_dynamic_override", fInfectionOrigin); + DispatchKeyFormat(iModel, "targetname", "season_infection_prop_%d", g_iCounter); + + int iRandomSkin = GetRandomInt(0, 6); + if (iRandomSkin == 0) + { + DispatchKeyFormat(iModel, "model", "models/hh2015/escalados/jackolantern_01.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.03"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,0,1", g_iCounter); + } + else if (iRandomSkin == 1) + { + DispatchKeyFormat(iModel, "model", "models/hh2015/escalados/jackolantern_02.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.025"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,0,1", g_iCounter); + } + else if (iRandomSkin == 2) + { + DispatchKeyFormat(iModel, "model", "models/hh2015/escalados/skull_island_horns.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.08"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,0,1", g_iCounter); + + } + else if (iRandomSkin == 3) + { + DispatchKeyFormat(iModel, "model", "models/hh2015/escalados/skull_island01.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.1"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,0,1", g_iCounter); + fInfectionOrigin[2] += 7; + } + else if (iRandomSkin == 4) + { + DispatchKeyFormat(iModel, "model", "models/syoudous/spooky/ghost_no_hat.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.4"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,0,1", g_iCounter); + } + else if ((iRandomSkin == 5) || (iRandomSkin == 6)) + { + DispatchKeyFormat(iModel, "model", "models/unloze/cute_skeleton.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.35"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + DispatchKeyFormat(iModel, "DefaultAnim","crumbled"); + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,wakeup,3,1"); + + int iRandomAnimation = GetRandomInt(0, 4); + + if (iRandomAnimation == 0) + { + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,idle,4.5,1"); + } + else if (iRandomAnimation == 1) + { + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,dance_1,4.5,1"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,4.5,1", g_iCounter); + } + else if (iRandomAnimation == 2) + { + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,dance_2,4.5,1"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,4.5,1", g_iCounter); + } + else if (iRandomAnimation == 3) + { + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,dance_3,4.5,1"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,4.5,1", g_iCounter); + } + else if (iRandomAnimation == 4) + { + DispatchKeyFormat(iModel, "OnUser1", "!self,SetAnimation,dance_4,4.5,1"); + DispatchKeyFormat(iModel, "OnUser1", "season_infection_rotating_%d,Start,,4.5,1", g_iCounter); + } + } + + DispatchKeyFormat(iModel, "disableshadows", "1"); + DispatchKeyFormat(iModel, "disablereceiveshadows", "1"); + DispatchKeyFormat(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValueVector(iModel, "origin", fInfectionOrigin); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iRotating); + AcceptEntityInput(iModel, "FireUser1"); + AcceptEntityInput(iRotating, "FireUser1"); + + int iEntityLimit = g_hCVar_EntityLimit.IntValue; + if ((iModel > iEntityLimit) || (iRotating > iEntityLimit)) + { + AcceptEntityInput(iRotating, "FireUser2"); + CPrintToChatAll("{darkorange}[UNLOZE HALLOWEEN] {white}Infection Effect removed due to {red}critical amount of entities{white}!"); + } + + g_iCounter += 1; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnEntityCreated(int entity, const char[] classname) +{ + if (StrContains(classname, "_projectile", false) != -1) + SDKHook(entity, SDKHook_SpawnPost, ProjectileSpawned); + +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void ProjectileSpawned(int Entity) +{ + int iOwner = GetEntPropEnt(Entity, Prop_Data, "m_hOwnerEntity"); + if(!IsValidClient(iOwner)) + return; + + if (g_iCollected[iOwner] >= g_hCVar_MilestoneGrenade.IntValue) + { + SetEntityRenderMode(Entity, RENDER_NONE); + + float fNadeOrigin[3]; + GetEntPropVector(Entity, Prop_Send, "m_vecOrigin", fNadeOrigin); + + int iNadeProp = CreateEntityAtOrigin("prop_dynamic_override", fNadeOrigin); + DispatchKeyFormat(iNadeProp, "targetname", "season_nade_prop_%d", g_iCounter); + + DispatchKeyFormat(iNadeProp, "model", "models/models_kit/hallo_pumpkin_l.mdl"); + DispatchKeyFormat(iNadeProp, "disableshadows", "1"); + DispatchKeyFormat(iNadeProp, "disablereceiveshadows", "1"); + DispatchKeyFormat(iNadeProp, "DisableBoneFollowers", "1"); + DispatchKeyFormat(iNadeProp, "modelscale", "0.35"); + + SpawnAndActivate(iNadeProp); + ParentToEntity(iNadeProp, Entity); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void CheckAndAddFlag(int client) +{ + if (g_iCollected[client] >= g_hCVar_MilestoneSkin.IntValue) + AddUserFlags(client, Admin_Custom4); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int CreateEntityAtOrigin(const char[] classname, const float origin[3]) +{ + int entity = CreateEntityByName(classname); + + TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR); + + return entity; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...) +{ + char buffer[1024]; + VFormat(buffer, sizeof(buffer), value, 4); + + DispatchKeyValue(entity, key, buffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SpawnAndActivate(int entity) +{ + DispatchSpawn(entity); + ActivateEntity(entity); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void ParentToEntity(int entity, int parent) +{ + SetVariantString("!activator"); + AcceptEntityInput(entity, "SetParent", parent, parent); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityBBox(int entity, const float mins[3], const float maxs[3]) +{ + SetEntPropVector(entity, Prop_Send, "m_vecMins", mins); + SetEntPropVector(entity, Prop_Send, "m_vecMaxs", maxs); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityProps(int entity) +{ + SetEntProp(entity, Prop_Send, "m_nSolidType", 3); + SetEntProp(entity, Prop_Send, "m_fEffects", 32); +} diff --git a/season_xmas/content/materials/models/johny-srka/black_felt.vmt b/season_xmas/content/materials/models/johny-srka/black_felt.vmt new file mode 100644 index 00000000..9c9da282 --- /dev/null +++ b/season_xmas/content/materials/models/johny-srka/black_felt.vmt @@ -0,0 +1,6 @@ +"VertexLitGeneric" +{ + "$basetexture" "models\johny-srka\black_felt" + "model" 1 + "$envmapmode" 1 +} diff --git a/season_xmas/content/materials/models/johny-srka/black_felt.vtf b/season_xmas/content/materials/models/johny-srka/black_felt.vtf new file mode 100644 index 00000000..28fe5b4b Binary files /dev/null and b/season_xmas/content/materials/models/johny-srka/black_felt.vtf differ diff --git a/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vmt b/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vmt new file mode 100644 index 00000000..7ec400c6 --- /dev/null +++ b/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vmt @@ -0,0 +1,6 @@ +"VertexLitGeneric" +{ + "$basetexture" "models\johny-srka\fabricpatterns0017_m" + "model" 1 + "$envmapmode" 1 +} diff --git a/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vtf b/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vtf new file mode 100644 index 00000000..df7d7a55 Binary files /dev/null and b/season_xmas/content/materials/models/johny-srka/fabricpatterns0017_m.vtf differ diff --git a/season_xmas/content/materials/models/johny-srka/snowfloor002a.vmt b/season_xmas/content/materials/models/johny-srka/snowfloor002a.vmt new file mode 100644 index 00000000..1ca7792c --- /dev/null +++ b/season_xmas/content/materials/models/johny-srka/snowfloor002a.vmt @@ -0,0 +1,6 @@ +"VertexLitGeneric" +{ + "$basetexture" "models\johny-srka\snowfloor002a" + "model" 1 + "$envmapmode" 1 +} diff --git a/season_xmas/content/materials/models/johny-srka/snowfloor002a.vtf b/season_xmas/content/materials/models/johny-srka/snowfloor002a.vtf new file mode 100644 index 00000000..574f78e7 Binary files /dev/null and b/season_xmas/content/materials/models/johny-srka/snowfloor002a.vtf differ diff --git a/season_xmas/content/materials/models/johny-srka/wood_old.vmt b/season_xmas/content/materials/models/johny-srka/wood_old.vmt new file mode 100644 index 00000000..d353f0eb --- /dev/null +++ b/season_xmas/content/materials/models/johny-srka/wood_old.vmt @@ -0,0 +1,6 @@ +"VertexLitGeneric" +{ + "$basetexture" "models\johny-srka\wood_old" + "$envmapmode" 1 + "$model" 1 +} diff --git a/season_xmas/content/materials/models/johny-srka/wood_old.vtf b/season_xmas/content/materials/models/johny-srka/wood_old.vtf new file mode 100644 index 00000000..798b8864 Binary files /dev/null and b/season_xmas/content/materials/models/johny-srka/wood_old.vtf differ diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vmt b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vmt new file mode 100644 index 00000000..352473db --- /dev/null +++ b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vmt @@ -0,0 +1,6 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/models_kit/xmas/xmastree_miscA" + "$alphatest" "1" + "$nocull" "1" +} diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vtf b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vtf new file mode 100644 index 00000000..ccd2b314 Binary files /dev/null and b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca.vtf differ diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vmt b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vmt new file mode 100644 index 00000000..e18f422d --- /dev/null +++ b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vmt @@ -0,0 +1,6 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/models_kit/xmas/xmastree_miscA_skin2" + "$alphatest" "1" + "$nocull" "1" +} \ No newline at end of file diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vtf b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vtf new file mode 100644 index 00000000..ea30bb64 Binary files /dev/null and b/season_xmas/content/materials/models/models_kit/xmas/xmastree_misca_skin2.vtf differ diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vmt b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vmt new file mode 100644 index 00000000..f936d636 --- /dev/null +++ b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vmt @@ -0,0 +1,6 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/models_kit/xmas/xmastree_miscB" + "$envmap" "env_cubemap" + "$envmapmask" "models/models_kit/xmas/xmastree_miscB_spec" +} diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vtf b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vtf new file mode 100644 index 00000000..6c4c5c0b Binary files /dev/null and b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb.vtf differ diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vmt b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vmt new file mode 100644 index 00000000..0669e050 --- /dev/null +++ b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vmt @@ -0,0 +1,6 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/models_kit/xmas/xmastree_miscB_skin2" + "$envmap" "env_cubemap" + "$envmapmask" "models/models_kit/xmas/xmastree_miscB_spec" +} diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vtf b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vtf new file mode 100644 index 00000000..e0f3345e Binary files /dev/null and b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_skin2.vtf differ diff --git a/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_spec.vtf b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_spec.vtf new file mode 100644 index 00000000..9d36b082 Binary files /dev/null and b/season_xmas/content/materials/models/models_kit/xmas/xmastree_miscb_spec.vtf differ diff --git a/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vmt b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vmt new file mode 100644 index 00000000..fe7b2a32 --- /dev/null +++ b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vmt @@ -0,0 +1,31 @@ + +"VertexLitGeneric" +{ + "$basetexture" "models\player\stenli\smite\fenrir\body" + "$bumpmap" "models\player\stenli\smite\fenrir\body_n" + + + "$model" "1" + "$phong" "1" + "$phongexponent" "88" + "$phongboost" "0.08" + "$phongTint" "[5 3 3]" + "$phongfresnelranges" "[.05 .1 .2]" + "$nocull" 1 + + + "$detail" "models\player\stenli\smite\fenrir\body_s" + "$detailscale" "1" + "$detailblendfactor" "0.5" + "$detailblendmode" "3" + + + + "$rimlight" "1" + "$rimlightexponent" "88" + "$rimlightboost" "0.2" + "$rimmask" "1" + + +} + diff --git a/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vtf b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vtf new file mode 100644 index 00000000..73614908 Binary files /dev/null and b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body.vtf differ diff --git a/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_n.vtf b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_n.vtf new file mode 100644 index 00000000..071a1b63 Binary files /dev/null and b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_n.vtf differ diff --git a/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_s.vtf b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_s.vtf new file mode 100644 index 00000000..28d21599 Binary files /dev/null and b/season_xmas/content/materials/models/player/stenli/smite/fenrir/body_s.vtf differ diff --git a/season_xmas/content/materials/models/player/stenli/smite/fenrir/lights.vmt b/season_xmas/content/materials/models/player/stenli/smite/fenrir/lights.vmt new file mode 100644 index 00000000..a042b836 --- /dev/null +++ b/season_xmas/content/materials/models/player/stenli/smite/fenrir/lights.vmt @@ -0,0 +1,31 @@ +"VertexLitGeneric" + +{ + "$basetexture" "models\player\stenli\smite\fenrir\body" + "$bumpmap" "models\player\stenli\smite\fenrir\body_n" + + + + "$model" "1" + "$phong" "1" + "$phongexponent" "88" + "$phongboost" "5" + "$phongTint" "[3 3 3]" + "$phongfresnelranges" "[.05 .1 .2]" + "$nocull" 1 + + "$detail" "models\player\stenli\smite\fenrir\body_s" + "$detailscale" "1" + "$detailblendfactor" "0.3" + "$detailblendmode" "1" + + + + "$rimlight" "1" + "$rimlightexponent" "88" + "$rimlightboost" "0.2" + "$rimmask" "1" + + +} + diff --git a/season_xmas/content/materials/models/player/vad36lollipop/hat.vmt b/season_xmas/content/materials/models/player/vad36lollipop/hat.vmt new file mode 100644 index 00000000..fd13fe80 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36lollipop/hat.vmt @@ -0,0 +1,13 @@ +vertexlitgeneric +{ +$baseTexture "models\player\vad36lollipop\hat" +$bumpmap "models\player\vad36lollipop\hat_n" +//$phong 1 +//$phongboost "2.5" +//$phongexponent 5 +//$phongtint "[.85 .85 1]" +//$phongfresnelranges "[.3 .65 30]" +$ambientocclusion 1 +$nocull 1 +$diffuseexp "1.5" +} diff --git a/season_xmas/content/materials/models/player/vad36lollipop/hat.vtf b/season_xmas/content/materials/models/player/vad36lollipop/hat.vtf new file mode 100644 index 00000000..d7834a4e Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/hat.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/hat_n.vtf b/season_xmas/content/materials/models/player/vad36lollipop/hat_n.vtf new file mode 100644 index 00000000..cd129e43 Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/hat_n.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vmt b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vmt new file mode 100644 index 00000000..e95ab348 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vmt @@ -0,0 +1,13 @@ +vertexlitgeneric +{ +$baseTexture "models\player\vad36lollipop\tx_ch_main_juliet_cloth" +$bumpmap "models\player\vad36lollipop\tx_ch_main_juliet_cloth_n" +//$phong 1 +//$phongboost "2.5" +//$phongexponent 5 +//$phongtint "[.85 .85 1]" +//$phongfresnelranges "[.3 .65 30]" +$ambientocclusion 1 +$nocull 1 +$diffuseexp "1.5" +} diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vtf new file mode 100644 index 00000000..3d1c1cc8 Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth_n.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth_n.vtf new file mode 100644 index 00000000..64165f3d Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_cloth_n.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vmt b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vmt new file mode 100644 index 00000000..e7905136 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vmt @@ -0,0 +1,14 @@ +vertexlitgeneric +{ +$baseTexture "models\player\vad36lollipop\TX_CH_Main_Juliet_Hair_D_Cos11" +$bumpmap "models\player\vad36lollipop\TX_CH_Main_Juliet_Hair_N_Cos11" +$alphatest 1 +$phong 1 +$phongboost "2.5" +$phongexponent 5 +$phongtint "[.85 .85 1]" +$phongfresnelranges "[.3 .65 30]" +$ambientocclusion 1 +$nocull 1 +$diffuseexp "1.5" +} diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vtf new file mode 100644 index 00000000..9b6e9f8b Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_d_cos11.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_n_cos11.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_n_cos11.vtf new file mode 100644 index 00000000..35cb68b1 Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_hair_n_cos11.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vmt b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vmt new file mode 100644 index 00000000..18931b59 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vmt @@ -0,0 +1,14 @@ +vertexlitgeneric +{ +$baseTexture "models\player\vad36lollipop\TX_CH_Main_Juliet_Skin_D_Cos11" +$bumpmap "models\player\vad36lollipop\TX_CH_Main_Juliet_Skin_N_Cos11" +$alphatest 1 +//$phong 1 +//$phongboost "2.5" +//$phongexponent 5 +//$phongtint "[.85 .85 1]" +//$phongfresnelranges "[.3 .65 30]" +$ambientocclusion 1 +$nocull 1 +$diffuseexp "1.5" +} diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vtf new file mode 100644 index 00000000..5862d62e Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_d_cos11.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_n_cos11.vtf b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_n_cos11.vtf new file mode 100644 index 00000000..23909ddf Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36lollipop/tx_ch_main_juliet_skin_n_cos11.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36santa/Santa_D.vmt b/season_xmas/content/materials/models/player/vad36santa/Santa_D.vmt new file mode 100644 index 00000000..a8af8913 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36santa/Santa_D.vmt @@ -0,0 +1,11 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models/player/vad36santa/Santa_D" + "$bumpmap" "models/player/vad36santa/Santa_N" + + "$phong" "1" + "$phongboost" ".05" + "$phongexponent" "50" + "$phongfresnelranges" "[.8 .8 .6]" + +} diff --git a/season_xmas/content/materials/models/player/vad36santa/Santa_D.vtf b/season_xmas/content/materials/models/player/vad36santa/Santa_D.vtf new file mode 100644 index 00000000..a127e3c7 Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36santa/Santa_D.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vmt b/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vmt new file mode 100644 index 00000000..b8bac673 --- /dev/null +++ b/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vmt @@ -0,0 +1,11 @@ +"VertexLitGeneric" +{ + "$baseTexture" "models/player/vad36santa/Santa_D_B" + "$bumpmap" "models/player/vad36santa/Santa_N" + + "$phong" "1" + "$phongboost" ".05" + "$phongexponent" "50" + "$phongfresnelranges" "[.8 .8 .6]" + +} diff --git a/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vtf b/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vtf new file mode 100644 index 00000000..ac33c617 Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36santa/Santa_D_B.vtf differ diff --git a/season_xmas/content/materials/models/player/vad36santa/Santa_N.vtf b/season_xmas/content/materials/models/player/vad36santa/Santa_N.vtf new file mode 100644 index 00000000..1a516a3c Binary files /dev/null and b/season_xmas/content/materials/models/player/vad36santa/Santa_N.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vmt b/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vmt new file mode 100644 index 00000000..7365fffd --- /dev/null +++ b/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vmt @@ -0,0 +1,5 @@ +VertexLitGeneric +{ + "$basetexture" "models\weapons\v_models\eq_fraggrenade\bonnet" +} + diff --git a/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vtf b/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vtf new file mode 100644 index 00000000..f945023d Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/eq_fraggrenade/bonnet.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vmt b/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vmt new file mode 100644 index 00000000..b5c36e92 --- /dev/null +++ b/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vmt @@ -0,0 +1,8 @@ +VertexLitGeneric +{ + "$basetexture" "models\weapons\v_models\ornament\ornament" + "$envmap" "env_cubemap" + "$envmapmask" "models\weapons\v_models\ornament\reflect" + + +} diff --git a/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vtf b/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vtf new file mode 100644 index 00000000..2aef9046 Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/ornament/ornament.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/ornament/reflect.vtf b/season_xmas/content/materials/models/weapons/v_models/ornament/reflect.vtf new file mode 100644 index 00000000..a5d8f263 Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/ornament/reflect.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/snooball/s.vmt b/season_xmas/content/materials/models/weapons/v_models/snooball/s.vmt new file mode 100644 index 00000000..74edf8f1 --- /dev/null +++ b/season_xmas/content/materials/models/weapons/v_models/snooball/s.vmt @@ -0,0 +1,7 @@ +VertexLitGeneric +{ + "$basetexture" "models\weapons\v_models\snooball\s" + "$bumpmap" "models\weapons\v_models\snooball\s_norm" + +} + diff --git a/season_xmas/content/materials/models/weapons/v_models/snooball/s.vtf b/season_xmas/content/materials/models/weapons/v_models/snooball/s.vtf new file mode 100644 index 00000000..40812c13 Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/snooball/s.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/snooball/s_norm.vtf b/season_xmas/content/materials/models/weapons/v_models/snooball/s_norm.vtf new file mode 100644 index 00000000..f7a7c4d8 Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/snooball/s_norm.vtf differ diff --git a/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vmt b/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vmt new file mode 100644 index 00000000..e8c868b7 --- /dev/null +++ b/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vmt @@ -0,0 +1,5 @@ +VertexLitGeneric +{ + "$basetexture" "models\weapons\v_models\xmas_candy\cane" + +} diff --git a/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vtf b/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vtf new file mode 100644 index 00000000..ca8d2900 Binary files /dev/null and b/season_xmas/content/materials/models/weapons/v_models/xmas_candy/cane.vtf differ diff --git a/season_xmas/content/materials/models/zombieden/xmas/gift.vmt b/season_xmas/content/materials/models/zombieden/xmas/gift.vmt new file mode 100644 index 00000000..17896e3a --- /dev/null +++ b/season_xmas/content/materials/models/zombieden/xmas/gift.vmt @@ -0,0 +1,21 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/ZombiEden/xmas/gift" + + "$phong" "1" + "$phongexponent" "12" + "$phongboost" "1" + "$lightwarptexture" "models/ZombiEden/xmas/gift_lightwarp" + "$phongfresnelranges" "[.3 .5 .6]" + "$halflambert" "1" + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "4" // Exponent for phong component of rim lighting + "$rimlightboost" "1" // Boost for ambient cube component of rim lighting + "$selfillumfresnel" "3" + + "$selfillumfresnelminmaxexp" "[0 2 3]" + "$selfillum" "1" + "$selfillumtint" "[1.3 1.3 1.3]" +} diff --git a/season_xmas/content/materials/models/zombieden/xmas/gift.vtf b/season_xmas/content/materials/models/zombieden/xmas/gift.vtf new file mode 100644 index 00000000..3bfd9102 Binary files /dev/null and b/season_xmas/content/materials/models/zombieden/xmas/gift.vtf differ diff --git a/season_xmas/content/materials/models/zombieden/xmas/gift_2.vmt b/season_xmas/content/materials/models/zombieden/xmas/gift_2.vmt new file mode 100644 index 00000000..b6272c10 --- /dev/null +++ b/season_xmas/content/materials/models/zombieden/xmas/gift_2.vmt @@ -0,0 +1,21 @@ +"vertexlitGeneric" +{ + "$basetexture" "models/ZombiEden/xmas/gift_2" + + "$phong" "1" + "$phongexponent" "12" + "$phongboost" "1" + "$lightwarptexture" "models/ZombiEden/xmas/gift_lightwarp" + "$phongfresnelranges" "[.3 .5 .6]" + "$halflambert" "1" + + // Rim lighting parameters + "$rimlight" "1" // To enable rim lighting (requires phong) + "$rimlightexponent" "4" // Exponent for phong component of rim lighting + "$rimlightboost" "1" // Boost for ambient cube component of rim lighting + "$selfillumfresnel" "3" + + "$selfillumfresnelminmaxexp" "[0 2 3]" + "$selfillum" "1" + "$selfillumtint" "[1.3 1.3 1.3]" +} diff --git a/season_xmas/content/materials/models/zombieden/xmas/gift_2.vtf b/season_xmas/content/materials/models/zombieden/xmas/gift_2.vtf new file mode 100644 index 00000000..6214141f Binary files /dev/null and b/season_xmas/content/materials/models/zombieden/xmas/gift_2.vtf differ diff --git a/season_xmas/content/materials/models/zombieden/xmas/gift_lightwarp.vtf b/season_xmas/content/materials/models/zombieden/xmas/gift_lightwarp.vtf new file mode 100644 index 00000000..412b4980 Binary files /dev/null and b/season_xmas/content/materials/models/zombieden/xmas/gift_lightwarp.vtf differ diff --git a/season_xmas/content/models/johny-srka/snowman.dx80.vtx b/season_xmas/content/models/johny-srka/snowman.dx80.vtx new file mode 100644 index 00000000..f18357bc Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.dx80.vtx differ diff --git a/season_xmas/content/models/johny-srka/snowman.dx90.vtx b/season_xmas/content/models/johny-srka/snowman.dx90.vtx new file mode 100644 index 00000000..eaa0df1a Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.dx90.vtx differ diff --git a/season_xmas/content/models/johny-srka/snowman.mdl b/season_xmas/content/models/johny-srka/snowman.mdl new file mode 100644 index 00000000..c35876fe Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.mdl differ diff --git a/season_xmas/content/models/johny-srka/snowman.phy b/season_xmas/content/models/johny-srka/snowman.phy new file mode 100644 index 00000000..04675773 Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.phy differ diff --git a/season_xmas/content/models/johny-srka/snowman.sw.vtx b/season_xmas/content/models/johny-srka/snowman.sw.vtx new file mode 100644 index 00000000..ee943265 Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.sw.vtx differ diff --git a/season_xmas/content/models/johny-srka/snowman.vvd b/season_xmas/content/models/johny-srka/snowman.vvd new file mode 100644 index 00000000..e7bd7bd7 Binary files /dev/null and b/season_xmas/content/models/johny-srka/snowman.vvd differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx80.vtx b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx80.vtx new file mode 100644 index 00000000..97517833 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx80.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx90.vtx b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx90.vtx new file mode 100644 index 00000000..1559e66c Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.dx90.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.mdl b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.mdl new file mode 100644 index 00000000..c8d36f65 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.mdl differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.phy b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.phy new file mode 100644 index 00000000..2b03e88b Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.phy differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.sw.vtx b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.sw.vtx new file mode 100644 index 00000000..d89637da Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.sw.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.vvd b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.vvd new file mode 100644 index 00000000..a75cba2c Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.vvd differ diff --git a/season_xmas/content/models/models_kit/xmas/xmas_teddybear.xbox.vtx b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.xbox.vtx new file mode 100644 index 00000000..0f2b59cb Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmas_teddybear.xbox.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx80.vtx b/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx80.vtx new file mode 100644 index 00000000..c5d1a0f0 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx80.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx90.vtx b/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx90.vtx new file mode 100644 index 00000000..6b16d3a2 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.dx90.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.mdl b/season_xmas/content/models/models_kit/xmas/xmastree_mini.mdl new file mode 100644 index 00000000..cd61d477 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.mdl differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.phy b/season_xmas/content/models/models_kit/xmas/xmastree_mini.phy new file mode 100644 index 00000000..acd88cfe Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.phy differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.sw.vtx b/season_xmas/content/models/models_kit/xmas/xmastree_mini.sw.vtx new file mode 100644 index 00000000..bd1e339b Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.sw.vtx differ diff --git a/season_xmas/content/models/models_kit/xmas/xmastree_mini.vvd b/season_xmas/content/models/models_kit/xmas/xmastree_mini.vvd new file mode 100644 index 00000000..62323e23 Binary files /dev/null and b/season_xmas/content/models/models_kit/xmas/xmastree_mini.vvd differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.dx80.vtx b/season_xmas/content/models/player/stenli/smite/fenrir.dx80.vtx new file mode 100644 index 00000000..83f6121d Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.dx80.vtx differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.dx90.vtx b/season_xmas/content/models/player/stenli/smite/fenrir.dx90.vtx new file mode 100644 index 00000000..5e91eeaf Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.dx90.vtx differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.mdl b/season_xmas/content/models/player/stenli/smite/fenrir.mdl new file mode 100644 index 00000000..e24eee87 Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.mdl differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.phy b/season_xmas/content/models/player/stenli/smite/fenrir.phy new file mode 100644 index 00000000..b89f7d91 Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.phy differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.sw.vtx b/season_xmas/content/models/player/stenli/smite/fenrir.sw.vtx new file mode 100644 index 00000000..4099c15a Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.sw.vtx differ diff --git a/season_xmas/content/models/player/stenli/smite/fenrir.vvd b/season_xmas/content/models/player/stenli/smite/fenrir.vvd new file mode 100644 index 00000000..be31d350 Binary files /dev/null and b/season_xmas/content/models/player/stenli/smite/fenrir.vvd differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.dx80.vtx b/season_xmas/content/models/player/vad36lollipop/lolli_new.dx80.vtx new file mode 100644 index 00000000..ccc8004d Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.dx80.vtx differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.dx90.vtx b/season_xmas/content/models/player/vad36lollipop/lolli_new.dx90.vtx new file mode 100644 index 00000000..74cebd80 Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.dx90.vtx differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.mdl b/season_xmas/content/models/player/vad36lollipop/lolli_new.mdl new file mode 100644 index 00000000..ca3b4b6e Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.mdl differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.phy b/season_xmas/content/models/player/vad36lollipop/lolli_new.phy new file mode 100644 index 00000000..dab7cfaf Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.phy differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.sw.vtx b/season_xmas/content/models/player/vad36lollipop/lolli_new.sw.vtx new file mode 100644 index 00000000..b1a5aaa3 Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.sw.vtx differ diff --git a/season_xmas/content/models/player/vad36lollipop/lolli_new.vvd b/season_xmas/content/models/player/vad36lollipop/lolli_new.vvd new file mode 100644 index 00000000..09c5f568 Binary files /dev/null and b/season_xmas/content/models/player/vad36lollipop/lolli_new.vvd differ diff --git a/season_xmas/content/models/player/vad36santa/red.dx80.vtx b/season_xmas/content/models/player/vad36santa/red.dx80.vtx new file mode 100644 index 00000000..e4944643 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.dx80.vtx differ diff --git a/season_xmas/content/models/player/vad36santa/red.dx90.vtx b/season_xmas/content/models/player/vad36santa/red.dx90.vtx new file mode 100644 index 00000000..d79e1c85 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.dx90.vtx differ diff --git a/season_xmas/content/models/player/vad36santa/red.mdl b/season_xmas/content/models/player/vad36santa/red.mdl new file mode 100644 index 00000000..2119a672 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.mdl differ diff --git a/season_xmas/content/models/player/vad36santa/red.phy b/season_xmas/content/models/player/vad36santa/red.phy new file mode 100644 index 00000000..f4fd4091 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.phy differ diff --git a/season_xmas/content/models/player/vad36santa/red.sw.vtx b/season_xmas/content/models/player/vad36santa/red.sw.vtx new file mode 100644 index 00000000..6c7a6bc7 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.sw.vtx differ diff --git a/season_xmas/content/models/player/vad36santa/red.vvd b/season_xmas/content/models/player/vad36santa/red.vvd new file mode 100644 index 00000000..f91c6b84 Binary files /dev/null and b/season_xmas/content/models/player/vad36santa/red.vvd differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.dx80.vtx b/season_xmas/content/models/weapons/w_ornament_thrown.dx80.vtx new file mode 100644 index 00000000..27624f84 Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.dx80.vtx differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.dx90.vtx b/season_xmas/content/models/weapons/w_ornament_thrown.dx90.vtx new file mode 100644 index 00000000..748825aa Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.dx90.vtx differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.mdl b/season_xmas/content/models/weapons/w_ornament_thrown.mdl new file mode 100644 index 00000000..9cf99159 Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.mdl differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.phy b/season_xmas/content/models/weapons/w_ornament_thrown.phy new file mode 100644 index 00000000..d8c35f58 Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.phy differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.sw.vtx b/season_xmas/content/models/weapons/w_ornament_thrown.sw.vtx new file mode 100644 index 00000000..ea628bf6 Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.sw.vtx differ diff --git a/season_xmas/content/models/weapons/w_ornament_thrown.vvd b/season_xmas/content/models/weapons/w_ornament_thrown.vvd new file mode 100644 index 00000000..0d2b4fed Binary files /dev/null and b/season_xmas/content/models/weapons/w_ornament_thrown.vvd differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx80.vtx b/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx80.vtx new file mode 100644 index 00000000..5abf677e Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx80.vtx differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx90.vtx b/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx90.vtx new file mode 100644 index 00000000..a32ec3fe Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.dx90.vtx differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.mdl b/season_xmas/content/models/weapons/w_revenge_xmas_candy.mdl new file mode 100644 index 00000000..a5d803c6 Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.mdl differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.phy b/season_xmas/content/models/weapons/w_revenge_xmas_candy.phy new file mode 100644 index 00000000..50c67cf3 Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.phy differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.sw.vtx b/season_xmas/content/models/weapons/w_revenge_xmas_candy.sw.vtx new file mode 100644 index 00000000..d1f1824d Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.sw.vtx differ diff --git a/season_xmas/content/models/weapons/w_revenge_xmas_candy.vvd b/season_xmas/content/models/weapons/w_revenge_xmas_candy.vvd new file mode 100644 index 00000000..cd3f6a2b Binary files /dev/null and b/season_xmas/content/models/weapons/w_revenge_xmas_candy.vvd differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.dx80.vtx b/season_xmas/content/models/weapons/w_santa_hat_thrown.dx80.vtx new file mode 100644 index 00000000..1400ad68 Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.dx80.vtx differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.dx90.vtx b/season_xmas/content/models/weapons/w_santa_hat_thrown.dx90.vtx new file mode 100644 index 00000000..35754a05 Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.dx90.vtx differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.mdl b/season_xmas/content/models/weapons/w_santa_hat_thrown.mdl new file mode 100644 index 00000000..441feffc Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.mdl differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.phy b/season_xmas/content/models/weapons/w_santa_hat_thrown.phy new file mode 100644 index 00000000..7f0caffe Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.phy differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.sw.vtx b/season_xmas/content/models/weapons/w_santa_hat_thrown.sw.vtx new file mode 100644 index 00000000..f2b747be Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.sw.vtx differ diff --git a/season_xmas/content/models/weapons/w_santa_hat_thrown.vvd b/season_xmas/content/models/weapons/w_santa_hat_thrown.vvd new file mode 100644 index 00000000..ca19f93e Binary files /dev/null and b/season_xmas/content/models/weapons/w_santa_hat_thrown.vvd differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.dx80.vtx b/season_xmas/content/models/weapons/w_snowball_thrown.dx80.vtx new file mode 100644 index 00000000..10facd33 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.dx80.vtx differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.dx90.vtx b/season_xmas/content/models/weapons/w_snowball_thrown.dx90.vtx new file mode 100644 index 00000000..720e1c78 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.dx90.vtx differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.mdl b/season_xmas/content/models/weapons/w_snowball_thrown.mdl new file mode 100644 index 00000000..418b85c7 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.mdl differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.phy b/season_xmas/content/models/weapons/w_snowball_thrown.phy new file mode 100644 index 00000000..f539e370 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.phy differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.sw.vtx b/season_xmas/content/models/weapons/w_snowball_thrown.sw.vtx new file mode 100644 index 00000000..894542e5 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.sw.vtx differ diff --git a/season_xmas/content/models/weapons/w_snowball_thrown.vvd b/season_xmas/content/models/weapons/w_snowball_thrown.vvd new file mode 100644 index 00000000..c36acce2 Binary files /dev/null and b/season_xmas/content/models/weapons/w_snowball_thrown.vvd differ diff --git a/season_xmas/content/models/xmas/giftbox.dx80.vtx b/season_xmas/content/models/xmas/giftbox.dx80.vtx new file mode 100644 index 00000000..981eea4c Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.dx80.vtx differ diff --git a/season_xmas/content/models/xmas/giftbox.dx90.vtx b/season_xmas/content/models/xmas/giftbox.dx90.vtx new file mode 100644 index 00000000..1e238376 Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.dx90.vtx differ diff --git a/season_xmas/content/models/xmas/giftbox.mdl b/season_xmas/content/models/xmas/giftbox.mdl new file mode 100644 index 00000000..bb1fc07d Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.mdl differ diff --git a/season_xmas/content/models/xmas/giftbox.phy b/season_xmas/content/models/xmas/giftbox.phy new file mode 100644 index 00000000..69ddb354 Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.phy differ diff --git a/season_xmas/content/models/xmas/giftbox.sw.vtx b/season_xmas/content/models/xmas/giftbox.sw.vtx new file mode 100644 index 00000000..853cbb88 Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.sw.vtx differ diff --git a/season_xmas/content/models/xmas/giftbox.vvd b/season_xmas/content/models/xmas/giftbox.vvd new file mode 100644 index 00000000..9843a541 Binary files /dev/null and b/season_xmas/content/models/xmas/giftbox.vvd differ diff --git a/season_xmas/content/sound/unl1/season/hohohoho.wav b/season_xmas/content/sound/unl1/season/hohohoho.wav new file mode 100644 index 00000000..818db243 Binary files /dev/null and b/season_xmas/content/sound/unl1/season/hohohoho.wav differ diff --git a/season_xmas/scripting/season_xmas.sp b/season_xmas/scripting/season_xmas.sp new file mode 100644 index 00000000..7f31aa36 --- /dev/null +++ b/season_xmas/scripting/season_xmas.sp @@ -0,0 +1,889 @@ +#pragma semicolon 1 + +#include +#include +#include +#include +#include + +#pragma newdecls required + +/* CONVARS */ +ConVar g_hCVar_CollectablesEnabled; +ConVar g_hCVar_RandomIntervalMin; +ConVar g_hCVar_RandomIntervalMax; +ConVar g_hCVar_InfectionEffectEnabled; +ConVar g_hCVar_MilestoneInfection; +ConVar g_hCVar_MilestoneGrenade; +ConVar g_hCVar_MilestoneSkin; +ConVar g_hCVar_HighscoreDisplay; +ConVar g_hCVar_PlayerRequirement; +ConVar g_hCVar_EntityLimit; + +/* DATABASE */ +Database g_hDatabase; + +/* BOOLS */ +bool g_bEnabled = true; +bool g_bPreAdminChecked[MAXPLAYERS+1]; +bool g_bResponseFailed[MAXPLAYERS+1]; +bool g_bResponsePassed[MAXPLAYERS+1]; + + +/* INTEGERS */ +int g_iCollected[MAXPLAYERS+1]; +int g_iCounter = 0; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "UNLOZE Season Event (XMAS)", + author = "Neon", + description = "UNLOZE Season Event (XMAS)", + version = "2.0", + url = "https://steamcommunity.com/id/n3ontm" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + 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); + + HookEvent("round_start", OnRoundStart, EventHookMode_Post); + + RegConsoleCmd("sm_presents", Command_Collected, "Shows the total amount of Presents you have collected so far"); + RegConsoleCmd("sm_xmas", Command_Collected, "Shows the total amount of Presents you have collected so far"); + RegConsoleCmd("sm_highscore", Command_HighScore, "Shows the Present HighScore"); + + AutoExecConfig(); + + char sError[256]; + if (SQL_CheckConfig("season")) + g_hDatabase = SQL_Connect("season", true, sError, sizeof(sError)); + + if (g_hDatabase == null) + LogError("Could not connect to database: %s", sError); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnMapStart() +{ + 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"); + AddFileToDownloadsTable("models/player/stenli/smite/fenrir.mdl"); + 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"); + + 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"); + AddFileToDownloadsTable("models/player/vad36lollipop/lolli_new.sw.vtx"); + 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"); + + 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"); + AddFileToDownloadsTable("models/player/vad36santa/red.vvd"); + 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"); + + 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"); + + 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"); + + 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"); + AddFileToDownloadsTable("materials/models/weapons/v_models/xmas_candy/cane.vtf"); + PrecacheModel("models/weapons/w_revenge_xmas_candy.mdl"); + + 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"); + PrecacheModel("models/johny-srka/snowman.mdl"); + + 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"); + AddFileToDownloadsTable("materials/models/weapons/v_models/snooball/s_norm.vtf"); + PrecacheModel("models/weapons/w_snowball_thrown.mdl"); + + 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"); + AddFileToDownloadsTable("models/weapons/w_ornament_thrown.vvd"); + 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"); + PrecacheModel("models/weapons/w_ornament_thrown.mdl"); + + 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"); + AddFileToDownloadsTable("models/weapons/w_santa_hat_thrown.vvd"); + AddFileToDownloadsTable("materials/models/weapons/v_models/eq_fraggrenade/bonnet.vmt"); + AddFileToDownloadsTable("materials/models/weapons/v_models/eq_fraggrenade/bonnet.vtf"); + PrecacheModel("models/weapons/w_santa_hat_thrown.mdl"); + + AddFileToDownloadsTable("sound/unl1/season/hohohoho.wav"); + PrecacheSound("sound/unl1/season/hohohoho.wav"); + + + float fRandomInterval = GetRandomFloat(GetConVarFloat(g_hCVar_RandomIntervalMin), GetConVarFloat(g_hCVar_RandomIntervalMax)); + CreateTimer(fRandomInterval, SpawnCollectable, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRebuildAdminCache(AdminCachePart part) +{ + if (part != AdminCache_Admins) + return; + + CreateTimer(1.0, OnRebuildAdminCachePost, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnRebuildAdminCachePost(Handle hTimer) +{ + for (int client = 1; client <= MaxClients; client++) + { + if(g_bResponsePassed[client] && g_bPreAdminChecked[client]) + CheckAndAddFlag(client); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientConnected(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_iCollected[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bPreAdminChecked[client] = false; + g_bResponseFailed[client] = false; + g_bResponsePassed[client] = false; + + g_iCollected[client] = 0; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientAuthorized(int client, const char[] sSteamID32) +{ + if (IsFakeClient(client)) + return; + + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT collected FROM xmas_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBConnect, sQuery, GetClientUserId(client)); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBConnect(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "collected", iField); + g_iCollected[client] = SQL_FetchInt(rs, iField); + } + + delete rs; + + g_bResponsePassed[client] = true; + if (g_bPreAdminChecked[client]) + NotifyPostAdminCheck(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnClientPreAdminCheck(int client) +{ + g_bPreAdminChecked[client] = true; + + if (g_bResponsePassed[client] || g_bResponseFailed[client]) + return Plugin_Continue; + + RunAdminCacheChecks(client); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientPostAdminFilter(int client) +{ + CheckAndAddFlag(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + g_iCounter = 0; + CreateTimer(10.0, CheckPlayerCount, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action CheckPlayerCount(Handle timer) +{ + g_bEnabled = true; + if (GetClientCount(true) < g_hCVar_PlayerRequirement.IntValue) + { + g_bEnabled = false; + CPrintToChatAll("{green}[UNLOZE XMAS] {white}Minimum Player Requirement to spawn Presents: {green}%d {white} - Currently online: {red}%d{white}.", g_hCVar_PlayerRequirement.IntValue, GetClientCount(true)); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_HighScore(int client, int args) +{ + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT * from xmas_table order by collected desc limit %d", g_hCVar_HighscoreDisplay.IntValue); + SQL_TQuery(g_hDatabase, TQueryCBHighscore, sQuery, GetClientUserId(client)); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBHighscore(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + char sName[MAX_NAME_LENGTH]; + char sBuffer[2048] = "{green}[UNLOZE XMAS] {white}TOP COLLECTORS:\n"; + char sTempBuffer[1024] = ""; + + for(int i = 1; i <= g_hCVar_HighscoreDisplay.IntValue; i++) + { + int iField; + SQL_FetchRow(rs); + + SQL_FieldNameToNum(rs, "name", iField); + SQL_FetchString(rs, iField, sName, sizeof(sName)); + + SQL_FieldNameToNum(rs, "collected", iField); + int iCollected = SQL_FetchInt(rs, iField); + + Format(sTempBuffer, sizeof(sTempBuffer), "{green}%d: %s - {red}%d \n", i, sName, iCollected); + StrCat(sBuffer, sizeof(sBuffer), sTempBuffer); + } + delete rs; + + CPrintToChat(client, sBuffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action Command_Collected(int client, int args) +{ + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "SELECT collected FROM xmas_table WHERE steam_auth = '%s'", sSteamID); + SQL_TQuery(g_hDatabase, TQueryCBCollected, sQuery, GetClientUserId(client)); + return Plugin_Handled; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void TQueryCBCollected(Handle owner, Handle rs, const char[] error, any data) +{ + int client = 0; + + if ((client = GetClientOfUserId(data)) == 0) + return; + + if (SQL_GetRowCount(rs) > 0) + { + int iField; + SQL_FetchRow(rs); + SQL_FieldNameToNum(rs, "collected", iField); + g_iCollected[client] = SQL_FetchInt(rs, iField); + } + else + g_iCollected[client] = 0; + + delete rs; + + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}You have collected {green}%d {white}presents so far.", g_iCollected[client]); + + if ((g_iCollected[client] > g_hCVar_MilestoneInfection.IntValue) && (g_iCollected[client] > g_hCVar_MilestoneSkin.IntValue)) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}You have unlocked {red}all rewards{white} already."); + if (g_iCollected[client] < g_hCVar_MilestoneInfection.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}INFECTION EFFECTS{white}.", g_hCVar_MilestoneInfection.IntValue - g_iCollected[client]); + if (g_iCollected[client] < g_hCVar_MilestoneGrenade.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}GRENADE SKINS{white}.", g_hCVar_MilestoneGrenade.IntValue - g_iCollected[client]); + if (g_iCollected[client] < g_hCVar_MilestoneSkin.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}You need to collect {green}%d {white}more presents to unlock {red}XMAS PLAYER SKINS{white}.", g_hCVar_MilestoneSkin.IntValue - g_iCollected[client]); + +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action SpawnCollectable(Handle timer) +{ + float fRandomInterval = GetRandomFloat(g_hCVar_RandomIntervalMin.FloatValue, g_hCVar_RandomIntervalMax.FloatValue); + CreateTimer(fRandomInterval, SpawnCollectable, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE); + + if (!(g_hCVar_CollectablesEnabled.BoolValue) || !(g_bEnabled)) + return; + + int iTarget = GetTargetClient(); + + if (!IsValidClient(iTarget, false)) + return; + + float fOrigin[3]; + GetClientAbsOrigin(iTarget, fOrigin); + + // Rotating + int iRotating = CreateEntityAtOrigin("func_rotating", fOrigin); + DispatchKeyFormat(iRotating, "targetname", "season_rotating_%d", g_iCounter); + DispatchKeyFormat(iRotating, "maxspeed", "20"); + DispatchKeyFormat(iRotating, "spawnflags", "65"); + SpawnAndActivate(iRotating); + + // make the trigger work. + SetEntityBBox(iRotating, view_as({-10.0, -1.0, -1.0}), view_as({1.0, 1.0, 1.0})); + SetEntityProps(iRotating); + + + // Model + int iModel = CreateEntityAtOrigin("prop_dynamic_override", fOrigin); + DispatchKeyFormat(iModel, "targetname", "season_prop_%d", g_iCounter); + DispatchKeyFormat(iModel, "model", "models/zombieden/xmas/giftbox.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.8"); + DispatchKeyFormat(iModel, "disablebonefollowers", "1"); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iRotating); + + int iRandomSkin = GetRandomInt(0, 1); + if (iRandomSkin == 0) + SetVariantString("0"); + else if (iRandomSkin == 1) + SetVariantString("1"); + AcceptEntityInput(iModel, "Skin"); + + + // Particle + int iParticle = CreateEntityAtOrigin("info_particle_system", fOrigin); + DispatchKeyFormat(iParticle, "targetname", "season_particle_%d", g_iCounter); + DispatchKeyFormat(iParticle, "effect_name", "achieved"); + SpawnAndActivate(iParticle); + ParentToEntity(iParticle, iRotating); + + + // Trigger + int iTrigger = CreateEntityAtOrigin("trigger_multiple", fOrigin); + DispatchKeyFormat(iTrigger, "targetname", "season_trigger_%d", g_iCounter); + DispatchKeyFormat(iTrigger, "spawnflags", "1"); + DispatchKeyFormat(iTrigger, "startdisabled", "1"); + DispatchKeyFormat(iTrigger, "OnUser1", "season_hitbox_%d,FireUser2,,0,1", g_iCounter); + SpawnAndActivate(iTrigger); + ParentToEntity(iTrigger, iRotating); + + // make the trigger work. + SetEntityBBox(iTrigger, view_as({-16.0, -16.0, -1.0}), view_as({16.0, 16.0, 32.0})); + SetEntityProps(iTrigger); + + HookSingleEntityOutput(iTrigger, "OnStartTouch", HookCallbackTrigger, false); + + + // Ambient + int iSound = CreateEntityAtOrigin("ambient_generic", fOrigin); + DispatchKeyFormat(iSound, "targetname", "season_sound_%d", g_iCounter); + DispatchKeyFormat(iSound, "spawnflags", "49"); + DispatchKeyFormat(iSound, "radius", "2000"); + DispatchKeyFormat(iSound, "message", "unl1/season/hohohoho.wav"); + DispatchKeyFormat(iSound, "volume", "10"); + DispatchKeyFormat(iSound, "health", "10"); + DispatchKeyFormat(iSound, "pitch", "100"); + DispatchKeyFormat(iSound, "pitchstart", "100"); + SpawnAndActivate(iSound); + ParentToEntity(iSound, iRotating); + + + // Hitbox + int iHitbox = CreateEntityAtOrigin("func_physbox_multiplayer", fOrigin); + DispatchKeyFormat(iHitbox, "targetname", "season_hitbox_%d", g_iCounter); + DispatchKeyFormat(iHitbox, "model", "models/zombieden/xmas/giftbox.mdl"); + DispatchKeyFormat(iHitbox, "modelscale", "0.8"); + DispatchKeyFormat(iHitbox, "disableshadows", "1"); + DispatchKeyFormat(iHitbox, "disablereceiveshadows", "1"); + DispatchKeyFormat(iHitbox, "DisableBoneFollowers", "1"); + DispatchKeyFormat(iHitbox, "rendermode", "10"); + DispatchKeyFormat(iHitbox, "PerformanceMode", "1"); + DispatchKeyFormat(iHitbox, "material", "3"); + DispatchKeyFormat(iHitbox, "health", "200"); + DispatchKeyFormat(iHitbox, "physdamagescale", "1.0"); + DispatchKeyFormat(iHitbox, "OnBreak", "season_rotating_%d,KillHierarchy,,2.5,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_particle_%d,Start,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_sound_%d,PlaySound,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnBreak", "season_sound_%d,Kill,,2.4,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser1", "season_rotating_%d,KillHierarchy,,59.0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser1", "season_sound_%d,Kill,,59.0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser2", "season_rotating_%d,KillHierarchy,,0,1", g_iCounter); + DispatchKeyFormat(iHitbox, "OnUser2", "season_sound_%d,Kill,,0,1", g_iCounter); + SpawnAndActivate(iHitbox); + ParentToEntity(iHitbox, iRotating); + + HookSingleEntityOutput(iHitbox, "OnBreak", HookCallback, true); + + + AcceptEntityInput(iHitbox, "FireUser1"); + AcceptEntityInput(iTrigger, "Enable"); + + int iEntityLimit = g_hCVar_EntityLimit.IntValue; + + if ((iRotating > iEntityLimit) || (iParticle > iEntityLimit) || (iModel > iEntityLimit) || (iHitbox > iEntityLimit) || (iTrigger > iEntityLimit) || (iSound > iEntityLimit)) + { + AcceptEntityInput(iHitbox, "FireUser2"); + CPrintToChatAll("{green}[Unloze XMAS] {white}Present removed due to {red}critical amount of entities{white}!"); + } + + g_iCounter += 1; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public int GetTargetClient() +{ + int iEligibleClients[MAXPLAYERS+1]; + int iClientCount = 0; + + for(int i = 1; i <= MaxClients; i++) + { + if(IsClientInGame(i) && IsPlayerAlive(i) && (ZR_IsClientHuman(i))) + { + iEligibleClients[iClientCount] = i; + iClientCount += 1; + } + } + + if (iClientCount == 0) + return -1; + + int randomIndex = GetRandomInt(0, iClientCount - 1); + return iEligibleClients[randomIndex]; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HookCallbackTrigger(const char[] output, int caller, int activator, float delay) +{ + if (ZR_IsClientZombie(activator)) + { + UnhookSingleEntityOutput(caller, "OnStartTouch", HookCallbackTrigger); + AcceptEntityInput(caller, "FireUser1"); + CPrintToChatAll("{green}[UNLOZE XMAS] {white}Zombies {red}destroyed{white} a present!"); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void HookCallback(const char[] output, int caller, int activator, float delay) +{ + for (int client = 1; client <= MaxClients; client++) + { + if (IsValidClient(client) && !IsClientSourceTV(client) && IsPlayerAlive(client) && ZR_IsClientHuman(client)) + { + char sSteamID[32]; + GetClientAuthId(client, AuthId_Steam2, sSteamID, sizeof(sSteamID)); + + char sName[MAX_NAME_LENGTH]; + GetClientName(client, sName, sizeof(sName)); + + char sQuery[255]; + Format(sQuery, sizeof(sQuery), "INSERT INTO xmas_table (steam_auth,name,collected) VALUES ('%s','%s',1) ON DUPLICATE KEY UPDATE collected=collected+1;", sSteamID, sName); + SQL_FastQuery(g_hDatabase, sQuery); + + g_iCollected[client] += 1; + CheckAndAddFlag(client); + + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}Your Team opened a present! You have collected {green}%d {white}presents so far.", g_iCollected[client]); + if (g_iCollected[client] == g_hCVar_MilestoneInfection.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}Congratulations! You have unlocked {red}INFECTION EFFECTS{white}!"); + + if (g_iCollected[client] == g_hCVar_MilestoneGrenade.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}Congratulations! You have unlocked {red}GRENADE SKINS{white}!"); + + if (g_iCollected[client] == g_hCVar_MilestoneSkin.IntValue) + CPrintToChat(client, "{green}[UNLOZE XMAS] {white}Congratulations! You have unlocked {red}XMAS SKINS{white}!"); + } + } +} + +public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) +{ + if (!IsValidClient(attacker)) + return; + + if (g_hCVar_InfectionEffectEnabled.BoolValue && ((g_iCollected[client] >= g_hCVar_MilestoneInfection.IntValue) || g_iCollected[attacker] >= g_hCVar_MilestoneInfection.IntValue)) + { + float fInfectionOrigin[3]; + GetClientAbsOrigin(client, fInfectionOrigin); + + // Rotating + int iRotating = CreateEntityAtOrigin("func_rotating", fInfectionOrigin); + DispatchKeyFormat(iRotating, "targetname", "season_infection_rotating_%d", g_iCounter); + DispatchKeyFormat(iRotating, "maxspeed", "13"); + DispatchKeyFormat(iRotating, "spawnflags", "65"); + DispatchKeyFormat(iRotating, "OnUser1", "!self,KillHierarchy,,45,1"); + DispatchKeyFormat(iRotating, "OnUser2", "!self,KillHierarchy,,0,1"); + SpawnAndActivate(iRotating); + + // make the trigger work. + SetEntityBBox(iRotating, view_as({-10.0, -1.0, -1.0}), view_as({1.0, 1.0, 1.0})); + SetEntityProps(iRotating); + + + int iModel = CreateEntityAtOrigin("prop_dynamic_override", fInfectionOrigin); + DispatchKeyFormat(iModel, "targetname", "season_infection_prop_%d", g_iCounter); + + int iRandomSkin = GetRandomInt(0, 4); + if (iRandomSkin == 0) + { + DispatchKeyFormat(iModel, "model", "models/models_kit/xmas/xmastree_mini.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.35"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + } + else if (iRandomSkin == 1) + { + DispatchKeyFormat(iModel, "model", "models/weapons/w_revenge_xmas_candy.mdl"); + DispatchKeyFormat(iModel, "modelscale", "1.2"); + DispatchKeyFormat(iModel, "angles", "-27 0 0"); + } + else if (iRandomSkin == 2) + { + DispatchKeyFormat(iModel, "model", "models/johny-srka/snowman.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.45"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + + } + else if (iRandomSkin == 3) + { + DispatchKeyFormat(iModel, "model", "models/weapons/w_santa_hat_thrown.mdl"); + DispatchKeyFormat(iModel, "modelscale", "2.7"); + DispatchKeyFormat(iModel, "angles", "0 0 -90"); + fInfectionOrigin[2] += 7; + } + else if (iRandomSkin == 4) + { + DispatchKeyFormat(iModel, "model", "models/models_kit/xmas/xmas_teddybear.mdl"); + DispatchKeyFormat(iModel, "modelscale", "0.7"); + DispatchKeyFormat(iModel, "angles", "0 0 0"); + } + + DispatchKeyFormat(iModel, "disableshadows", "1"); + DispatchKeyFormat(iModel, "disablereceiveshadows", "1"); + DispatchKeyFormat(iModel, "DisableBoneFollowers", "1"); + DispatchKeyValueVector(iModel, "origin", fInfectionOrigin); + SpawnAndActivate(iModel); + ParentToEntity(iModel, iRotating); + + AcceptEntityInput(iRotating, "FireUser1"); + + int iEntityLimit = g_hCVar_EntityLimit.IntValue; + if ((iModel > iEntityLimit) || (iRotating > iEntityLimit)) + { + AcceptEntityInput(iRotating, "FireUser2"); + CPrintToChatAll("{green}[Unloze XMAS] {white}Infection Effect removed due to {red}critical amount of entities{white}!"); + } + + g_iCounter += 1; + } +} + +public void OnEntityCreated(int entity, const char[] classname) +{ + if (StrContains(classname, "_projectile", false) != -1) + SDKHook(entity, SDKHook_SpawnPost, ProjectileSpawned); + +} + +public void ProjectileSpawned(int Entity) +{ + int iOwner = GetEntPropEnt(Entity, Prop_Data, "m_hOwnerEntity"); + if(!IsValidClient(iOwner)) + return; + + if (g_iCollected[iOwner] >= g_hCVar_MilestoneGrenade.IntValue) + { + SetEntityRenderMode(Entity, RENDER_NONE); + + float fNadeOrigin[3]; + GetEntPropVector(Entity, Prop_Send, "m_vecOrigin", fNadeOrigin); + + int iNadeProp = CreateEntityAtOrigin("prop_dynamic_override", fNadeOrigin); + DispatchKeyFormat(iNadeProp, "targetname", "season_nade_prop_%d", g_iCounter); + DispatchKeyFormat(iNadeProp, "disableshadows", "1"); + DispatchKeyFormat(iNadeProp, "disablereceiveshadows", "1"); + DispatchKeyFormat(iNadeProp, "DisableBoneFollowers", "1"); + + int iRandomSkin = GetRandomInt(0, 3); + if (iRandomSkin == 0) + { + DispatchKeyFormat(iNadeProp, "model", "models/weapons/w_snowball_thrown.mdl"); + DispatchKeyFormat(iNadeProp, "modelscale", "3.0"); + } + else if (iRandomSkin == 1) + { + DispatchKeyFormat(iNadeProp, "model", "models/zombieden/xmas/giftbox.mdl"); + DispatchKeyFormat(iNadeProp, "modelscale", "0.6"); + iRandomSkin = GetRandomInt(0, 1); + if (iRandomSkin == 0) + { + DispatchKeyFormat(iNadeProp, "skin", "0"); + } + else if (iRandomSkin == 1) + { + DispatchKeyFormat(iNadeProp, "skin", "1"); + } + } + else if (iRandomSkin == 2) + { + DispatchKeyFormat(iNadeProp, "model", "models/weapons/w_ornament_thrown.mdl"); + DispatchKeyFormat(iNadeProp, "modelscale", "2.0"); + } + else if (iRandomSkin == 3) + { + DispatchKeyFormat(iNadeProp, "model", "models/weapons/w_santa_hat_thrown.mdl"); + DispatchKeyFormat(iNadeProp, "modelscale", "2.3"); + } + + SpawnAndActivate(iNadeProp); + ParentToEntity(iNadeProp, Entity); + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int IsValidClient(int client, bool nobots = true) +{ + if (client <= 0 || client > MaxClients || !IsClientConnected(client) || (nobots && IsFakeClient(client))) + return false; + + return IsClientInGame(client); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void CheckAndAddFlag(int client) +{ + if (g_iCollected[client] >= g_hCVar_MilestoneSkin.IntValue) + AddUserFlags(client, Admin_Custom4); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock int CreateEntityAtOrigin(const char[] classname, const float origin[3]) +{ + int entity = CreateEntityByName(classname); + + TeleportEntity(entity, origin, NULL_VECTOR, NULL_VECTOR); + + return entity; +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock bool DispatchKeyFormat(int entity, const char[] key, const char[] value, any ...) +{ + char buffer[1024]; + VFormat(buffer, sizeof(buffer), value, 4); + + DispatchKeyValue(entity, key, buffer); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SpawnAndActivate(int entity) +{ + DispatchSpawn(entity); + ActivateEntity(entity); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void ParentToEntity(int entity, int parent) +{ + SetVariantString("!activator"); + AcceptEntityInput(entity, "SetParent", parent, parent); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityBBox(int entity, const float mins[3], const float maxs[3]) +{ + SetEntPropVector(entity, Prop_Send, "m_vecMins", mins); + SetEntPropVector(entity, Prop_Send, "m_vecMaxs", maxs); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void SetEntityProps(int entity) +{ + SetEntProp(entity, Prop_Send, "m_nSolidType", 3); + SetEntProp(entity, Prop_Send, "m_fEffects", 32); +} diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vmt b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vmt new file mode 100644 index 00000000..5976eefd --- /dev/null +++ b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$baseTexture" "3D/bossguard/diss_00" + "$model" "1" +} diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vtf b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vtf new file mode 100644 index 00000000..a0494f4f Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_00.vtf differ diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vmt b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vmt new file mode 100644 index 00000000..63c6e805 --- /dev/null +++ b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vmt @@ -0,0 +1,5 @@ +"VertexLitGeneric" +{ + "$baseTexture" "3D/bossguard/diss_01" + "$model" "1" +} diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vtf b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vtf new file mode 100644 index 00000000..2623f21c Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/materials/3d/bossguard/diss_01.vtf differ diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vmt b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vmt new file mode 100644 index 00000000..2ffd2725 --- /dev/null +++ b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vmt @@ -0,0 +1,6 @@ +"vertexlitgeneric" +{ + "$basetexture" "zombieden/xmode/youmu/laser/laser1" + "$translucent" 1 + "nocull" 1 +} diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vtf b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vtf new file mode 100644 index 00000000..cc5fca7c Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser1.vtf differ diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vmt b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vmt new file mode 100644 index 00000000..7c9e917a --- /dev/null +++ b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vmt @@ -0,0 +1,6 @@ +"vertexlitgeneric" +{ + "$basetexture" "zombieden/xmode/youmu/laser/laser2" + "$translucent" 1 + "$nocull" 1 +} \ No newline at end of file diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vtf b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vtf new file mode 100644 index 00000000..973eb885 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/laser2.vtf differ diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vmt b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vmt new file mode 100644 index 00000000..fa9592e5 --- /dev/null +++ b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vmt @@ -0,0 +1,5 @@ +"vertexlitgeneric" +{ + "$basetexture" "zombieden/xmode/youmu/laser/white" + "$nocull" 1 +} diff --git a/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vtf b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vtf new file mode 100644 index 00000000..4544db66 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/materials/3d/zombieden/xmode/youmu/laser/white.vtf differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx80.vtx b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx80.vtx new file mode 100644 index 00000000..7d08707b Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx80.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx90.vtx b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx90.vtx new file mode 100644 index 00000000..907194d1 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.dx90.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.mdl b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.mdl new file mode 100644 index 00000000..d5ccfa22 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.mdl differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.phy b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.phy new file mode 100644 index 00000000..9cd31ebb Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.phy differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.sw.vtx b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.sw.vtx new file mode 100644 index 00000000..5f298e3e Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.sw.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.vvd b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.vvd new file mode 100644 index 00000000..a35c2e92 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/3d/bossguard/bossguard.vvd differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx80.vtx b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx80.vtx new file mode 100644 index 00000000..5d11e7e1 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx80.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx90.vtx b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx90.vtx new file mode 100644 index 00000000..1c5c6b5d Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.dx90.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.mdl b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.mdl new file mode 100644 index 00000000..9d81b4c7 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.mdl differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.phy b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.phy new file mode 100644 index 00000000..4089e27e Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.phy differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.sw.vtx b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.sw.vtx new file mode 100644 index 00000000..7e8e3197 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.sw.vtx differ diff --git a/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.vvd b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.vvd new file mode 100644 index 00000000..b391c9ef Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/models/zombieden/xmode/youmu/laser.vvd differ diff --git a/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Brain Power V2.mp3 b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Brain Power V2.mp3 new file mode 100644 index 00000000..1985b034 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Brain Power V2.mp3 differ diff --git a/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Isengard.mp3 b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Isengard.mp3 new file mode 100644 index 00000000..0a293fa3 Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/Isengard.mp3 differ diff --git a/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/evil_laugh.wav b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/evil_laugh.wav new file mode 100644 index 00000000..3361054d Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/evil_laugh.wav differ diff --git a/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/starwars.wav b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/starwars.wav new file mode 100644 index 00000000..ec47f4ac Binary files /dev/null and b/ze_boatescape6_remix_fix2/content/sound/unl1/boatescape/starwars.wav differ diff --git a/ze_boatescape6_remix_fix2/scripting/ze_boatescape6_remix_fix2.sp b/ze_boatescape6_remix_fix2/scripting/ze_boatescape6_remix_fix2.sp new file mode 100644 index 00000000..322c141d --- /dev/null +++ b/ze_boatescape6_remix_fix2/scripting/ze_boatescape6_remix_fix2.sp @@ -0,0 +1,3243 @@ +#include +#include +#include + +public Plugin myinfo = +{ + name = "ze_boatescape6_remix_fix2 Secret", + author = "Neon", + description = "Seagull + 2 different Endings", + version = "2.0", + url = "https://steamcommunity.com/id/n3ontm" +} + +new float:g_fOrigin_Button5[3]; +new Handle:g_hSparkTimer = INVALID_HANDLE; + +public void VerifyMap() +{ + new String:currentMap[64]; + GetCurrentMap(currentMap, sizeof(currentMap)); + if (!StrEqual(currentMap, "ze_boatescape6_remix_fix2")) + { + char sFilename[256]; + GetPluginFilename(INVALID_HANDLE, sFilename, sizeof(sFilename)); + ServerCommand("sm plugins unload %s", sFilename); + } + else + { + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.dx80.vtx"); + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.dx90.vtx"); + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.mdl"); + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.phy"); + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.sw.vtx"); + AddFileToDownloadsTable("models/zombieden/xmode/youmu/laser.vvd"); + + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/laser1.vmt"); + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/laser1.vtf"); + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/laser2.vmt"); + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/laser2.vtf"); + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/white.vmt"); + AddFileToDownloadsTable("materials/zombieden/xmode/youmu/laser/white.vtf"); + + AddFileToDownloadsTable("models/3d/bossguard/bossguard.dx80.vtx"); + AddFileToDownloadsTable("models/3d/bossguard/bossguard.dx90.vtx"); + AddFileToDownloadsTable("models/3d/bossguard/bossguard.mdl"); + AddFileToDownloadsTable("models/3d/bossguard/bossguard.phy"); + AddFileToDownloadsTable("models/3d/bossguard/bossguard.sw.vtx"); + AddFileToDownloadsTable("models/3d/bossguard/bossguard.vvd"); + + AddFileToDownloadsTable("materials/3d/bossguard/diss_00.vmt"); + AddFileToDownloadsTable("materials/3d/bossguard/diss_00.vtf"); + AddFileToDownloadsTable("materials/3d/bossguard/diss_01.vmt"); + AddFileToDownloadsTable("materials/3d/bossguard/diss_01.vtf"); + + AddFileToDownloadsTable("sound/unl1/boatescape/starwars.wav"); + AddFileToDownloadsTable("sound/unl1/boatescape/evil_laugh.wav"); + AddFileToDownloadsTable("sound/unl1/boatescape/Brain Power V2.mp3"); + AddFileToDownloadsTable("sound/unl1/boatescape/Isengard.mp3"); + + PrecacheModel("models/seagull.mdl"); + PrecacheModel("models/props_lab/blastdoor001c.mdl"); + PrecacheModel("models/props_trainstation/trainstation_clock001.mdl"); + PrecacheModel("models/zombieden/xmode/youmu/laser.mdl"); + PrecacheModel("models/3d/bossguard/bossguard.mdl"); + PrecacheModel("models/props/de_inferno/brickpillara.mdl"); + PrecacheModel("models/props_combine/combine_teleportplatform.mdl"); + PrecacheModel("models/effects/vol_light64x256.mdl"); + PrecacheModel("models/props/cs_italy/bananna.mdl"); + PrecacheModel("models/props/cs_italy/orange.mdl"); + PrecacheModel("models/props_junk/watermelon01.mdl"); + } + +} + +public void OnPluginStart() +{ + VerifyMap(); + HookEvent("round_start", OnRoundStart, EventHookMode_Post); + HookEvent("round_end", OnRoundEnd, EventHookMode_Post); +} + +public void OnMapStart() +{ + VerifyMap(); +} + +public void OnRoundEnd(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + ClearTimer(g_hSparkTimer); +} + +public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) +{ + + ClearTimer(g_hSparkTimer); + SpawnSparkTimer(); + SpawnSeagullRelay(); + SpawnMathCounter1(); + SpawnMathCounter2(); + + SpawnTriggerTeleport(); + SpawnTeleportDestination(); + + SpawnSeagull(); + SpawnAmbientSeagull(); + SpawnSeagullClock(); + SpawnSeagullMove(); + + SpawnPlatform1(); + SpawnPlatform2(); + SpawnPlatform3(); + SpawnPlatform4(); + SpawnPlatform5(); + SpawnPlatform6(); + SpawnPillar1(); + SpawnPillar2(); + SpawnPillar3(); + SpawnPillarLight1(); + SpawnPillarLight2(); + SpawnPillarLight3(); + SpawnPillarParticle1(); + SpawnPillarParticle2(); + SpawnPillarParticle3(); + SpawnOrangeFinal(); + SpawnBananaFinal(); + SpawnMelonFinal(); + SpawnExplosion1(); + SpawnExplosion2(); + SpawnExplosion3(); + SpawnAmbientGenericExplosion1(); + SpawnAmbientGenericExplosion2(); + SpawnAmbientGenericExplosion3(); + SpawnButtonFinal1(); + SpawnButtonFinal2(); + SpawnButtonFinal3(); + SpawnBeam1(); + SpawnBeam2(); + SpawnBeam3(); + SpawnBeam4(); + SpawnBeam5(); + SpawnBeam6(); + SpawnBeam7(); + SpawnTeleportFinal(); + SpawnTriggerTeleportFinal(); + SpawnTeleportDestinationFinal(); + + SpawnRotating(); + SpawnRotatingMelon(); + SpawnRotatingOrange(); + SpawnRotatingBanana(); + SpawnRotatingMelonBeam(); + + SpawnFilterEnding(); + SpawnBadEndingTrigger(); + + SpawnScore1(); + SpawnScore2(); + + SpawnBossProp(); + SpawnBossParticle(); + SpawnBossMove(); + SpawnLaserTimer(); + SpawnLaserSound(); + SpawnBossPhysbox(); + SpawnBossHP(); + SpawnAmbientBoss1(); + SpawnAmbientBoss2(); + + SpawnButton1(); + SpawnParticle1(); + SpawnFilter1(); + SpawnGameText1(); + + SpawnButton2(); + SpawnParticle2(); + SpawnFilter2(); + SpawnGameText2(); + + SpawnButton3(); + SpawnParticle3(); + SpawnFilter3(); + SpawnGameText3(); + + SpawnButton4(); + SpawnParticle4(); + SpawnFilter4(); + SpawnGameText4(); + + int random = GetRandomInt(1, 5); + + if (random == 1) + { + g_fOrigin_Button5 = {993.05, 3072.5, 208.55}; + } + else if (random == 2) + { + g_fOrigin_Button5 = {458.25, 3851.08, 227.18}; + } + else if (random == 3) + { + g_fOrigin_Button5 = {-634.68, 3072.5, 477.13}; + } + else if (random == 4) + { + g_fOrigin_Button5 = {-185.16, 1920.5, 977.74}; + } + else if (random == 5) + { + g_fOrigin_Button5 = {770.91, 2496.5, 647.08}; + } + + SpawnButton5(); + SpawnParticle5(); + SpawnFilter5(); + SpawnGameText5(); + + SpawnOrange(); + SpawnBanana(); + SpawnMelon(); + + SpawnFilterZM(); + SpawnNameResetZM1(); + SpawnNameResetZM2(); + SpawnItemFilter(); + SpawnItemTrigger1(); + SpawnItemTrigger2(); + SpawnNameReset(); + SpawnItemPlatform1(); + SpawnItemPlatform2(); + SpawnItemBeam(); + int iElite = SpawnItemElite(); + int iRotating = SpawnItemRotating(); + int iBanana = SpawnItemRotatingBanana(); + int iOrange = SpawnItemRotatingOrange(); + int iMelon = SpawnItemRotatingMelon(); + int iMelonBeam = SpawnItemRotatingMelonBeam(); + + SetVariantString("!activator"); + AcceptEntityInput(iRotating, "SetParent", iElite); + SetVariantString("!activator"); + AcceptEntityInput(iBanana, "SetParent", iRotating); + SetVariantString("!activator"); + AcceptEntityInput(iOrange, "SetParent", iRotating); + SetVariantString("!activator"); + AcceptEntityInput(iMelon, "SetParent", iRotating); + SetVariantString("!activator"); + AcceptEntityInput(iMelonBeam, "SetParent", iRotating); +} + + + +public Action SpawnScore1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_score")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_score_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_score_good"); + DispatchKeyValue(Entity, "points", "250"); + DispatchKeyValue(Entity, "spawnflags", "0") + + DispatchSpawn(Entity); + return Entity; +} + +public Action SpawnScore2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_score")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_score_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_score_bad"); + DispatchKeyValue(Entity, "points", "100"); + DispatchKeyValue(Entity, "spawnflags", "0") + + DispatchSpawn(Entity); + return Entity; +} + +public Action SpawnBadEndingTrigger() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_once")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_once_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_bad_ending_trigger"); + DispatchKeyValue(Entity, "angles", "90 270 0") + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "512 8700 950"); + DispatchKeyValue(Entity, "filtername", "secret_ending_filter"); + DispatchKeyValue(Entity, "model", "*1"); + DispatchKeyValue(Entity, "OnStartTouch", "point_servercommand,Command,say The God of the Fruits is not pleased with your sacrifice!,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "point_servercommand,Command,say He is sending is one of his loyal henchmen to kill you!,1,1"); + + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_particle,SetParent,secret_boss_movelinear,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_physbox,SetParent,secret_boss_movelinear,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,SetParent,secret_boss_movelinear,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_particle,Start,,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_movelinear,Open,,3,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,SetAnimation,entrance1,3,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_entrance_sound,PlaySound,,3,1"); + + DispatchKeyValue(Entity, "OnStartTouch", "secret_final_button*,Kill,,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_explosion_1,Explode,,1,1"); + DispatchKeyValue(Entity, "OnStartTouch", "explosion_sound_1,PlaySound,,1,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_banana_final,Kill,,1,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_explosion_2,Explode,,2,1"); + DispatchKeyValue(Entity, "OnStartTouch", "explosion_sound_2,PlaySound,,2,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_orange_final,Kill,,2,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_explosion_3,Explode,,3,1"); + DispatchKeyValue(Entity, "OnStartTouch", "explosion_sound_3,PlaySound,,3,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_melon_final,Kill,,3,1"); + + DispatchKeyValue(Entity, "OnStartTouch", "explosion_sound_3,PlaySound,,4,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_explosion*,Explode,,4,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_pillar*,Kill,,4.3,1"); + + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull,Kill,,5,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnBossMove() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_movelinear")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_movelinear_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_movelinear"); + DispatchKeyValue(Entity, "movedir", "90 0 0"); + DispatchKeyValue(Entity, "origin", "512 9600 1500"); + DispatchKeyValue(Entity, "speed", "100"); + DispatchKeyValue(Entity, "movedistance", "564"); + DispatchKeyValue(Entity, "spawnflags", "8") + DispatchKeyValue(Entity, "OnFullyOpen", "secret_boss_prop,SetAnimation,entrance2,0,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "secret_boss_particle,Stop,,0,-1"); + DispatchKeyValue(Entity, "OnFullyOpen", "secret_boss_particle,Kill,,0,-1"); + DispatchKeyValue(Entity, "OnFullyOpen", "secret_boss_laser_timer,Enable,,0,1"); + DispatchKeyValue(Entity, "OnFullyOpen", "secret_boss_hp,SetValue,150,0,1"); + + DispatchSpawn(Entity); + return Entity; +} + +public Action SpawnBossParticle() +{ + + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_particle"); + DispatchKeyValue(Entity, "effect_name", "fire_large_01"); + DispatchKeyValue(Entity, "origin", "512 9600 1350"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_particle"); + DispatchKeyValue(Entity, "effect_name", "fire_large_01"); + DispatchKeyValue(Entity, "origin", "512 9600 1500"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; +} + +public Action SpawnBossProp() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_prop"); + DispatchKeyValue(Entity, "angles", "0 -90 0"); + DispatchKeyValue(Entity, "origin", "512 9600 1500"); // 512 9200 934 + DispatchKeyValue(Entity, "model", "models/3d/bossguard/bossguard.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "DisableBoneFollowers", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "DefaultAnim", "idle"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBossPhysbox() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_physbox")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_physbox_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_physbox"); + DispatchKeyValue(Entity, "spawnflags", "574464"); + DispatchKeyValue(Entity, "material", "2"); + DispatchKeyValue(Entity, "health", "99999999"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "origin", "512 9640 1500"); + DispatchKeyValue(Entity, "angles", "0 -53 90"); + DispatchKeyValue(Entity, "model", "*13"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "OnHealthChanged", "secret_boss_hp,Subtract,1,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; + +} + +public Action SpawnBossHP() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("math_counter")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "math_counter_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_hp"); + DispatchKeyValue(Entity, "startvalue", "100000"); + DispatchKeyValue(Entity, "min", "0"); + DispatchKeyValue(Entity, "max", "100000"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_laser_timer,Kill,,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_prop,SetAnimation,dead1,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_prop,Kill,,3,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_physbox,Kill,,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_physbox,Kill,,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_teleport_prop,Enable,,2,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_teleport_final,AddOutput,OnStartTouch secret_score_bad:ApplyScore::0:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_teleport_final,Enable,,2,1"); + DispatchKeyValue(Entity, "OnHitMin", "secret_boss_laser_movelinear,KillHierarchy,,0,1"); + DispatchKeyValue(Entity, "OnHitMin", "point_servercommand,Command,say You killed the Henchman!,0,-1"); + DispatchKeyValue(Entity, "OnHitMin", "point_servercommand,Command,say Maybe try not to anger the God of the Fruits next time...,1,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; +} + +public Action SpawnLaserTimer() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("logic_timer")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "logic_timer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_laser_timer"); + DispatchKeyValue(Entity, "UseRandomTime", "1"); + DispatchKeyValue(Entity, "spawnflags", "0"); + DispatchKeyValue(Entity, "LowerRandomBound", "1.2"); + DispatchKeyValue(Entity, "UpperRandomBound", "1.5"); + DispatchKeyValue(Entity, "RefireTime", "1.5"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + DispatchKeyValue(Entity, "OnTimer", "secret_boss_laser_sound,PlaySound,,0,-1"); + DispatchKeyValue(Entity, "OnTimer", "secret_boss_prop,SetAnimation,attack1,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + HookSingleEntityOutput(Entity, "OnTimer", BadEndingCallback, false); + + return Entity; + +} + +public Action SpawnAmbientBoss1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_entrance_sound"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "radius", "1250"); + DispatchKeyValue(Entity, "message", "unl1/boatescape/starwars.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnAmbientBoss2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_loss_sound"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "radius", "1250"); + DispatchKeyValue(Entity, "message", "unl1/boatescape/evil_laugh.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnLaserSound() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_laser_sound"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "radius", "1250"); + DispatchKeyValue(Entity, "message", "npc/roller/blade_out.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnBossLaserMove() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_movelinear")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_movelinear_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_laser_movelinear"); + DispatchKeyValue(Entity, "origin", "512 9600 934"); //512 9600 934 + DispatchKeyValue(Entity, "movedir", "0 -90 0"); + DispatchKeyValue(Entity, "speed", "900"); + DispatchKeyValue(Entity, "movedistance", "1000"); + DispatchKeyValue(Entity, "spawnflags", "8") + DispatchKeyValue(Entity, "OnFullyOpen", "!self,KillHierarchy,,0,1"); + + DispatchSpawn(Entity); + return Entity; +} + +public Action SpawnBossLaserProp(int random) +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_laser_prop"); + DispatchKeyValue(Entity, "angles", "0 -90 0"); + DispatchKeyValue(Entity, "model", "models/zombieden/xmode/youmu/laser.mdl"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "DisableBoneFollowers", "1"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "rendercolor", "0 255 0"); + DispatchKeyValue(Entity, "rendermode", "0"); + + if (random == 1) + { + DispatchKeyValue(Entity, "origin", "512 9600 900"); + } + else if (random == 2) + { + DispatchKeyValue(Entity, "origin", "512 9600 943"); + } + else if (random == 3) + { + DispatchKeyValue(Entity, "origin", "512 9600 928"); + } + + DispatchSpawn(Entity); + + return Entity; +} + +public Action SpawnTriggerHurt(int random) +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_hurt")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_hurt_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_boss_laser_hurt"); + DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchKeyValue(Entity, "nodmgforce", "0"); + DispatchKeyValue(Entity, "damage", "999999"); + DispatchKeyValue(Entity, "damagecap", "20"); + DispatchKeyValue(Entity, "damagemodel", "0"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_laser_timer,Kill,,0,-1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_hp,Kill,,0,-1"); + DispatchKeyValue(Entity, "OnStartTouch", "point_servercommand,Command,say Maybe try not to anger the God of the Fruits next time...,1,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_loss_sound,PlaySound,,1,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 000 0:1.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 165 0:2.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 255 0:3.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 255 0:4.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 0 255:5.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 70 0 130:6.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:AddOutput:rendercolor 128 0 128:7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,AddOutput,OnUser1 !self:FireUser1::7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_boss_prop,FireUser1,,1,1"); + + if (random == 1) + { + DispatchKeyValue(Entity, "origin", "512 9600 898"); + } + else if (random == 2) + { + DispatchKeyValue(Entity, "origin", "512 9600 958"); + } + else if (random == 3) + { + DispatchKeyValue(Entity, "origin", "512 9600 928"); + } + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + SetEntityModel(Entity, "models/zombieden/xmode/youmu/laser.mdl"); + + new Float:minbounds[3] = {-100.25, -100.25, -1.25}; + new Float:maxbounds[3] = {100.25, -10.00, 1.25}; + SetEntPropVector(Entity, Prop_Send, "m_vecMins", minbounds); + SetEntPropVector(Entity, Prop_Send, "m_vecMaxs", maxbounds); + + SetEntProp(Entity, Prop_Send, "m_nSolidType", 2); + + new enteffects = GetEntProp(Entity, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(Entity, Prop_Send, "m_fEffects", enteffects); + + return Entity; +} + +public BadEndingCallback(const char[] output, int caller, int activator, float delay) +{ + int random = GetRandomInt(1, 3); + int move = SpawnBossLaserMove(); + int prop = SpawnBossLaserProp(random); + int hurt = SpawnTriggerHurt(random); + SetVariantString("!activator"); + AcceptEntityInput(prop, "SetParent", move); + SetVariantString("!activator"); + AcceptEntityInput(hurt, "SetParent", move); + AcceptEntityInput(move, "Open"); +} + +public GoodEndingCallback(const char[] output, int caller, int activator, float delay) +{ + g_hSparkTimer = CreateTimer(0.1, Sparks, INVALID_HANDLE, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE); + + int autism1 = SpawnAmbientAutism1(); + int autism2 = SpawnAmbientAutism2(); + + int random = GetRandomInt(1, 2); + + if (random == 1) + { + AcceptEntityInput(autism1, "PlaySound"); + } + else if (random == 2) + { + AcceptEntityInput(autism2, "PlaySound"); + } +} + +public Action Sparks(Handle timer) +{ + new float:sparksOrigin[3]; + sparksOrigin[0] = GetRandomFloat(-1200.0, 2400.0); + sparksOrigin[1] = GetRandomFloat(11000.0, 13000.0); + sparksOrigin[2] = GetRandomFloat(270.0, 800.0); + + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "sparks"); + DispatchKeyValue(Entity, "effect_name", "achieved"); + DispatchKeyValueVector(Entity, "origin", sparksOrigin); + DispatchKeyValue(Entity, "OnUser1", "!self,Kill,,3,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + AcceptEntityInput(Entity, "start"); + AcceptEntityInput(Entity, "FireUser1"); + + if (Entity > 1800) + ClearTimer(g_hSparkTimer); + + return Plugin_Continue; +} + +stock ClearTimer(&Handle:timer) +{ + delete timer; +} + +public Action SpawnSeagullRelay() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("logic_relay")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "logic_relay_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_logic_relay"); + //DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_button*,Kill,,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull,Enable,,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_clock,Enable,,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_clock,SetParent,secret_seagull_movelinear,0.1,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_door*,Enable,,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_door*,SetParent,secret_seagull_movelinear,0.1,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_box,Enable,,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_box,SetParent,secret_seagull_movelinear,0.1,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull,SetParent,secret_seagull_movelinear,0.1,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_winner,AddOutput,origin 2200 12865 927,0,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_winner,AddOutput,basevelocity 0 0 -200,0.1,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_movelinear,Open,,3,-1"); + DispatchKeyValue(Entity, "OnTrigger", "seagull_sound,PlaySound,,3,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull,SetAnimation,Land,45,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull,SetAnimation,Idle01,46,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_movelinear,SetSpeed,0,46,-1"); + DispatchKeyValue(Entity, "OnTrigger", "secret_seagull_clock,Kill,,47,-1"); + DispatchKeyValue(Entity, "OnUser1", "secret_math_counter_1,Add,1,0,1"); + DispatchKeyValue(Entity, "OnUser2", "secret_math_counter_1,Add,1,0,1"); + DispatchKeyValue(Entity, "OnUser3", "secret_math_counter_1,Add,1,0,1"); + DispatchKeyValue(Entity, "OnUser1", "secret_pillar_light_1,Enable,,0,1"); + DispatchKeyValue(Entity, "OnUser1", "secret_banana_final,Enable,,0,1"); + DispatchKeyValue(Entity, "OnUser2", "secret_pillar_light_2,Enable,,0,1"); + DispatchKeyValue(Entity, "OnUser2", "secret_orange_final,Enable,,0,1"); + DispatchKeyValue(Entity, "OnUser3", "secret_pillar_light_3,Enable,,0,1"); + DispatchKeyValue(Entity, "OnUser3", "secret_melon_final,Enable,,0,1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnMathCounter1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("math_counter")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "math_counter_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_math_counter_1"); + DispatchKeyValue(Entity, "startvalue", "0"); + DispatchKeyValue(Entity, "min", "0"); + DispatchKeyValue(Entity, "max", "3"); + DispatchKeyValue(Entity, "OutValue", "point_servercommand,Command,say The God of the Fruits acknowledges your sacrifice...,0,-1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_final_button*,Unlock,,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_bad_ending_trigger,Kill,,0,1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; +} + +public Action SpawnMathCounter2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("math_counter")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "math_counter_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_math_counter_2"); + DispatchKeyValue(Entity, "startvalue", "0"); + DispatchKeyValue(Entity, "min", "0"); + DispatchKeyValue(Entity, "max", "3"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + + DispatchKeyValue(Entity, "OnHitMax", "point_servercommand,Command,say The God of the Fruits is satisfied with your Sacrifice!,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "point_servercommand,Command,say He rewards you with some autism!,1,1"); + + + DispatchKeyValue(Entity, "OnHitMax", "secret_melon_rotating,Enable,,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_orange_rotating,Enable,,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_banana_rotating,Enable,,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_melon_rotating_beam,Enable,,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_melon_rotating,SetParent,secret_rotating,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_orange_rotating,SetParent,secret_rotating,2,1") + DispatchKeyValue(Entity, "OnHitMax", "secret_banana_rotating,SetParent,secret_rotating,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_melon_rotating_beam,SetParent,secret_rotating,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam_4,TurnOn,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_pillar*,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam_1,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam_2,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam_3,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_orange_final,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_banana_final,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_melon_final,Kill,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_rotating,Open,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_teleport_prop,Enable,,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_teleport_final,AddOutput,OnStartTouch secret_score_good:ApplyScore::0:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_teleport_final,Enable,,2,1"); + + DispatchKeyValue(Entity, "OnHitMax", "secret_seagull,SetAnimation,TakeOff,2,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_seagull_movelinear,SetSpeed,150.0,2.1,1"); + + DispatchKeyValue(Entity, "OnHitMax", "secret_beam_*,TurnOn,,5,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 000 0:1.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 165 0:2.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 255 0:3.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 255 0:4.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 0 255:5.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 70 0 130:6.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:AddOutput:rendercolor 128 0 128:7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,AddOutput,OnUser1 !self:FireUser1::7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "secret_beam*,FireUser1,,5,1"); + + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 000 0:1.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 165 0:2.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 255 0:3.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 255 0:4.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 0 255:5.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 70 0 130:6.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:AddOutput:rendercolor 128 0 128:7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,AddOutput,OnUser1 !self:FireUser1::7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "chinook,FireUser1,,5,1"); + + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 000 0:1.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 165 0:2.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 255 0:3.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 255 0:4.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 0 255:5.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 70 0 130:6.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:AddOutput:rendercolor 128 0 128:7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,AddOutput,OnUser1 !self:FireUser1::7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_3,FireUser1,,5,1"); + + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 000 0:1.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 165 0:2.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 255 255 0:3.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 255 0:4.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 0 0 255:5.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 70 0 130:6.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:AddOutput:rendercolor 128 0 128:7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,AddOutput,OnUser1 !self:FireUser1::7.00:-1,0,1"); + DispatchKeyValue(Entity, "OnHitMax", "boat_4,FireUser1,,5,1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + HookSingleEntityOutput(Entity, "OnHitMax", GoodEndingCallback, true); + + return Entity; +} + +public Action SpawnAmbientAutism1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_autism_sound_1"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "radius", "1250"); + DispatchKeyValue(Entity, "message", "unl1/boatescape/Brain Power V2.mp3"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnAmbientAutism2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_autism_sound_2"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "radius", "1250"); + DispatchKeyValue(Entity, "message", "unl1/boatescape/Isengard.mp3"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnSparkTimer() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("logic_timer")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "logic_timer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_timer"); + DispatchKeyValue(Entity, "RefireTime", "3"); + DispatchKeyValue(Entity, "OnTimer", "secret_button_sparks_*,SparkOnce,,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnButton1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + new float:origin[3] = {-1367.45, -13184.5, 595.76}; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_1"); + DispatchKeyValue(Entity, "spawnflags", "1537");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "wait", "0.01"); + DispatchKeyValue(Entity, "OnPressed", "secret_button_filter_1,TestActivator,,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilter1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_team")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_team_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_filter_1"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filterteam", "3"); + DispatchKeyValue(Entity, "OnPass", "secret_button_game_text_1,Display,,0,-1"); + DispatchKeyValue(Entity, "OnPass", "!activator,AddOutput,targetname pressed_1,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnParticle1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_spark")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_spark_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_sparks_1"); + new float:origin[3] = {-1367.45, -13184.5, 595.76}; + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "spawnflags", "128"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnGameText1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_text")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_text_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_game_text_1"); + DispatchKeyValue(Entity, "channel", "3"); + DispatchKeyValue(Entity, "color", "0 255 255"); + DispatchKeyValue(Entity, "color2", "0 255 255"); + DispatchKeyValue(Entity, "holdtime", "4"); + DispatchKeyValue(Entity, "fadein", "0.1"); + DispatchKeyValue(Entity, "fadeout", "0.1"); + DispatchKeyValue(Entity, "x", "-1"); + DispatchKeyValue(Entity, "y", "0.6"); + DispatchKeyValue(Entity, "message", "Secret: 1 out of 5"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnButton2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + new float:origin[3] = {2164.52, -9216.5, 461.22}; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_2"); + DispatchKeyValue(Entity, "spawnflags", "1537");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "wait", "0.01"); + DispatchKeyValue(Entity, "OnPressed", "secret_button_filter_2,TestActivator,,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilter2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_filter_2"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "pressed_1"); + DispatchKeyValue(Entity, "OnPass", "secret_button_game_text_2,Display,,0,-1"); + DispatchKeyValue(Entity, "OnPass", "!activator,AddOutput,targetname pressed_2,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnParticle2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_spark")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_spark_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_sparks_2"); + new float:origin[3] = {2164.52, -9216.5, 461.22}; + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "spawnflags", "128"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnGameText2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_text")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_text_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_game_text_2"); + DispatchKeyValue(Entity, "channel", "3"); + DispatchKeyValue(Entity, "color", "0 255 255"); + DispatchKeyValue(Entity, "color2", "0 255 255"); + DispatchKeyValue(Entity, "holdtime", "4"); + DispatchKeyValue(Entity, "fadein", "0.1"); + DispatchKeyValue(Entity, "fadeout", "0.1"); + DispatchKeyValue(Entity, "x", "-1"); + DispatchKeyValue(Entity, "y", "0.6"); + DispatchKeyValue(Entity, "message", "Secret: 2 out of 5"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnButton3() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + new float:origin[3] = {550.45, 1023.5, 96.29}; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_3"); + DispatchKeyValue(Entity, "spawnflags", "1537");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "wait", "0.01"); + DispatchKeyValue(Entity, "OnPressed", "secret_button_filter_3,TestActivator,,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilter3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_filter_3"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "pressed_2"); + DispatchKeyValue(Entity, "OnPass", "secret_button_game_text_3,Display,,0,-1"); + DispatchKeyValue(Entity, "OnPass", "!activator,AddOutput,targetname pressed_3,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnParticle3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_spark")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_spark_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_sparks_3"); + new float:origin[3] = {550.45, 1023.5, 96.29}; + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "spawnflags", "128"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnGameText3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_text")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_text_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_game_text_3"); + DispatchKeyValue(Entity, "channel", "3"); + DispatchKeyValue(Entity, "color", "0 255 255"); + DispatchKeyValue(Entity, "color2", "0 255 255"); + DispatchKeyValue(Entity, "holdtime", "4"); + DispatchKeyValue(Entity, "fadein", "0.1"); + DispatchKeyValue(Entity, "fadeout", "0.1"); + DispatchKeyValue(Entity, "x", "-1"); + DispatchKeyValue(Entity, "y", "0.6"); + DispatchKeyValue(Entity, "message", "Secret: 3 out of 5"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnButton4() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + new float:origin[3] = {505.46, 1152.5, 473.15}; + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_4"); + DispatchKeyValue(Entity, "spawnflags", "1537");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "wait", "0.01"); + DispatchKeyValue(Entity, "OnPressed", "secret_button_filter_4,TestActivator,,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilter4() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_filter_4"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "pressed_3"); + DispatchKeyValue(Entity, "OnPass", "secret_button_game_text_4,Display,,0,-1"); + DispatchKeyValue(Entity, "OnPass", "!activator,AddOutput,targetname pressed_4,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnParticle4() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_spark")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_spark_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_sparks_4"); + new float:origin[3] = {505.46, 1152.5, 473.15}; + DispatchKeyValueVector(Entity, "origin", origin); + DispatchKeyValue(Entity, "spawnflags", "128"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnGameText4() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_text")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_text_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_game_text_4"); + DispatchKeyValue(Entity, "channel", "3"); + DispatchKeyValue(Entity, "color", "0 255 255"); + DispatchKeyValue(Entity, "color2", "0 255 255"); + DispatchKeyValue(Entity, "holdtime", "4"); + DispatchKeyValue(Entity, "fadein", "0.1"); + DispatchKeyValue(Entity, "fadeout", "0.1"); + DispatchKeyValue(Entity, "x", "-1"); + DispatchKeyValue(Entity, "y", "0.6"); + DispatchKeyValue(Entity, "message", "Secret: 4 out of 5 \n \nHint: Last One is random"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnButton5() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_5"); + DispatchKeyValue(Entity, "spawnflags", "1537");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValueVector(Entity, "origin", g_fOrigin_Button5); + DispatchKeyValue(Entity, "wait", "0.01"); + DispatchKeyValue(Entity, "OnPressed", "secret_button_filter_5,TestActivator,,0,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilter5() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_filter_5"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "pressed_4"); + DispatchKeyValue(Entity, "OnPass", "secret_button_game_text_5,Display,,0,-1"); + DispatchKeyValue(Entity, "OnPass", "!activator,AddOutput,targetname secret_winner,0,-1"); + DispatchKeyValue(Entity, "OnPass", "secret_logic_relay,Trigger,,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnParticle5() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_spark")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_spark_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_sparks_5"); + DispatchKeyValueVector(Entity, "origin", g_fOrigin_Button5); + DispatchKeyValue(Entity, "spawnflags", "128"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnGameText5() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("game_text")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "game_text_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_button_game_text_5"); + DispatchKeyValue(Entity, "channel", "3"); + DispatchKeyValue(Entity, "color", "0 255 255"); + DispatchKeyValue(Entity, "color2", "0 255 255"); + DispatchKeyValue(Entity, "holdtime", "4"); + DispatchKeyValue(Entity, "fadein", "0.1"); + DispatchKeyValue(Entity, "fadeout", "0.1"); + DispatchKeyValue(Entity, "x", "-1"); + DispatchKeyValue(Entity, "y", "0.6"); + DispatchKeyValue(Entity, "message", "Secret: 5 out of 5 \n \n........."); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnTriggerTeleport() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_teleport")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_teleport_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_teleport"); + DispatchKeyValue(Entity, "model", "*29"); + DispatchKeyValue(Entity, "origin", "2200 12865 927"); //2205 2672 -13 + DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "target", "secret_teleport_destination"); + DispatchKeyValue(Entity, "OnStartTouch", "!self,Kill,,5,-1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnTeleportDestination() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_teleport_destination")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_teleport_destination_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_teleport_destination"); + DispatchKeyValue(Entity, "angles", "0 90 0") + DispatchKeyValue(Entity, "origin", "512 2350 930"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnSeagull() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_seagull"); + DispatchKeyValue(Entity, "angles", "0 90 0"); + DispatchKeyValue(Entity, "origin", "512 2350 890"); + DispatchKeyValue(Entity, "model", "models/seagull.mdl"); + DispatchKeyValue(Entity, "modelscale", "4.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "DefaultAnim", "SOAR"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnAmbientSeagull() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "seagull_sound"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "message", "ambient/creatures/seagull_idle1.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "preset", "0"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnSeagullClock() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_seagull_clock"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "512 2350 910"); + DispatchKeyValue(Entity, "model", "models/props_trainstation/trainstation_clock001.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "disablebonefollowers", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnSeagullMove() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_movelinear")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_movelinear_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_seagull_movelinear"); + DispatchKeyValue(Entity, "movedir", "0 90 0"); + DispatchKeyValue(Entity, "origin", "512 2350 890"); + DispatchKeyValue(Entity, "speed", "150"); + DispatchKeyValue(Entity, "movedistance", "20000"); + DispatchKeyValue(Entity, "spawnflags", "8"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnFilterEnding() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_ending_filter"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "secret_winner"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; +} + +public Action SpawnPlatform1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_1"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "512 9000 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPlatform2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_2"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "512 9168 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPlatform3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_3"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "406 9000 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPlatform4() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_4"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "406 9168 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPlatform5() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_5"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "406 8832 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPlatform6() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_platform_1"); + DispatchKeyValue(Entity, "angles", "90 0 0"); + DispatchKeyValue(Entity, "origin", "512 8832 886"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnPillar1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_1"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "603 8940 916"); + DispatchKeyValue(Entity, "model", "models/props/de_inferno/brickpillara.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.5"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "0"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + + +public Action SpawnPillarLight1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_light_1"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "603 8940 1150"); + DispatchKeyValue(Entity, "model", "models/effects/vol_light64x256.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + +public Action SpawnPillarParticle1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_particle_system_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_particle_1"); + DispatchKeyValue(Entity, "origin", "603 8940 930"); + DispatchKeyValue(Entity, "effect_name", "achieved"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnPillar2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_2"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "420 8940 916"); + DispatchKeyValue(Entity, "model", "models/props/de_inferno/brickpillara.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.5"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "0"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + +public Action SpawnPillarLight2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_light_2"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "420 8940 1150"); + DispatchKeyValue(Entity, "model", "models/effects/vol_light64x256.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + +public Action SpawnPillarParticle2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_particle_system_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_particle_2"); + DispatchKeyValue(Entity, "origin", "420 8940 930"); + DispatchKeyValue(Entity, "effect_name", "achieved"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnPillar3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_3"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "512 9032 916"); + DispatchKeyValue(Entity, "model", "models/props/de_inferno/brickpillara.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.5"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "0"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + +public Action SpawnPillarLight3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_light_3"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "512 9032 1150"); + DispatchKeyValue(Entity, "model", "models/effects/vol_light64x256.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_ALWAYS | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_ALWAYS); + return Entity; + +} + +public Action SpawnPillarParticle3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_particle_system")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_particle_system_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_pillar_particle_3"); + DispatchKeyValue(Entity, "origin", "512 9032 930"); + DispatchKeyValue(Entity, "effect_name", "achieved"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnExplosion1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_explosion")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_explosion_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_explosion_1"); + DispatchKeyValue(Entity, "origin", "603 8940 960"); + DispatchKeyValue(Entity, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(Entity, "rendermode", "5"); + DispatchKeyValue(Entity, "iMagnitude", "300"); + DispatchKeyValue(Entity, "iRadiusOverride", "70"); + DispatchKeyValue(Entity, "spawnflags", "3"); + DispatchSpawn(Entity); + + return Entity; + +} + +public Action SpawnExplosion2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_explosion")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_explosion_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_explosion_2"); + DispatchKeyValue(Entity, "origin", "420 8940 960"); + DispatchKeyValue(Entity, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(Entity, "rendermode", "5"); + DispatchKeyValue(Entity, "iMagnitude", "300"); + DispatchKeyValue(Entity, "iRadiusOverride", "70"); + DispatchKeyValue(Entity, "spawnflags", "3"); + DispatchSpawn(Entity); + + return Entity; + +} + +public Action SpawnExplosion3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_explosion")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_explosion_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_explosion_3"); + DispatchKeyValue(Entity, "origin", "512 9032 960"); + DispatchKeyValue(Entity, "fireballsprite", "sprites/zerogxplode.spr"); + DispatchKeyValue(Entity, "rendermode", "5"); + DispatchKeyValue(Entity, "iMagnitude", "300"); + DispatchKeyValue(Entity, "iRadiusOverride", "70"); + DispatchKeyValue(Entity, "spawnflags", "3"); + DispatchSpawn(Entity); + + return Entity; + +} + +public Action SpawnAmbientGenericExplosion1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "explosion_sound_1"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "SourceEntityName", "secret_banana_final"); + DispatchKeyValue(Entity, "radius", "3050"); + DispatchKeyValue(Entity, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "preset", "0"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnAmbientGenericExplosion2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "explosion_sound_2"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "SourceEntityName", "secret_orange_final"); + DispatchKeyValue(Entity, "radius", "3050"); + DispatchKeyValue(Entity, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "preset", "0"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnAmbientGenericExplosion3() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("ambient_generic")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "ambient_generic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "explosion_sound_3"); + DispatchKeyValue(Entity, "spawnflags", "49"); + DispatchKeyValue(Entity, "SourceEntityName", "secret_platform_4"); + DispatchKeyValue(Entity, "radius", "3050"); + DispatchKeyValue(Entity, "message", "ambient/explosions/explode_9.wav"); + DispatchKeyValue(Entity, "volume", "10"); + DispatchKeyValue(Entity, "health", "10"); + DispatchKeyValue(Entity, "preset", "0"); + DispatchKeyValue(Entity, "pitch", "100"); + DispatchKeyValue(Entity, "pitchstart", "100"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnOrangeFinal() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_orange_final"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "420 8940 960"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/orange.mdl"); + DispatchKeyValue(Entity, "modelscale", "2.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBananaFinal() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_banana_final"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "603 8940 960"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(Entity, "modelscale", "2.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnMelonFinal() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_melon_final"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "512 9032 960"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.4"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnTeleportFinal() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_teleport_prop"); + DispatchKeyValue(Entity, "angles", "0 90 0"); + DispatchKeyValue(Entity, "origin", "512 9032 886"); + DispatchKeyValue(Entity, "model", "models/props_combine/combine_teleportplatform.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "0"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_1"); + DispatchKeyValue(Entity, "BoltWidth", "2"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "LightningStart", "secret_banana_final"); + DispatchKeyValue(Entity, "LightningEnd", "secret_orange_final"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_2"); + DispatchKeyValue(Entity, "BoltWidth", "2"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "LightningStart", "secret_orange_final"); + DispatchKeyValue(Entity, "LightningEnd", "secret_melon_final"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam3() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_3"); + DispatchKeyValue(Entity, "BoltWidth", "2"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "LightningStart", "secret_melon_final"); + DispatchKeyValue(Entity, "LightningEnd", "secret_banana_final"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam4() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_4"); + DispatchKeyValue(Entity, "BoltWidth", "25"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "spawnflags", "8"); + DispatchKeyValue(Entity, "LightningStart", "secret_melon_rotating"); + DispatchKeyValue(Entity, "LightningEnd", "secret_melon_rotating_beam"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam5() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_5"); + DispatchKeyValue(Entity, "BoltWidth", "10"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "spawnflags", "0"); + DispatchKeyValue(Entity, "LightningStart", "secret_banana_rotating"); + DispatchKeyValue(Entity, "LightningEnd", "chinookrotor1"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam6() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_6"); + DispatchKeyValue(Entity, "BoltWidth", "10"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "spawnflags", "0"); + DispatchKeyValue(Entity, "LightningStart", "secret_orange_rotating"); + DispatchKeyValue(Entity, "LightningEnd", "boat_3"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBeam7() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_beam_7"); + DispatchKeyValue(Entity, "BoltWidth", "10"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "spawnflags", "0"); + DispatchKeyValue(Entity, "LightningStart", "secret_melon_rotating"); + DispatchKeyValue(Entity, "LightningEnd", "boat_4"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnButtonFinal1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_final_button_1"); + DispatchKeyValue(Entity, "spawnflags", "3073");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValue(Entity, "origin", "603 8940 960"); + DispatchKeyValue(Entity, "OnPressed", "secret_beam_1,TurnOn,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_light_1,Kill,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_math_counter_2,Add,1,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_particle_1,Start,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "!self,Kill,,0.1,1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnButtonFinal2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_final_button_2"); + DispatchKeyValue(Entity, "spawnflags", "3073");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValue(Entity, "origin", "420 8940 960"); + DispatchKeyValue(Entity, "OnPressed", "secret_beam_2,TurnOn,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_light_2,Kill,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_math_counter_2,Add,1,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_particle_2,Start,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "!self,Kill,,0.1,1"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnButtonFinal3() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_button")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_button_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_final_button_3"); + DispatchKeyValue(Entity, "spawnflags", "3073");//1025 + DispatchKeyValue(Entity, "model", "*65"); + DispatchKeyValue(Entity, "origin", "512 9032 960"); + DispatchKeyValue(Entity, "OnPressed", "secret_beam_3,TurnOn,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_light_3,Kill,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_math_counter_2,Add,1,0,1"); + DispatchKeyValue(Entity, "OnPressed", "secret_pillar_particle_3,Start,,0,1"); + DispatchKeyValue(Entity, "OnPressed", "!self,Kill,,0.1,1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnOrange() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_physics")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_physics_multiplayer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "orange"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "-3606.24 -14206 481.63"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/orange.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "spawnflags", "289"); + DispatchKeyValue(Entity, "damagetoenablemotion", "10"); + DispatchKeyValue(Entity, "OnTakeDamage", "secret_logic_relay,FireUser2,,0,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "secret_logic_relay,FireUser2,,0,-1"); + DispatchKeyValue(Entity, "OnTakeDamage", "!self,Kill,,0.1,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "!self,Kill,,0.1,-1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnBanana() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_physics")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_physics_multiplayer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "banana"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "899 -9355.63 513.77"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "spawnflags", "289"); + DispatchKeyValue(Entity, "damagetoenablemotion", "10"); + DispatchKeyValue(Entity, "OnTakeDamage", "secret_logic_relay,FireUser1,,0,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "secret_logic_relay,FireUser1,,0,-1"); + DispatchKeyValue(Entity, "OnTakeDamage", "!self,Kill,,0.1,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "!self,Kill,,0.1,-1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnMelon() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_physics")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_physics_multiplayer_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "melon"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "1023.6 -5583.5 631.48"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "spawnflags", "289"); + DispatchKeyValue(Entity, "damagetoenablemotion", "10"); + DispatchKeyValue(Entity, "OnTakeDamage", "secret_logic_relay,FireUser3,,0,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "secret_logic_relay,FireUser3,,0,-1"); + DispatchKeyValue(Entity, "OnTakeDamage", "!self,Kill,,0.1,-1"); + DispatchKeyValue(Entity, "OnPlayerUse", "!self,Kill,,0.1,-1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnRotating() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_rotating")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_rotating_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_rotating"); + DispatchKeyValue(Entity, "origin", "512 9032 100"); + DispatchKeyValue(Entity, "maxspeed", "10"); + DispatchKeyValue(Entity, "spawnflags", "65"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + SetEntityModel(Entity, "models/effects/vol_light64x256.mdl"); + new Float:minbounds[3] = {-100.25, -100.25, -10.0}; + new Float:maxbounds[3] = {100.25, 100.25, 10.0}; + SetEntPropVector(Entity, Prop_Send, "m_vecMins", minbounds); + SetEntPropVector(Entity, Prop_Send, "m_vecMaxs", maxbounds); + SetEntProp(Entity, Prop_Send, "m_nSolidType", 2); + new enteffects = GetEntProp(Entity, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(Entity, Prop_Send, "m_fEffects", enteffects); + return Entity; +} + +public Action SpawnRotatingOrange() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_orange_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "-354 9532 1000"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/orange.mdl"); + DispatchKeyValue(Entity, "modelscale", "35.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnRotatingBanana() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_banana_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "1378 9532 1000"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(Entity, "modelscale", "35.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnRotatingMelon() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_melon_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "512 8032 1000"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "25"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnRotatingMelonBeam() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_melon_rotating_beam"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "512 10032 1000"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.2"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnTriggerTeleportFinal() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_teleport")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_teleport_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_teleport_final"); + DispatchKeyValue(Entity, "origin", "512 9032 950"); + DispatchKeyValue(Entity, "model", "*26"); + DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "StartDisabled", "1"); + DispatchKeyValue(Entity, "target", "secret_teleport_destination_final"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,targetname carrier,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_teleport_prop,Kill,,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "!self,Kill,,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnTeleportDestinationFinal() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("info_teleport_destination")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "info_teleport_destination_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_teleport_destination_final"); + DispatchKeyValue(Entity, "angles", "0 90 0") + DispatchKeyValue(Entity, "origin", "634.9 11304.2 436.72"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnItemTrigger1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_once")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_once_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_trigger1"); + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "-6980.97 -13196 928"); + DispatchKeyValue(Entity, "filtername", "secret_item_filter"); + DispatchKeyValue(Entity, "model", "*49"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,origin -7820 -14000 860,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_item_deagle,AddOutput,OnPlayerPickUp !activator:AddOutput:origin -6856.84 -13314.8 576:0:1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_item_trigger*,Kill,,0,1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnItemTrigger2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_once")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_once_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_trigger2"); + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "-4875.64 -14402.8 928"); + DispatchKeyValue(Entity, "filtername", "secret_item_filter"); + DispatchKeyValue(Entity, "model", "*49"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,origin -7820 -14000 860,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_item_deagle,AddOutput,OnPlayerPickUp !activator:AddOutput:origin -4750.68 -14327.8 576:0:1,0,1"); + DispatchKeyValue(Entity, "OnStartTouch", "secret_item_trigger*,Kill,,0,1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + + +public Action SpawnNameReset() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_multiple")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_multiple_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_name_reset"); + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "-2168 -13824 608"); + DispatchKeyValue(Entity, "model", "*49"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,targetname plebnemesisfag,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnNameResetZM1() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_multiple")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_multiple_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_name_reset_zm"); + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "-5285.69 -14386.9 928"); + DispatchKeyValue(Entity, "model", "*49"); + DispatchKeyValue(Entity, "filtername", "secret_filter_zm"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,targetname plebnemesisfag,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnNameResetZM2() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("trigger_multiple")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "trigger_multiple_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_name_reset_zm"); + DispatchKeyValue(Entity, "spawnflags", "1") + DispatchKeyValue(Entity, "origin", "-7335.97 -13298.3 928"); + DispatchKeyValue(Entity, "model", "*49"); + DispatchKeyValue(Entity, "filtername", "secret_filter_zm"); + DispatchKeyValue(Entity, "OnStartTouch", "!activator,AddOutput,targetname plebnemesisfag,0,-1"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + return Entity; +} + +public Action SpawnFilterZM() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_team")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_team_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_filter_zm"); + DispatchKeyValue(Entity, "Negated", "1"); + DispatchKeyValue(Entity, "filterteam", "3"); + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; + +} + +public Action SpawnItemFilter() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("filter_activator_name")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "filter_activator_name_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_filter"); + DispatchKeyValue(Entity, "Negated", "0"); + DispatchKeyValue(Entity, "filtername", "carrier"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + return Entity; +} + +public Action SpawnItemPlatform1() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "item_platform_1"); + DispatchKeyValue(Entity, "angles", "90 0 90"); + DispatchKeyValue(Entity, "origin", "-7726 -13944 830"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnItemPlatform2() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "item_platform_2"); + DispatchKeyValue(Entity, "angles", "90 0 90"); + DispatchKeyValue(Entity, "origin", "-7557 -13944 830"); + DispatchKeyValue(Entity, "model", "models/props_lab/blastdoor001c.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.0"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "6"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnItemElite() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("weapon_deagle")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "weapon_deagle_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_deagle"); + DispatchKeyValue(Entity, "hammerid", "11051995"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "ammo", "1337"); + DispatchKeyValue(Entity, "origin", "-7600 -13990 872.46"); + DispatchKeyValue(Entity, "spawnflags", "1"); + DispatchKeyValue(Entity, "OnPlayerPickUp", "!activator,AddOutput,targetname plebnemesisfag,0,1"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnItemRotating() +{ + new Entity; + + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("func_rotating")) == INVALID_ENT_REFERENCE) + return -1; + + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "func_rotating_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_rotating"); + DispatchKeyValue(Entity, "origin", "-7600 -13990 872.46"); + DispatchKeyValue(Entity, "maxspeed", "40"); + DispatchKeyValue(Entity, "spawnflags", "65"); + DispatchKeyValue(Entity, "parentname", "secret_item_deagle"); + + DispatchSpawn(Entity); + ActivateEntity(Entity); + + SetEntityModel(Entity, "models/effects/vol_light64x256.mdl"); + new Float:minbounds[3] = {-100.25, -100.25, -10.0}; + new Float:maxbounds[3] = {100.25, 100.25, 10.0}; + SetEntPropVector(Entity, Prop_Send, "m_vecMins", minbounds); + SetEntPropVector(Entity, Prop_Send, "m_vecMaxs", maxbounds); + SetEntProp(Entity, Prop_Send, "m_nSolidType", 2); + new enteffects = GetEntProp(Entity, Prop_Send, "m_fEffects"); + enteffects |= 32; + SetEntProp(Entity, Prop_Send, "m_fEffects", enteffects); + return Entity; +} + +public Action SpawnItemRotatingOrange() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_orange_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin","-7582.5 -13959.7 875"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/orange.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.5"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnItemRotatingBanana() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_banana_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "-7582.5 -14020.3 875"); + DispatchKeyValue(Entity, "model", "models/props/cs_italy/bananna.mdl"); + DispatchKeyValue(Entity, "modelscale", "1.5"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnItemRotatingMelon() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_melon_rotating"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "-7635 -13990 875"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.8"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "1"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + + DispatchSpawn(Entity); + return Entity; + +} + +public Action SpawnItemRotatingMelonBeam() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("prop_dynamic_override")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "prop_dynamic_override_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_melon_rotating_beam"); + DispatchKeyValue(Entity, "angles", "0 0 0"); + DispatchKeyValue(Entity, "origin", "-7565 -13990 875"); + DispatchKeyValue(Entity, "model", "models/props_junk/watermelon01.mdl"); + DispatchKeyValue(Entity, "modelscale", "0.1"); + DispatchKeyValue(Entity, "disablereceiveshadows", "1"); + DispatchKeyValue(Entity, "disableshadows", "1"); + DispatchKeyValue(Entity, "solid", "0"); + DispatchKeyValue(Entity, "rendermode", "10"); + DispatchKeyValue(Entity, "StartDisabled", "0"); + DispatchSpawn(Entity); + //SetEdictFlags(Entity, FL_EDICT_DONTSEND | FL_EDICT_FULL); + SetEdictFlags(Entity, GetEdictFlags(Entity) | FL_EDICT_DONTSEND); + return Entity; + +} + +public Action SpawnItemBeam() +{ + new Entity; + // Spawn dynamic prop entity + if ((Entity = CreateEntityByName("env_beam")) == INVALID_ENT_REFERENCE) + return -1; + // Generate unique id for the entity + new String:StrEntityName[64]; Format(StrEntityName, sizeof(StrEntityName), "env_beam_%i", Entity); + + // Setup entity + DispatchKeyValue(Entity, "targetname", "secret_item_beam"); + DispatchKeyValue(Entity, "BoltWidth", "1"); + DispatchKeyValue(Entity, "decalname", "Bigshot"); + DispatchKeyValue(Entity, "framerate", "0"); + DispatchKeyValue(Entity, "framestart", "0"); + DispatchKeyValue(Entity, "life", "1"); + DispatchKeyValue(Entity, "spawnflags", "9"); + DispatchKeyValue(Entity, "LightningStart", "secret_item_melon_rotating"); + DispatchKeyValue(Entity, "LightningEnd", "secret_item_melon_rotating_beam"); + DispatchKeyValue(Entity, "texture", "sprites/laserbeam.spr"); + + DispatchSpawn(Entity); + return Entity; +}