示例#1
0
    private static void HandleRespondSurvey(GameSession session, PacketReader packet)
    {
        packet.ReadByte();
        packet.ReadLong(); // character id
        long surveyId      = packet.ReadLong();
        byte responseIndex = packet.ReadByte();

        Player player = session.Player;

        Home       home       = GameServer.HomeManager.GetHomeById(player.VisitingHomeId);
        HomeSurvey homeSurvey = home.Survey;

        string option = homeSurvey.Options.Keys.ToList()[responseIndex];

        if (!homeSurvey.Started || homeSurvey.Ended || homeSurvey.Id != surveyId || option is null || homeSurvey.Options[option].Contains(player.Name) || !homeSurvey.AvailableCharacters.Contains(player.Name))
        {
            return;
        }

        homeSurvey.AvailableCharacters.Remove(player.Name);
        homeSurvey.Options[option].Add(player.Name);
        session.Send(HomeActionPacket.SurveyAnswer(player.Name));

        homeSurvey.Answers++;

        if (homeSurvey.Answers < homeSurvey.MaxAnswers)
        {
            return;
        }

        session.FieldManager.BroadcastPacket(HomeActionPacket.SurveyEnd(homeSurvey));
        homeSurvey.End();
    }
示例#2
0
    public static PacketWriter SurveyQuestion(HomeSurvey survey)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.RESPONSE_HOME_ACTION);

        pWriter.Write(HomeActionMode.Survey);
        pWriter.Write(SurveyMode.Question);
        pWriter.WriteUnicodeString(survey.Question);
        pWriter.WriteBool(survey.Public);

        return(pWriter);
    }
    public static PacketWriter SurveyAddOption(HomeSurvey survey)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.ResponseHomeAction);

        pWriter.Write(HomeActionMode.Survey);
        pWriter.Write(SurveyMode.AddOption);
        pWriter.WriteUnicodeString(survey.Question);
        pWriter.WriteBool(survey.Public);
        pWriter.WriteUnicodeString(survey.Options.Keys.Last());
        pWriter.WriteByte(1);

        return(pWriter);
    }
示例#4
0
    public static PacketWriter SurveyStart(HomeSurvey survey)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.RESPONSE_HOME_ACTION);

        pWriter.Write(HomeActionMode.Survey);
        pWriter.Write(SurveyMode.Start);
        pWriter.WriteLong(survey.OwnerId); // character id
        pWriter.WriteLong(survey.Id);      // unk
        pWriter.WriteBool(survey.Public);
        pWriter.WriteUnicodeString(survey.Question);
        pWriter.WriteByte((byte)survey.Options.Count);
        foreach (string option in survey.Options.Keys)
        {
            pWriter.WriteUnicodeString(option);
        }

        return(pWriter);
    }
示例#5
0
    public static PacketWriter SurveyEnd(HomeSurvey survey)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.RESPONSE_HOME_ACTION);

        pWriter.Write(HomeActionMode.Survey);
        pWriter.Write(SurveyMode.End);
        pWriter.WriteLong(survey.Id);
        pWriter.WriteBool(survey.Public);
        pWriter.WriteUnicodeString(survey.Question);
        pWriter.WriteByte((byte)survey.Options.Count);
        foreach ((string option, List <string> characterNames) in survey.Options)
        {
            pWriter.WriteUnicodeString(option);
            pWriter.WriteByte((byte)characterNames.Count);

            if (!survey.Public)
            {
                continue;
            }

            foreach (string characterName in characterNames)
            {
                pWriter.WriteUnicodeString(characterName);
            }
        }

        pWriter.WriteByte((byte)survey.AvailableCharacters.Count);
        if (!survey.Public)
        {
            return(pWriter);
        }

        foreach (string characterName in survey.AvailableCharacters)
        {
            pWriter.WriteUnicodeString(characterName);
        }

        return(pWriter);
    }