missed the sp whoops
This commit is contained in:
parent
f26c56832c
commit
82503e546f
218
VScripts/scripting/VScript_ze_eternal_grove.sp
Normal file
218
VScripts/scripting/VScript_ze_eternal_grove.sp
Normal file
@ -0,0 +1,218 @@
|
|||||||
|
#pragma semicolon 1
|
||||||
|
#pragma newdecls required
|
||||||
|
|
||||||
|
#define MAP_NAME "ze_eternal_grove_v3_css"
|
||||||
|
#define NADE_DAMAGE 300
|
||||||
|
#define NADE_DAMGE_CRIT 800
|
||||||
|
#define CLAMP_UP 500.0
|
||||||
|
#define CLAMP_SIDE 350.0
|
||||||
|
|
||||||
|
#include <sourcemod>
|
||||||
|
#include <sdktools>
|
||||||
|
#include <vscripts>
|
||||||
|
#include <multicolors>
|
||||||
|
|
||||||
|
bool bValidMap = false;
|
||||||
|
int g_iNadeBonusDamage = 0;
|
||||||
|
int g_iWindsPushes[] = {
|
||||||
|
54298, 54619, 54512, 216147, 215572, 222212, 220705, 220609, 220045, 218972, 53965, 59316, 58555, 58448, 58341, 58127, 55822, 55608, 54833, 62828, 62721, 62614, 62507
|
||||||
|
};
|
||||||
|
|
||||||
|
public Plugin myinfo =
|
||||||
|
{
|
||||||
|
name = "VScript - Eternal grove",
|
||||||
|
author = ".Rushaway",
|
||||||
|
description = "Clamp player velocity and display boss game_text",
|
||||||
|
version = "1.0",
|
||||||
|
url = "https://github.com/srcdslab/sm-plugin-VScript_ze_eternal_grove"
|
||||||
|
};
|
||||||
|
|
||||||
|
public void OnMapStart()
|
||||||
|
{
|
||||||
|
char sCurMap[256];
|
||||||
|
GetCurrentMap(sCurMap, sizeof(sCurMap));
|
||||||
|
bValidMap = (strcmp(sCurMap, MAP_NAME, false) == 0);
|
||||||
|
if (bValidMap)
|
||||||
|
{
|
||||||
|
HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
|
||||||
|
{
|
||||||
|
if (!bValidMap)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
InitHooks();
|
||||||
|
CreateTimer(12.0, Timer_Credits, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action Timer_Credits(Handle timer)
|
||||||
|
{
|
||||||
|
if (!bValidMap)
|
||||||
|
{
|
||||||
|
return Plugin_Handled;
|
||||||
|
}
|
||||||
|
CPrintToChatAll("{pink}[VScripts] {white}Original VScripts by Luffaren ported by .Rushaway");
|
||||||
|
return Plugin_Stop;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void BossElevator_OnFullyOpen(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
CreateTimer(15.5, Timer_HookMinotaurodgod, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AdminRoom_OnPressed(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
CreateTimer(21.5, Timer_HookMinotaurodgod, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Action Timer_HookMinotaurodgod(Handle timer)
|
||||||
|
{
|
||||||
|
Hooks_Minotaurgod();
|
||||||
|
return Plugin_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void InitHooks()
|
||||||
|
{
|
||||||
|
// Boss Eleavtor - boss_elevator
|
||||||
|
int iEntity = Vscripts_GetEntityIndexByHammerID(68255, "func_movelinear", INVALID_ENT_REFERENCE);
|
||||||
|
if (iEntity != INVALID_ENT_REFERENCE)
|
||||||
|
HookSingleEntityOutput(iEntity, "OnFullyOpen", BossElevator_OnFullyOpen, false);
|
||||||
|
|
||||||
|
// Adminroom - admin_buttons_GoToBoss
|
||||||
|
iEntity = Vscripts_GetEntityIndexByHammerID(393420, "func_button", INVALID_ENT_REFERENCE);
|
||||||
|
if (iEntity != INVALID_ENT_REFERENCE)
|
||||||
|
HookSingleEntityOutput(iEntity, "OnPressed", AdminRoom_OnPressed, false);
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(g_iWindsPushes); i++)
|
||||||
|
{
|
||||||
|
iEntity = Vscripts_GetEntityIndexByHammerID(g_iWindsPushes[i], "trigger_push", INVALID_ENT_REFERENCE);
|
||||||
|
|
||||||
|
if (iEntity != INVALID_ENT_REFERENCE)
|
||||||
|
HookSingleEntityOutput(iEntity, "OnEndTouch", WindsPushes_OnEndTouch, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void Hooks_Minotaurgod()
|
||||||
|
{
|
||||||
|
// i_minotaurgod_hp
|
||||||
|
int iEntity = Vscripts_GetEntityIndexByHammerID(918186, "func_physbox", INVALID_ENT_REFERENCE);
|
||||||
|
if (iEntity != INVALID_ENT_REFERENCE)
|
||||||
|
HookSingleEntityOutput(iEntity, "OnHealthChanged", Minotaurgod_OnHealthChanged, false);
|
||||||
|
|
||||||
|
// i_minotaurgod_nadehp
|
||||||
|
iEntity = Vscripts_GetEntityIndexByHammerID(918241, "func_breakable", INVALID_ENT_REFERENCE);
|
||||||
|
if (iEntity != INVALID_ENT_REFERENCE)
|
||||||
|
{
|
||||||
|
g_iNadeBonusDamage = 0;
|
||||||
|
|
||||||
|
HookSingleEntityOutput(iEntity, "OnUser1", MinotaurgodNadeHP_OnUser1, false);
|
||||||
|
HookSingleEntityOutput(iEntity, "OnUser2", MinotaurgodNadeHP_OnUser2, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void Minotaurgod_OnHealthChanged(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
if (!IsValidClient(activator))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// text_boss_hp
|
||||||
|
int iGameText = Vscripts_GetEntityIndexByHammerID(918088, "game_text", INVALID_ENT_REFERENCE);
|
||||||
|
if (!IsValidEntity(iGameText))
|
||||||
|
return;
|
||||||
|
|
||||||
|
int iHP = GetEntProp(caller, Prop_Data, "m_iHealth");
|
||||||
|
char sBuffer[252];
|
||||||
|
Format(sBuffer, sizeof(sBuffer), "message MINOTAUR GOD = %d", iHP);
|
||||||
|
SetVariantString(sBuffer);
|
||||||
|
AcceptEntityInput(iGameText, "AddOutput");
|
||||||
|
AcceptEntityInput(iGameText, "Display");
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void MinotaurgodNadeHP_OnUser1(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
if (!IsValidClient(activator))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_iNadeBonusDamage = (g_iNadeBonusDamage + NADE_DAMAGE);
|
||||||
|
|
||||||
|
// text_boss_crit
|
||||||
|
int iGameText = Vscripts_GetEntityIndexByHammerID(918047, "game_text", INVALID_ENT_REFERENCE);
|
||||||
|
if (!IsValidEntity(iGameText))
|
||||||
|
return;
|
||||||
|
|
||||||
|
char sBuffer[252];
|
||||||
|
Format(sBuffer, sizeof(sBuffer), "message BONUS DAMAGE = %d", g_iNadeBonusDamage);
|
||||||
|
SetVariantString(sBuffer);
|
||||||
|
AcceptEntityInput(iGameText, "AddOutput");
|
||||||
|
AcceptEntityInput(iGameText, "Display");
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void MinotaurgodNadeHP_OnUser2(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
if (!IsValidClient(activator))
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_iNadeBonusDamage = (g_iNadeBonusDamage + NADE_DAMGE_CRIT);
|
||||||
|
|
||||||
|
// text_boss_crit
|
||||||
|
int iGameText = Vscripts_GetEntityIndexByHammerID(918047, "game_text", INVALID_ENT_REFERENCE);
|
||||||
|
if (!IsValidEntity(iGameText))
|
||||||
|
return;
|
||||||
|
|
||||||
|
char sBuffer[252];
|
||||||
|
Format(sBuffer, sizeof(sBuffer), "message BONUS DAMAGE = %d", g_iNadeBonusDamage);
|
||||||
|
SetVariantString(sBuffer);
|
||||||
|
AcceptEntityInput(iGameText, "AddOutput");
|
||||||
|
AcceptEntityInput(iGameText, "Display");
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void WindsPushes_OnEndTouch(const char[] output, int caller, int activator, float delay)
|
||||||
|
{
|
||||||
|
if (!IsValidClient(activator))
|
||||||
|
return;
|
||||||
|
|
||||||
|
float fVelocity[3];
|
||||||
|
GetVelocity(activator, fVelocity);
|
||||||
|
|
||||||
|
bool setVelocity = false;
|
||||||
|
|
||||||
|
// Laterally clamp the player's velocity
|
||||||
|
if (FloatAbs(fVelocity[0] + fVelocity[1]) > CLAMP_SIDE)
|
||||||
|
{
|
||||||
|
fVelocity[0] *= 0.90; // X axis - Limit sideways velocity
|
||||||
|
fVelocity[1] *= 0.90; // Y axis - Limit sideways velocity
|
||||||
|
setVelocity = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Vertically clamp the player's velocity
|
||||||
|
if (fVelocity[2] > CLAMP_UP)
|
||||||
|
{
|
||||||
|
fVelocity[2] = CLAMP_UP; // Z axis - Limit upwards velocity
|
||||||
|
setVelocity = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setVelocity)
|
||||||
|
SetVelocity(activator, fVelocity);
|
||||||
|
}
|
||||||
|
|
||||||
|
stock bool IsValidClient(int client)
|
||||||
|
{
|
||||||
|
return (client > 0 && client <= MaxClients && IsClientInGame(client) && IsPlayerAlive(client));
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void GetVelocity(int client, float fVelocity[3])
|
||||||
|
{
|
||||||
|
fVelocity[0] = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[0]");
|
||||||
|
fVelocity[1] = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[1]");
|
||||||
|
fVelocity[2] = GetEntPropFloat(client, Prop_Send, "m_vecVelocity[2]");
|
||||||
|
}
|
||||||
|
|
||||||
|
stock void SetVelocity(int client, const float fVelocity[3])
|
||||||
|
{
|
||||||
|
SetEntPropFloat(client, Prop_Send, "m_vecVelocity[0]", fVelocity[0]);
|
||||||
|
SetEntPropFloat(client, Prop_Send, "m_vecVelocity[1]", fVelocity[1]);
|
||||||
|
SetEntPropFloat(client, Prop_Send, "m_vecVelocity[2]", fVelocity[2]);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user