Beispiel #1
0
        public void Parse(GameClient Session, ClientPacket Packet)
        {
            int pollId     = Packet.PopInt();
            int questionId = Packet.PopInt();
            int count      = Packet.PopInt();


            RoomPoll poll = null;

            if (Session == null || Session.GetHabbo() == null)
            {
                return;
            }

            Room room = Session.GetHabbo().CurrentRoom;

            if (room == null)
            {
                return;
            }

            if (questionId == -1)
            {
                String answer = Packet.PopString();
                if (room.poolQuestion != string.Empty)
                {
                    if (room.yesPoolAnswers.Contains(Session.GetHabbo().Id) || room.noPoolAnswers.Contains(Session.GetHabbo().Id))
                    {
                        return;
                    }

                    if (answer.Equals("1"))
                    {
                        room.yesPoolAnswers.Add(Session.GetHabbo().Id);
                        RavenEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PollVote", 1);
                    }
                    else
                    {
                        room.noPoolAnswers.Add(Session.GetHabbo().Id);
                        RavenEnvironment.GetGame().GetAchievementManager().ProgressAchievement(Session, "ACH_PollVote", 1);
                    }

                    room.SendMessage(new QuickPollResultMessageComposer(Session.GetHabbo().Id, answer, room.yesPoolAnswers.Count, room.noPoolAnswers.Count));
                    return;
                }
            }
            else if (RavenEnvironment.GetGame().GetPollManager().TryGetPollForRoom(room.Id, out poll))
            {
                RoomPollQuestion question = null;
                if (!poll.Questions.TryGetValue(questionId, out question))
                {
                    return;
                }

                string answer = "";

                switch (question.Type)
                {
                case RoomPollQuestionType.Textbox:
                    answer = "" + Packet.PopString();
                    break;

                case RoomPollQuestionType.Radio:
                    answer = "" + Packet.PopString();
                    break;

                case RoomPollQuestionType.Checkbox:
                    for (int i = 0; i < count; ++i)
                    {
                        answer = "" + answer + ":" + Packet.PopString();
                    }
                    break;
                }

                using (IQueryAdapter dbClient = RavenEnvironment.GetDatabaseManager().GetQueryReactor())
                {
                    dbClient.SetQuery("INSERT INTO `user_room_poll_results` (`user_id`,`poll_id`,`question_id`,`answer`,`timestamp`) VALUES (@uid,@pid,@qid,@answer,@timestamp);");
                    dbClient.AddParameter("uid", Session.GetHabbo().Id);
                    dbClient.AddParameter("pid", poll.Id);
                    dbClient.AddParameter("qid", question.Id);
                    dbClient.AddParameter("answer", answer);
                    dbClient.AddParameter("timestamp", UnixTimestamp.GetNow());
                    dbClient.RunQuery();
                }

                if (question.SeriesOrder >= poll.LastQuestionId)
                {
                    Session.GetHabbo().GetPolls().TryAdd(poll.Id);

                    if (!string.IsNullOrEmpty(poll.BadgeReward))
                    {
                        if (!Session.GetHabbo().GetBadgeComponent().HasBadge(poll.BadgeReward))
                        {
                            Session.GetHabbo().GetBadgeComponent().GiveBadge(poll.BadgeReward, true, Session);
                        }
                    }

                    if (poll.CreditReward > 0)
                    {
                        Session.GetHabbo().Credits += poll.CreditReward;
                        Session.SendMessage(new CreditBalanceComposer(Session.GetHabbo().Credits));
                    }

                    if (poll.PixelReward > 0)
                    {
                        Session.GetHabbo().Duckets += poll.PixelReward;
                        Session.SendMessage(new HabboActivityPointNotificationComposer(Session.GetHabbo().Duckets, poll.PixelReward));
                    }
                }
            }
            else
            {
                return;
            }
        }
        public void Parse(GameClient session, ClientPacket packet)
        {
            if (!session.GetHabbo().InRoom)
            {
                return;
            }

            Room room = session.GetHabbo().CurrentRoom;

            if (room == null)
            {
                return;
            }

            RoomUser user = room.GetRoomUserManager().GetRoomUserByHabbo(session.GetHabbo().Id);

            if (user == null)
            {
                return;
            }

            RoomPoll poll = null;

            if (!BiosEmuThiago.GetGame().GetPollManager().TryGetPoll(packet.PopInt(), out poll))
            {
                return;
            }

            RoomPollQuestion question = null;

            if (!poll.Questions.TryGetValue(packet.PopInt(), out question))
            {
                return;
            }

            string answer = "";

            for (int i = 0; i < packet.PopInt(); ++i)
            {
                answer = answer + ":" + packet.PopString();
            }

            answer = answer.Substring(1);


            using (IQueryAdapter dbClient = BiosEmuThiago.GetDatabaseManager().GetQueryReactor())
            {
                dbClient.SetQuery("INSERT INTO `user_room_poll_results` (`user_id`,`poll_id`,`question_id`,`answer`,`timestamp`) VALUES (@uid,@pid,@qid,@answer,@timestamp);");
                dbClient.AddParameter("uid", session.GetHabbo().Id);
                dbClient.AddParameter("pid", poll.Id);
                dbClient.AddParameter("qid", question.Id);
                dbClient.AddParameter("answer", answer);
                dbClient.AddParameter("timestamp", UnixTimestamp.GetNow());
                dbClient.RunQuery();
            }

            if (question.SeriesOrder >= poll.LastQuestionId)
            {
                session.GetHabbo().GetPolls().TryAdd(poll.Id);

                if (!string.IsNullOrEmpty(poll.BadgeReward))
                {
                    if (!session.GetHabbo().GetBadgeComponent().HasBadge(poll.BadgeReward))
                    {
                        session.GetHabbo().GetBadgeComponent().GiveBadge(poll.BadgeReward, true, session);
                    }
                }

                if (poll.CreditReward > 0)
                {
                    session.GetHabbo().Credits += poll.CreditReward;
                    session.SendMessage(new CreditBalanceComposer(session.GetHabbo().Credits));
                }

                if (poll.PixelReward > 0)
                {
                    session.GetHabbo().Duckets += poll.PixelReward;
                    session.SendMessage(new HabboActivityPointNotificationComposer(session.GetHabbo().Duckets, poll.PixelReward));
                }
            }
        }