//结算 public bool Settle(BetType winnerType) { WinnerType = winnerType; double WinnerTotalValue = winnerType == BetType.singular ? SingularTotalValue : DualTotalValue; foreach (var eachUserBetInfo in UserBetList) { if (eachUserBetInfo.UserBetType == winnerType) { //赢得尸体计算 double temp = eachUserBetInfo.UserBetValue / WinnerTotalValue * TotalValue; //10000瓜子折合1千克尸体 temp = temp / 10000; var Collection = SingleInstanceHelper.Instance.DBHelper.DataBase.GetCollection <BsonDocument>(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName); FilterDefinition <BsonDocument> filter = Builders <BsonDocument> .Filter.Eq(x => x["UserId"], eachUserBetInfo.UserId); List <BsonDocument> UserInDB = Collection.Find(filter).ToList(); if (UserInDB != null && UserInDB.Count > 0) { var tempUserRecord = new UserRecordModel(); tempUserRecord.FromBson(UserInDB[0]); tempUserRecord.UserGetWeight += temp; var TempBson = BsonSerializer.Deserialize <BsonDocument>(JsonHelper.getJsonByObject(tempUserRecord)); SingleInstanceHelper.Instance.DBHelper.Save(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName, TempBson, "UserId"); //记录流水 UserGetWeightWaterRecordHelper.WaterRecord(tempUserRecord.UserName, tempUserRecord.UserId, temp, "增加", "竞猜获胜"); } } } DumpToDB(); return(true); }
//获取用户排行榜 public List <UserRecordModel> GetTopTenUserRecord() { var result = new List <UserRecordModel>(); var tempUserRecordList = SingleInstanceHelper.Instance.DBHelper.FindTopN(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName, 10, "UserGetWeight"); foreach (var eachUserRecord in tempUserRecordList) { var temp = new UserRecordModel(); temp.FromBson(eachUserRecord); result.Add(temp); } return(result); }
//赢得沼泽 public bool WinMarsh() { if (IsWin()) { //计算本局沼泽的信息 Winner = CurrentRunner; WinnerId = CurrentRunnerId; WinnerWeight = TotalWeight * 0.5; //更新所有用户的尸体信息 var TempUserRecordList = SingleInstanceHelper.Instance.DBHelper.FindAll(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName); List <UserRecordModel> UserRecordList = new List <UserRecordModel>(); double AllUserTotalPower = 0.0; foreach (var eachUserRecord in TempUserRecordList) { var tempUserRecord = new UserRecordModel(); tempUserRecord.FromBson(eachUserRecord); AllUserTotalPower += tempUserRecord.UserTotalPower; UserRecordList.Add(tempUserRecord); } foreach (var eachUserRecord in UserRecordList) { eachUserRecord.UserGetWeight += (TotalPower / 10000 * 0.5) / AllUserTotalPower * eachUserRecord.UserTotalPower; //记录尸体流水 UserGetWeightWaterRecordHelper.WaterRecord(eachUserRecord.UserName, eachUserRecord.UserId, (TotalPower / 10000 * 0.5) / AllUserTotalPower * eachUserRecord.UserTotalPower, "增加", "沼泽分红"); if (eachUserRecord.UserId == WinnerId) { eachUserRecord.UserGetWeight += WinnerWeight; UserGetWeightWaterRecordHelper.WaterRecord(eachUserRecord.UserName, eachUserRecord.UserId, WinnerWeight, "增加", "沼泽获胜"); } var TempBson = BsonSerializer.Deserialize <BsonDocument>(JsonHelper.getJsonByObject(eachUserRecord)); SingleInstanceHelper.Instance.DBHelper.Save(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName, TempBson, "UserId"); } return(true); } return(false); }
//有新的挑战者 Power为瓜子数量 public int GetOneRunner(String RunnerName, double Power, int UserId, int addFollow) { if (IsWin()) { return(0); } RunTimes += 1; //正常结束返回1 int result = 1; if (BoomPercent > 0) { Random rd = new Random(); int rdResult = rd.Next(0, 100); if (rdResult < BoomPercent) { //沼气爆炸 result = 2; double temp = TotalWeight * 0.1; var Collection = SingleInstanceHelper.Instance.DBHelper.DataBase.GetCollection <BsonDocument>(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName); FilterDefinition <BsonDocument> filter = Builders <BsonDocument> .Filter.Eq(x => x["UserId"], UserId); List <BsonDocument> UserInDB = Collection.Find(filter).ToList(); if (UserInDB != null && UserInDB.Count > 0) { var tempUserRecord = new UserRecordModel(); tempUserRecord.FromBson(UserInDB[0]); tempUserRecord.UserGetWeight += temp; var TempBson = BsonSerializer.Deserialize <BsonDocument>(JsonHelper.getJsonByObject(tempUserRecord)); SingleInstanceHelper.Instance.DBHelper.Save(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName, TempBson, "UserId"); //记录流水 UserGetWeightWaterRecordHelper.WaterRecord(tempUserRecord.UserName, tempUserRecord.UserId, temp, "增加", "沼气爆炸"); } TotalWeight = TotalWeight - temp; } //否则无事发生 } if (LeftTime + 10 > 1800) { LeftTime = 1800; } else { LeftTime += 10; } LastRunnerLeftTime = LeftTime; TotalWeight += Power / 10000 * 0.5; CurrentRunner = RunnerName; CurrentRunnerPower = Power; TotalPower += Power; CurrentRunnerId = UserId; if (addFollow == 0) { IsFan = false; } else { IsFan = true; } return(result); }
//接受到弹幕 public void ReceiveDanmu(object sender, ReceivedDanmakuArgs e) { if (e.Danmaku != null && (e.Danmaku.MsgType == MsgTypeEnum.GiftSend || e.Danmaku.MsgType == MsgTypeEnum.GuardBuy)) { if (e.Danmaku.GiftCount > 0) { //记录礼物价值 var obj = JObject.Parse(e.Danmaku.RawData); GiftValueModel tempGiftValue = null; if (GiftValueList.Count > 0) { tempGiftValue = GiftValueList.Find(r => r.GiftName.Equals(e.Danmaku.GiftName)); } if (tempGiftValue == null) { tempGiftValue = new GiftValueModel() { GiftName = e.Danmaku.GiftName, Giftid = obj["data"]["giftId"].ToObject <int>(), GiftPrice = obj["data"]["price"].ToObject <double>(), }; GiftValueList.Add(tempGiftValue); } //记录到数据库 var temp = BsonSerializer.Deserialize <BsonDocument>(e.Danmaku.RawData); SingleInstanceHelper.Instance.DBHelper.Insert(SingleInstanceHelper.Instance.DBHelper.GiftRecordCoName, temp); double Power = tempGiftValue.GiftPrice * e.Danmaku.GiftCount; //增加用户的power数据到数据库顺便更新用户状态 var Collection = SingleInstanceHelper.Instance.DBHelper.DataBase.GetCollection <BsonDocument>(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName); FilterDefinition <BsonDocument> filter = Builders <BsonDocument> .Filter.Eq(x => x["UserId"], e.Danmaku.UserID); List <BsonDocument> result = Collection.Find(filter).ToList(); var tempUserRecord = new UserRecordModel(); int addFollow = obj["data"]["addFollow"].ToObject <int>(); if (result != null && result.Count > 0) { tempUserRecord.FromBson(result[0]); tempUserRecord.UserTotalPower += Power; tempUserRecord.UserName = e.Danmaku.UserName; if (addFollow == 0) { tempUserRecord.IsFan = false; } else { tempUserRecord.IsFan = true; } } else { tempUserRecord.UserId = e.Danmaku.UserID; tempUserRecord.UserName = e.Danmaku.UserName; tempUserRecord.UserTotalPower = Power; tempUserRecord.UserGetWeight = 0; if (addFollow == 0) { tempUserRecord.IsFan = false; } else { tempUserRecord.IsFan = true; } } var TempBson = BsonSerializer.Deserialize <BsonDocument>(JsonHelper.getJsonByObject(tempUserRecord)); SingleInstanceHelper.Instance.DBHelper.Save(SingleInstanceHelper.Instance.DBHelper.UserRecordCoName, TempBson, "UserId"); if (Stop) { return; } //记录消息 Random rd = new Random(); int rdResult = rd.Next(1, 100); if (rdResult < 50) { String NewRunnerMessage = NewRunnerMessages[rdResult % 11].Replace("挑战者", e.Danmaku.UserName); WriteToFile(NewRunnerMessage); } //沼泽处理 if (CurrentMarsh.GetOneRunner(e.Danmaku.UserName, Power, e.Danmaku.UserID, addFollow) == 2) { String RealBoomMessage = BoomMessage.Replace("挑战者", e.Danmaku.UserName); WriteToFile(RealBoomMessage); } //竞猜处理 if (CurrentBet != null) { if (CurrentBet.Status == BetStatus.betting) { CurrentBet.Bet(e.Danmaku.UserName, e.Danmaku.UserID, e.Danmaku.GiftCount, tempGiftValue.GiftPrice); } } } } }