예제 #1
0
 public void DismissPresidentAndManagers(Entities.Party party)
 {
     foreach (var management in party.PartyMembers.Where(m => m.PartyRoleID >= (int)PartyRoleEnum.Manager))
     {
         management.PartyRoleID = (int)PartyRoleEnum.Member;
     }
 }
예제 #2
0
        public PartyCongressCandidateSectionViewModel(Entities.Party party, IPartyService partyService) : base(party.Country)
        {
            Info    = new PartyInfoViewModel(party);
            PartyID = party.ID;

            var entity     = SessionHelper.CurrentEntity;
            var lastVoting = party.Country.GetLastCongressCandidateVoting();


            var candidate = lastVoting.CongressCandidates.FirstOrDefault(c => c.CandidateID == entity.EntityID);

            if (candidate != null)
            {
                PlayerCongressCandidateStatus = (CongressCandidateStatusEnum)candidate.CongressCandidateStatusID;
            }
            if (entity.Citizen != null)
            {
                if (partyService.CanAcceptCongressCandidates(entity.Citizen, party))
                {
                    CanAcceptCandidates = true;
                }

                if (partyService.CanCandidateToCongress(entity.Citizen, party))
                {
                    CanCandidate        = true;
                    CandidateRegionName = entity.GetCurrentRegion().Name;
                }
            }
        }
예제 #3
0
        private void ActivatePresidentVoting(Entities.Party party)
        {
            var notStartedVoting = party.PartyPresidentVotings.First(v => v.VotingStatusID == (int)VotingStatusEnum.NotStarted);

            notStartedVoting.VotingStatusID = (int)VotingStatusEnum.Ongoing;

            partyRepository.SaveChanges();
        }
예제 #4
0
        private PartyPresidentVoting CreateNewPresidentVoting(Entities.Party party, int votingDay)
        {
            PartyPresidentVoting voting = new PartyPresidentVoting()
            {
                Party          = party,
                VotingDay      = votingDay,
                VotingStatusID = (int)VotingStatusEnum.NotStarted,
            };

            partyRepository.AddPartyPresidentVoting(voting);

            partyRepository.SaveChanges();


            return(voting);
        }
예제 #5
0
        public PartyMemberListViewModel(Entities.Party party, List <PartyMember> members)
        {
            Info = new PartyInfoViewModel(party);

            var president = members.FirstOrDefault(m => m.PartyRoleID == (int)PartyRoleEnum.President);

            if (president != null)
            {
                President = new SmallEntityAvatarViewModel(president.Citizen.Entity);
            }

            Managers = members.Where(m => m.PartyRoleID == (int)PartyRoleEnum.Manager)
                       .Select(m => new SmallEntityAvatarViewModel(m.Citizen.Entity)).ToList();

            Members = members.Where(m => m.PartyRoleID == (int)PartyRoleEnum.Member)
                      .Select(m => new SmallEntityAvatarViewModel(m.Citizen.Entity)).ToList();
        }
예제 #6
0
        public ManagePartyViewModel(Entities.Party party, List <PartyRole> partyRoles, List <JoinMethod> joinMethods)
        {
            OverallInfo        = new PartyInfoViewModel(party);
            this.UserPartyRole = OverallInfo.PartyRole;
            this.JoinMethod    = (JoinMethodEnum)party.JoinMethodID;
            this.PartyAvatar   = OverallInfo.PartyAvatar;
            this.PartyID       = party.ID;

            partyRoles = partyRoles.Where(r => r.ID < (int)OverallInfo.PartyRole).ToList();

            foreach (var member in party.PartyMembers
                     .Where(m => m.PartyRoleID < (int)UserPartyRole)

                     .ToList())
            {
                Members.Add(new ManagePartyMemberViewModel(member));
            }

            PartyRoles  = CreateSelectList(partyRoles, x => ((PartyRoleEnum)x.ID).ToHumanReadable(), x => x.ID, true);
            JoinMethods = CreateSelectList(joinMethods);
        }
예제 #7
0
        public ViewPartyViewModel(Entities.Party party)
        {
            InviteSelector          = Select2AjaxViewModel.Create <CitizenController>(c => c.GetCitizens(null), "citizenID", null, "");
            InviteSelector.OnChange = "inviteCitizen";

            OverallInfo = new PartyInfoViewModel(party);
            JoinMethod  = (JoinMethodEnum)party.JoinMethodID;
            PartyRole   = OverallInfo.PartyRole;
            PartyID     = party.ID;

            var members = party.PartyMembers
                          .ToList();

            var president = members
                            .FirstOrDefault(m => m.PartyRoleID == (int)PartyRoleEnum.President);

            if (president != null)
            {
                President = new ShortEntityInfoViewModel(president.Citizen.Entity);
            }

            Managers = members
                       .Where(m => m.PartyRoleID == (int)PartyRoleEnum.Manager)
                       .Take(3)
                       .Select(m => new ShortEntityInfoViewModel(m.Citizen.Entity))
                       .ToList();

            if (Managers.Count < 3)
            {
                Members = members
                          .Where(m => m.PartyRoleID == (int)PartyRoleEnum.Member)
                          .Take(3 - Managers.Count)
                          .Select(m => new ShortEntityInfoViewModel(m.Citizen.Entity))
                          .ToList();
            }

            OtherMemberCount = members.Count() - Managers.Count - Members.Count - (president == null ? 0 : 1);

            var partyVoting = party.PartyPresidentVotings.Last();
            var entity      = SessionHelper.CurrentEntity;

            if (entity.EntityTypeID == (int)EntityTypeEnum.Citizen)
            {
                if (partyVoting.PartyPresidentCandidates.Any(c => c.CitizenID == entity.EntityID))
                {
                    CanStartAsCandidate = false;
                }
            }

            VotingDay = partyVoting.VotingDay;
            DaysLeft  = Math.Abs(GameHelper.CurrentDay - VotingDay);
            var candidatesID = partyVoting.PartyPresidentCandidates
                               .Select(c => c.CitizenID);

            VotingStatus = (VotingStatusEnum)partyVoting.VotingStatusID;
            IsCandidate  = candidatesID.Contains(entity.EntityID);
            if (VotingStatus == VotingStatusEnum.NotStarted && entity.EntityTypeID == (int)EntityTypeEnum.Citizen &&
                IsCandidate == false
                )
            {
                CanCandidate = true;
            }

            if (VotingStatus == VotingStatusEnum.Ongoing)
            {
                if (partyVoting.PartyPresidentVotes.Any(v => v.CitizenID == entity.EntityID) == true)
                {
                    Voted = true;
                }
            }

            var country        = party.Country;
            var congressVoting = country.GetLastCongressCandidateVoting();

            CongressCandidateVotingViewModel = new CongressCandidateVotingShortViewModel(congressVoting);

            InviteSelector.AddAdditionalData("partyid", PartyID);

            if (JoinMethod == JoinMethodEnum.Invite && PartyRole != PartyRoleEnum.NotAMember)
            {
                PendingInvites = party.PartyInvites.Count();
            }
        }
예제 #8
0
        void c_ClientPartyRequestInfo(object sender, ClientPartyRequestEventArgs e)
        {
            Client c = (Client)sender;
            PartyRequestInfo i = e.Info;
            Client asker = null;
            Client target = null;
            MapEngine mapEngine = GetMapEngine(c.MyCharacter.MapId);
            Client[] clients = GetClientsForChars(mapEngine.GetCharactersInRange(c.MyCharacter.Position, 150).ToArray());

            target = GetClientByCharacterID(i.TargetID);
            asker = GetClientByCharacterID(i.AskerID);

            if (i.Type == PartyType.Normal)
            {
                if (i.Error == PartyError.None)
                {
                    if (target.MyCharacter.Party != null)
                    {
                        i.Error = PartyError.AlreadyInParty;
                        asker.Send(PacketManager.SendPartyAnswer(i));
                        return;
                    }

                    if (target.MyCharacter.Level >= asker.MyCharacter.Level - 10 && target.MyCharacter.Level <= asker.MyCharacter.Level + 10)
                    {
                        byte[] SendPartyRequest = PacketManager.SendPartyAnswer(i);
                        target.Send(SendPartyRequest);
                    }
                    else
                    {
                        i.Error = PartyError.LevelDifference;
                        byte[] SendLevelDifference = PacketManager.SendPartyAnswer(i);
                        asker.Send(SendLevelDifference);
                    }

                }
                if (i.Error == PartyError.Cancel)
                {
                    asker.Send(PacketManager.SendPartyAnswer(i));
                }
                if (i.Error == PartyError.Accept)
                {
                    asker.Send(PacketManager.SendPartyAnswer(i));
                    asker.Send(PacketManager.SendPartyLeader(i));
                    target.Send(PacketManager.SendPartyLeader(i));

                    Party p = new Party
                    {
                        PartyID = asker.MyCharacter.CharacterId,
                        Leader = asker.MyCharacter,
                        Members = new List<Character>(),
                        Type = i.Type
                    };
                    p.Members.Add(asker.MyCharacter);
                    p.Members.Add(target.MyCharacter);

                    asker.MyCharacter.Party = p;
                    target.MyCharacter.Party = p;

                    asker.Send(PacketManager.SendAddPartyMember(p, target.MyCharacter));

                    asker.Send(PacketManager.SendParty(p));
                    target.Send(PacketManager.SendParty(p));

                    SendToClients(PacketManager.SendSpawnPlayers(asker.MyCharacter), clients);
                    SendToClients(PacketManager.SendSpawnPlayers(target.MyCharacter), clients);
                }
            }
            if (i.Type == PartyType.Relation)
            {
                try
                {
                    Friend f = asker.MyCharacter.FriendList.Single(x => x.FriendID == i.TargetID);
                    if (f.RelationType == FriendAddTypes.Lover || f.RelationType == FriendAddTypes.TeacherStudent)
                    {
                        asker.Send(PacketManager.SendPartyAnswer(i));
                        asker.Send(PacketManager.SendPartyLeader(i));
                        target.Send(PacketManager.SendPartyLeader(i));

                        Party p = new Party
                        {
                            PartyID = asker.MyCharacter.CharacterId,
                            Leader = asker.MyCharacter,
                            Members = new List<Character>(),
                            Type = i.Type
                        };
                        p.Members.Add(asker.MyCharacter);
                        p.Members.Add(target.MyCharacter);

                        asker.MyCharacter.Party = p;
                        target.MyCharacter.Party = p;

                        asker.Send(PacketManager.SendAddPartyMember(p, target.MyCharacter));

                        asker.Send(PacketManager.SendParty(p));
                        target.Send(PacketManager.SendParty(p));

                        SendToClients(PacketManager.SendSpawnPlayers(asker.MyCharacter), clients);
                        SendToClients(PacketManager.SendSpawnPlayers(target.MyCharacter), clients);
                    }
                    else
                        throw new Exception();
                }
                catch
                {
                    i.Error = PartyError.LevelDifference;

                    byte[] SendError = PacketManager.SendPartyAnswer(i);
                    asker.Send(SendError);
                }
            }
        }
예제 #9
0
 public PartyCongressCandidatesListViewModel(List <CongressCandidate> candidates, IPartyService partyService, Entities.Party party)
     : base(candidates)
 {
     PartyRole = PartyRoleEnum.NotAMember;
     if (SessionHelper.CurrentEntity.Citizen != null)
     {
         PartyRole = partyService.GetPartyRole(SessionHelper.LoggedCitizen, party);
         if (partyService.CanAcceptCongressCandidates(SessionHelper.CurrentEntity.Citizen, party))
         {
             CanAcceptCandidates = true;
         }
     }
 }
 public PartyJoinRequestsListViewModel(Entities.Party party, List <PartyJoinRequest> requests)
 {
     Info     = new PartyInfoViewModel(party);
     Requests = requests.Select(request => new PartyJoinRequestsListItemViewModel(request)).ToList();
 }
예제 #11
0
 public PartySummaryViewModel(Entities.Party party, Session session) : base(session)
 {
     Avatar  = new ImageViewModel(party.Entity.ImgUrl);
     Name    = party.Entity.Name;
     PartyID = party.ID;
 }
예제 #12
0
        public static byte[] SendLeaveParty(Party party, Character ch)
        {
            Packet p = new Packet(20);
            p.WriteInt(party.PartyID);
            p.WriteInt(ch.CharacterId);
            p.WriteByte((byte)party.Type);

            return p.GetWrittenBuffer(PacketIds.SendLeaveParty);
        }
예제 #13
0
        public static byte[] SendKillParty(Party party)
        {
            Packet p = new Packet(20);
            p.WriteInt(party.PartyID);

            return p.GetWrittenBuffer(PacketIds.SendKillParty);
        }
예제 #14
0
 public static byte[] SendChangePartyLeader(Party party)
 {
     Packet p = new Packet(20);
     p.WriteInt(party.PartyID);
     p.WriteInt(party.Leader.CharacterId);
     p.WriteByte((byte)party.Type);
     return p.GetWrittenBuffer(PacketIds.SendChangePartyLeader);
 }
예제 #15
0
        public static byte[] SendAddPartyMember(Party party, Character member)
        {
            Packet p = new Packet(20);
            p.WriteInt(party.PartyID); // party ID
            p.WriteInt(member.CharacterId);
            p.WriteByte(member.Class);
            p.WriteString(member.Name);
            p.WriteShort(member.Level);
            p.WriteShort((short)member.Position.X);
            p.WriteShort((short)member.Position.Y);
            p.WriteInt(member.CurrentHp);
            p.WriteInt(member.MaxHp);

            return p.GetWrittenBuffer(PacketIds.SendAddPartyMember);
        }
 public PartyPendingInviteListViewModel(Entities.Party party, List <Entity> citizens)
 {
     Info = new PartyInfoViewModel(party);
     CitizensWithInvites = citizens.Select(c => new SmallEntityAvatarViewModel(c)).ToList();
 }
예제 #17
0
        public static byte[] SendParty(Party party)
        {
            Packet p = new Packet(20);
            p.WriteInt(party.PartyID);
            p.WriteByte(party.MemberCount);
            p.WriteByte(1); // unknown
            foreach (Character ch in party.Members)
            {
                p.WriteInt(ch.CharacterId);
                p.WriteByte(2); // unknown
                p.WriteString(ch.Name);
                p.WriteShort(ch.Level);
                p.WriteShort(ch.Position.X);
                p.WriteShort(ch.Position.Y);
                p.WriteInt(ch.CurrentHp);
                p.WriteInt(ch.MaxHp);
                p.WriteInt(ch.MapId);
            }

            return p.GetWrittenBuffer(PacketIds.SendParty);
        }