Skip to content

Commit 7c3456f

Browse files
fix (teammates damage,C4 missing) feature (2 new modes)
1.When healing Teammates, won't kill teammates anymore; 2.C4 will be given to T in Infinite Grenade Mode; 3.New Modes: Change Weapon On Shoot Drop Weapon On Shoot 4.fix fun_load command
1 parent 0607393 commit 7c3456f

File tree

6 files changed

+157
-18
lines changed

6 files changed

+157
-18
lines changed

FunChangeWeaponOnShoot.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using CounterStrikeSharp.API;
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Modules.Entities.Constants;
4+
using CounterStrikeSharp.API.Modules.Utils;
5+
6+
namespace FunMatchPlugin;
7+
8+
public class FunChangeWeaponOnShoot : FunBaseClass
9+
{
10+
public override string Decription => "Change Weapon OnShoot 射击换枪";
11+
private BasePlugin.GameEventHandler<EventBulletImpact>? EventBulletImpactHandler=null;
12+
private Random random = new Random();
13+
public override void Fun(FunMatchPlugin plugin)
14+
{
15+
if (Enabled) return;
16+
Enabled = true;
17+
//EventPlayerShoot Not Working
18+
plugin.RegisterEventHandler <EventBulletImpact>(EventBulletImpactHandler = (@event, info) =>
19+
{
20+
if (Enabled == false) return HookResult.Stop;
21+
if (@event.Userid == null) return HookResult.Continue;
22+
//200-209 300-312 400-410
23+
//give random weapon ON shoot
24+
var guntype = random.Next(2,5);
25+
int guntype_add = 0;
26+
switch (guntype)
27+
{
28+
case 2:
29+
{
30+
guntype_add = random.Next(0,10);
31+
break;
32+
}
33+
case 3:
34+
{
35+
guntype_add = random.Next(0,13);
36+
break;
37+
}
38+
case 4:
39+
{
40+
guntype_add = random.Next(0,11);
41+
break;
42+
}
43+
}
44+
CsItem csItem = (CsItem)(guntype * 100 + guntype_add);
45+
46+
var player = @event.Userid!.OriginalControllerOfCurrentPawn.Get();
47+
var pawn = player!.PlayerPawn.Get();
48+
var cur_weapon = pawn!.WeaponServices!.ActiveWeapon.Get();
49+
if (cur_weapon is null) return HookResult.Continue;
50+
if (cur_weapon.DesignerName == "weapon_c4" || cur_weapon.DesignerName == "weapon_knife" || cur_weapon.DesignerName == "weapon_knife_t")
51+
return HookResult.Continue;
52+
53+
@event.Userid!.DropActiveWeapon();
54+
cur_weapon!.Remove();
55+
56+
@event.Userid!.GiveNamedItem(csItem);
57+
if (pawn!.WeaponServices!.ActiveWeapon.Get() is null)
58+
{
59+
@event.Userid!.GiveNamedItem(CsItem.Knife);
60+
}
61+
return HookResult.Continue;
62+
});
63+
}
64+
65+
public override void EndFun(FunMatchPlugin plugin)
66+
{
67+
Enabled = false;
68+
plugin.DeregisterEventHandler(EventBulletImpactHandler!);
69+
}
70+
}
71+

FunDropWeaponOnShoot.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using CounterStrikeSharp.API.Core;
2+
using CounterStrikeSharp.API.Modules.Entities.Constants;
3+
using CounterStrikeSharp.API.Modules.Utils;
4+
5+
namespace FunMatchPlugin;
6+
7+
public class FunDropWeaponOnShoot : FunBaseClass
8+
{
9+
public override string Decription => "Drop Weapon OnShoot 射击丢枪";
10+
private BasePlugin.GameEventHandler<EventBulletImpact>? EventBulletImpactHandler=null;
11+
public override void Fun(FunMatchPlugin plugin)
12+
{
13+
if (Enabled) return;
14+
Enabled = true;
15+
//EventPlayerShoot Not Working
16+
plugin.RegisterEventHandler <EventBulletImpact>(EventBulletImpactHandler = (@event, info) =>
17+
{
18+
if (Enabled == false) return HookResult.Stop;
19+
var player = @event.Userid!.OriginalControllerOfCurrentPawn.Get();
20+
var pawn = player!.PlayerPawn.Get();
21+
var cur_weapon = pawn!.WeaponServices!.ActiveWeapon.Get();
22+
if (cur_weapon is null) return HookResult.Continue;
23+
if (cur_weapon.DesignerName == "weapon_c4" || cur_weapon.DesignerName == "weapon_knife" || cur_weapon.DesignerName == "weapon_knife_t")
24+
return HookResult.Continue;
25+
26+
@event.Userid!.DropActiveWeapon();
27+
28+
if (pawn!.WeaponServices!.ActiveWeapon.Get() is null)
29+
{
30+
@event.Userid!.GiveNamedItem(CsItem.Knife);
31+
}
32+
return HookResult.Continue;
33+
});
34+
}
35+
36+
public override void EndFun(FunMatchPlugin plugin)
37+
{
38+
Enabled = false;
39+
plugin.DeregisterEventHandler(EventBulletImpactHandler!);
40+
}
41+
}

FunHealTeammates.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ public FunHealTeammates(FunMatchPlugin plugin) : base(plugin){}
2222
private BasePlugin.GameEventHandler<EventPlayerConnectFull>? EventPlayerConnectFullHandler;
2323
private BasePlugin.GameEventHandler<EventPlayerHurt>? EventPlayerHurtHandler;
2424
private Dictionary<int,Timer> playerTimersDict = new ();
25-
private void BurnPlayer(CCSPlayerPawn pawn)
25+
private void BurnPlayer(CCSPlayerPawn? pawn)
2626
{
27+
if (pawn is null) return;
2728
pawn.Health -= BurnDamage;
2829
pawn.ApplyStressDamage = true;
2930
Utilities.SetStateChanged(pawn, "CBaseEntity", "m_iHealth");
@@ -36,6 +37,7 @@ public override void EndFun(FunMatchPlugin plugin)
3637
{
3738
Enabled = false;
3839
ConVar.Find("mp_autokick")!.SetValue(true);
40+
ConVar.Find("ff_damage_reduction_bullets")!.SetValue(0.5F);
3941
foreach (var value in playerTimersDict.Values)
4042
{
4143
if (value is not null)
@@ -57,6 +59,7 @@ public override void Fun(FunMatchPlugin plugin)
5759
ConVar.Find("mp_autokick")!.SetValue(false);
5860
LastConvar_friendlyfire = ConVar.Find("mp_friendlyfire")!.GetPrimitiveValue<bool>();
5961
ConVar.Find("mp_friendlyfire")!.SetValue(true);
62+
ConVar.Find("ff_damage_reduction_bullets")!.SetValue(0.0f);
6063
plugin.RegisterEventHandler <EventRoundFreezeEnd>(EventRoundFreezeEndHandler = (@event, info) =>
6164
{
6265

@@ -68,7 +71,6 @@ public override void Fun(FunMatchPlugin plugin)
6871
//if (p.IsBot) continue;
6972
var pawn = p.OriginalControllerOfCurrentPawn.Get()!.PlayerPawn.Get();
7073
playerTimersDict.TryAdd((int)p.UserId,plugin.AddTimer(BurnAfterSecond,() => BurnPlayer(pawn!),TimerFlags.REPEAT));
71-
pawn!.LastFriendlyFireDamageReductionRatio = 0.0f;
7274
}
7375
return HookResult.Stop;
7476
});
@@ -82,7 +84,6 @@ public override void Fun(FunMatchPlugin plugin)
8284
if (pawn is null) return HookResult.Continue;
8385
playerTimer = plugin.AddTimer(BurnAfterSecond,() => BurnPlayer(pawn!),TimerFlags.REPEAT);
8486
playerTimersDict.TryAdd((int)@event.Userid.UserId!,playerTimer);
85-
pawn!.LastFriendlyFireDamageReductionRatio = 0.0f;
8687
return HookResult.Continue;
8788
});
8889

FunInfiniteGrenade.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using CounterStrikeSharp.API;
2+
using CounterStrikeSharp.API.Core;
3+
using CounterStrikeSharp.API.Core.Translations;
24
using CounterStrikeSharp.API.Modules.Cvars;
35
using CounterStrikeSharp.API.Modules.Entities.Constants;
46

@@ -24,13 +26,19 @@ public override void Fun(FunMatchPlugin plugin)
2426
ConVar.Find("mp_weapons_allow_smgs")!.SetValue(0);
2527
ConVar.Find("mp_weapons_allow_heavy")!.SetValue(0);
2628
var Allplayers = Utilities.GetPlayers();
29+
bool BombHasGiven = false;
2730
foreach (var p in Allplayers)
2831
{
2932
p.RemoveWeapons();
3033
p.GiveNamedItem(CsItem.HE);
3134
p.GiveNamedItem(CsItem.Knife);
3235
p.GiveNamedItem(CsItem.Kevlar);
3336
p.GiveNamedItem(CsItem.KevlarHelmet);
37+
if (p.Team == CounterStrikeSharp.API.Modules.Utils.CsTeam.Terrorist && !BombHasGiven)
38+
{
39+
p.GiveNamedItem(CsItem.C4);
40+
BombHasGiven = true;
41+
}
3442
}
3543
}
3644
public override void EndFun(FunMatchPlugin plugin)
@@ -44,5 +52,6 @@ public override void EndFun(FunMatchPlugin plugin)
4452
ConVar.Find("mp_weapons_allow_pistols")!.SetValue(-1);
4553
ConVar.Find("mp_weapons_allow_smgs")!.SetValue(-1);
4654
ConVar.Find("mp_weapons_allow_heavy")!.SetValue(-1);
55+
Server.PrintToChatAll(StringExtensions.ReplaceColorTags("{RED}") + "[FunMatchPlugin] " + "If U Cannot Buy guns,Reconnect 如果手雷结束后买不了枪 请重新连接服务器");
4756
}
4857
}

FunMatchPlugin.cs

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@
33
using CounterStrikeSharp.API;
44
using CounterStrikeSharp.API.Modules.Commands;
55
using CounterStrikeSharp.API.Modules.Admin;
6-
using System.Data;
76

87
namespace FunMatchPlugin;
98

109
public class FunMatchPlugin: BasePlugin
1110
{
1211
public override string ModuleName => "Fun Match Plugin";
13-
public override string ModuleVersion => "1.0.4";
12+
public override string ModuleVersion => "1.0.5";
1413
public override void Load(bool hotReload)
1514
{
1615
Console.WriteLine("Fun Match Plugin Load!");
@@ -34,6 +33,10 @@ public override void Load(bool hotReload)
3433
FunLists.Add(funToTheMoon);
3534
FunWNoStop funWNoStop = new FunWNoStop(this);
3635
FunLists.Add(funWNoStop);
36+
FunDropWeaponOnShoot funDropWeaponOnShoot = new();
37+
FunLists.Add(funDropWeaponOnShoot);
38+
FunChangeWeaponOnShoot funChangeWeaponOnShoot = new();
39+
FunLists.Add(funChangeWeaponOnShoot);
3740
}
3841

3942
public void LoadRandomFun()
@@ -74,6 +77,9 @@ public void LoadFunByName(string name)
7477
private List<FunBaseClass> FunLists = new List<FunBaseClass>();
7578
private bool EnableRandom = true;
7679

80+
private GameEventHandler<EventRoundStart> ?ManualLoadHander;
81+
private int ManualLoadIndex = -1;
82+
7783
[GameEventHandler]
7884
public HookResult OnRoundStart(EventRoundStart @event, GameEventInfo info)
7985
{
@@ -99,23 +105,32 @@ public void OnLoadFunCommand(CCSPlayerController? player, CommandInfo commandInf
99105
commandInfo.ReplyToCommand($"Invalid num. pls input num from {1} - {FunLists.Count}");
100106
return;
101107
}
102-
LoadFunByIndex(num - 1);
108+
if (ManualLoadHander is not null)
109+
{
110+
commandInfo.ReplyToCommand($"Alraedy loaded {ManualLoadIndex + 1} Manually, Pls !fun_load first");
111+
return;
112+
}
113+
ManualLoadIndex = num - 1;
114+
LoadFunByIndex(ManualLoadIndex);
115+
RegisterEventHandler (ManualLoadHander = (@event, info) =>
116+
{
117+
UnLoadFunByIndex(ManualLoadIndex);
118+
Server.NextFrame(()=>{
119+
LoadFunByIndex(ManualLoadIndex);
120+
});
121+
return HookResult.Continue;
122+
});
103123
}
104124

105-
[ConsoleCommand("!fun_load", "UnLoad fun by num")]
106-
[CommandHelper(minArgs: 1, usage: "[num]", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
125+
[ConsoleCommand("!fun_load", "UnLoad fun Manually")]
126+
[CommandHelper(minArgs: 0, usage: "", whoCanExecute: CommandUsage.CLIENT_AND_SERVER)]
107127
[RequiresPermissions("@css/root")]
108128
public void OnUnLoadFunCommand(CCSPlayerController? player, CommandInfo commandInfo)
109129
{
110-
111-
int num;
112-
int.TryParse(commandInfo.GetArg(1),out num);
113-
if (num <= 0 || num >FunLists.Count)
114-
{
115-
commandInfo.ReplyToCommand($"Invalid num. pls input num from {1} - {FunLists.Count}");
116-
return;
117-
}
118-
UnLoadFunByIndex(num - 1);
130+
UnLoadFunByIndex(ManualLoadIndex);
131+
DeregisterEventHandler(ManualLoadHander!);
132+
ManualLoadHander = null;
133+
commandInfo.ReplyToCommand($"Unloaded {ManualLoadIndex + 1}");
119134
}
120135

121136
[ConsoleCommand("fun_lists", "Lists Avaliable Fun")]

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ a showmatch like plugin for fun
2222
### WNoStop 按住W不松手
2323
if you don't forward, you will get hurt.
2424
不向前则会收到伤害
25+
### Change Weapon ONShoot 射击换枪
26+
### Drop Weapon ONShoot 射击丢枪
2527

2628
## How to Install 如何安装
2729

@@ -43,4 +45,4 @@ see [https://docs.cssharp.dev/docs/guides/getting-started.html](https://docs.css
4345

4446
`fun_load [num]` load certain mode by num (num can be found in command "funlists") won't affect random load 手动加载模式 对应的数字可以在"funlists"指令查到 与随机模式独立
4547

46-
`!fun_load [num]` Unload certain mode by num (num can be found in command "funlists") 手动卸载模式
48+
`!fun_load` Unload mode you manually load (num can be found in command "funlists") 卸载手动加载的模式

0 commit comments

Comments
 (0)