public bool Organize(object[] Params) { FinishedCycle = false; if (CurrentGroup != null) { //check for group members who haven't checked it, keep waiting if there are RelayAll("active", Self.CharacterName, Self.LeadershipValue.ToString(), Self.Role.ToString()); RelayAll("available", Self.CharacterName, Self.Available.ToString()); if (!Session.InFleet) { //i'm not in a fleet, should i wait for an invite or create a fleet? if (!CurrentGroup.ActiveMembers.Any(a => a.InFleet) && !CurrentGroup.ActiveMembers.Any(a => a.CharacterName == Me.Name && a.Role == Role.Booster && Local.Pilots.Any(b => b.Name == a.CharacterName))) { //nobody else is in a fleet, i can make one Log.Log("|oCreating fleet"); Fleet.CreateFleet(); RelayAll("joinedfleet", Self.CharacterName); Self.InFleet = true; return(false); } else { //someone else is in a fleet , wait for an invite from another group member if (CurrentGroup.ActiveMembers.Any(a => Window.All.OfType <PopupWindow>().Any(b => b.Message.Contains(a.CharacterName)))) { Log.Log("|oAccepting fleet invite"); Window FleetInviteWindow = Window.All.OfType <PopupWindow>().FirstOrDefault(a => CurrentGroup.ActiveMembers.Any(b => a.Message.Contains(b.CharacterName))); if (FleetInviteWindow != null) { FleetInviteWindow.ClickButton(Window.Button.Yes); return(false); } } return(false); } } else if (!Self.InFleet) { RelayAll("joinedfleet", Self.CharacterName); Self.InFleet = true; return(false); } //am i the only person in the fleet? if (Fleet.Members.Count == 1) { //hand out invites! Pilot ToInvite = Local.Pilots.FirstOrDefault(a => !InFleet(a.Name) && CurrentGroup.ActiveMembers.Any(b => b.CharacterName == a.Name && b.Active && b.Available)); if (ToInvite != null) { Log.Log("|oInviting fleet member"); Log.Log(" |-g{0}", ToInvite.Name); Fleet.Invite(ToInvite, Fleet.Wings[0], Fleet.Wings[0].Squads[0], FleetRole.SquadMember); return(false); } } //who should be squad leader ActiveMember newLeader = CurrentGroup.ActiveMembers.Where(a => a.Active && a.Role != Role.Hauler).OrderByDescending(a => a.LeadershipValue).ThenBy(b => b.CharacterName).FirstOrDefault(a => a.Active && a.Available && Fleet.Members.Any(fleetmember => fleetmember.Name == a.CharacterName)); if (newLeader != null) { if (Leader != newLeader) { //oh shit we got a new leader , if it's not me i should check i wasn't the old one Log.Log("|oSelecting new leader"); Log.Log(" |-g{0}", newLeader.CharacterName); //check if the new leader isnt me if (newLeader.CharacterName != Self.CharacterName) { //it's not me check if i have to hand boss over if (FleetBoss.Name == Self.CharacterName) { //i'm the squad leader but no the leader!! better give boss to new leader Log.Log("|oPassing boss to new leader"); Log.Log(" |-g{0}", newLeader.CharacterName); Fleet.Members.First(a => a.Name == newLeader.CharacterName).MakeBoss(); Leader = newLeader; return(false); } } Leader = newLeader; } //Am I the leader? if (Leader.CharacterName == Self.CharacterName) { //am I da boss if (FleetBoss.Name == Me.Name) { //am i the squad leader? FleetMember commander = Fleet.Wings[0].Members.FirstOrDefault(a => a.Role == FleetRole.SquadCommander); if (commander != null) { //someone is squad leader, is it me? if (commander.Name != Me.Name) { //it's not me! , demote that guy commander.Move(Fleet.Wings[0], Fleet.Wings[0].Squads[0], FleetRole.SquadMember); return(false); } } else { //nobody is squad leader, make me squad leader! Fleet.Members.First(a => a.Name == Me.Name).Move(Fleet.Wings[0], Fleet.Wings[0].Squads[0], FleetRole.SquadCommander); return(false); } //are there invites to do? Pilot ToInvite = Local.Pilots.FirstOrDefault(a => !InFleet(a.Name) && CurrentGroup.ActiveMembers.Any(b => b.CharacterName == a.Name && b.Available && b.Active)); if (ToInvite != null) { Log.Log("|oInviting fleet member"); Log.Log(" |-g{0}", ToInvite.Name); Fleet.Invite(ToInvite, Fleet.Wings[0], Fleet.Wings[0].Squads[0], FleetRole.SquadMember); return(false); } //Is there a booster? FleetMember fleetbooster = Fleet.Wings[0].Squads[0].Members.FirstOrDefault(a => a.RoleBooster == BoosterRole.SquadBooster); if (fleetbooster == null && Fleet.Wings[0].Squads[0].Commander.RoleBooster == BoosterRole.SquadBooster) { fleetbooster = Fleet.Wings[0].Squads[0].Commander; } ActiveMember booster = CurrentGroup.ActiveMembers.FirstOrDefault(a => a.Role == Role.Booster); if (booster != null) { FleetMember newBooster = Fleet.Members.FirstOrDefault(a => a.Name == booster.CharacterName); if (newBooster != null) { if (fleetbooster == null) { Log.Log("|oSetting squad booster"); Log.Log(" |-g{0}", booster.CharacterName); newBooster.SetBooster(BoosterRole.SquadBooster); return(false); } if (fleetbooster.Name != booster.CharacterName) { Log.Log("|oRevoking squad booster"); Log.Log(" |-g{0}", fleetbooster.Name); fleetbooster.SetBooster(BoosterRole.NonBooster); return(false); } } } } else { //im not the boss, hopefully the old boss will make me the boss return(false); } } } // Don't mark cycle finished if there are more pilots to invite Pilot PendingInvite = Local.Pilots.FirstOrDefault(a => !InFleet(a.Name) && CurrentGroup.ActiveMembers.Any(b => b.CharacterName == a.Name && b.Available && b.Active)); if (PendingInvite != null) { return(false); } FinishedCycle = true; return(false); } else { QueueState(InitializeSelf); return(true); } }
void UpdateGroupControl(object sender, LSEventArgs args) { try { switch (args.Args[0]) { case "active": if (CurrentGroup != null) { ActiveMember activeMember = CurrentGroup.ActiveMembers.FirstOrDefault(a => a.CharacterName == args.Args[1]); if (activeMember != null) { if (!activeMember.Active) { activeMember.Active = true; } activeMember.LeadershipValue = Convert.ToInt32(args.Args[2]); activeMember.Role = (Role)Enum.Parse(typeof(Role), args.Args[3]); } } break; case "available": if (CurrentGroup != null) { ActiveMember availableMember = CurrentGroup.ActiveMembers.FirstOrDefault(a => a.CharacterName == args.Args[1]); if (availableMember != null) { availableMember.Available = Convert.ToBoolean(args.Args[2]); } } break; case "joinedfleet": if (CurrentGroup != null) { ActiveMember joinedFleet = CurrentGroup.ActiveMembers.FirstOrDefault(a => a.CharacterName == args.Args[1]); if (joinedFleet != null) { if (!joinedFleet.InFleet) { joinedFleet.InFleet = true; } } } break; case "reloadConfig": LoadConfig(); break; case "forceupdate": if (Self.CharacterName != null) { RelayAll("active", Self.CharacterName, Self.LeadershipValue.ToString(), Self.Role.ToString()); RelayAll("available", Self.CharacterName, Self.Available.ToString()); if (Self.InFleet) { RelayAll("joinedfleet", Self.CharacterName); } } break; } } catch { // ignored } }