Skip to content

Commit 6f55a73

Browse files
authored
Fix gang creation on zone (#522)
1 parent 04f7fab commit 6f55a73

3 files changed

Lines changed: 26 additions & 2 deletions

File tree

src/Perpetuum/Groups/Gangs/GangManager.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,21 @@ public Gang CreateGang(string gangName,Character leader)
5656
gang.Id = Guid.NewGuid();
5757
gang.Name = gangName;
5858
gang.Leader = leader;
59-
gang.SetMember(leader);
59+
// In addition to leadership, an assistant role is also needed
60+
// so that when the leader changes, the creator does not lose
61+
// control over the gang
62+
gang.SetMember(leader, GangRole.Assistant);
6063

6164
_gangRepository.Insert(gang);
6265

63-
void Finish() => _channelManager.CreateAndJoinChannel(ChannelType.Gang, gang.ChannelName, gang.Leader);
66+
void Finish()
67+
{
68+
// In addition to the DB repository, need to add a new gang to the dictionary
69+
_gangs.Add(gang.Id, gang);
70+
_channelManager.CreateAndJoinChannel(ChannelType.Gang, gang.ChannelName, gang.Leader);
71+
// Perform actions upon completion of the gang creation
72+
GangCreate?.Invoke(gang, leader);
73+
}
6474

6575
if (Transaction.Current != null)
6676
Transaction.Current.OnCommited(Finish);
@@ -212,6 +222,7 @@ void Finish()
212222
Finish();
213223
}
214224

225+
public event Action<Gang, Character> GangCreate;
215226
public event Action<Gang,Character> GangMemberJoined;
216227
public event Action<Gang, Character> GangMemberRemoved;
217228

src/Perpetuum/Groups/Gangs/IGangManager.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public interface IGangManager
2020
void ChangeLeader(Gang gang, Character newLeader);
2121
void SetRole(Gang gang, Character member, GangRole newRole);
2222

23+
/// <summary>
24+
/// An action performed after a gang is created
25+
/// </summary>
26+
event Action<Gang,Character /* leader */> GangCreate;
27+
2328
event Action<Gang,Character /* member */> GangMemberJoined;
2429
event Action<Gang,Character /* member */> GangMemberRemoved;
2530
event Action<Gang> GangDisbanded;

src/Perpetuum/Zones/Zone.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ protected Zone(ISessionManager sessionManager, IGangManager gangManager)
9494
IsLayerEditLocked = true;
9595
sessionManager.CharacterDeselected += OnCharacterDeselected;
9696
_gangManager = gangManager;
97+
_gangManager.GangCreate += OnGangCreate;
9798
_gangManager.GangMemberJoined += OnGangMemberJoined;
9899
_gangManager.GangMemberRemoved += OnGangMemberRemoved;
99100
_gangManager.GangDisbanded += OnGangDisbanded;
@@ -129,6 +130,13 @@ public override void Stop()
129130
SaveUnitsToDb<ProximityDeviceBase>();
130131
}
131132

133+
/// <summary>
134+
/// Perform the necessary actions for the zone after creating the gang.
135+
/// </summary>
136+
/// <param name="gang">Newly formed gang</param>
137+
/// <param name="character">The creator of the gang</param>
138+
private void OnGangCreate(Gang gang, Character character) => OnGangMemberJoined(gang, character);
139+
132140
private void OnGangMemberJoined(Gang gang, Character character)
133141
{
134142
if (this.TryGetPlayer(character, out Player player))

0 commit comments

Comments
 (0)