-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDamageRule.cs
More file actions
137 lines (116 loc) · 4.46 KB
/
DamageRule.cs
File metadata and controls
137 lines (116 loc) · 4.46 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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
namespace ScriptedEvents.Structures
{
using System.Collections.Generic;
using System.Linq;
using Exiled.API.Features;
using PlayerRoles;
using ScriptedEvents.API.Enums;
public class DamageRule
{
// Roles
public DamageRule(RoleTypeId aRole, RoleTypeId rRole)
{
Type = DamageRuleType.RoleToRole;
AttackerRole = aRole;
ReceiverRole = rRole;
}
public DamageRule(RoleTypeId aRole, IEnumerable<Player> rRole)
{
Type = DamageRuleType.RoleToPlayer;
AttackerRole = aRole;
ReceiverPlayers = rRole.ToList();
}
public DamageRule(IEnumerable<Player> aRole, RoleTypeId rRole)
{
Type = DamageRuleType.PlayerToRole;
AttackerPlayers = aRole.ToList();
ReceiverRole = rRole;
}
// Teams
public DamageRule(Team aTeam, Team rTeam)
{
Type = DamageRuleType.TeamToTeam;
AttackerTeam = aTeam;
ReceiverTeam = rTeam;
}
public DamageRule(Team aTeam, IEnumerable<Player> rTeam)
{
Type = DamageRuleType.TeamToPlayer;
AttackerTeam = aTeam;
ReceiverPlayers = rTeam.ToList();
}
public DamageRule(IEnumerable<Player> aTeam, Team rTeam)
{
Type = DamageRuleType.PlayerToTeam;
AttackerPlayers = aTeam.ToList();
AttackerTeam = rTeam;
}
// Misc
public DamageRule(RoleTypeId attacker, Team receiver)
{
Type = DamageRuleType.RoleToTeam;
AttackerRole = attacker;
ReceiverTeam = receiver;
}
public DamageRule(Team attacker, RoleTypeId receiver)
{
Type = DamageRuleType.TeamToRole;
AttackerTeam = attacker;
ReceiverRole = receiver;
}
public DamageRule(IEnumerable<Player> attacker, IEnumerable<Player> receiver)
{
Type = DamageRuleType.PlayerToPlayer;
AttackerPlayers = attacker.ToList();
ReceiverPlayers = receiver.ToList();
}
public DamageRuleType Type { get; }
public List<Player> AttackerPlayers { get; }
public List<Player> ReceiverPlayers { get; }
public RoleTypeId AttackerRole { get; }
public RoleTypeId ReceiverRole { get; }
public Team AttackerTeam { get; }
public Team ReceiverTeam { get; }
public float Multiplier { get; set; }
public float DetermineMultiplier(Player attacker, Player receiver)
{
if (Type == DamageRuleType.PlayerToRole && AttackerPlayers.Contains(attacker) && ReceiverRole == receiver.Role)
{
return Multiplier;
}
else if (Type == DamageRuleType.RoleToPlayer && AttackerRole == attacker.Role && ReceiverPlayers.Contains(receiver))
{
return Multiplier;
}
else if (Type == DamageRuleType.PlayerToTeam && AttackerPlayers.Contains(attacker) && ReceiverTeam == receiver.Role.Team)
{
return Multiplier;
}
else if (Type == DamageRuleType.TeamToPlayer && AttackerTeam == attacker.Role.Team && ReceiverPlayers.Contains(receiver))
{
return Multiplier;
}
else if (Type == DamageRuleType.RoleToRole && AttackerRole == attacker.Role && ReceiverRole == receiver.Role)
{
return Multiplier;
}
else if (Type == DamageRuleType.TeamToTeam && AttackerTeam == attacker.Role.Team && ReceiverTeam == receiver.Role.Team)
{
return Multiplier;
}
else if (Type == DamageRuleType.RoleToTeam && AttackerRole == attacker.Role && ReceiverTeam == receiver.Role.Team)
{
return Multiplier;
}
else if (Type == DamageRuleType.TeamToRole && AttackerTeam == attacker.Role.Team && ReceiverRole == receiver.Role)
{
return Multiplier;
}
else if (Type == DamageRuleType.PlayerToPlayer && AttackerPlayers.Contains(attacker) && ReceiverPlayers.Contains(receiver))
{
return Multiplier;
}
return 1f;
}
}
}