Beispiel #1
0
        private void ParseDeck(FluorineFx.ASObject asObject)
        {
            // 配列の時と、そうでない時がある。
            // 前者はグループ編成画面を開いた時、後者は戦闘開始前やお使い終了時など。
            Object deckObj = null;

            if (asObject.TryGetValue("deck", out deckObj) && deckObj != null)
            {
                Object[] deckObjs = null;

                // 単体の時
                Type varType = deckObj.GetType();
                if (varType == typeof(FluorineFx.ASObject))
                {
                    deckObjs    = new FluorineFx.ASObject[1];
                    deckObjs[0] = (FluorineFx.ASObject)deckObj;
                }
                // 配列の時
                else if (varType == typeof(Object[]))
                {
                    deckObjs = (Object[])deckObj;
                }

                for (Int32 i = 0; i < deckObjs.Length; ++i)
                {
                    FluorineFx.ASObject asObj = (FluorineFx.ASObject)deckObjs[i];
                    if (asObj != null)
                    {
                        DeckData parseData = new DeckData();
                        parseData.Parse(asObj);

                        // 既出なら上書きする
                        Int32 findDataIndex = mDeckDatas.FindIndex(
                            delegate(DeckData a)
                        {
                            return(a.deckId == parseData.deckId);
                        }
                            );
                        if (0 <= findDataIndex)
                        {
                            mDeckDatas[findDataIndex] = parseData;
                        }
                        // 新出なら追加する
                        else
                        {
                            mDeckDatas.Add(parseData);
                        }
                    }
                }

                // ID昇順でソートする
                mDeckDatas.Sort(
                    delegate(DeckData a, DeckData b)
                {
                    return(a.deckId - b.deckId);
                }
                    );
            }
        }
Beispiel #2
0
        public static void GetStringValue(FluorineFx.ASObject asObject, string key, out String outValue)
        {
            outValue = String.Empty;
            object dataObj;

            if (asObject.TryGetValue(key, out dataObj) && dataObj != null)
            {
                outValue = (String)dataObj;
            }
        }
Beispiel #3
0
        public static void GetInt32Value(FluorineFx.ASObject asObject, string key, out Int32 outValue)
        {
            outValue = 0;
            object dataObj;

            if (asObject.TryGetValue(key, out dataObj) && dataObj != null)
            {
                outValue = (Int32)dataObj;
            }
        }
Beispiel #4
0
        public static void GetBooleanValue(FluorineFx.ASObject asObject, string key, out Boolean outValue)
        {
            outValue = false;
            object dataObj;

            if (asObject.TryGetValue(key, out dataObj) && dataObj != null)
            {
                outValue = (bool)dataObj;
            }
        }
        /// <summary>
        /// ActionScriptObjectの直下にある指定のキー名のオブジェクトを取得する
        /// 無い場合はnullが入る
        /// </summary>
        /// <param name="asObject">対象先オブジェクト</param>
        /// <param name="keyName">キー名</param>
        /// <param name="obj">取得先オブジェクト</param>
        /// <returns>オブジェクトがある場合はtrue、無い場合はfalseを返す</returns>
        public static bool TryGetObject(FluorineFx.ASObject asObject, String keyName, out Object obj)
        {
            obj = null;
            if (asObject.TryGetValue(keyName, out obj))
            {
                return(true);
            }

            return(false);
        }
Beispiel #6
0
        public static void GetDoubleValue(FluorineFx.ASObject asObject, string key, out Double outValue)
        {
            outValue = 0.0f;
            object dataObj;

            if (asObject.TryGetValue(key, out dataObj) && dataObj != null)
            {
                outValue = (Double)dataObj;
            }
        }
Beispiel #7
0
        private void ParseItem(FluorineFx.ASObject asObject)
        {
            Object itemObj = null;

            if (asObject.TryGetValue("item", out itemObj) && itemObj != null)
            {
                // 配列の時とそうでない時の両方に対応する
                Object[] itemObjs = null;
                Type     varType  = itemObj.GetType();
                if (varType == typeof(FluorineFx.ASObject))
                {
                    itemObjs    = new FluorineFx.ASObject[1];
                    itemObjs[0] = (FluorineFx.ASObject)itemObj;
                }
                else if (varType == typeof(Object[]))
                {
                    itemObjs = (Object[])itemObj;
                }

                for (int i = 0; i < itemObjs.Length; ++i)
                {
                    FluorineFx.ASObject asObj = itemObjs[i] as FluorineFx.ASObject;

                    ItemData data = new ItemData();
                    data.Parse(asObj);

                    // 既出なら上書きする
                    Int32 findDataIndex = mItemDatas.FindIndex(
                        delegate(ItemData inData)
                    {
                        return(inData.itemMstId == data.itemMstId);
                    }
                        );
                    if (0 <= findDataIndex)
                    {
                        // お使いから帰ってきた場合、増加値が返る。
                        // 結果の値はプレイヤー情報に入っているので、ここでは処理しない。
                        bool isOverride = !IsReturnHome(asObject);
                        if (isOverride)
                        {
                            mItemDatas[findDataIndex] = data;
                        }
                    }
                    // 新出なら追加する
                    else
                    {
                        mItemDatas.Add(data);
                    }
                }
            }
        }
Beispiel #8
0
        /// <summary>
        /// 帰宅したかどうかを取得する
        /// </summary>
        /// <returns>帰宅したかどうか</returns>
        private bool IsReturnHome(FluorineFx.ASObject asObject)
        {
            Object miscObj = null;

            if (asObject.TryGetValue("misc", out miscObj) && miscObj != null)
            {
                FluorineFx.ASObject miscAsObj = (FluorineFx.ASObject)miscObj;
                Int32 finishType = -1;
                if (FiddlerUtil.IsExistObject(miscAsObj, "finishType"))
                {
                    AMFUtil.GetInt32Value(miscAsObj, "finishType", out finishType);
                    if (finishType == 0)    // お使いから帰ってくると0が入っている
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Beispiel #9
0
        private void ParseRefresh(FluorineFx.ASObject asObject)
        {
            Object refreshObj = null;

            if (asObject.TryGetValue("refresh", out refreshObj) && refreshObj != null)
            {
                Object[] refreshObjs = (Object[])refreshObj;
                if (refreshObjs != null)
                {
                    mRefreshDatas.Clear();
                    for (int i = 0; i < refreshObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = refreshObjs[i] as FluorineFx.ASObject;

                        RefreshData data = new RefreshData();
                        data.Parse(asObj);

                        mRefreshDatas.Add(data);
                    }
                }
            }
        }
Beispiel #10
0
        /// <summary>
        /// AFMからパースする
        /// </summary>
        public static void Parse(FluorineFx.ASObject bodyAsObject)
        {
            Object itemMstObj = null;

            if (bodyAsObject.TryGetValue("itemMst", out itemMstObj))
            {
                Object[] itemMstObjs = (Object[])itemMstObj;
                if (itemMstObjs != null)
                {
                    ItemMstDatas.Clear();
                    for (int i = 0; i < itemMstObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = itemMstObjs[i] as FluorineFx.ASObject;
                        if (asObj != null)
                        {
                            ItemMstData data = SubParse(asObj);
                            ItemMstDatas.Add(data);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// AFMからパースする
        /// </summary>
        public static void Parse(FluorineFx.ASObject bodyAsObject)
        {
            Object girlLevelMstObj = null;

            if (bodyAsObject.TryGetValue("girlLevelMst", out girlLevelMstObj))
            {
                Object[] girlLevelMstObjs = (Object[])girlLevelMstObj;
                if (girlLevelMstObjs != null)
                {
                    GirlLevelMstDatas.Clear();
                    for (int i = 0; i < girlLevelMstObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = girlLevelMstObjs[i] as FluorineFx.ASObject;
                        if (asObj != null)
                        {
                            GirlLevelMstData data = SubParse(asObj);
                            GirlLevelMstDatas.Add(data);
                        }
                    }
                }
            }
        }
Beispiel #12
0
        /// <summary>
        /// AFMからパースする
        /// </summary>
        public static void Parse(FluorineFx.ASObject bodyAsObject)
        {
            Object mstObj = null;

            if (bodyAsObject.TryGetValue("productMst", out mstObj))
            {
                Object[] mstObjs = (Object[])mstObj;
                if (mstObjs != null)
                {
                    ProductMstDatas.Clear();
                    for (int i = 0; i < mstObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = mstObjs[i] as FluorineFx.ASObject;
                        if (asObj != null)
                        {
                            ProductMstData data = new ProductMstData();
                            data.Parse(asObj);

                            ProductMstDatas.Add(data);
                        }
                    }
                }
            }
        }
Beispiel #13
0
        /// <summary>
        /// AFMからパースする
        /// </summary>
        public static void Parse(FluorineFx.ASObject bodyAsObject)
        {
            Object cardMstObj = null;

            if (bodyAsObject.TryGetValue("cardMst", out cardMstObj))
            {
                Object[] cardMstObjs = (Object[])cardMstObj;
                if (cardMstObjs != null)
                {
                    CardMstDatas.Clear();
                    for (int i = 0; i < cardMstObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = cardMstObjs[i] as FluorineFx.ASObject;
                        if (asObj != null)
                        {
                            CardMstData data = new CardMstData();
                            data.Parse(asObj);

                            CardMstDatas.Add(data);
                        }
                    }
                }
            }
        }
Beispiel #14
0
        private void ParsePlayer(FluorineFx.ASObject asObject)
        {
            Object playerObj = null;

            if (asObject.TryGetValue("player", out playerObj) && playerObj != null)
            {
                Type varType = playerObj.GetType();
                if (varType == typeof(FluorineFx.ASObject))
                {
                    FluorineFx.ASObject asObj = (FluorineFx.ASObject)playerObj;
                    if (asObj != null)
                    {
                        PlayerData playerData = new PlayerData();
                        playerData.Parse(asObj);

                        // 1つなので常に上書きする
                        mPlayerData = playerData;

                        // ユーザー情報にも保持されている値に反映する
                        ApplyToUserData();
                    }
                }
            }
        }
Beispiel #15
0
        /// <summary>
        /// AFMからパースする
        /// </summary>
        public static void Parse(FluorineFx.ASObject bodyAsObject)
        {
            Object rarityMstObj = null;

            if (bodyAsObject.TryGetValue("rarityMst", out rarityMstObj))
            {
                Object[] rarityMstObjs = (Object[])rarityMstObj;
                if (rarityMstObjs != null)
                {
                    RarityMstDatas.Clear();
                    for (int i = 0; i < rarityMstObjs.Length; ++i)
                    {
                        FluorineFx.ASObject asObj = rarityMstObjs[i] as FluorineFx.ASObject;
                        if (asObj != null)
                        {
                            RarityMstData data = new RarityMstData();
                            data.Parse(asObj);

                            RarityMstDatas.Add(data);
                        }
                    }
                }
            }
        }
Beispiel #16
0
        /// <summary>
        /// セッション完了後に処理する
        /// </summary>
        /// <param name="oSession">セッション情報</param>
        public static void AfterSessionComplete(Fiddler.Session oSession, FormMain form)
        {
            //取り敢えずログを吐く
            string text = string.Format("Session {0}({3}):HTTP {1} for {2}",
                                        oSession.id,
                                        oSession.responseCode,
                                        oSession.fullUrl,
                                        oSession.oResponse.MIMEType
                                        );

            System.Diagnostics.Debug.WriteLine(text);

            // AMF形式のレスが来たら覗いてみる
            if (oSession.oResponse.MIMEType.Contains("amf"))
            {
                using (System.IO.Stream stream = new System.IO.MemoryStream(oSession.ResponseBody))
                {
                    // AMF形式の情報をデシリアライズする
                    FluorineFx.IO.AMFDeserializer amfDeserializer = new FluorineFx.IO.AMFDeserializer(stream);
                    FluorineFx.IO.AMFMessage      responseMessage = amfDeserializer.ReadAMFMessage();

                    // BODYからContentを取得する
                    FluorineFx.IO.AMFBody responseBody = responseMessage.GetBodyAt(0);
                    FluorineFx.ASObject   contentAsObj = responseBody.Content as FluorineFx.ASObject;
                    Object bodyObj = null;
                    if (contentAsObj.TryGetValue("body", out bodyObj))
                    {
                        FluorineFx.ASObject bodyAsObj = bodyObj as FluorineFx.ASObject;

                        // girlLevelMst
                        DBGirlLevelMst.Parse(bodyAsObj);
                        // productMst
                        DBProductMst.Parse(bodyAsObj);
                        // TODO:memorialMst
                        // TODO:requestMst
                        // TODO:skillLevelMst
                        // TODO:productPackMst
                        // TODO:skillEffectMst
                        // TODO:skillMst
                        // cardMessageMst
                        DBCardMessageMst.Parse(bodyAsObj);
                        // itemMst
                        DBItemMst.Parse(bodyAsObj);
                        // TODO:careMst
                        // cardMst
                        DBCardMst.Parse(bodyAsObj);
                        // rarityMst
                        DBRarityMst.Parse(bodyAsObj);
                        // TODO:jobMst
                        // TODO:playerLevelMst
                        // TODO:tuningMst
                        // TODO:rubyMst

                        /* UserData */

                        UserData.Instance.Parse(bodyAsObj);


                        // プレイヤー情報の表示を更新する
                        if (IsExistObject(bodyAsObj, KeyNameType.PLAYER))
                        {
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdatePlayerName));
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdatePlayerLevel));
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdatePlayerExp));
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdatePossessionMeal));
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdatePossessionRuby));
                        }

                        // デッキ表示を更新する
                        // 別スレッドなのでinvokeが必要になる
                        if (IsExistObject(bodyAsObj, KeyNameType.CARD) ||
                            IsExistObject(bodyAsObj, KeyNameType.DECK))
                        {
                            Int32 deckId = form.GetCurrentCheckDeckId();
                            if (0 < deckId)
                            {
                                form.Invoke(new FormMain.UpdateDelegate1(form.UpdateDeck), deckId);
                            }
                        }

                        // モン娘の総数表示を更新する
                        form.Invoke(new FormMain.UpdateDelegate0(form.UpdateLabelMonmusuWholeCount));

                        // 道具情報を更新する
                        // 別スレッドなのでinvokeが必要になる
                        if (IsExistObject(bodyAsObj, KeyNameType.PLAYER) ||
                            IsExistObject(bodyAsObj, KeyNameType.ITEM))
                        {
                            form.Invoke(new FormMain.UpdateDelegate0(form.UpdateItem));
                        }
                    }
                }
            }
        }
Beispiel #17
0
        /// <summary>
        /// card情報をパースする
        /// </summary>
        /// <param name="asObject"></param>
        private void ParseCard(FluorineFx.ASObject asObject)
        {
            Object cardObj = null;

            if (asObject.TryGetValue("card", out cardObj) && cardObj != null)
            {
                Object[] cardObjs = null;

                // 配列の時とそうでない時の両方に対応する
                Type varType = cardObj.GetType();
                if (varType == typeof(FluorineFx.ASObject))
                {
                    cardObjs    = new FluorineFx.ASObject[1];
                    cardObjs[0] = (FluorineFx.ASObject)cardObj;
                }
                else if (varType == typeof(Object[]))
                {
                    cardObjs = (Object[])cardObj;

                    // cardは強化合成や限界突破によって容易く減る機会が多い
                    // 配列の場合、全情報が入っていると思いたいが食事の時は対象となるモン娘の情報しかない
                    // この違いを"misc"があるかどうかで判断する。あればクリアする。
                    if (FiddlerUtil.IsExistObject(asObject, FiddlerUtil.KeyNameType.MISC) &&
                        // "misc"があってもお使いからの帰宅時は対象外
                        !IsReturnHome(asObject))
                    {
                        mCardDatas.Clear();
                    }
                }

                for (int i = 0; i < cardObjs.Length; ++i)
                {
                    FluorineFx.ASObject asObj = cardObjs[i] as FluorineFx.ASObject;
                    if (asObj != null)
                    {
                        CardData parseData = new CardData();
                        parseData.Parse(asObj);

                        // 既出なら更新する
                        Int32 findDataIndex = mCardDatas.FindIndex(
                            delegate(CardData inData)
                        {
                            return(inData.cardId == parseData.cardId);
                        }
                            );
                        if (0 <= findDataIndex)
                        {
                            mCardDatas[findDataIndex] = parseData;
                        }
                        // 新出なら追加する
                        else
                        {
                            mCardDatas.Add(parseData);
                        }
                    }
                }

                // ソートする
                mCardDatas.Sort(
                    delegate(CardData a, CardData b)
                {
                    return(a.cardId - b.cardId);
                }
                    );
            }
        }