public static Point NewPoint(Variant point) { if (point == null) return Point.Empty; int x = point.GetIntOrDefault("X"); int y = point.GetIntOrDefault("Y"); return new Point(x, y); }
/// <summary> /// 判断是否存在要求回收的物品 /// </summary> /// <param name="note"></param> /// <param name="s"></param> /// <returns>true表示发生变化</returns> public static bool Task10004(UserNote note, Variant s) { if (s.GetIntOrDefault("Cur") == s.GetIntOrDefault("Total")) return false; if (!s.ContainsKey("GoodsID")) return false; if (s.GetIntOrDefault("Type") != 10004) return false; int m = GameConfigAccess.Instance.GetStactCount(s.GetStringOrDefault("GoodsID")); if (m <= 0) return false; PlayerEx burden = note.Player.B0; IList c = burden.Value.GetValue<IList>("C"); int number = 0; foreach (Variant d in c) { if (d.GetStringOrDefault("G") == s.GetStringOrDefault("GoodsID")) { number += d.GetIntOrDefault("A"); } } if (number >= s.GetIntOrDefault("Total")) s["Cur"] = s.GetIntOrDefault("Total"); else s["Cur"] = number; return true; }
public static LimitTeam Create(string name, Variant v) { int minMember = v.GetIntOrDefault("MinMember"); int maxMember = v.GetIntOrDefault("MaxMember"); if (minMember > 0 || maxMember > 0) { return new LimitTeam(name, minMember, maxMember); } return null; }
public static LimitFamily Create(string name, Variant v) { int dayDev = v.GetIntOrDefault("DayDev"); int familyTask = v.GetIntOrDefault("FamilyTask"); if (familyTask > 0 || dayDev > 0) { return new LimitFamily(name, dayDev, familyTask); } return null; }
public static LimitLevel Create(string name, Variant v) { int minLev = v.GetIntOrDefault("MinLevel"); int maxLev = v.GetIntOrDefault("MaxLevel"); if (minLev > 1 || maxLev > 0) { return new LimitLevel(name, minLev, maxLev); } return null; }
/// <summary> /// /// </summary> /// <param name="range"></param> /// <param name="fourfold">是否扩大选择区</param> /// <returns></returns> public static Rectangle NewRectangle(Variant range, bool fourfold = false) { if (range == null) return Rectangle.Empty; int x = range.GetIntOrDefault("X"); int y = range.GetIntOrDefault("Y"); int w = range.GetIntOrDefault("W"); int h = range.GetIntOrDefault("H"); if (fourfold) { return new Rectangle(x - w, y - h, w << 1, h << 1); } return new Rectangle(x, y, w, h); }
/// <summary> /// 学习宠物技能(御宠图鉴) /// </summary> /// <param name="variant"></param> public bool AddPetBook(Variant c) { string skillID = c.GetStringOrDefault("SkillID"); if (string.IsNullOrEmpty(skillID)) return false; int level = c.GetIntOrDefault("SkillLev"); var skill = m_petBook.Value.GetValueOrDefault<List<object>>(skillID); if (skill == null) { skill = new List<object>(); m_petBook.Value[skillID] = skill; } if (skill.Contains(level)) { return false; } int mustslevel = level - 1; if (mustslevel > 0 && (!skill.Contains(mustslevel))) { return false; } skill.Add(level); m_petBook.Save(); this.Call(ClientCommand.UpdateActorR, new PlayerExDetail(m_petBook)); return true; }
public Apc(Variant config) { ID = config.GetStringOrDefault("_id"); this.Name = config.GetStringOrDefault("Name"); Name = config.GetStringOrDefault("Name"); m_value = config.GetVariantOrDefault("Value"); m_life = new PlayerProperty(); if (m_value != null) { m_life.Add(m_value); this.Level = m_value.GetIntOrDefault("Level"); } this.ApcType = FighterType.APC; Variant ui = config.GetVariantOrDefault("UI"); if (ui != null) { this.Skin = ui.GetStringOrDefault("Skin"); string apcType = ui.GetStringOrDefault("Type"); if (apcType == "BB") { this.ApcType = FighterType.BB; } else if (apcType == "Boss") { this.ApcType = FighterType.Boss; } } }
public static LimitScore Create(string name, Variant v) { int coin = v.GetIntOrDefault("Coin"); if (coin > 0) { return new LimitScore(name, coin); } return null; }
public static LimitScore Create(string name, Variant v) { int bond = v.GetIntOrDefault("Bond"); if (bond > 0) { return new LimitScore(name, bond); } return null; }
public static LimitScore Create(string name, Variant v) { int score = v.GetIntOrDefault("Score"); if (score > 0) { return new LimitScore(name, score); } return null; }
public static LimitMaxinto Create(string ectypeID, string name, Variant v) { int maxInto = v.GetIntOrDefault("MaxInto"); if (maxInto > 0) { return new LimitMaxinto(ectypeID, name, maxInto); } return null; }
public Box(Variant config) { ID = config.GetStringOrDefault("_id"); Name = config.GetStringOrDefault("Name"); m_value = config.GetVariantOrDefault("Value"); if (m_value != null) { this.SceneID = m_value.GetStringOrDefault("SceneID"); this.GoodsID = m_value.GetStringOrDefault("GoodsID"); this.OpenMS = m_value.GetIntOrDefault("OpenMS"); this.GrowSecond = m_value.GetIntOrDefault("GrowSecond"); this.MaxOpen = m_value.GetIntOrDefault("MaxOpen"); m_range = RangeHelper.NewRectangle(m_value.GetVariantOrDefault("Range"), true); } Variant ui = config.GetVariantOrDefault("UI"); if (ui != null) { this.Skin = ui.GetStringOrDefault("Skin"); } if (this.GrowSecond <= 0) { this.GrowSecond = 30; } }
public FightAction(Variant v, int fightCount) { this.ActionType = (ActionType)(v.GetIntOrDefault("fType")); this.Sender = v.GetStringOrDefault("handler"); object obj; if (v.TryGetValueT("target", out obj)) { this.Target = (obj == null ? string.Empty : obj.ToString()); } if (v.TryGetValueT("parameter", out obj)) { this.Parameter = (obj == null ? string.Empty : obj.ToString()); } this.FightCount = fightCount; }
private static string GetPetSkin(Variant v) { string skin = v.GetStringOrDefault("Skin"); int rank = v.GetIntOrDefault("PetsRank"); int index = skin.IndexOf('|'); if (index >= 0) { string[] skins = skin.Split('|'); if (rank < skins.Length) { return skins[rank]; } } return skin + rank.ToString(); }
public static PlayerProperty CreatePlayerProperty(Variant v) { PlayerProperty life = new PlayerProperty(); life.LiLiang = v.GetIntOrDefault("LiLiang"); life.TiZhi = v.GetIntOrDefault("TiZhi"); life.ZhiLi = v.GetIntOrDefault("ZhiLi"); life.JingShen = v.GetIntOrDefault("JingShen"); life.KangShangHai = v.GetIntOrDefault("KangShangHai"); //----------------------- life.WuLiXiShou = v.GetDoubleOrDefault("WuLiXiShou"); life.MoFaXiShou = v.GetDoubleOrDefault("MoFaXiShou"); life.FanJiLv = v.GetDoubleOrDefault("FanJiLv"); life.HeJiLv = v.GetDoubleOrDefault("HeJiLv"); life.TaoPaoLv = v.GetDoubleOrDefault("TaoPaoLv"); life.BaoJiShangHai = v.GetDoubleOrDefault("BaoJiShangHai"); life.HeJiShangHai = v.GetDoubleOrDefault("HeJiShangHai"); life.SuDu = v.GetIntOrDefault("SuDu"); life.BaoJi = v.GetIntOrDefault("BaoJi"); life.MingZhong = v.GetIntOrDefault("MingZhong"); life.ShanBi = v.GetIntOrDefault("ShanBi"); life.BaoJiLv = v.GetDoubleOrDefault("BaoJiLv"); life.MingZhongLv = v.GetDoubleOrDefault("MingZhongLv"); life.ShanBiLv = v.GetDoubleOrDefault("ShanBiLv"); //---------------------------------- life.ShengMing = v.GetVariantOrDefault("ShengMing").GetIntOrDefault("M"); life.MoFa = v.GetVariantOrDefault("MoFa").GetIntOrDefault("M"); life.GongJi = v.GetVariantOrDefault("GongJi").GetIntOrDefault("V"); life.MoFaGongJi = v.GetVariantOrDefault("MoFaGongJi").GetIntOrDefault("V"); life.FangYu = v.GetVariantOrDefault("FangYu").GetIntOrDefault("V"); life.MoFaFangYu = v.GetVariantOrDefault("MoFaFangYu").GetIntOrDefault("V"); return life; }
public bool SetPKProtect(Variant v, int number = 1) { int second = v.GetIntOrDefault("S") * number; if (second > 0) { DateTime now = DateTime.UtcNow; Variant pk = m_assist.Value.GetVariantOrDefault("PK"); if (pk == null) { pk = new Variant(); m_assist.Value["PK"] = pk; pk["A"] = 0; pk["T"] = now.AddSeconds(second); } else { DateTime t = pk.GetDateTimeOrDefault("T"); if (t < now) { t = now.AddSeconds(second); } else { t = t.AddSeconds(second); //最多累计24小时 if ((t - now).TotalHours > 24) { return false; } } pk["T"] = t;// t.AddSeconds(second); } this.Call(ClientCommand.UpdateActorR, new PlayerExDetail(m_assist)); m_assist.Save(); return true; } return false; }
public bool SetFightPro(Variant v, int number = 1) { string name = v.GetStringOrDefault("ProType"); if (name == "WG" || name == "MG" || name == "MF" || name == "WF" || name == "CP") { int a = v.GetIntOrDefault("A"); int second = v.GetIntOrDefault("S") * number; if (a > 0 && second > 0) { SetFightPro(name, a, second); return true; } } return false; }
public bool SetDoubleExp(Variant v, int number = 1) { double a = v.GetDoubleOrDefault("A"); int second = v.GetIntOrDefault("S") * number; if (a > 0 && second > 0) { SetASTBuffer("RExp", a, second); } return true; }
/// <summary> /// 设置自动加满(累加方式) /// "RHP":角色血/魔加满 /// "PHP":宠物血/魔加满 /// </summary> /// <param name="v"></param> public bool SetAutoFull(Variant v, int number = 1) { if (v == null) return false; foreach (string name in autoKeys) { int rhp = v.GetIntOrDefault(name) * number; if (rhp > 0) { m_assist.Value.SetOrInc(name, rhp); FristAdd(name); } } this.Call(ClientCommand.UpdateActorR, new PlayerExDetail(m_assist)); m_assist.Save(); return true; }
public bool SetAutoFight(Variant v, int number = 1) { int second = v.GetIntOrDefault("S") * number; if (second > 0) { SetASTBuffer("AF", 1, second); } return true; }
/// <summary> /// 加成. /// </summary> /// <param name="v"></param> /// <returns></returns> public virtual void Add(Variant v) { if (v != null && v.Count > 0) { ShengMing += v.GetIntOrDefault("ShengMing"); MoFa += v.GetIntOrDefault("MoFa"); GongJi += v.GetIntOrDefault("GongJi"); MoFaGongJi += v.GetIntOrDefault("MoFaGongJi"); FangYu += v.GetIntOrDefault("FangYu"); MoFaFangYu += v.GetIntOrDefault("MoFaFangYu"); WuLiXiShou += v.GetDoubleOrDefault("WuLiXiShou"); MoFaXiShou += v.GetDoubleOrDefault("MoFaXiShou"); FanJiLv += v.GetDoubleOrDefault("FanJiLv"); HeJiLv += v.GetDoubleOrDefault("HeJiLv"); TaoPaoLv += v.GetDoubleOrDefault("TaoPaoLv"); BaoJiShangHai += v.GetDoubleOrDefault("BaoJiShangHai"); HeJiShangHai += v.GetDoubleOrDefault("HeJiShangHai"); SuDu += v.GetIntOrDefault("SuDu"); BaoJi += v.GetIntOrDefault("BaoJi"); MingZhong += v.GetIntOrDefault("MingZhong"); ShanBi += v.GetIntOrDefault("ShanBi"); BaoJiLv += v.GetDoubleOrDefault("BaoJiLv"); MingZhongLv += v.GetDoubleOrDefault("MingZhongLv"); ShanBiLv += v.GetDoubleOrDefault("ShanBiLv"); } }
/// <summary> /// 得到装被附加属性 /// </summary> /// <param name="affix">附加属性</param> /// <param name="v">产生的附加属性</param> public static void GetAffix(Variant affix, Variant v) { if (affix == null) return; int min = affix.GetIntOrDefault("Min"); int max = affix.GetIntOrDefault("Max"); if (min > max) return; Variant lift = affix.GetVariantOrDefault("Life"); if (lift == null) return; foreach (var item in lift) { if (v.ContainsKey(item.Key)) continue; Variant tmp = (Variant)item.Value; if (tmp == null) continue; int m = tmp.GetIntOrDefault("Min"); int n = tmp.GetIntOrDefault("Max"); double range = tmp.GetDoubleOrDefault("Range"); if (NumberRandom.RandomHit(range)) { //表示成功 v.Add(item.Key, NumberRandom.Next(m, n + 1)); if (v.Count >= max) break; } } if (lift.Count > min && v.Count < min) { //回调 GetAffix(affix, v); } }
public BaseConfig(Variant config) { this.BaseDirectory = AppDomain.CurrentDomain.BaseDirectory; this.Platform = config.GetStringOrDefault("Platform", Sinan.Entity.Platform.Tencent); this.DirConfig = Path.Combine(this.BaseDirectory, fixPath(config.GetStringOrDefault("DirConfig", "Config"))); this.Crossdomain = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("Crossdomain", "crossdomain.txt"))); this.DirBase = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirBase", "base"))); this.DirGame = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirGame", "game"))); this.DirDB = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirDB", "db"))); this.Language = config.GetStringOrDefault("Language"); if (!string.IsNullOrWhiteSpace(Language)) { string path = Path.Combine(DirConfig, fixPath(Language)); if (Directory.Exists(path)) { this.DirBase = path; } } this.DirPlugin = Path.Combine(BaseDirectory, fixPath(config.GetStringOrDefault("DirPlugin", "Plugins"))); this.Log4Config = Path.Combine(BaseDirectory, fixPath(config.GetStringOrDefault("Log4Config", "log4net.config"))); this.DbBase = config.GetStringOrDefault("DbBase"); this.DbLog = config.GetStringOrDefault("DbLog"); this.DbPlayer = config.GetStringOrDefault("DbPlayer"); string epGame = config.GetStringOrDefault("EpGame"); this.EpGame = CreateEndPoint(epGame); string epGM = config.GetStringOrDefault("EpGM"); this.EpGM = CreateEndPoint(epGM); string epGMM = config.GetStringOrDefault("EpGMM"); this.EpGMM = CreateEndPoint(epGMM); string epShip = config.GetStringOrDefault("EpShip"); this.EpShip = CreateEndPoint(epShip); this.MaxClient = config.GetIntOrDefault("MaxClient", 500); this.SendQueueSize = config.GetIntOrDefault("SendQueueSize", 100); this.MaxLevel = config.GetIntOrDefault("MaxLevel", 100); this.MaxNameLen = config.GetIntOrDefault("MaxNameLen", 16); this.Zoneid = config.GetIntOrDefault("Zoneid"); this.ZoneEpoch = config.GetUtcTimeOrDefault("ZoneEpoch"); this.DesKey = config.GetStringOrDefault("DESKey"); this.LoginKey = config.GetStringOrDefault("LoginKey") ?? config.GetStringOrDefault("MD5Key"); this.RechargeKey = config.GetStringOrDefault("RechargeKey"); this.GMKey = config.GetStringOrEmpty("GMKey"); this.ReportSIP = config.GetStringOrDefault("ReportSIP"); this.WebAddress = config.GetStringOrDefault("WebAddress"); this.FreeCoin = config.GetBooleanOrDefault("FreeCoin", false); }
/// <summary> /// 获取目的地 /// </summary> /// <param name="point"></param> static Destination InitDestination(Variant point) { if (point != null) { string sceneB = point.GetStringOrDefault("SceneB"); if (!string.IsNullOrEmpty(sceneB)) { return new Destination( sceneB, point.GetIntOrDefault("X"), point.GetIntOrDefault("Y")); } } return null; }
/// <summary> /// 交换信息 /// </summary> /// <param name="v0"></param> /// <param name="v1"></param> private bool Swap(Variant v0, Variant v1) { bool isin = false; Variant v = new Variant(); if (v0.GetIntOrDefault("P") > 3 || v1.GetIntOrDefault("P") > 3) isin = true; foreach (string k in v0.Keys) { v.Add(k, v0[k]); } v0["E"] = v1["E"]; v0["G"] = v1["G"]; v0["S"] = v1["S"]; v0["H"] = v1["H"]; v0["A"] = v1["A"]; v0["D"] = v1["D"]; v0["R"] = v1["R"]; v0["T"] = v1["T"]; v1["E"] = v["E"]; v1["G"] = v["G"]; v1["S"] = v["S"]; v1["H"] = v["H"]; v1["A"] = v["A"]; v1["D"] = v["D"]; v1["R"] = v["R"]; v1["T"] = v["T"]; return isin; }
/// <summary> /// 被祝福者得到的道具与数量 /// </summary> /// <param name="beBless"></param> /// <param name="count"></param> /// <returns></returns> private static string BeBless(Variant beBless, out int count) { int min = beBless.GetIntOrDefault("Min"); int max = beBless.GetIntOrDefault("Max"); Variant goods = beBless.GetValueOrDefault<Variant>("GoodsID"); int rate = NumberRandom.Next(0, 100); string goodsid = ""; foreach (var k in goods) { string[] strs = k.Value.ToString().Split('-'); int m = Convert.ToInt32(strs[0]); int n = Convert.ToInt32(strs[1]); if (rate >= m && rate <= n) { goodsid = k.Key; break; } } count = NumberRandom.Next(min, max + 1); return goodsid; }
/// <summary> /// 得到一种道具,判断需要多少格子 /// </summary> /// <param name="Content">包袱列表</param> /// <param name="goodsid">道具id</param> /// <param name="number0">非绑定道具数量</param> /// <param name="number1">绑定道具数量</param> /// <returns>需要空格子数量</returns> public static int NeedSpace(IList Content, string goodsid, Variant v, int sc) { int space = 0; for (int isbinding = 0; isbinding <= 1; isbinding++) { //0为非绑定,1为绑定 int number = v.GetIntOrDefault("Number" + isbinding); if (number <= 0) continue; int cur = 0;//当前该物品所占的格子数 foreach (Variant k in Content) { if (k.GetStringOrDefault("G") != goodsid) continue; if (k.GetIntOrDefault("H") != isbinding) continue; if (v.ContainsKey("EndTime")) { Variant t = k.GetVariantOrDefault("T"); if (t == null) continue; if (t.GetStringOrDefault("EndTime") != v.GetStringOrDefault("EndTime")) continue; } number += k.GetIntOrDefault("A"); cur++; } int m = 0;//余数 int n = Math.DivRem(number, sc, out m); n = m > 0 ? n + 1 : n; space += (n > cur) ? (n - cur) : 0; } return space; }
private void CreateAction(FightObject[] targetTeam, Variant v, int fightCount) { int actionType = v.GetIntOrDefault("ActionType"); FightAction action = new FightAction((ActionType)actionType, this.ID, 0); action.Parameter = v.GetStringOrDefault("Parameter"); action.SkillLev = v.GetIntOrDefault("Level", 1); //Target 1 自己 //Target 2 队友n //Target 3 敌人n //Target 4 随机友方(n) //Target 5 随机敌人(n) //Target 6 血量最少的敌人(n) int actionTarget = v.GetIntOrDefault("ActionTarget"); if (actionTarget <= 1) { action.Target = this.ID; } else if (actionTarget == 4 || actionTarget == 2) { int index = Sinan.Extensions.NumberRandom.Next(Team.Length); action.Target = Team[index].ID; } else if (actionTarget == 5 || actionTarget == 3) { int index = Sinan.Extensions.NumberRandom.Next(targetTeam.Length); action.Target = targetTeam[index].ID; } else if (actionTarget == 6) { int min = Int32.MaxValue; foreach (var target in targetTeam) { if (target.HP > 0 && target.HP < min) { action.Target = target.ID; } } } else { action.Target = string.Empty; } action.Say = NewTalk(v.GetVariantOrDefault("Talk")); action.FightCount = fightCount; this.m_action = action; }
/// <summary> /// 设置降生信息 /// </summary> public void SetBirthInfo(Variant d) { this.Coin = d.GetInt64OrDefault("Coin"); this.Score = d.GetInt64OrDefault("Score"); this.Bond = d.GetInt64OrDefault("Bond"); this.SceneID = d.GetStringOrDefault("SceneID"); this.X = d.GetIntOrDefault("X"); this.Y = d.GetIntOrDefault("Y"); this.Body = d.GetStringOrDefault("Body"); this.Weapon = d.GetStringOrDefault("Weapon"); this.Mount = d.GetStringOrDefault("Mount"); this.Coat = d.GetStringOrDefault("Coat"); this.IsCoat = d.GetBooleanOrDefault("IsCoat"); }