-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAntiCheeseSystem.cs
More file actions
64 lines (59 loc) · 2.36 KB
/
AntiCheeseSystem.cs
File metadata and controls
64 lines (59 loc) · 2.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using CoreLib.Submodules.ModComponent;
using CoreLib.Submodules.ModSystem;
using Unity.Collections;
using Unity.Entities;
using Unity.Mathematics;
using Unity.Transforms;
using UnityEngine;
namespace PainMod;
public class AntiCheeseSystem : MonoBehaviour, IPseudoServerSystem
{
private World serverWorld;
public AntiCheeseSystem(IntPtr ptr) : base(ptr) { }
public void OnServerStarted(World world)
{
serverWorld = world;
}
public void OnServerStopped()
{
serverWorld = null;
}
private void Update()
{
if (serverWorld == null)
return;
EntityQuery queryBoss = serverWorld.EntityManager.CreateEntityQuery(ComponentModule.ReadOnly<BossCD>(),
ComponentModule.ReadOnly<SpawnPointCD>(),
ComponentModule.ReadOnly<IsInCombatCD>(),
ComponentModule.ReadOnly<ObjectDataCD>(),
ComponentModule.ReadWrite<Translation>());
NativeArray<Entity> bossEntities = queryBoss.ToEntityArray(Allocator.Temp);
foreach (var e in bossEntities)
{
var bossID = serverWorld.EntityManager.GetModComponentData<ObjectDataCD>(e).objectID;
//Plugin.logger.LogInfo("Boss ID is: " + bossID);
bool isInCombat = serverWorld.EntityManager.GetModComponentData<IsInCombatCD>(e).isInCombat;
double distanceFromPlayer =
math.distance(serverWorld.EntityManager.GetModComponentData<SpawnPointCD>(e).position,
Manager._instance.player.WorldPosition);
switch (bossID)
{
case ObjectID.ShamanBoss:
//if the player is too far and boss is in combat, that player will take damage
//between 9 and 12 block
Plugin.logger.LogInfo("Distance from player is " + distanceFromPlayer);
if (!isInCombat)
return;
if(distanceFromPlayer < 9 || distanceFromPlayer > 12)
return;
Manager._instance.player.playerCommandSystem.AddOrRefreshCondition(Manager._instance.player.entity, ConditionID.AuraRadioactiveDamageOverTime, 5 ,10000);
return;
case ObjectID.SlimeBoss:
return;
default:
return;
}
}
}
}