private void CommonProcess(SyncFactionType syncType, long factionId, long playerId) { switch (syncType) { case SyncFactionType.Join: { var fc = MyAPIGateway.Session.Factions.GetObjectBuilder(); //var faction = MyAPIGateway.Session.Factions.TryGetFactionById(factionId); // AddPlayerToFaction() Doesn't work right on dedicated servers. To be removed by Keen in future. Is Depriated. //MyAPIGateway.Session.Factions.AddPlayerToFaction(selectedPlayer.PlayerId, factionCollectionBuilder.FactionId); //MyAPIGateway.Session.Factions.AddPlayerToFaction(PlayerId, FactionId); var request = fc.Factions.FirstOrDefault(f => f.JoinRequests.Any(r => r.PlayerId == playerId)); if (request != null && request.FactionId != factionId) { // Cancel join request to other faction. MyAPIGateway.Session.Factions.CancelJoinRequest(request.FactionId, playerId); } else if (request != null && request.FactionId == factionId) { MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); //MyAPIGateway.Utilities.ShowMessage("join", string.Format("{0} has been addded to faction.", selectedPlayer.DisplayName)); return; } // The SendJoinRequest and AcceptJoin cannot be called consecutively as the second call fails to work, so they must be run on individual game frames. MyAPIGateway.Session.Factions.SendJoinRequest(factionId, playerId); MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); //// The SendJoinRequest and AcceptJoin cannot be called consecutively as the second call fails to work, so they must be run on individual game frames. //_workQueue.Enqueue(delegate () { MyAPIGateway.Session.Factions.SendJoinRequest(factionId, playerIdd); }); //_workQueue.Enqueue(delegate () { MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); }); } break; case SyncFactionType.Kick: MyAPIGateway.Session.Factions.KickMember(factionId, playerId); break; case SyncFactionType.Promote: MyAPIGateway.Session.Factions.PromoteMember(factionId, playerId); break; case SyncFactionType.Demote: MyAPIGateway.Session.Factions.DemoteMember(factionId, playerId); break; case SyncFactionType.Remove: MyAPIGateway.Session.Factions.RemoveFaction(factionId); break; case SyncFactionType.CancelJoin: MyAPIGateway.Session.Factions.CancelJoinRequest(factionId, playerId); break; case SyncFactionType.AcceptPeace: { var fc = MyAPIGateway.Session.Factions.GetObjectBuilder(); foreach (var faction in fc.Factions) { if (factionId == faction.FactionId) continue; if (MyAPIGateway.Session.Factions.IsPeaceRequestStatePending(factionId, faction.FactionId)) MyAPIGateway.Session.Factions.AcceptPeace(factionId, faction.FactionId); } } break; } }
private void CommonProcess(SyncFactionType syncType, long factionId, long playerId) { switch (syncType) { case SyncFactionType.Join: { //var fc = MyAPIGateway.Session.Factions.GetObjectBuilder(); //var faction = MyAPIGateway.Session.Factions.TryGetFactionById(factionId); // AddPlayerToFaction() Doesn't work right on dedicated servers. To be removed by Keen in future. Is Depriated. //MyAPIGateway.Session.Factions.AddPlayerToFaction(selectedPlayer.IdentityId, factionCollectionBuilder.FactionId); //MyAPIGateway.Session.Factions.AddPlayerToFaction(PlayerId, FactionId); //var request = fc.Factions.FirstOrDefault(f => f.JoinRequests.Any(r => r.PlayerId == playerId)); var request = MyAPIGateway.Session.Factions.Factions.FirstOrDefault(f => f.Value.JoinRequests.Any(r => r.Value.PlayerId == playerId)).Value; if (request != null && request.FactionId != factionId) { // Cancel join request to other faction. MyAPIGateway.Session.Factions.CancelJoinRequest(request.FactionId, playerId); } else if (request != null && request.FactionId == factionId) { MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); //MyAPIGateway.Utilities.ShowMessage("join", string.Format("{0} has been addded to faction.", selectedPlayer.DisplayName)); return; } // The SendJoinRequest and AcceptJoin cannot be called consecutively as the second call fails to work, so they must be run on individual game frames. MyAPIGateway.Session.Factions.SendJoinRequest(factionId, playerId); MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); //// The SendJoinRequest and AcceptJoin cannot be called consecutively as the second call fails to work, so they must be run on individual game frames. //_workQueue.Enqueue(delegate () { MyAPIGateway.Session.Factions.SendJoinRequest(factionId, playerIdd); }); //_workQueue.Enqueue(delegate () { MyAPIGateway.Session.Factions.AcceptJoin(factionId, playerId); }); } break; case SyncFactionType.Kick: MyAPIGateway.Session.Factions.KickMember(factionId, playerId); break; case SyncFactionType.Promote: MyAPIGateway.Session.Factions.PromoteMember(factionId, playerId); break; case SyncFactionType.Demote: MyAPIGateway.Session.Factions.DemoteMember(factionId, playerId); break; case SyncFactionType.Remove: MyAPIGateway.Session.Factions.RemoveFaction(factionId); break; case SyncFactionType.CancelJoin: MyAPIGateway.Session.Factions.CancelJoinRequest(factionId, playerId); break; case SyncFactionType.AcceptPeace: { foreach (var faction in MyAPIGateway.Session.Factions.Factions) { if (factionId == faction.Value.FactionId) { continue; } if (MyAPIGateway.Session.Factions.IsPeaceRequestStatePending(factionId, faction.Value.FactionId)) { MyAPIGateway.Session.Factions.AcceptPeace(factionId, faction.Value.FactionId); } } } break; } }