Esempio n. 1
0
    //----------------------------------------------------------------------------

    /*!
     *  @brief  アチーブメント操作:新規達成アチーブメントの一覧追加
     */
    //----------------------------------------------------------------------------
    static public void AddAchievementClear(PacketAchievement[] cAchievements)
    {
        //----------------------------------------
        // 特に要素が発生していないならスルー
        //----------------------------------------
        if (cAchievements == null)
        {
            return;
        }

        //----------------------------------------
        //
        //----------------------------------------
        if (m_AchievementClear == null)
        {
            m_AchievementClear = new TemplateList <PacketAchievement>();
        }

        //----------------------------------------
        // アチーブメントの近々の達成済み一覧
        //----------------------------------------
        for (int i = 0; i < cAchievements.Length; i++)
        {
            if (m_AchievementClear.ChkInside(ChkInsidePacketAchievement, cAchievements[i]) == true)
            {
                continue;
            }

            //達成した種類のフラグをONにする。
            switch (cAchievements[i].achievement_category_id)
            {
            case (int)ACHIEVEMENT_CATEGORY_TYPE.DAILY:
                UserDataAdmin.Instance.SetUserFlag(UserDataAdmin.UserFlagType.GlobalMissionDaily, true);
                break;

            case (int)ACHIEVEMENT_CATEGORY_TYPE.EVENT:
                UserDataAdmin.Instance.SetUserFlag(UserDataAdmin.UserFlagType.GlobalMissionEvent, true);
                break;

            case (int)ACHIEVEMENT_CATEGORY_TYPE.NORMAL:
                UserDataAdmin.Instance.SetUserFlag(UserDataAdmin.UserFlagType.GlobalMissionNormal, true);
                break;
            }

            m_AchievementClear.Add(cAchievements[i]);
        }

        MainMenuHeader.SetupMissionClearMessage();
    }
    //----------------------------------------------------------------------------
    /*!
		@brief	フレンドリストの生成処理
	*/
    //----------------------------------------------------------------------------
    private void CreateFriendList(ref List<FriendDataSetting> friend_list, uint requirement_id)
    {
        if (friend_list == null)
        {
            return;
        }

        m_FixFriendUnit = false;
        m_FixFriendLinkUnit = false;

        //--------------------------------
        //	フレンド固定の指定があれば処理
        //--------------------------------
        PacketStructUnit unit = null;
        PacketStructUnit linkUnit = null;
        MasterDataQuestRequirement quest_requirement = null;

        uint unLinkPoint = 0;
        //bool bLinkUnitOnlyFix = false;

        if (requirement_id != 0) quest_requirement = MasterDataUtil.GetMasterDataQuestRequirementFromID(requirement_id);
        if (quest_requirement != null)
        {
            // リンクポイントを取得
            unLinkPoint = (uint)quest_requirement.fix_unit_04_link_point;

            // ベースユニット強制置き換え
            if (quest_requirement.fix_unit_04_enable == MasterDataDefineLabel.BoolType.ENABLE)
            {
                if (quest_requirement.fix_unit_04_id != 0)
                {
                    unit = MainMenuUtil.CreateDummyFriendUnit(quest_requirement.fix_unit_04_id,
                                                               (uint)quest_requirement.fix_unit_04_lv,
                                                               (uint)quest_requirement.fix_unit_04_plus_atk,
                                                               (uint)quest_requirement.fix_unit_04_plus_hp,
                                                                     0,
                                                               (uint)quest_requirement.fix_unit_04_lv_lbs,
                                                               (uint)quest_requirement.fix_unit_04_lv_lo,
                                                                     unLinkPoint);
                    m_FixFriendUnit = true;
                }
            }

            // リンクユニット強制置き換え
            switch (quest_requirement.fix_unit_04_link_enable)
            {
                case MasterDataDefineLabel.BoolType.ENABLE:
                    if (quest_requirement.fix_unit_04_link_id != 0)
                    {
                        linkUnit = MainMenuUtil.CreateDummyUnit(quest_requirement.fix_unit_04_link_id,
                                                                 (uint)quest_requirement.fix_unit_04_link_lv,
                                                                       0,
                                                                 (uint)quest_requirement.fix_unit_04_link_lv_lo,
                                                                 (uint)quest_requirement.fix_unit_04_link_plus_atk,
                                                                 (uint)quest_requirement.fix_unit_04_link_plus_hp,
                                                                       0,
                                                                 (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_LINK);
                    }
                    // 強制リンク外し
                    else
                    {
                        linkUnit = MainMenuUtil.CreateDummyUnit(0, 0, 0, 0, 0, 0, 0);
                    }

                    // ベースユニットも固定の場合
                    if (unit != null)
                    {
                        if (linkUnit != null)
                        {
                            unit.link_info = (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE;
                            unit.link_unique_id = 1;
                        }
                        else
                        {
                            unit.link_info = (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_NONE;
                            unit.link_unique_id = 0;
                        }
                    }
                    // リンクユニットのみ固定の場合
                    else
                    {
                        m_FixFriendLinkUnit = true;
                    }
                    break;

                // 強制リンク外し
                case MasterDataDefineLabel.BoolType.DISABLE:
                    linkUnit = MainMenuUtil.CreateDummyUnit(0, 0, 0, 0, 0, 0, 0);
                    // ベースユニットが固定の場合
                    if (unit != null)
                    {
                        unit.link_info = (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_NONE;
                        unit.link_unique_id = 0;
                    }
                    // リンクユニットのみ固定の場合
                    else
                    {
                        m_FixFriendLinkUnit = true;
                    }
                    break;

                case MasterDataDefineLabel.BoolType.NONE:
                    break;
            }
        }
        //--------------------------------
        //	現在のフレンドリストを削除
        //-------------------------------- 
        m_SelectFriend = null;
        friend_list.Clear();

        List<MasterDataParamChara> charaMasterList = MasterFinder<MasterDataParamChara>.Instance.FindAll();

        //--------------------------------
        //	新しいフレンドリストの作成
        //--------------------------------
        if (unit == null)
        {
            //--------------------------------
            //	固定フレンドの指定がない
            //--------------------------------

            // 助っ人の総数を取得
            int nFriendListTotal = 0;
            if (UserDataAdmin.Instance.m_StructHelperList != null)
            {
                nFriendListTotal += UserDataAdmin.Instance.m_StructHelperList.Length;
            }
            if (UserDataAdmin.Instance.m_StructFriendList != null)
            {
                nFriendListTotal += UserDataAdmin.Instance.m_StructFriendList.Length;
            }

            //	フレンド登録ユーザーリストの取得
            TemplateList<uint> cFavoriteFriendList = LocalSaveManager.Instance.LoadFuncAddFavoriteFriend();

            #region ==== 助っ人をフレンドリストに追加 =====
            //	助っ人をフレンドリストに追加
            //			friend_list.Alloc( nFriendListTotal );
            if (UserDataAdmin.Instance.m_StructHelperList != null)
            {
                for (int i = 0; i < UserDataAdmin.Instance.m_StructHelperList.Length; i++)
                {
                    if (UserDataAdmin.Instance.m_StructHelperList[i] == null)
                    {
                        continue;
                    }

                    FriendDataSetting cFriendParam = new FriendDataSetting();

                    if (m_FixFriendLinkUnit == false)
                    {
                        cFriendParam.FriendData = UserDataAdmin.Instance.m_StructHelperList[i];
                    }
                    // リンクユニットのみ固定の場合
                    else
                    {
                        // ヘルパーデータをコピー
                        cFriendParam.FriendData = new PacketStructFriend();
                        cFriendParam.FriendData.user_id = UserDataAdmin.Instance.m_StructHelperList[i].user_id;
                        cFriendParam.FriendData.user_name = UserDataAdmin.Instance.m_StructHelperList[i].user_name;
                        cFriendParam.FriendData.user_rank = UserDataAdmin.Instance.m_StructHelperList[i].user_rank;
                        cFriendParam.FriendData.last_play = UserDataAdmin.Instance.m_StructHelperList[i].last_play;
                        cFriendParam.FriendData.friend_point = UserDataAdmin.Instance.m_StructHelperList[i].friend_point;
                        cFriendParam.FriendData.friend_state = UserDataAdmin.Instance.m_StructHelperList[i].friend_state;
                        cFriendParam.FriendData.friend_state_update = UserDataAdmin.Instance.m_StructHelperList[i].friend_state_update;

                        unit = UserDataAdmin.Instance.m_StructHelperList[i].unit;
                        // リンク固定がある場合
                        if (linkUnit != null)
                        {
                            cFriendParam.FriendData.unit = MainMenuUtil.CreateDummyFriendUnit(unit.id, unit.level, unit.add_pow, unit.add_hp, 0, unit.limitbreak_lv,
                                                                                               unit.limitover_lv, unLinkPoint, (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE);
                            cFriendParam.FriendData.unit_link = linkUnit;
                        }
                        else
                        {
                            cFriendParam.FriendData.unit = MainMenuUtil.CreateDummyFriendUnit(unit.id, unit.level, unit.add_pow, unit.add_hp, 0, unit.limitbreak_lv,
                                                                                               unit.limitover_lv, unLinkPoint, (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_NONE);
                        }
                    }

                    cFriendParam.MasterData = charaMasterList.Find((v) => v.fix_id == cFriendParam.FriendData.unit.id);

                    friend_list.Add(cFriendParam);
                }
            }
            #endregion

            #region ==== フレンド登録をしたフレンドを追加 =====
            //	フレンド登録をしたフレンドを追加
            if (UserDataAdmin.Instance.m_StructFriendList != null)
            {
                for (int i = 0; i < UserDataAdmin.Instance.m_StructFriendList.Length; i++)
                {
                    if (UserDataAdmin.Instance.m_StructFriendList[i] == null)
                    {
                        continue;
                    }

                    FriendDataSetting cFriendParam = new FriendDataSetting();

                    if (m_FixFriendLinkUnit == false)
                    {
                        cFriendParam.FriendData = UserDataAdmin.Instance.m_StructFriendList[i];
                    }
                    // リンクユニット固定の場合
                    else
                    {
                        // フレンドデータをコピー
                        cFriendParam.FriendData = new PacketStructFriend();
                        cFriendParam.FriendData.user_id = UserDataAdmin.Instance.m_StructFriendList[i].user_id;
                        cFriendParam.FriendData.user_name = UserDataAdmin.Instance.m_StructFriendList[i].user_name;
                        cFriendParam.FriendData.user_rank = UserDataAdmin.Instance.m_StructFriendList[i].user_rank;
                        cFriendParam.FriendData.last_play = UserDataAdmin.Instance.m_StructFriendList[i].last_play;
                        cFriendParam.FriendData.friend_point = UserDataAdmin.Instance.m_StructFriendList[i].friend_point;
                        cFriendParam.FriendData.friend_state = UserDataAdmin.Instance.m_StructFriendList[i].friend_state;
                        cFriendParam.FriendData.friend_state_update = UserDataAdmin.Instance.m_StructFriendList[i].friend_state_update;

                        unit = UserDataAdmin.Instance.m_StructFriendList[i].unit;
                        if (linkUnit != null)
                        {
                            cFriendParam.FriendData.unit = MainMenuUtil.CreateDummyFriendUnit(unit.id, unit.level, unit.add_pow, unit.add_hp, 0, unit.limitbreak_lv,
                                                                                               unLinkPoint, (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_BASE);
                            cFriendParam.FriendData.unit_link = linkUnit;
                        }
                        else
                        {
                            cFriendParam.FriendData.unit = MainMenuUtil.CreateDummyFriendUnit(unit.id, unit.level, unit.add_pow, unit.add_hp, 0, unit.limitbreak_lv,
                                                                                               unLinkPoint, (uint)ServerDataDefine.CHARALINK_TYPE.CHARALINK_TYPE_NONE);
                        }
                    }

                    cFriendParam.MasterData = charaMasterList.Find((v) => v.fix_id == cFriendParam.FriendData.unit.id);

                    if (cFavoriteFriendList != null)
                    {
                        cFriendParam.IsActiveLock = cFavoriteFriendList.ChkInside(TemplateListSort.ChkInsideUint, cFriendParam.FriendData.user_id);
                    }
                    else
                    {
                        cFriendParam.IsActiveLock = false;
                    }


                    friend_list.Add(cFriendParam);
                }
            }
            #endregion

            // フレンドのメンバーを条件で間引き
            friend_list = FriendListThinning(friend_list);
        }
        else
        {
            //--------------------------------
            //	固定フレンドの指定があった
            //--------------------------------
            MasterDataParamChara param_chara = charaMasterList.Find((v) => v.fix_id == unit.id);
            if (param_chara != null)
            {
                PacketStructFriend friend = new PacketStructFriend();
                friend.unit = unit;
                friend.user_id = 0;
                friend.user_name = param_chara.name;
                friend.user_rank = 999;
                friend.last_play = unit.get_time;
                friend.friend_point = 0;
                friend.friend_state = (uint)FRIEND_STATE.FRIEND_STATE_SUCCESS;

                // リンク固定がある場合
                if (linkUnit != null)
                {
                    friend.unit_link = linkUnit;
                }

                FriendDataSetting param_friend = new FriendDataSetting();
                param_friend.FriendData = friend;
                param_friend.MasterData = param_chara;

                friend_list.Add(param_friend);
            }
        }
    }