Skip to content

Commit

Permalink
add powerups
Browse files Browse the repository at this point in the history
  • Loading branch information
Katsute committed Aug 7, 2023
1 parent b847e24 commit b783fdf
Show file tree
Hide file tree
Showing 9 changed files with 637 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,13 @@ jobs:
spcomp -i ./ rrm_marked.sp
spcomp -i ./ rrm_medieval.sp
spcomp -i ./ rrm_milk.sp
spcomp -i ./ rrm_powerup_agility.sp
spcomp -i ./ rrm_powerup_haste.sp
spcomp -i ./ rrm_powerup_plague.sp
spcomp -i ./ rrm_powerup_precision.sp
spcomp -i ./ rrm_powerup_resistance.sp
spcomp -i ./ rrm_powerup_strength.sp
spcomp -i ./ rrm_powerup_vampire.sp
spcomp -i ./ rrm_resize.sp
spcomp -i ./ rrm_stun.sp
spcomp -i ./ rrm_taunt.sp
7 changes: 7 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ jobs:
spcomp -i ./ rrm_marked.sp
spcomp -i ./ rrm_medieval.sp
spcomp -i ./ rrm_milk.sp
spcomp -i ./ rrm_powerup_agility.sp
spcomp -i ./ rrm_powerup_haste.sp
spcomp -i ./ rrm_powerup_plague.sp
spcomp -i ./ rrm_powerup_precision.sp
spcomp -i ./ rrm_powerup_resistance.sp
spcomp -i ./ rrm_powerup_strength.sp
spcomp -i ./ rrm_powerup_vampire.sp
spcomp -i ./ rrm_resize.sp
spcomp -i ./ rrm_stun.sp
spcomp -i ./ rrm_taunt.sp
Expand Down
89 changes: 89 additions & 0 deletions rrm_powerup_agility.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) 2023 Katsute | Licensed under CC BY-NC-SA 4.0

#pragma semicolon 1

#define RRM_VERSION "1.0"

#include <sourcemod>
#include <sdkhooks>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

TFCond cond = TFCond_RuneAgility;

int gEnabled = 0;

public Plugin myinfo = {
name= "[RRM] Agility Powerup Modifier",
author = "Katsute",
description = "Modifier that grants agility powerup.",
version = "1.0"
};

public void OnPluginStart(){
if(RRM_IsRegOpen())
RegisterModifiers();

AddCommandListener(OnDropItem, "dropitem");

AutoExecConfig(true, "rrm_powerup_agility", "rrm");
}

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Agility Powerup", 0.0, 0.0, false, RRM_Callback_Powerup);
}

public int RRM_Callback_Powerup(bool enable, float value){
gEnabled = enable;
if(gEnabled){
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKHook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
ApplyPowerup(i);
}else{
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKUnhook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
RemovePowerup(i);
}
return gEnabled;
}

public void OnEntityCreated(int ent, const char[] classname){
if(gEnabled && strncmp(classname, "item_power", 10) == 0 && IsValidEntity(ent))
AcceptEntityInput(ent, "Kill");
}

public void OnExitResupply(const int resupply, const int client){
if(gEnabled && 0 < client < MaxClients && IsClientInGame(client) && IsPlayerAlive(client))
ApplyPowerup(client);
}

public Action OnDropItem(const int client, const char[] cmd, any args){
if(gEnabled)
return Plugin_Handled;
return Plugin_Continue;
}

public void ApplyPowerup(const int client){
if(!TF2_IsPlayerInCondition(client, cond)){
TF2_AddCondition(client, cond);
TF2_RegeneratePlayer(client);
}
}

public void RemovePowerup(const int client){
if(TF2_IsPlayerInCondition(client, cond))
TF2_RemoveCondition(client, cond);
}
89 changes: 89 additions & 0 deletions rrm_powerup_haste.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) 2023 Katsute | Licensed under CC BY-NC-SA 4.0

#pragma semicolon 1

#define RRM_VERSION "1.0"

#include <sourcemod>
#include <sdkhooks>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

TFCond cond = TFCond_RuneHaste;

int gEnabled = 0;

public Plugin myinfo = {
name= "[RRM] Haste Powerup Modifier",
author = "Katsute",
description = "Modifier that grants haste powerup.",
version = "1.0"
};

public void OnPluginStart(){
if(RRM_IsRegOpen())
RegisterModifiers();

AddCommandListener(OnDropItem, "dropitem");

AutoExecConfig(true, "rrm_powerup_haste", "rrm");
}

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Haste Powerup", 0.0, 0.0, false, RRM_Callback_Powerup);
}

public int RRM_Callback_Powerup(bool enable, float value){
gEnabled = enable;
if(gEnabled){
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKHook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
ApplyPowerup(i);
}else{
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKUnhook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
RemovePowerup(i);
}
return gEnabled;
}

public void OnEntityCreated(int ent, const char[] classname){
if(gEnabled && strncmp(classname, "item_power", 10) == 0 && IsValidEntity(ent))
AcceptEntityInput(ent, "Kill");
}

public void OnExitResupply(const int resupply, const int client){
if(gEnabled && 0 < client < MaxClients && IsClientInGame(client) && IsPlayerAlive(client))
ApplyPowerup(client);
}

public Action OnDropItem(const int client, const char[] cmd, any args){
if(gEnabled)
return Plugin_Handled;
return Plugin_Continue;
}

public void ApplyPowerup(const int client){
if(!TF2_IsPlayerInCondition(client, cond)){
TF2_AddCondition(client, cond);
TF2_RegeneratePlayer(client);
}
}

public void RemovePowerup(const int client){
if(TF2_IsPlayerInCondition(client, cond))
TF2_RemoveCondition(client, cond);
}
89 changes: 89 additions & 0 deletions rrm_powerup_plague.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) 2023 Katsute | Licensed under CC BY-NC-SA 4.0

#pragma semicolon 1

#define RRM_VERSION "1.0"

#include <sourcemod>
#include <sdkhooks>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

TFCond cond = TFCond_PlagueRune;

int gEnabled = 0;

public Plugin myinfo = {
name= "[RRM] Plague Powerup Modifier",
author = "Katsute",
description = "Modifier that grants plague powerup.",
version = "1.0"
};

public void OnPluginStart(){
if(RRM_IsRegOpen())
RegisterModifiers();

AddCommandListener(OnDropItem, "dropitem");

AutoExecConfig(true, "rrm_powerup_plague", "rrm");
}

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Plague Powerup", 0.0, 0.0, false, RRM_Callback_Powerup);
}

public int RRM_Callback_Powerup(bool enable, float value){
gEnabled = enable;
if(gEnabled){
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKHook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
ApplyPowerup(i);
}else{
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKUnhook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
RemovePowerup(i);
}
return gEnabled;
}

public void OnEntityCreated(int ent, const char[] classname){
if(gEnabled && strncmp(classname, "item_power", 10) == 0 && IsValidEntity(ent))
AcceptEntityInput(ent, "Kill");
}

public void OnExitResupply(const int resupply, const int client){
if(gEnabled && 0 < client < MaxClients && IsClientInGame(client) && IsPlayerAlive(client))
ApplyPowerup(client);
}

public Action OnDropItem(const int client, const char[] cmd, any args){
if(gEnabled)
return Plugin_Handled;
return Plugin_Continue;
}

public void ApplyPowerup(const int client){
if(!TF2_IsPlayerInCondition(client, cond)){
TF2_AddCondition(client, cond);
TF2_RegeneratePlayer(client);
}
}

public void RemovePowerup(const int client){
if(TF2_IsPlayerInCondition(client, cond))
TF2_RemoveCondition(client, cond);
}
89 changes: 89 additions & 0 deletions rrm_powerup_precision.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
// Copyright (C) 2023 Katsute | Licensed under CC BY-NC-SA 4.0

#pragma semicolon 1

#define RRM_VERSION "1.0"

#include <sourcemod>
#include <sdkhooks>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

TFCond cond = TFCond_RunePrecision;

int gEnabled = 0;

public Plugin myinfo = {
name= "[RRM] Precision Powerup Modifier",
author = "Katsute",
description = "Modifier that grants precision powerup.",
version = "1.0"
};

public void OnPluginStart(){
if(RRM_IsRegOpen())
RegisterModifiers();

AddCommandListener(OnDropItem, "dropitem");

AutoExecConfig(true, "rrm_powerup_precision", "rrm");
}

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Precision Powerup", 0.0, 0.0, false, RRM_Callback_Powerup);
}

public int RRM_Callback_Powerup(bool enable, float value){
gEnabled = enable;
if(gEnabled){
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKHook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
ApplyPowerup(i);
}else{
int ent;
while((ent = FindEntityByClassname(ent, "func_respawnroom")) != -1)
SDKUnhook(ent, SDKHook_EndTouchPost, OnExitResupply);

for(int i = 1; i < MaxClients; i++)
if(IsClientInGame(i) && IsPlayerAlive(i))
RemovePowerup(i);
}
return gEnabled;
}

public void OnEntityCreated(int ent, const char[] classname){
if(gEnabled && strncmp(classname, "item_power", 10) == 0 && IsValidEntity(ent))
AcceptEntityInput(ent, "Kill");
}

public void OnExitResupply(const int resupply, const int client){
if(gEnabled && 0 < client < MaxClients && IsClientInGame(client) && IsPlayerAlive(client))
ApplyPowerup(client);
}

public Action OnDropItem(const int client, const char[] cmd, any args){
if(gEnabled)
return Plugin_Handled;
return Plugin_Continue;
}

public void ApplyPowerup(const int client){
if(!TF2_IsPlayerInCondition(client, cond)){
TF2_AddCondition(client, cond);
TF2_RegeneratePlayer(client);
}
}

public void RemovePowerup(const int client){
if(TF2_IsPlayerInCondition(client, cond))
TF2_RemoveCondition(client, cond);
}
Loading

0 comments on commit b783fdf

Please sign in to comment.