예제 #1
0
        public static string[] bili_login(string username, string password, string hash, string rsa_key)
        {
            var login = new Hashtable
            {
                { "app_id", FgoMain.get_app_id() },
                { "c", 0 },
                { "channel_id", 1 },
                { "domain", "p.biligame.com" },
                { "domain_switch_count", 0 },
                { "dp", "1920*1080" },
                { "game_id", FgoMain.get_app_id() },
                { "isRoot", 0 },
                { "merchant_id", FgoMain.get_merchant_id() },
                { "model", "SwitchFgo" },
                { "net", 4 },
                { "operators", 5 },
                { "pf_ver", "4.4.4" },
                { "platform_type", 3 },
                { "sdk_log_type", 1 },
                { "sdk_type", 1 },
                { "sdk_ver", "1.6.7.1" },
                { "server_id", FgoMain.get_server_id() },
                { "support_abis", "x86,armeabi-v7a" },
                { "timestamp", FgoMain.get_timestamp() },
                { "uid", 0 },
                { "udid", "Pwc3BzUCYFhhB2ZeIl4i" },
                { "ver", FgoMain.get_game_version() },
                { "version", 1 },
                { "user_id", username },
                { "pwd", RsaHelper.RSAEncrypt(rsa_key, hash + password) }
            };


            var al = new ArrayList(login.Keys);

            al.Sort();
            var p0 = "";

            foreach (string key in al)
            {
                p0 += login[key].ToString();
            }
            login.Add("original_domain", "");
            login.Add("sign", FgoMain.calc_sign(p0));

            var jo = JObject.Parse(NetworkAPI.CreatePostHttpResponse("http://p.biligame.com/api/client/login", login));

            if (!jo["code"].ToString().Equals("0"))
            {
                return(new string[1] {
                    "pwd_error"
                });
            }
            return(new string[2] {
                jo["uid"].ToString(), jo["access_key"].ToString()
            });
        }
예제 #2
0
        public static string[] fgo_recover(string uid, int item)
        {
            var table = new Hashtable
            {
                { "ac", "action" },
                { "key", item == 0 ? "shoppurchasebystone" : "itemrecover" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "userId", uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "userAgent", 1 }
            };

            if (item == 0)
            {
                table.Add("id", 2);
                table.Add("num", 1);
            }
            else
            {
                table.Add("recoverId", item + 1);
                table.Add("num", 1);
                table.Add("questId", 0);
            }
            table.Add("dataVer", FgoMain.get_data_ver());
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(uid, usk);
            }
            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            return(new string[1] {
                "00"
            });
        }
예제 #3
0
        public static PlayerStatus fgo_toplogin(string uid, string nickname)
        {
            var table = new Hashtable
            {
                { "ac", "action" },
                { "key", "toplogin" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "nickname", nickname },
                { "sgtype", 2 },
                { "sgtag", 20161108 },
                { "userId", uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "userAgent", 1 },
                { "dataVer", FgoMain.get_data_ver() }
            };

            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(uid, usk);
            }
            var ps = new PlayerStatus();

            if (resCode != "00")
            {
                ps.uid = response["response"][0]["fail"].ToString();
                return(ps);
            }
            ps.uid  = response["cache"]["replaced"]["userGame"][0]["userId"].ToString();
            ps.name = response["cache"]["replaced"]["userGame"][0]["name"].ToString();
            var deck = new Dictionary <string, string>();

            foreach (JObject jt in (JArray)response["cache"]["replaced"]["userDeck"])
            {
                deck.Add(jt["id"].ToString(), jt["name"].ToString());
            }
            ps.deckList = deck;
            return(ps);
        }
예제 #4
0
        public static PlayerStatus fgo_followerlist(PlayerStatus ps)
        {
            var table = new Hashtable
            {
                { "ac", "action" },
                { "key", "followerlist" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(ps.uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "userId", ps.uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "refresh", 1 },
                { "userAgent", 1 },
                { "dataVer", FgoMain.get_data_ver() }
            };

            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = response["response"][0]["usk"].ToString();

            FgoMain.calc_usk(ps.uid, usk);
            if (resCode != "00")
            {
                ps.uid = response["response"][0]["fail"].ToString();
                return(ps);
            }
            var follower = new Dictionary <string, FollowerServant[]>();

            foreach (var jToken in (JArray)response["cache"]["updated"]["userFollower"][0]["followerInfo"])
            {
                var jt = (JObject)jToken;
                var ja = (JArray)jt["userSvtLeaderHash"];
                var fs = new FollowerServant[ja.Count];
                for (var i = 0; i < fs.Length; i++)
                {
                    fs[i].equipId  = ja[i]["equipTarget1"]["svtId"].ToString();
                    fs[i].equipMax = int.Parse(ja[i]["equipTarget1"]["limitCount"].ToString()) == 4 ? true : false;
                }
                follower.Add(jt["userId"].ToString(), fs);
            }
            ps.followerList = follower;
            return(ps);
        }
예제 #5
0
        public static string[] fgo_battleresult(string uid, BattleInfo bi)
        {
            var table = new Hashtable
            {
                { "ac", "action" },
                { "key", "battleresult" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "raidResult", "[]" },
                { "superBossResult", "[]" },
                {
                    "result",
                    "{\"battleId\":" + bi.battleId + ",\"battleResult\":1,\"scores\":\"\",\"action\":\"\",\"elapsedTurn\":" +
                    new Random().Next(5, 10) + ",\"aliveUniqueIds\":[],\"battleStatus\":" +
                    FgoMain.calc_battleStatus(uid, bi.battleId) + ",\"voicePlayedList\":\"[]\"}"
                },
                { "userId", uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "userAgent", 1 },
                { "isBattleError", 0 },
                { "dataVer", FgoMain.get_data_ver() }
            };
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(uid, usk);
            }
            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            return(new string[1] {
                "00"
            });
        }
예제 #6
0
        public static string[] fgo_login(string rguid, string rgusk)
        {
            var table = new Hashtable
            {
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "rgsid", 1001 },
                { "rguid", rguid },
                { "rgusk", rgusk },
                { "idfa", "" },
                { "v", "1.0.1" },
                { "mac", 0 },
                { "imei", "" },
                { "type", "login" },
                { "nickname", "XXXXXX" },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "assetbundleFolder", "" },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "userAgent", 1 },
                { "t", 20399 },
                { "s", 1 },
                { "rksdkid", 1 },
                { "dataVer", FgoMain.get_data_ver() }
            };

            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("login"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var sguid    = response["response"][0]["success"]["sguid"].ToString();
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(sguid, usk);
            }
            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            return(new string[3] {
                "00", response["response"][0]["success"]["sguid"].ToString(), response["response"][0]["success"]["nickname"].ToString()
            });
        }
예제 #7
0
        public static string[] bili_rsa()
        {
            var rsa = new Hashtable
            {
                { "app_id", FgoMain.get_app_id() },
                { "c", 0 },
                { "channel_id", 1 },
                { "domain", "p.biligame.com" },
                { "domain_switch_count", 0 },
                { "dp", "1920*1080" },
                { "game_id", FgoMain.get_app_id() },
                { "isRoot", 0 },
                { "merchant_id", FgoMain.get_merchant_id() },
                { "model", "SwitchFgo" },
                { "net", 4 },
                { "operators", 5 },
                { "pf_ver", "4.4.4" },
                { "platform_type", 3 },
                { "sdk_log_type", 1 },
                { "sdk_type", 1 },
                { "sdk_ver", "1.6.7.1" },
                { "server_id", FgoMain.get_server_id() },
                { "support_abis", "x86,armeabi-v7a" },
                { "timestamp", FgoMain.get_timestamp() },
                { "udid", "Pwc3BzUCYFhhB2ZeIl4i" },
                { "ver", FgoMain.get_game_version() },
                { "version", 1 }
            };

            var al = new ArrayList(rsa.Keys);

            al.Sort();
            var p0 = "";

            foreach (string key in al)
            {
                p0 += rsa[key].ToString();
            }
            rsa.Add("uid", "");
            rsa.Add("original_domain", "");
            rsa.Add("sign", FgoMain.calc_sign(p0));

            var jo = JObject.Parse(NetworkAPI.CreateGetHttpResponse("http://p.biligame.com/api/client/rsa", 10000, rsa));

            return(new string[2] {
                jo["hash"].ToString(), jo["rsa_key"].ToString()
            });
        }
예제 #8
0
        public static string[] bili_userinfo(string access_key)
        {
            var user = new Hashtable
            {
                { "app_id", FgoMain.get_app_id() },
                { "c", 0 },
                { "channel_id", 1 },
                { "domain", "line3-sdkcenter-login.bilibiligame.net" },
                { "domain_switch_count", 0 },
                { "dp", "1920*1080" },
                { "game_id", FgoMain.get_app_id() },
                { "isRoot", 0 },
                { "merchant_id", FgoMain.get_merchant_id() },
                { "model", "SwitchFgo" },
                { "net", 4 },
                { "operators", 5 },
                { "pf_ver", "4.4.4" },
                { "platform_type", 3 },
                { "sdk_log_type", 1 },
                { "sdk_type", 1 },
                { "sdk_ver", "1.6.7.1" },
                { "server_id", FgoMain.get_server_id() },
                { "support_abis", "x86,armeabi-v7a" },
                { "timestamp", FgoMain.get_timestamp() },
                { "udid", "Pwc3BzUCYFhhB2ZeIl4i" },
                { "ver", FgoMain.get_game_version() },
                { "version", 1 },
                { "access_key", access_key }
            };


            var al = new ArrayList(user.Keys);

            al.Sort();
            var p0 = "";

            foreach (string key in al)
            {
                p0 += user[key].ToString();
            }

            user.Add("sign", FgoMain.calc_sign(p0));
            var jo = JObject.Parse(NetworkAPI.CreateGetHttpResponse("http://line3-sdkcenter-login.bilibiligame.net/api/client/user.info", 10000, user));

            return(new string[2] {
                jo["uname"].ToString(), jo["face"].ToString()
            });
        }
예제 #9
0
        private void btnGetVersion_Click(object sender, EventArgs e)
        {
            FgoConstant.fgo_const[0] = versionLabel.Text;
            FgoRequest.fgo_server();
            var member = FgoRequest.fgo_member();

            if (member[0] != "00")
            {
                logBox.AppendText(LogHelper.createFailMessageBox(member));
                return;
            }
            logBox.AppendText(LogHelper.getPrefix() + "服务器获取成功 [" + FgoMain.get_data_ver() + "]\r\n");
            btnLogin.Enabled      = true;
            btnGetVersion.Enabled = false;
            user.Enabled          = true;
            password.Enabled      = true;
        }
예제 #10
0
        private void btnLogin_Click(object sender, EventArgs e)
        {
            var rsa = BiliLogin.bili_rsa();
            var bl  = BiliLogin.bili_login(user.Text, password.Text, rsa[0], rsa[1]);

            if (bl[0] == "pwd_error")
            {
                MessageBox.Show("密码错误");
                return;
            }
            var userinfo = BiliLogin.bili_userinfo(bl[1]);

            face.BackgroundImageLayout = ImageLayout.Stretch;
            face.SizeMode = PictureBoxSizeMode.StretchImage;
            face.Load(userinfo[1]);
            var center = FgoRequest.fgo_logintomembercenter(userinfo[0], bl[0], bl[1]);

            if (center[0] != "00")
            {
                logBox.AppendText(LogHelper.createFailMessageBox(center));
                return;
            }
            var login = FgoRequest.fgo_login(center[1], center[2]);

            if (login[0] != "00")
            {
                logBox.AppendText(LogHelper.createFailMessageBox(login));
                return;
            }
            logBox.AppendText(LogHelper.getPrefix() + FgoMain.get_usk(login[1]) + "\r\n");
            btnLogin.Enabled      = false;
            btnRefreshInv.Enabled = true;
            startBattle.Enabled   = true;
            finishBattle.Enabled  = true;
            btnRecoverAp.Enabled  = true;
            sellExp.Enabled       = true;
            //startKeJin.Enabled = true;
            sellThreeStars.Enabled = true;
            output.Enabled         = true;
            logBox.AppendText(LogHelper.getPrefix() + "登录第一步成功.\r\n");
            topLogin(login[1], login[2]);
            home();
        }
예제 #11
0
        public static string[] fgo_shopsellsvt(string uid, string str)
        {
            var table = new Hashtable
            {
                { "ac", "action" },
                { "key", "shopsellsvt" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "userId", uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "userAgent", 1 },
                { "dataVer", FgoMain.get_data_ver() },
                { "sellData", $"[{str}]" }
            };
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(uid, usk);
            }
            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            return(new string[2] {
                "00", response["response"][0]["success"]["sellQpPrice"].ToString()
            });
        }
예제 #12
0
        public static string[] fgo_logintomembercenter(string username, string rkuid, string access_token)
        {
            var table = new Hashtable
            {
                { "deviceid", FgoMain.get_device_id() },
                { "t", 22360 },
                { "v", "1.0.1" },
                { "s", 1 },
                { "mac", "00000000000000E0" },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "imei", "aaaaa" },
                { "username", username },
                { "type", "token" },
                { "bundleid", "com.bilibili.fatego" },
                { "rkuid", rkuid },
                { "access_token", access_token },
                { "rksdkid", 1 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_data_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "version", FgoMain.get_data_ver() },
                { "dataVer", FgoMain.get_data_ver() }
            };
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_pre_address("logintomembercenter"), table)));
            var resCode  = FgoMain.parse_rescode(response);

            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            FgoConstant.fgo_const[9] = response["response"][0]["success"]["dateVer"].ToString();
            return(new string[3] {
                "00", response["response"][0]["success"]["rguid"].ToString(), response["response"][0]["success"]["rgusk"].ToString()
            });
        }
예제 #13
0
        public static string[] fgo_member()
        {
            var table = new Hashtable
            {
                { "deviceid", FgoMain.get_device_id() },
                { "t", 22360 },
                { "v", "1.0.1" },
                { "s", 1 },
                { "mac", "00000000000000E0" },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "imei", "aaaaa" },
                { "username", "lv9999" },
                { "type", "login" },
                { "password", "111111" },
                { "rksdkid", 1 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_data_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "version", FgoMain.get_data_ver() },
                { "dataVer", FgoMain.get_data_ver() }
            };
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_pre_address("member"), table)));
            var resCode  = FgoMain.parse_rescode(response);

            if (resCode != "00")
            {
                return(new string[3] {
                    resCode, response["response"][0]["fail"]["title"].ToString(), response["response"][0]["fail"]["detail"].ToString()
                });
            }
            FgoConstant.fgo_const[7] = response["response"][0]["success"]["version"].ToString();
            return(new string[1] {
                "00"
            });
        }
예제 #14
0
        public static BattleInfo fgo_battlesetup(string uid, string questId, string questPhase, string deckId, string followerId, int followerClass)
        {
            var table = new Hashtable
            {
                { "activeDeckId", deckId },
                { "followerId", followerId },
                { "ac", "action" },
                { "key", "battlesetup" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "userId", uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "questId", questId },
                { "questPhase", questPhase },
                { "followerClassId", followerClass },
                { "battleMode", 1 },
                { "itemId", 0 },
                { "enemySelect", 1 },
                { "userAgent", 1 },
                { "dataVer", FgoMain.get_data_ver() }
            };
            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(uid, usk);
            }
            var bi = new BattleInfo();

            if (resCode != "00")
            {
                bi.battleResCode = resCode;
                bi.battleExtra   = response["response"][0]["fail"].ToString();
                return(bi);
            }
            bi.battleResCode = "00";
            bi.battleExtra   = "{}";
            var cache = JObject.Parse(CryptData.ResponseCacheDecrypt(response["cache"].ToString()));

            bi.battleId  = cache["replaced"]["battle"][0]["id"].ToString();
            bi.rewardExp = int.Parse(cache["replaced"]["battle"][0]["resultInfo"]["rewardExp"].ToString());
            bi.rewardQp  = int.Parse(cache["replaced"]["battle"][0]["resultInfo"]["rewardQp"].ToString());
            var drop      = new Dictionary <string, int>();
            var enemyDeck = (JArray)cache["replaced"]["battle"][0]["battleInfo"]["enemyDeck"];

            foreach (var jToken in enemyDeck)
            {
                var ed   = (JObject)jToken;
                var svts = (JArray)ed["svts"];
                foreach (var jToken1 in svts)
                {
                    var ed2       = (JObject)jToken1;
                    var dropInfos = (JArray)ed2["dropInfos"];
                    foreach (var jToken2 in dropInfos)
                    {
                        var dropJO = (JObject)jToken2;
                        var id     = dropJO["objectId"].ToString();
                        if (drop.ContainsKey(id))
                        {
                            drop[id] = int.Parse(drop[id].ToString()) + int.Parse(dropJO["num"].ToString());
                        }
                        else
                        {
                            drop.Add(id, int.Parse(dropJO["num"].ToString()));
                        }
                    }
                }
            }
            bi.dropInfo = drop;
            return(bi);
        }
예제 #15
0
        private void home()
        {
            var home = FgoRequest.fgo_home(ps);

            if (ps.uid.Length != 12)
            {
                logBox.AppendText(LogHelper.createFailMessageBox(ps));
                return;
            }
            ps = home;
            //if (((DataTable)itemInv.DataSource).Rows.Count > 0)
            //{
            var invTable = new DataTable();

            invTable.Columns.AddRange(new DataColumn[] { new DataColumn("物品名字"), new DataColumn("数量") });
            foreach (var item in ps.itemList)
            {
                if (item.Value != 0)
                {
                    if (ScriptConst.mstItem.ContainsKey(item.Key))
                    {
                        invTable.Rows.Add(ScriptConst.mstItem[item.Key], item.Value);
                    }
                    else
                    {
                        invTable.Rows.Add(item.Key, item.Value);
                    }
                }
            }
            itemInv.DataSource = invTable;
            //}
            maxAp.Text       = ps.actMax.ToString();
            nowAp.Text       = FgoMain.GetBaseAct(ps.actRecoverAt, ps.actMax).ToString();
            freeStone.Text   = ps.freeStone.ToString();
            chargeStone.Text = ps.chargeStone.ToString();
            followerBox.Items.Clear();
            var isFound = false;
            var i       = 0;

            foreach (var fs in ps.followerInfo.Keys)
            {
                followerBox.Items.Insert(i, fs);
                if (equipMin.Text.Equals("") && !equipMax.Text.Equals(""))
                {
                    equipMin.Text = equipMax.Text;
                }
                else if (equipMax.Text.Equals("") && !equipMin.Text.Equals(""))
                {
                    equipMax.Text = equipMin.Text;
                }
                if (!equipMin.Text.Equals("") && !equipMax.Text.Equals("") && !isFound)
                {
                    var fsp = ps.followerList[ps.followerInfo[fs]];
                    for (var ii = 0; ii < fsp.Length; ii++)
                    {
                        if (fullEquip.Checked && !fsp[ii].equipMax)
                        {
                            continue;
                        }
                        if (!(int.Parse(fsp[ii].equipId) >= int.Parse(equipMin.Text)))
                        {
                            continue;
                        }
                        if (!(int.Parse(fsp[ii].equipId) <= int.Parse(equipMax.Text)))
                        {
                            continue;
                        }
                        followerBox.SelectedIndex   = i;
                        followerClass.SelectedIndex = ii;
                        isFound = true;
                    }
                }
                i++;
            }
            logBox.AppendText(LogHelper.getPrefix() + "刷新数据成功.\r\n");
        }
예제 #16
0
        private void MainForm_Load(object sender, EventArgs e)
        {
            func.SelectedIndex          = 0;
            stoneOrTicket.SelectedIndex = 0;
            if (File.Exists("data2"))
            {
                try
                {
                    var data = DataEncoder.Decode(FgoMain.convert_response(File.ReadAllText("data2"))).Split('\\');
                    user.Text         = data[0];
                    password.Text     = data[1];
                    equipMin.Text     = data[2];
                    equipMax.Text     = data[3];
                    fullEquip.Checked = bool.Parse(data[4]);
                    questId.Text      = data[5];
                    questPhase.Text   = data[6];
                    resultTime.Text   = data[7];
                    battleTimes.Text  = data[8];
                    if (!data[9].Equals(""))
                    {
                        apBox.SelectedIndex = int.Parse(data[9]);
                    }
                    autoApple.Checked = bool.Parse(data[10]);
                    autoSell.Checked  = bool.Parse(data[11]);
                }
                catch (Exception)
                {
                    File.Delete("data2");
                }
                if (File.Exists("itemdata.json"))
                {
                    var sr = new StreamReader("itemdata.json", Encoding.UTF8, true);
                    try
                    {
                        JToken itemData = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
                        foreach (JProperty item in itemData)
                        {
                            ScriptConst.mstItem.Add(item.Name.ToString(), item.Value.ToString());
                        }
                    }
                    catch (Exception)
                    {
                    }
                    sr.Close();
                    sr.Dispose();
                }
                if (File.Exists("svtdata.json"))
                {
                    var sr = new StreamReader("svtdata.json", Encoding.UTF8, true);
                    try
                    {
                        JToken svtData = (JObject)JsonConvert.DeserializeObject(sr.ReadToEnd());
                        foreach (JProperty item in svtData)
                        {
                            ScriptConst.mstSvt.Add(item.Name.ToString(), item.Value.ToString());
                        }
                    }
                    catch (Exception)
                    {
                    }
                    sr.Close();
                    sr.Dispose();
                }
            }
            var invTable = new DataTable();

            invTable.Columns.AddRange(new DataColumn[] { new DataColumn("物品名字"), new DataColumn("数量") });
            itemInv.DataSource = invTable;
            logBox.AppendText(LogHelper.getPrefix() + "程序加载成功.\r\n");
        }
예제 #17
0
        public static string[] fgo_server()
        {
            var jo = JObject.Parse(NetworkAPI.CreateGetHttpResponse("https://line1-s1-bili-fate.bilibiligame.net/rongame_beta/rgfate/60_member/network/network_config_android_" + FgoMain.get_game_version() + ".json", 500, null));
            var ja = (JArray)jo["list"][0]["ser"];
            var a  = new string[ja.Count];

            FgoConstant.fgo_const[5] = ja[0] + FgoConstant.fgo_const[5];
            FgoConstant.fgo_const[6] = ja[0] + FgoConstant.fgo_const[6];
            return(new string[1] {
                "00"
            });
        }
예제 #18
0
        public static PlayerStatus fgo_home(PlayerStatus ps)
        {
            var table = new Hashtable
            {
                { "ac", "home" },
                { "deviceid", FgoMain.get_device_id() },
                { "os", FgoMain.get_os() },
                { "ptype", FgoMain.get_ptype() },
                { "usk", FgoMain.get_usk(ps.uid) },
                { "umk", "" },
                { "rgsid", 1001 },
                { "rkchannel", FgoMain.get_rkchannel() },
                { "userId", ps.uid },
                { "appVer", FgoMain.get_game_version() },
                { "dateVer", FgoMain.get_date_ver() },
                { "lastAccessTime", FgoMain.get_timestamp_fgo() },
                { "try", "" },
                { "developmentAuthCode", FgoMain.get_developmentAuthCode() },
                { "dataVer", FgoMain.get_data_ver() }
            };

            var response = JObject.Parse(FgoMain.convert_response(NetworkAPI.CreatePostHttpResponse(FgoMain.get_main_address("ac"), table)));
            var resCode  = FgoMain.parse_rescode(response);
            var usk      = "";

            if (response["response"][0]["usk"] != null)
            {
                usk = response["response"][0]["usk"].ToString();
                FgoMain.calc_usk(ps.uid, usk);
            }
            if (resCode != "00")
            {
                ps.uid = response["response"][0]["fail"].ToString();
                return(ps);
            }
            ps.uid          = response["cache"]["replaced"]["userGame"][0]["userId"].ToString();
            ps.actRecoverAt = int.Parse(response["cache"]["replaced"]["userGame"][0]["actRecoverAt"].ToString());
            ps.actMax       = int.Parse(response["cache"]["replaced"]["userGame"][0]["actMax"].ToString());
            ps.lv           = int.Parse(response["cache"]["replaced"]["userGame"][0]["lv"].ToString());
            ps.exp          = int.Parse(response["cache"]["replaced"]["userGame"][0]["exp"].ToString());
            ps.qp           = int.Parse(response["cache"]["replaced"]["userGame"][0]["qp"].ToString());
            ps.costMax      = int.Parse(response["cache"]["replaced"]["userGame"][0]["costMax"].ToString());
            ps.freeStone    = int.Parse(response["cache"]["replaced"]["userGame"][0]["freeStone"].ToString());
            ps.chargeStone  = int.Parse(response["cache"]["replaced"]["userGame"][0]["chargeStone"].ToString());
            var item = new Dictionary <string, int>();

            foreach (JObject jt in (JArray)response["cache"]["replaced"]["userItem"])
            {
                if (jt["num"].ToString() == "0")
                {
                    continue;
                }
                item.Add(jt["itemId"].ToString(), int.Parse(jt["num"].ToString()));
            }
            ps.itemList = item;
            var info     = new Dictionary <string, string>();
            var follower = new Dictionary <string, FollowerServant[]>();

            foreach (JObject jt in (JArray)response["cache"]["updated"]["userFollower"][0]["followerInfo"])
            {
                var ja = (JArray)jt["userSvtLeaderHash"];
                var fs = new FollowerServant[ja.Count];
                for (var i = 0; i < fs.Length; i++)
                {
                    fs[i].equipId  = ja[i]["equipTarget1"]["svtId"].ToString();
                    fs[i].equipMax = int.Parse(ja[i]["equipTarget1"]["limitCount"].ToString()) == 4 ? true : false;
                }
                follower.Add(jt["userId"].ToString(), fs);
                info.Add(jt["userName"].ToString(), jt["userId"].ToString());
            }
            ps.followerList = follower;
            ps.followerInfo = info;
            var player = new Dictionary <string, PlayerServant>();

            foreach (JObject jt in (JArray)response["cache"]["replaced"]["userSvt"])
            {
                var ps2 = new PlayerServant();
                ps2.isLock = jt["isLock"].ToString() == "1" ? true : false;
                ps2.svtId  = jt["svtId"].ToString();
                player.Add(jt["id"].ToString(), ps2);
            }
            ps.servantList = player;
            return(ps);
        }