private static List <double> generateFibonacciSphere(int N = 10000, double jitter = 0.75f, int seed = 123) { var randFloat = Rander.makeRandDouble(seed); var a_latlong = new List <double>(); // Second algorithm from http://web.archive.org/web/20120421191837/http://www.cgafaq.info/wiki/Evenly_distributed_points_on_sphere var s = 3.6 / Math.Sqrt(N); double dlong = Math.PI * (3 - Math.Sqrt(5)), /* ~2.39996323 */ _long = 0, dz = 2.0 / N, _z = 1 - dz / 2; for (int k = 0; k < N; k++) { var r = Math.Sqrt(1 - _z * _z); var latDeg = Math.Asin(_z) * 180 / Math.PI; var lonDeg = _long * 180 / Math.PI; //if (_randomLat[k] === undefined) _randomLat[k] = randFloat() - randFloat(); //if (_randomLon[k] === undefined) _randomLon[k] = randFloat() - randFloat(); var _randomLat = randFloat() - randFloat(); var _randomLon = randFloat() - randFloat(); latDeg += jitter * _randomLat * (latDeg - Math.Asin(Math.Max(-1, _z - dz * 2 * Math.PI * r / s)) * 180 / Math.PI); lonDeg += jitter * _randomLon * (s / r * 180 / Math.PI); a_latlong.Add(latDeg); a_latlong.Add(lonDeg % 360.0); _long += dlong; _z -= dz; } return(a_latlong); }
public static void calculateMountainDistance(int seed, DualMesh mesh, int[] peak_t, Float spacing, Float jaggedness, NativeArray <Float> t_distance) { int randIndex = 0; for (var i = 0; i < t_distance.Length; ++i) { t_distance[i] = -1f; } var queue_t = new List <int>(peak_t); for (var i = 0; i < queue_t.Count; i++) { var current_t = queue_t[i]; for (var j = 0; j < 3; j++) { var s = 3 * current_t + j; var neighbor_t = mesh.s_outer_t(s); if (t_distance[neighbor_t] == -1f) { var rf1 = Rander.randFloat(seed, randIndex++); var rf2 = Rander.randFloat(seed, randIndex++); var increment = spacing * (1 + jaggedness * (rf1 - rf2)); t_distance[neighbor_t] = t_distance[current_t] + increment; queue_t.Add(neighbor_t); } } } }
protected override void ScheduleDo(SchedulerTimer timer) { var todayRecord = GlobalVarRecord.Get("TodayShopInfo"); if (!string.IsNullOrEmpty(todayRecord.Value)) { return; } var records = GetHours(3).Select(hour => { var isHalfHour = Rander.RandBool(); var dateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, hour, isHalfHour ? 30 : 0, 0); var goods = ArmerSvc.GetRandArmers(5).Select(p => p.Name); return(new ShopTimeRecord() { OpenTime = dateTime, SellingGoods = goods.ToArray() }); }).ToList(); todayRecord.Value = JsonConvert.SerializeObject(records); todayRecord.ExpiryTime = CommonUtil.UntilTommorow(); todayRecord.Update(); RandShopperSvc.Refresh(); }
public bool RD(MsgInformationEx MsgDTO, object[] param) { var rand = Rander.RandInt(100) + 1; MsgSender.PushMsg(MsgDTO, $"你掷出了 {rand} 点!", true); return(true); }
public bool FishingBottle(MsgInformationEx MsgDTO, object[] param) { if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "昙天")) { MsgSender.PushMsg(MsgDTO, "你当前无法捞瓶子!(昙天)"); return(false); } if (Rander.RandInt(100) < ItemRate) { FishItem(MsgDTO); return(true); } var query = MongoService <DriftBottleRecord> .Get(r => r.FromQQ != MsgDTO.FromQQ && r.FromGroup != MsgDTO.FromGroup && !r.ReceivedQQ.HasValue); if (query.IsNullOrEmpty()) { FishItem(MsgDTO); return(true); } var bottle = query.RandElement(); PrintBottle(MsgDTO, bottle); bottle.ReceivedGroup = MsgDTO.FromGroup; bottle.ReceivedQQ = MsgDTO.FromQQ; bottle.ReceivedTime = DateTime.Now; MongoService <DriftBottleRecord> .Update(bottle); return(true); }
private void ProcessTurn() { var randSkills = Rander.RandSort(SelfPet.Skills.Keys.Where(s => s != SelfPet.LastSkill).ToArray()).Take(3); var skills = SelfPet.Skills.Where((skill, level) => randSkills.Contains(skill.Key)).ToList(); var selectedIdx = Rander.RandInt(skills.Count); var(skillName, skillLevel) = skills.ElementAt(selectedIdx); var skillModel = PetSkillSvc[skillName]; SendMessage($"{SelfPet.Name}施放了 【{skillModel.Name}】(lv.{skillLevel})!"); SelfPet.LastSkill = skillName; if (!DoSkillTrigger()) { return; } if (skillModel.Data.First().Value.Length == skillLevel) { SendMessage($"{SelfPet.Name}使出了它的绝技!"); } var msg = ProcessEffect(new GamingEffect() { Name = skillModel.Name, Data = skillModel.Data.ToDictionary(p => p.Key, p => (object)p.Value[skillLevel - 1]) }); SendMessage(msg); }
public bool GetBoomCode(MsgInformationEx MsgDTO, object[] param) { BoomCode = Rander.RandInt(100000); CodeDate = DateTime.Now; MsgSender.PushMsg(MsgDTO, BoomCode.ToString()); return(true); }
public XunyuanTreasure[] Split() { Simplify(); var first = new XunyuanTreasure(); var second = new XunyuanTreasure(); foreach (var(key, value) in NormalArmers) { var randCount = Rander.RandInt(value + 1); first.NormalArmers.Add(key, randCount); second.NormalArmers.Add(key, value - randCount); } foreach (var(key, value) in EscapeArmers) { var randCount = Rander.RandInt(value + 1); first.EscapeArmers.Add(key, randCount); second.EscapeArmers.Add(key, value - randCount); } var randGold = Rander.RandInt(Golds + 1); first.Golds = randGold; second.Golds = Golds - randGold; return(new[] { first, second }); }
public bool Xunyuan(MsgInformationEx MsgDTO, object[] param) { var aimQQ = (long)param[0]; if (aimQQ == MsgDTO.FromQQ) { MsgSender.PushMsg(MsgDTO, "你无法和自己寻缘!"); return(false); } if (!XunYuanMgr.CheckGroup(MsgDTO.FromGroup)) { MsgSender.PushMsg(MsgDTO, "此群正在进行一场寻缘,请稍候再试!"); return(false); } if (!XunYuanMgr.CheckQQNum(MsgDTO.FromQQ)) { MsgSender.PushMsg(MsgDTO, "你正在进行一场寻缘,请稍候再试!"); return(false); } if (!XunYuanMgr.CheckQQNum(aimQQ)) { MsgSender.PushMsg(MsgDTO, "对方正在进行一场寻缘,请稍候再试!"); return(false); } var msg = $"{CodeApi.Code_At(aimQQ)} 你正被邀请参加一次寻缘,是否同意?"; if (!WaiterSvc.WaitForConfirm(MsgDTO.FromGroup, aimQQ, msg, MsgDTO.BindAi)) { MsgSender.PushMsg(MsgDTO, "操作取消!"); return(false); } var Gamers = new[] { MsgDTO.FromQQ, aimQQ }.Select(p => { var armerRecord = PersonArmerRecord.Get(p); var osPerson = OSPerson_Doremi.GetPerson(p); var levelModel = LevelSvc.GetByLevel(osPerson.Level); var battleArmers = Rander.RandSort(armerRecord.Armers.ToArray()).Take(10).ToDictionary(a => a.Key, a => a.Value); return(new XunYuanGamingModel() { QQNum = p, Armers = battleArmers, EscapeArmers = armerRecord.EscapeArmers, BasicHP = levelModel.HP, HP = levelModel.HP + ArmerSvc.CountHP(battleArmers), BasicAttack = levelModel.Atk, Attack = levelModel.Atk + ArmerSvc.CountAtk(battleArmers) }); }).ToArray(); XunYuanMgr.StartGame(Gamers, MsgDTO.FromGroup, MsgDTO.BindAi); return(true); }
public XunyuanEngine(XunYuanGamingModel[] Gamers, long GroupNum, string BindAi) { this.Gamers = Rander.RandSort(Gamers).ToList(); this.GroupNum = GroupNum; this.BindAi = BindAi; BasicHPTotal = Gamers.Sum(g => g.BasicHP); BasicAtkTotal = Gamers.Sum(g => g.BasicAttack); }
private void JudgeFirst() { if (Rander.RandBool()) { return; } SwitchPet(); }
private TarotCacheModel GetRandTarotFortune() { return(new TarotCacheModel() { CardName = ModelList.RandElement().Name, IsPos = Rander.RandBool(), SerialName = TarotSerialNames.RandElement() }); }
public void StartAGame(long GroupNum, long FirstQQ, long SecondQQ, Func <long, long, string, Predicate <string>, string> WaitCallBack, string BindAi) { var ran = Rander.RandInt(2); var SelfQQNum = ran == 0 ? FirstQQ : SecondQQ; var AimQQNum = ran == 1 ? FirstQQ : SecondQQ; var engine = new ChessEngine(GroupNum, SelfQQNum, AimQQNum, WaitCallBack, BindAi); WorkingEngine.Add(engine); engine.GameStart(); }
PlayerStat player; // 플레이어 라이프, 돈 public GameManager() { //----------------------- // 각 클래스 인스턴스화 // 싱글턴 패턴이 좋을거같은데 어설프게 썻다간 광역딜 들어올거같아서 놔둠 //----------------------- QBurger = new Burger(); player = new PlayerStat(); customor = new Customor(); define = new Define(); gameRander = new Rander(QBurger, customor, player); }
private static void RandBless(RandomFortuneCache rf) { if (rf.FortuneValue >= 50 || Rander.RandInt(100) > 20) { return; } var item = FortuneItemList.RandElement(); rf.BlessName = item.Name; rf.BlessValue = item.Value; }
/********************************************************************** * Plates */ static HashSet <int> pickRandomRegions(DualMesh mesh, int N, int seed) { var randInt = Rander.makeRandInt(seed); var numRegions = mesh.numRegions; var chosen_r = new HashSet <int>(); while (chosen_r.Count < N && chosen_r.Count < numRegions) { chosen_r.Add(randInt(numRegions)); } return(chosen_r); }
public void GameStart(long groupNum, long firstPlayer, long secondPlayer, int CaveNo, string BindAi) { var players = new[] { AdvPlayer.GetPlayer(firstPlayer), AdvPlayer.GetPlayer(secondPlayer) }; players = Rander.RandSort(players); var engine = new AdvGameEngine(players, groupNum, CaveNo, BindAi); Engines.Add(engine); engine.GameStart(); Engines.Remove(engine); }
private static DailySellItemModel[] CreateDailySellItems_Rare() { var honors = AutofacSvc.Resolve <HonorSvc>().HonorList.Where(h => !h.IsLimit); var items = honors.SelectMany(h => h.Items).Where(p => p.Price >= 500).ToArray(); var randSort = Rander.RandSort(items).Take(5); return(randSort.Select(rs => new DailySellItemModel { Name = rs.Name, Price = rs.Price * 2, Attr = string.Join(",", rs.Attributes) }).ToArray()); }
private void MonsterTurn(XunyuanMonsterModel monster) { var target = Gamers[Rander.RandInt(Gamers.Count)]; target.HP = Math.Max(0, target.HP - monster.Atk); PushMsg($"{CodeApi.Code_At(target.QQNum)} 受到了 {monster.Name} 的 {monster.Atk}点攻击伤害!剩余 {target.HP}点生命"); if (!target.IsDead) { return; } PushMsg($"{CodeApi.Code_At(target.QQNum)} 被移除了队伍!"); Gamers.Remove(target); }
private static DiceResultModel ConsoleDice(DiceModel model) { var result = new DiceResultModel { Modify = model.Modify, Result = new List <int>() }; for (var i = 0; i < model.Count; i++) { var value = Rander.RandInt(model.Size) + 1; result.Result.Add(value); } return(result); }
public static List <Float[]> applyJitter(short[] points, Float dr, int seed) { var randFloat = Rander.makeRandFloat(seed); var tmp = new List <Float[]>(); for (int i = 0; i < points.Length / 2; ++i) { var r = dr * Math.Sqrt(Math.Abs(randFloat())); var a = Math.PI * randFloat(); var dx = r * Math.Cos(a); var dy = r * Math.Sin(a); tmp.Add(new Float[] { (Float)(points[i * 2] + dx), (Float)(points[i * 2 + 1] + dy) }); } return(tmp); }
public bool SetPetAttr(MsgInformationEx MsgDTO, object[] param) { var pet = PetRecord.Get(MsgDTO.FromQQ); var needGolds = false; OSPerson osPerson = null; if (!string.IsNullOrEmpty(pet.Attribute)) { osPerson = OSPerson.GetPerson(MsgDTO.FromQQ); if (osPerson.Golds < 300) { MsgSender.PushMsg(MsgDTO, $"金币余额不足!({osPerson.Golds.CurencyFormat()}/{300.CurencyFormat()})"); return(false); } if (!WaiterSvc.WaitForConfirm_Gold(MsgDTO, 300)) { MsgSender.PushMsg(MsgDTO, "操作取消"); return(false); } needGolds = true; } var randAttrs = Rander.RandSort(PetExtent.AllAttributes.ToArray()); var msg = $"请选择宠物食性:\r\n{string.Join("\r\n", randAttrs.Select((p, idx) => $"{idx + 1}:{p}"))}"; var selectedIdx = WaiterSvc.WaitForNum(MsgDTO.FromGroup, MsgDTO.FromQQ, msg, i => i > 0 && i <= randAttrs.Length, MsgDTO.BindAi); if (selectedIdx == -1) { MsgSender.PushMsg(MsgDTO, "操作取消"); return(false); } pet.Attribute = randAttrs[selectedIdx - 1]; pet.Update(); if (needGolds) { osPerson.Golds -= 300; osPerson.Update(); } MsgSender.PushMsg(MsgDTO, "设定成功!"); return(true); }
private void FishItem(MsgInformationEx MsgDTO) { if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "梅雨") && Rander.RandInt(100) < 30) { MsgSender.PushMsg(MsgDTO, "欸呀呀,捞瓶子失败了!(梅雨)", true); return; } var item = HonorSvc.RandItem(); var record = ItemCollectionRecord.Get(MsgDTO.FromQQ); var honorName = HonorSvc.FindHonorName(item.Name); var count = 1; var vipArmers = VipArmerRecord.Get(MsgDTO.FromQQ); if (vipArmers.CheckArmer("安妮的镜子")) { count = 2; } vipArmers.Armers.Remove(p => p.Name == "安妮的镜子"); vipArmers.Update(); DriftBottleAnalyzeRecord.Record(item.Name, count); var s = record.ItemIncome(item.Name, count); var msg = "你捞到了 \r\n" + $"{(string.IsNullOrEmpty(item.PicPath) ? string.Empty : $"{CodeApi.Code_Image_Relational(item.PicPath)}\r\n")}" + $"{item.Name}{(count > 1 ? $"*{count}" : string.Empty)} \r\n" + $" {item.Description} \r\n" + $"稀有率为 {HonorSvc.ItemRate(item)}%\r\n" + $"售价为:{item.Price} 金币\r\n" + $"特性:{(item.Attributes == null ? "无" : string.Join(",", item.Attributes))}\r\n" + $"你总共拥有该物品 {record.HonorCollections[honorName].Items[item.Name]}个"; if (!string.IsNullOrEmpty(s)) { msg += $"\r\n{s}"; } if (OSPersonBuff.CheckBuff(MsgDTO.FromQQ, "钻石尘") && Rander.RandInt(100) < 50) { OSPerson.GoldConsume(MsgDTO.FromQQ, 40); msg += "\r\n欸呀呀,你丢失了40金币(钻石尘)"; } MsgSender.PushMsg(MsgDTO, msg, true); }
public void SetPositions(Vector3[] points) { var ii = new List <int>(); BezierCurve.iiii(points, 0, ii); var rd = Rander.makeRandFloat(Random.Next()); SetPositions(points, ii.ToArray(), new Color(rd(), rd(), rd(), rd())); //var render = gameObject.AddComponent<LineRenderer>(); //render.positionCount = points.Length; //render.SetPositions(points); //render.startWidth = 0.5f; //render.endWidth = 0.5f; //render.loop = true; }
private string GetRandKind() { var rand = Rander.RandInt(SumRate); var tempSum = 0; foreach (var(key, value) in KindDic) { if (tempSum + value > rand) { return(key); } tempSum += value; } return(string.Empty); }
private void buildPermutationTable(int seed) { int i; for (i = 0; i < 256; i++) { p256[i] = (byte)i; } for (i = 0; i < 255; i++) { var f = Rander.randFloat(seed, i); // JS 中 ~~符号 它被用作一个更快的替代 Math.floor() var r = (byte)(i + Math.Floor(f * (256 - i))); var aux = p256[i]; p256[i] = p256[r]; p256[r] = aux; } }
private string RandCaveType() { var sum = Rates.Sum(p => p.Value); var rand = Rander.RandInt(sum); var temp = 0; foreach (var(key, value) in Rates) { if (temp + value >= rand) { return(key); } temp += value; } return(Rates.FirstOrDefault().Key); }
public IEnumerable <ExpeditionSceneModel> TodayExpedition() { var cache = GlobalVarRecord.Get("TodayExpedition"); if (!string.IsNullOrEmpty(cache.Value)) { var modelNames = JsonConvert.DeserializeObject <string[]>(cache.Value); return(Scenes.Where(s => modelNames.Contains(s.Name)).ToList()); } var todayScenes = Rander.RandSort(Scenes.ToArray()).Take(3).ToList(); cache.Value = JsonConvert.SerializeObject(todayScenes.Select(s => s.Name).ToArray()); cache.ExpiryTime = CommonUtil.UntilTommorow(); cache.Update(); return(todayScenes); }
private MajFortuneCache NewFortune(long QQNum) { var fortuneStar = Rander.RandInt(11); var position = PosArray.RandElement(); var kind = GetRandKind(); var(key, value) = CharactorsDic.RandElement(); return(new MajFortuneCache { CharactorName = key, CharactorPath = value, FortuneStar = fortuneStar, Kind = kind, Position = position, QQNum = QQNum }); }
public static DailySellItemRareRecord GetTomorrow() { var dataStr = DateTime.Now.AddDays(1).ToString("yyyyMMdd"); var record = MongoService <DailySellItemRareRecord> .GetOnly(p => p.DateStr == dataStr); if (record != null) { return(record); } record = new DailySellItemRareRecord() { DateStr = dataStr, Hour = 6 + Rander.RandInt(16), Items = CreateDailySellItems_Rare() }; MongoService <DailySellItemRareRecord> .Insert(record); return(record); }