Skip to content

Commit

Permalink
Add new effects
Browse files Browse the repository at this point in the history
  • Loading branch information
Katsute committed Aug 23, 2023
1 parent 6ac6422 commit 45385a6
Show file tree
Hide file tree
Showing 9 changed files with 685 additions and 10 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ jobs:

- name: Compile Plugin
run: |
spcomp -i ./ rrm_attribute_clip.sp
spcomp -i ./ rrm_attribute_firing.sp
spcomp -i ./ rrm_attribute_projectile.sp
spcomp -i ./ rrm_attribute_spread.sp
spcomp -i ./ rrm_bleed.sp
spcomp -i ./ rrm_charge.sp
spcomp -i ./ rrm_explode.sp
Expand All @@ -43,5 +47,6 @@ jobs:
spcomp -i ./ rrm_powerup_strength.sp
spcomp -i ./ rrm_powerup_vampire.sp
spcomp -i ./ rrm_resize.sp
spcomp -i ./ rrm_skeletons.sp
spcomp -i ./ rrm_stun.sp
spcomp -i ./ rrm_taunt.sp
5 changes: 5 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ jobs:

- name: Compile Plugin
run: |
spcomp -i ./ rrm_attribute_clip.sp
spcomp -i ./ rrm_attribute_firing.sp
spcomp -i ./ rrm_attribute_projectile.sp
spcomp -i ./ rrm_attribute_spread.sp
spcomp -i ./ rrm_bleed.sp
spcomp -i ./ rrm_charge.sp
spcomp -i ./ rrm_explode.sp
Expand All @@ -45,6 +49,7 @@ jobs:
spcomp -i ./ rrm_powerup_strength.sp
spcomp -i ./ rrm_powerup_vampire.sp
spcomp -i ./ rrm_resize.sp
spcomp -i ./ rrm_skeletons.sp
spcomp -i ./ rrm_stun.sp
spcomp -i ./ rrm_taunt.sp
Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ Additional modifiers for the [RRM](https://forums.alliedmods.net/showthread.php?

|cvar|param|description|
|---|:-:|---|
|`rrm_attribute_clip_min`|`0.5`|Min clip size|
|`rrm_attribute_clip_max`|`4.0`|Max clip size|
|`rrm_attribute_clip_delay`|`1.2`|Attribute delay|
|`rrm_attribute_firing_min`|`0.5`|Min firing speed|
|`rrm_attribute_firing_max`|`4.0`|Max firing speed|
|`rrm_attribute_firing_delay`|`1.2`|Attribute delay|
|`rrm_attribute_projectile_min`|`0.2`|Min projectile speed|
|`rrm_attribute_projectile_max`|`4.0`|Max projectile speed|
|`rrm_attribute_projectile_delay`|`1.2`|Attribute delay|
|`rrm_attribute_spread_min`|`0.1`|Min bullet spread speed|
|`rrm_attribute_spread_max`|`3.0`|Max bullet spread speed|
|`rrm_attribute_spread_delay`|`1.2`|Attribute delay|
|`rrm_bleed_min`|`0.1`|Min bleed chance|
|`rrm_bleed_max`|`1.0`|Max bleed chance|
|`rrm_bleed_duration`|`3.0`|Bleed duration|
Expand All @@ -24,6 +36,7 @@ Additional modifiers for the [RRM](https://forums.alliedmods.net/showthread.php?
|`rrm_milk_min`|`0.1`|Min mad milk chance|
|`rrm_milk_max`|`1.0`|Max mad milk chance|
|`rrm_milk_duration`|`3.0`|Mad milk duration|
|`rrm_skeleton_duration`|`30.0`|Skeleton duration|
|`rrm_size_min`|`0.25`|Min size|
|`rrm_size_max`|`1.35`|Max size|
|`rrm_stun_min`|`0.1`|Min stun chance|
Expand Down
143 changes: 143 additions & 0 deletions rrm_attribute_clip.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
// 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 <tf2attributes>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

#pragma newdecls required

int gEnabled = 0;
float gMul = 0.0;
ConVar cMin = null, cMax = null, cDelay = null;
float gMin = 0.0, gMax = 0.0, gDelay = 0.0;

public Plugin myinfo = {
name = "[RRM] Clip Size Modifier",
author = "Katsute",
description = "Modifier that modifies clip size.",
version = "1.0"
};

public void OnPluginStart(){
cMin = CreateConVar("rrm_attribute_clip_min", "0.5", "Minimum value for the random number generator.");
cMax = CreateConVar("rrm_attribute_clip_max", "4.0", "Maximum value for the random number generator.");
cDelay = CreateConVar("rrm_attribute_clip_delay", "1.2", "Delay to apply attribute.");

cMin.AddChangeHook(OnConvarChanged);
cMax.AddChangeHook(OnConvarChanged);
cDelay.AddChangeHook(OnConvarChanged);

gMin = cMin.FloatValue;
gMax = cMax.FloatValue;
gDelay = cDelay.FloatValue;

HookEvent("post_inventory_application", PostInventoryApplication);

if(RRM_IsRegOpen())
RegisterModifiers();

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

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Clip Size", gMin, gMax, false, RRM_Callback_Attribute);
}

public void OnConvarChanged(Handle convar, char[] oldValue, char[] newValue){
if (StrEqual(oldValue, newValue, true))
return;

float fNewValue = StringToFloat(newValue);

if(convar == cMin)
gMin = fNewValue;
else if(convar == cMax)
gMax = fNewValue;
else if(convar == cDelay)
gDelay = fNewValue;
}

public int RRM_Callback_Attribute(bool enable, float value){
gEnabled = enable;
if(gEnabled)
gMul = value;
for(int i = 1; i < MaxClients; i++){
if(IsClientInGame(i)){
int health = GetClientHealth(i);
TF2_RemoveAllWeapons(i);
TF2_RegeneratePlayer(i);
SetEntityHealth(i, health < 1 ? 1 : health);
}
}
return gEnabled;
}

public void PostInventoryApplication(const Handle event, const char[] name, const bool dontBroadcast){
if(gEnabled){
int client = GetClientOfUserId(GetEventInt(event, "userid"));
CreateTimer(gDelay, PostInventoryApplicationDelayed, client, TIMER_FLAG_NO_MAPCHANGE);
}
}

public Action PostInventoryApplicationDelayed(const Handle timer, const int client){
if(IsClientInGame(client)){
int primary = GetPlayerWeaponSlot(client, 0);
int secondary = GetPlayerWeaponSlot(client, 1);
int melee = GetPlayerWeaponSlot(client, 2);

if(primary != -1 && TF2Attrib_GetByDefIndex(primary, 2050) == Address_Null){
ApplyPrimary(primary);
TF2Attrib_SetByDefIndex(primary, 2050, 1.0);
}
if(secondary != -1 && TF2Attrib_GetByDefIndex(secondary, 2050) == Address_Null){
ApplySecondary(secondary);
TF2Attrib_SetByDefIndex(secondary, 2050, 1.0);
}
if(melee != -1 && TF2Attrib_GetByDefIndex(melee, 2050) == Address_Null){
ApplyMelee(melee);
TF2Attrib_SetByDefIndex(melee, 2050, 1.0);
}
}
return Plugin_Continue;
}

public void ApplyAttribute(const int ent, const int attribute, const float value){
if(ent != -1 && IsValidEntity(ent)){
Address addr = TF2Attrib_GetByDefIndex(ent, attribute);
float current = addr != Address_Null ? TF2Attrib_GetValue(addr) : 1.0;
TF2Attrib_SetByDefIndex(ent, attribute, current * value);
}
}

public void ApplyPrimary(const int ent){
int index = GetEntProp(ent, Prop_Send, "m_iItemDefinitionIndex");
if(index != 441 && index != 588)
ApplyAttribute(ent, 4, gMul);
else
ApplyAttribute(ent, 335, gMul);
ApplyAttribute(ent, 97, 1/gMul);
}

public void ApplySecondary(const int ent){
int index = GetEntProp(ent, Prop_Send, "m_iItemDefinitionIndex");
if(index != 442 && index != 595)
ApplyAttribute(ent, 4, gMul);
else
ApplyAttribute(ent, 335, gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1.0 ? 1.0 : (1/gMul));
}

public void ApplyMelee(const int ent){

}
138 changes: 138 additions & 0 deletions rrm_attribute_firing.sp
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
// 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 <tf2attributes>
#include <tf2>
#include <tf2_stocks>
#include <rrm>

#pragma newdecls required

int gEnabled = 0;
float gMul = 0.0;
ConVar cMin = null, cMax = null, cDelay = null;
float gMin = 0.0, gMax = 0.0, gDelay = 0.0;

public Plugin myinfo = {
name = "[RRM] Firing Speed Modifier",
author = "Katsute",
description = "Modifier that modifies firing speed.",
version = "1.0"
};

public void OnPluginStart(){
cMin = CreateConVar("rrm_attribute_firing_min", "0.5", "Minimum value for the random number generator.");
cMax = CreateConVar("rrm_attribute_firing_max", "4.0", "Maximum value for the random number generator.");
cDelay = CreateConVar("rrm_attribute_firing_delay", "1.2", "Delay to apply attribute.");

cMin.AddChangeHook(OnConvarChanged);
cMax.AddChangeHook(OnConvarChanged);
cDelay.AddChangeHook(OnConvarChanged);

gMin = cMin.FloatValue;
gMax = cMax.FloatValue;
gDelay = cDelay.FloatValue;

HookEvent("post_inventory_application", PostInventoryApplication);

if(RRM_IsRegOpen())
RegisterModifiers();

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

public int RRM_OnRegOpen(){
RegisterModifiers();
}

void RegisterModifiers(){
RRM_Register("Firing Rate", gMin, gMax, false, RRM_Callback_Attribute);
}

public void OnConvarChanged(Handle convar, char[] oldValue, char[] newValue){
if (StrEqual(oldValue, newValue, true))
return;

float fNewValue = StringToFloat(newValue);

if(convar == cMin)
gMin = fNewValue;
else if(convar == cMax)
gMax = fNewValue;
else if(convar == cDelay)
gDelay = fNewValue;
}

public int RRM_Callback_Attribute(bool enable, float value){
gEnabled = enable;
if(gEnabled)
gMul = value;
for(int i = 1; i < MaxClients; i++){
if(IsClientInGame(i)){
int health = GetClientHealth(i);
TF2_RemoveAllWeapons(i);
TF2_RegeneratePlayer(i);
SetEntityHealth(i, health < 1 ? 1 : health);
}
}
return gEnabled;
}

public void PostInventoryApplication(const Handle event, const char[] name, const bool dontBroadcast){
if(gEnabled){
int client = GetClientOfUserId(GetEventInt(event, "userid"));
CreateTimer(gDelay, PostInventoryApplicationDelayed, client, TIMER_FLAG_NO_MAPCHANGE);
}
}

public Action PostInventoryApplicationDelayed(const Handle timer, const int client){
if(IsClientInGame(client)){
int primary = GetPlayerWeaponSlot(client, 0);
int secondary = GetPlayerWeaponSlot(client, 1);
int melee = GetPlayerWeaponSlot(client, 2);

if(primary != -1 && TF2Attrib_GetByDefIndex(primary, 2050) == Address_Null){
ApplyPrimary(primary);
TF2Attrib_SetByDefIndex(primary, 2050, 1.0);
}
if(secondary != -1 && TF2Attrib_GetByDefIndex(secondary, 2050) == Address_Null){
ApplySecondary(secondary);
TF2Attrib_SetByDefIndex(secondary, 2050, 1.0);
}
if(melee != -1 && TF2Attrib_GetByDefIndex(melee, 2050) == Address_Null){
ApplyMelee(melee);
TF2Attrib_SetByDefIndex(melee, 2050, 1.0);
}
}
return Plugin_Continue;
}

public void ApplyAttribute(const int ent, const int attribute, const float value){
if(ent != -1 && IsValidEntity(ent)){
Address addr = TF2Attrib_GetByDefIndex(ent, attribute);
float current = addr != Address_Null ? TF2Attrib_GetValue(addr) : 1.0;
TF2Attrib_SetByDefIndex(ent, attribute, current * value);
}
}

public void ApplyPrimary(const int ent){
ApplyAttribute(ent, 6, 1/gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1.0 ? 1.0 : (1/gMul));
ApplyAttribute(ent, 41, gMul);
}

public void ApplySecondary(const int ent){
ApplyAttribute(ent, 6, 1/gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1 ? 1.0 : (1/gMul));
}

public void ApplyMelee(const int ent){
ApplyAttribute(ent, 6, 1/gMul);
ApplyAttribute(ent, 97, (1/gMul) > 1.0 ? 1.0 : (1/gMul));
ApplyAttribute(ent, 343, 1/gMul);
}
Loading

0 comments on commit 45385a6

Please sign in to comment.