/// <summary> /// 序列化行为树 /// </summary> /// <param name="data"></param> /// <param name="newBehaviorSource"></param> /// <returns></returns> public static void Serialize(SkillData data, out string str, out string str_ui) { System.Text.StringBuilder _str = new System.Text.StringBuilder(); System.Text.StringBuilder _str_ui = new System.Text.StringBuilder(); _str_ui.AppendFormat("<skill id=\"{0}\" name=\"{1}\">\r\n", data.Id, data.Name); _str.AppendFormat("<skill id=\"{0}\" name=\"{1}\" cd=\"{2}\">\r\n", data.Id, data.Name, data.CD.ToString()); System.Text.StringBuilder _str_var = new StringBuilder(); _str_var.Append("<variables>\r\n"); foreach (var item in data.Variables) { _str_var.AppendFormat("<var type=\"{0}\" name=\"{1}\" />\r\n", item.Value.ValueType.ToString(), item.Key); } //for (int i = 0; i < data.Variables.Count; i++) //{ // _str_var.AppendFormat("<var type=\"{0}\" name=\"{1}\" />\r\n", data.Variables[i].ValueType.ToString(), data.Variables[i].name); //} _str_var.Append("</variables>\r\n"); _str.Append(_str_var.ToString()); for (int i = 0; i < data.Datas.Count; i++) { _str.Append(Data_ToString(SerializeTask_Data(data.Datas[i])));//序列化内容 _str_ui.Append(UI_ToString(SerializeTask_UI(data.Datas[i])));//序列化UI相关 } _str_ui.Append("</skill>\r\n"); _str.Append("</skill>\r\n"); str = _str.ToString(); str_ui = _str_ui.ToString(); }
public SkillName(string file) { try { using (L2BinaryReader reader = new L2BinaryReader(File.OpenRead(file))) { Data = new SkillData[reader.ReadInt32()]; for (uint i = 0; i < Data.Length; i++) { SkillData data = new SkillData(); data.Id = reader.ReadUInt32(); data.Level = reader.ReadUInt32(); data.Name = reader.ReadString(); data.Description = reader.ReadString(); data.AdditionalDescription = reader.ReadString(); data.AdditionalDescription2 = reader.ReadString(); Data[i] = data; } reader.Validate(); } } catch (Exception) { Data = null; throw new InvalidDataException(ParsingFailed); } }
public void SetSettingsBy(SkillData data, Skill skill) { InstanceMaterial.SetTexture("_MainTexture",data.Image.texture); CoolDown = data.CoolDown; Cost = data.Cost; Skill = skill; }
protected Skill_Framework_old() { _dataWorking = new SkillData(); FillSkillData(); // abstract _dataDefault = (SkillData)_dataWorking.Clone(); initTimers(); _playerLevelCurrent = 1; }
protected Skill_Framework_old(SkillData dataWorking) { _dataWorking = dataWorking; _dataDefault = (SkillData) _dataWorking.Clone(); _timerCooldown = new FwTimer(TimeCooldown); // for timer init _timerBlock = new FwTimer(_dataDefault.TimeBlocked); // remade to this class property _playerLevelCurrent = 1; }
public MenkoBattleData(uint id, bool isPlayer, bool isRepresent) { this.isRepresent = isRepresent; this.isPlayer = isPlayer; baseData = AssetManager.Load(AssetPath.GetMonsterDataPath(id)).Asset as MenkoData; skillData = AssetManager.Load(AssetPath.GetSkillDataPath(baseData.Character.SkillID)).Asset as SkillData; status = new BattleStatus(baseData.Status, skillData); }
public BattleStatus(MenkoStatus status, SkillData skillData) { this.status = status; this.skillData = skillData; this.percent = 0; this.skillEnergy = 0; this.isDead = false; variables = new BattleParams(); }
public static Type GetType(SkillData.Element offender, SkillData.Element defender) { if (IsStrong(offender, defender)) { return Type.Strong; } else if (IsWeak(offender, defender)) { return Type.Weak; } return Type.Normal; }
public override void Deserialize(XmlNode node, SkillData _data) { base.Deserialize(node, _data); string[] data = Base_Obj.Split('-'); if (data!=null&&data.Length>0) { Base_Obj = data[1]; BaseObj = _data.GetVariable(data[1]) as SharedGameObject; BaseObj.IsShared = true; } }
private Color GetColor(SkillData.Element type) { switch(type) { case SkillData.Element.Fire: return Color.red; case SkillData.Element.Water: return Color.blue; case SkillData.Element.Wind: return Color.green; } return Color.red; }
private static bool IsWeak(SkillData.Element offender, SkillData.Element defender) { switch(offender) { case SkillData.Element.Fire: return defender == SkillData.Element.Water; case SkillData.Element.Water: return defender == SkillData.Element.Wind; case SkillData.Element.Wind: return defender == SkillData.Element.Fire; } return false; }
void DragBanKuai(SkillData data,RaycastHit hit) { Collider col = hit.collider; if (null != col && null != col.gameObject) { if (col.gameObject == gameObject || col.transform.IsChildOf (transform)) { if(data.type.ToString().Contains("Seal")) { Messenger.Broadcast (GameEventType.SealDragBanKuai, gameObject , (int)data.type % 10); data.SetCD (); } else if(data.type == SkillType.Skill2) { Messenger.Broadcast (GameEventType.SkillDragBanKuai, gameObject); } } } }
public void Show(SkillData data) { GameObject effect = (GameObject)Resources.Load("effect/prefab/" + data.effectName); if (effect == null) { Debug.LogError("effect name is bad: " + data.effectName); return; } GameObject obj = Instantiate(effect, transform.position + new Vector3(0, 0, 0), Quaternion.identity) as GameObject; obj.transform.transform.Rotate(data.rotationX, 0, 0); obj.transform.position = new Vector3(data.positionRight, data.positionUp, obj.transform.position.z - data.positionFront); obj.transform.SetParent(transform); obj.AddComponent<Effect>().SetAliveTime(data.aliveTime); if (data.skillIconId != 0) { icon.Show(data.skillIconId, data.skillIconWidth, data.skillIconHeight); } }
public Skill(GeneralSoldier soldier, int id) { if (id == 0) { return; } skillId = id; // 数据 _skillData = new SkillData(id); mountPoint = getBindType(0);//(_skillData.Skill.getBindType()); _eman = soldier; //加载技能所需要的特效 loadSkllResource(); setInstance(); }
public static Task DeserializeTask(XmlNode dataui, XmlNode data,SkillData _data) { string type_str = dataui.Attributes["ObjectType"].Value; Type type = Type.GetType(type_str); if (type == null) { type = Type.GetType(string.Format("{0}, Assembly-CSharp", type_str as string)); } if (type == null) { type = Type.GetType(string.Format("{0}, Assembly-CSharp-firstpass", type_str as string)); } if (type == null) { type = Type.GetType(string.Format("{0}, Assembly-UnityScript", type_str as string)); } if (type == null) { type = Type.GetType(string.Format("{0}, Assembly-UnityScript-firstpass", type_str as string)); } Task task = (ScriptableObject.CreateInstance(type) as Task); task.hideFlags = HideFlags.HideAndDontSave; task.NodeData = new DesignerNodeData(); task.NodeData.deserialize_ui(dataui); task.Deserialize(data, _data); List<TaskOutLink> datas = new List<TaskOutLink>(); task.GetOutLinks(datas); task.OutLinks = new Dictionary<string, TaskOutLink>(); for (int i = 0; i < datas.Count; i++) { task.OutLinks.Add(datas[i].name, datas[i]); } for (int i = 0; i < dataui.ChildNodes.Count; i++) { TaskOutLink item = task.OutLinks[dataui.ChildNodes[i].Name]; for (int j = 0; j < dataui.ChildNodes[i].ChildNodes.Count; j++) { XmlNode k = data.ParentNode.SelectSingleNode(@"*[@id=" + dataui.ChildNodes[i].ChildNodes[j].Attributes["ID"].Value + "]"); item.Childs.Add(DeserializeTask(dataui.ChildNodes[i].ChildNodes[j], k, _data)); } } return task; }
/// <summary> /// 加载一个数据源 /// </summary> /// <param name="data"></param> public void Load(SkillData _data) { data = _data; for(int i=0;i<data.Datas.Count;i++) { data.Datas[i].Init(); } }
public override void ParseCSV(CsvStream csvStream) { SkillData tableSample = new SkillData(); tableSample.Load(csvStream); m_DataDic[tableSample.index] = tableSample; }
public Skill213(CardFighter card, SkillData skillData, int[] skillParam) : base(card, skillData, skillParam) { }
private EnemyData(int hp, SkillData.Element element) { this.hp = hp; this.element = element; }
public void Release() { _skillsData.Release(); _skillsData = new SkillData(); }
protected override void InitConfig(SkillData skillData) { base.InitConfig(skillData); damage = skillLevel * skillData.param1; }
protected override int ExecInternal() { if (ArgNum != 4 && ArgNum != 5) { throw new EventErrorException(this, "SetSkillコマンドの引数の数が違います"); } var pname = GetArgAsString(2); if (SRC.PList.IsDefined(pname)) { pname = SRC.PList.Item(pname).ID; } else if (SRC.PDList.IsDefined(pname)) { pname = SRC.PDList.Item(pname).Name; } else { throw new EventErrorException(this, "「" + pname + "」というパイロットが見つかりません"); } var sname = GetArgAsString(3); var slevel = GetArgAsDouble(4); var sdata = ""; if (ArgNum == 5) { sdata = GetArgAsString(5); } // エリアスが定義されている? var sList = new List <SkillData>(); if (SRC.ALDList.IsDefined(sname)) { { var alias = SRC.ALDList.Item(sname); foreach (var elm in alias.Elements) { var sd = new SkillData(); sList.Add(sd); if (GeneralLib.LIndex(elm.strAliasData, 1) == "解説") { if (string.IsNullOrEmpty(sdata)) { sd.Name = elm.strAliasType; } else { sd.Name = GeneralLib.LIndex(sdata, 1); } if (slevel == 0d) { sd.Level = 0d; } else { sd.Level = Constants.DEFAULT_LEVEL; } sd.StrData = elm.strAliasData; } else { sd.Name = elm.strAliasType; if (slevel == -1) { sd.Level = elm.dblAliasLevel; } else if (elm.blnAliasLevelIsPlusMod) { sd.Level = slevel + elm.dblAliasLevel; } else if (elm.blnAliasLevelIsMultMod) { sd.Level = slevel * elm.dblAliasLevel; } else { sd.Level = slevel; } if (string.IsNullOrEmpty(sdata)) { sd.StrData = elm.strAliasData; } else { sd.StrData = Strings.Trim(sdata + " " + GeneralLib.ListTail(elm.strAliasData, 2)); } if (elm.blnAliasLevelIsPlusMod || elm.blnAliasLevelIsPlusMod) { sd.StrData = Strings.Trim(GeneralLib.LIndex(sd.StrData, 1) + "Lv" + SrcFormatter.Format(slevel) + " " + GeneralLib.ListTail(sd.StrData, 2)); } } } } } else { sList.Add(new SkillData { Name = sname, Level = slevel, StrData = sdata, }); } foreach (var sd in sList) { sname = sd.Name; slevel = sd.Level; sdata = sd.StrData; if (string.IsNullOrEmpty(sname)) { continue; } string slist; // アビリティ一覧表示用にSetSkillが適用された能力の一覧用変数を作成 if (!Expression.IsGlobalVariableDefined("Ability(" + pname + ")")) { Expression.DefineGlobalVariable("Ability(" + pname + ")"); slist = sname; } else { slist = Conversions.ToString(Event.GlobalVariableList["Ability(" + pname + ")"].StringValue); if (!GeneralLib.ToL(slist).Contains(sname)) { slist = slist + " " + sname; } } Expression.SetVariableAsString("Ability(" + pname + ")", slist); // 今回SetSkillが適用された能力sname用変数を作成 var vname = "Ability(" + pname + "," + sname + ")"; if (!Expression.IsGlobalVariableDefined(vname)) { Expression.DefineGlobalVariable(vname); } if (!string.IsNullOrEmpty(sdata)) { // 別名指定があった場合 Expression.SetVariableAsString(vname, SrcFormatter.Format(slevel) + " " + sdata); // 必要技能用 if (sdata != "非表示" && GeneralLib.LIndex(sdata, 1) != "解説") { vname = "Ability(" + pname + "," + GeneralLib.LIndex(sdata, 1) + ")"; if (!Expression.IsGlobalVariableDefined(vname)) { Expression.DefineGlobalVariable(vname); } Expression.SetVariableAsString(vname, SrcFormatter.Format(slevel)); } } else { Expression.SetVariableAsString(vname, SrcFormatter.Format(slevel)); } } // パイロットやユニットのステータスをアップデート if (SRC.PList.IsDefined(pname)) { { var withBlock1 = SRC.PList.Item(pname); withBlock1.Update(); if (withBlock1.Unit is object) { withBlock1.Unit.Update(); if (withBlock1.Unit.Status == "出撃") { SRC.PList.UpdateSupportMod(withBlock1.Unit); } } } } return(EventData.NextID); }
/// <summary> /// Stops the skill. /// </summary> public void StopSkill() { canUseSkill = true; currentSkill = null; singTimeout = 0; if (!flying) { states = "normal"; } }
private static System.Collections.IEnumerator OnNewInit(object objd) { Object obj = ResManager.Instance.LoadObject("ServerSetting", "GlobalRes/ServerSetting/", ResType.GlobalRes, typeof(TextAsset)); if (obj == null) { InitLogic.SetInitFailed(); yield break; } TextAsset ta = obj as TextAsset; XmlDocument doc = new XmlDocument(); doc.LoadXml(ta.text); XmlNode pConfig = doc.SelectSingleNode("Config"); XmlNode verNode = pConfig.SelectSingleNode("ServerVersion"); XmlNode comboNode = pConfig.SelectSingleNode("Combo"); XmlNode energyNode = pConfig.SelectSingleNode("Energy"); XmlNode cannonNode = pConfig.SelectSingleNode("Cannon"); XmlNode skillNode = pConfig.SelectSingleNode("Skill"); XmlNode rateNode = pConfig.SelectSingleNode("Rate"); XmlNode fishNode = pConfig.SelectSingleNode("Fish"); XmlNode rankNode = pConfig.SelectSingleNode("Rank"); XmlNode dstNode = pConfig.SelectSingleNode("FishDeadTime"); if (verNode == null || comboNode == null || energyNode == null || skillNode == null || rateNode == null || cannonNode == null || fishNode == null || rankNode == null || dstNode == null) { LogMgr.Log("ServerSetting load failed."); InitLogic.SetInitFailed(); yield break; } if (energyNode.ChildNodes.Count != cannonNode.ChildNodes.Count) { LogMgr.Log("energyNode<>cannonNode"); InitLogic.SetInitFailed(); yield break; } int nFishs = 0; int nFishValues = 0; LauncherInfo [] plauncherinfo; yield return(new WaitForEndOfFrame()); Attribute(verNode, "wonderful_base", ref ExtraSetting.WonderFulBase); /////Ver //Attribute(verNode, "maxfish", ref FishSetting.FISH_MAX_NUM); //Attribute(verNode, "maxbullet", ref BulletSetting.BULLET_MAX_NUM); /////Combo Attribute(comboNode, "sustain_time", ref DoubleHit.IntervalTime); Attribute(comboNode, "buff_cycle", ref DoubleHit.MaxTimes); ////Cannon int launcherCount = energyNode.ChildNodes.Count; plauncherinfo = new LauncherInfo[launcherCount]; LauncherSetting.LauncherDataList = new LauncherData[launcherCount]; for (int i = 0; i < launcherCount; ++i)//from energy { LauncherData ld = new LauncherData(); XmlNode node = energyNode.ChildNodes[i]; Attribute(node, "id", ref ld.ID); Attribute(node, "cditme", ref ld.LaserCDTime); Attribute(node, "speed", ref ld.LaserReduction.Speed); Attribute(node, "time1", ref ld.LaserReduction.Duration1); Attribute(node, "time2", ref ld.LaserReduction.Duration2); Attribute(node, "time3", ref ld.LaserReduction.Duration3); LauncherInfo Item = new LauncherInfo(); Attribute(node, "mincatch", ref Item.nmincatch); Attribute(node, "maxcatch", ref Item.nmaxcatch); Attribute(node, "revise", ref Item.nrevise); Attribute(node, "energyratio", ref Item.denergyratio); if (LauncherSetting.LauncherDataList[ld.ID] != null) { LogMgr.Log("Exist the same launcher id."); InitLogic.SetInitFailed(); yield break; } LauncherSetting.LauncherDataList[ld.ID] = ld; plauncherinfo[ld.ID] = Item; } yield return(new WaitForEndOfFrame()); for (int i = 0; i < launcherCount; ++i)//from cannon { XmlNode node = cannonNode.ChildNodes[i]; byte byid = 0; Attribute(node, "id", ref byid); LauncherData ld = LauncherSetting.LauncherDataList[byid]; ld.name = node.Attributes["name"].Value; Attribute(node, "launcherinterval", ref ld.Interval); Attribute(node, "consume", ref ld.Consume); Attribute(node, "bulletspeed", ref ld.Speed); Attribute(node, "itemid", ref ld.nItemid); Attribute(node, "itemcount", ref ld.nItemcount); Attribute(node, "skill", ref ld.nSkillBind); if (byid == (byte)LauncherType.LAUNCHER_4)//4号炮特有 { Attribute(node, "speed", ref BulletSetting.FreezeBulletReduction.Speed); Attribute(node, "time1", ref BulletSetting.FreezeBulletReduction.Duration1); Attribute(node, "time2", ref BulletSetting.FreezeBulletReduction.Duration2); Attribute(node, "time3", ref BulletSetting.FreezeBulletReduction.Duration3); } } yield return(new WaitForEndOfFrame()); /////SkillInfo int skillCount = skillNode.ChildNodes.Count; SkillSetting.SkillDataList = new SkillData[skillCount]; for (int i = 0; i < skillCount; ++i) { SkillData sd = new SkillData(); XmlNode node = skillNode.ChildNodes[i]; Attribute(node, "id", ref sd.ID); sd.name = node.Attributes["name"].Value; Attribute(node, "cditme", ref sd.CDTime); Attribute(node, "goodsid", ref sd.ItemId); Attribute(node, "multiple", ref sd.multiple); Attribute(node, "speed", ref sd.Reduction.Speed); Attribute(node, "time1", ref sd.Reduction.Duration1); Attribute(node, "time2", ref sd.Reduction.Duration2); Attribute(node, "time3", ref sd.Reduction.Duration3); string szInfo = ""; Attribute(node, "goodsconsume", ref szInfo); if (szInfo.Length > 0) { string[] pConsume = szInfo.Split(' '); for (int index = 0; index < pConsume.Length; index += 2) { SkillConsume pskill = new SkillConsume(); pskill.byorder = System.Convert.ToByte(pConsume[index]); pskill.byCount = System.Convert.ToByte(pConsume[index + 1]); sd.NumRequire.Add(pskill); } } if (SkillSetting.SkillDataList[sd.ID] != null) { LogMgr.Log("Exist the same skill id."); InitLogic.SetInitFailed(); yield break; } SkillSetting.SkillDataList[sd.ID] = sd; } yield return(new WaitForEndOfFrame()); //Rate int rateCount = rateNode.ChildNodes.Count; BulletSetting.BulletRate = new ushort[rateCount]; BulletSetting.RateUnlock = new ushort[rateCount]; BulletSetting.RateReward = new ushort[rateCount]; for (int i = 0; i < rateCount; ++i) { XmlNode node = rateNode.ChildNodes[i]; byte byid = 0; Attribute(node, "id", ref byid); Attribute(node, "value", ref BulletSetting.BulletRate[byid]); Attribute(node, "unlock", ref BulletSetting.RateUnlock[byid]); Attribute(node, "unlockreward", ref BulletSetting.RateReward[byid]); } //Fish int fishCount = fishNode.ChildNodes.Count; FishSetting.FishDataList = new FishData[fishCount]; for (int i = 0; i < fishCount; ++i) { XmlNode node = fishNode.ChildNodes[i]; FishData fd = new FishData(); Attribute(node, "id", ref fd.ID); Attribute(node, "value", ref fd.Gold); fd.Name = node.Attributes["name"].Value; fd.Decl = node.Attributes["declare"].Value; if (FishSetting.FishDataList[fd.ID] != null) { LogMgr.Log("Exist the same fish id:" + fd.ID); InitLogic.SetInitFailed(); yield break; } FishSetting.FishDataList[fd.ID] = fd; byte maxcount = 0; Attribute(node, "maxcount", ref maxcount); nFishs += maxcount; nFishValues += maxcount * fd.Gold; } FishSetting.SortByGold(); yield return(new WaitForEndOfFrame()); //Rank int nRank = rankNode.ChildNodes.Count; Experience.Exp = new uint[nRank]; for (int i = 0; i < nRank; i++) { XmlNode node = rankNode.ChildNodes[i]; byte byid = 0; Attribute(node, "id", ref byid); Attribute(node, "experience", ref Experience.Exp[byid]); } /// //FishDeadTime FishDeadTimeData ftd = new FishDeadTimeData(); Attribute(dstNode, "TianZai_DouDong", ref ftd.TianZai_DouDong_Time);//float.Parse(fishDeadNode.ChildNodes[0].FirstChild.Value); Attribute(dstNode, "TianZai_Stay_Min", ref ftd.TianZai_Stay_Time1); Attribute(dstNode, "TianZai_Stay_Max", ref ftd.TianZai_Stay_Time2); Attribute(dstNode, "TianZai_Dead_Min", ref ftd.TianZai_Dead_Time1); Attribute(dstNode, "TianZai_Dead_Max", ref ftd.TianZai_Dead_Time2); Attribute(dstNode, "Bullet_BingDong_Dead_Min", ref ftd.Bullet_BingDong_Dead_Time1); Attribute(dstNode, "Bullet_BingDong_Dead_Max", ref ftd.Bullet_BingDong_Dead_Time2); Attribute(dstNode, "BingDong_Dead_Min", ref ftd.BingDong_Dead_Time1); Attribute(dstNode, "BingDong_Dead_Max", ref ftd.BingDong_Dead_Time2); Attribute(dstNode, "ShanDian_Dead_Min", ref ftd.ShanDian_Dead_Time1); Attribute(dstNode, "ShanDian_Dead_Max", ref ftd.ShanDian_Dead_Time2); Attribute(dstNode, "LongJuanFeng_Dead_Min", ref ftd.LongJuanFeng_Dead_Time1); Attribute(dstNode, "LongJuanFeng_Dead_Max", ref ftd.LongJuanFeng_Dead_Time2); Attribute(dstNode, "JiGuang_Stay_Time", ref ftd.JiGuang_Stay_Time); Attribute(dstNode, "JiGuang_Dead_Min", ref ftd.JiGuang_Dead_Time1); Attribute(dstNode, "JiGuang_Dead_Max", ref ftd.JiGuang_Dead_Time2); Attribute(dstNode, "ShandDian_Speed", ref ftd.ShandDian_Speed); Attribute(dstNode, "JiGuang_Speed", ref ftd.JiGuang_Speed); Attribute(dstNode, "JiGuang_BingDong_Speed", ref ftd.JiGuang_BingDong_Speed); Attribute(dstNode, "TianZai_Speed", ref ftd.TianZai_Speed); Attribute(dstNode, "BingDong_Speed", ref ftd.BingDong_Speed); FishSetting.FishDeadTime = ftd; //cal for (int i = 0; i < launcherCount; i++) { LauncherInfo item = plauncherinfo[i]; item.nincome = (ushort)((item.nmincatch + item.nmaxcatch) / 2.0f / nFishs * nFishValues + item.nrevise); LauncherSetting.LauncherDataList[i].Energy = (ushort)(item.nincome * item.denergyratio);//大招 } yield return(new WaitForEndOfFrame()); int roomCount = 4; ExtraSetting.RoomDataList = new RoomData[roomCount]; for (int i = 0; i < roomCount; ++i) { RoomData rd = new RoomData(); rd.RoomID = (byte)i; rd.RoomRateIdx = (byte)i; ExtraSetting.RoomDataList[i] = rd; } //XmlNode childNode = pConfig.SelectSingleNode("RoomInfo"); //if (childNode == null) //{ // LogMgr.Log("RoomInfo not found."); // InitLogic.SetInitFailed(); // yield break; //} //int roomCount = childNode.ChildNodes.Count; //ExtraSetting.RoomDataList = new RoomData[roomCount]; //for (int i = 0; i < roomCount; ++i) //{ // RoomData rd = new RoomData(); // rd.RoomID = byte.Parse(childNode.ChildNodes[i].Attributes["id"].Value); // rd.RoomRateIdx = byte.Parse(childNode.ChildNodes[i].FirstChild.Value); // if (ExtraSetting.RoomDataList[rd.RoomID] != null) // { // LogMgr.Log("Exist the same room id."); // InitLogic.SetInitFailed(); // yield break; // } // ExtraSetting.RoomDataList[rd.RoomID] = rd; //} ResManager.Instance.UnloadObject(obj); InitLogic.EndInit(); }
private IEnumerable <PlayerData> GetPlayerData(Log log, GW2ApiData apiData) { var players = log.Agents.OfType <Player>().ToArray(); var deathCounts = players.ToDictionary(x => x, x => 0); var downCounts = players.ToDictionary(x => x, x => 0); var usedSkills = players.ToDictionary(x => x, x => new HashSet <Skill>()); foreach (var deadEvent in log.Events.OfType <AgentDeadEvent>().Where(x => x.Agent is Player)) { var player = (Player)deadEvent.Agent; deathCounts[player]++; } foreach (var downEvent in log.Events.OfType <AgentDownedEvent>().Where(x => x.Agent is Player)) { var player = (Player)downEvent.Agent; downCounts[player]++; } // Buff damage events only tell us which conditions/buffs, not what skill actually applied them foreach (var damageEvent in log.Events.OfType <PhysicalDamageEvent>().Where(x => x.Attacker is Player)) { var player = (Player)damageEvent.Attacker; usedSkills[player].Add(damageEvent.Skill); } foreach (var activationEvent in log.Events.OfType <SkillCastEvent>().Where(x => x.Agent is Player)) { var player = (Player)activationEvent.Agent; usedSkills[player].Add(activationEvent.Skill); } var playerData = new List <PlayerData>(); foreach (var player in players) { HashSet <SkillData> utilitySkills = null; HashSet <SkillData> healingSkills = null; HashSet <SkillData> eliteSkills = null; if (apiData != null) { utilitySkills = new HashSet <SkillData>(); healingSkills = new HashSet <SkillData>(); eliteSkills = new HashSet <SkillData>(); foreach (var usedSkill in usedSkills[player]) { var skillData = apiData.GetSkillData(usedSkill); // Skills may be also registered as used if they affect other players and do damage through them if (skillData != null && skillData.Professions.Contains(player.Profession)) { if (skillData.Slot == SkillSlot.Elite) { eliteSkills.Add(skillData); } else if (skillData.Slot == SkillSlot.Utility) { utilitySkills.Add(skillData); } else if (skillData.Slot == SkillSlot.Heal) { healingSkills.Add(skillData); } } } } WeaponType land1Weapon1 = WeaponType.Other; WeaponType land1Weapon2 = WeaponType.Other; WeaponType land2Weapon1 = WeaponType.Other; WeaponType land2Weapon2 = WeaponType.Other; IEnumerable <SkillData> land1WeaponSkills = null; IEnumerable <SkillData> land2WeaponSkills = null; // TODO: Dual wield skill handling for Thieves if (apiData != null) { WeaponSet currentWeaponSet = WeaponSet.Unknown; // We are only interested in land weapons. This may be imperfect if started on an underwater set. var firstWeaponSwap = log.Events.OfType <AgentWeaponSwapEvent>().FirstOrDefault(x => x.NewWeaponSet == WeaponSet.Land1 || x.NewWeaponSet == WeaponSet.Land2); if (firstWeaponSwap == null) { currentWeaponSet = WeaponSet.Land1; } else { // First weapon set is the other one than the first swap swaps to (unless it was an underwater one) currentWeaponSet = firstWeaponSwap.NewWeaponSet == WeaponSet.Land1 ? WeaponSet.Land2 : WeaponSet.Land1; } foreach (var logEvent in log.Events) { if (logEvent is AgentWeaponSwapEvent weaponSwapEvent && weaponSwapEvent.Agent == player) { currentWeaponSet = weaponSwapEvent.NewWeaponSet; continue; } SkillData skillData = null; if (logEvent is StartSkillCastEvent castEvent && castEvent.Agent == player) { skillData = apiData.GetSkillData(castEvent.Skill); } if (skillData != null) { if (skillData.Professions.Contains(player.Profession) && skillData.Type == SkillType.Weapon) { if (skillData.WeaponType.IsTwoHanded() || skillData.Slot == SkillSlot.Weapon1 || skillData.Slot == SkillSlot.Weapon2 || skillData.Slot == SkillSlot.Weapon3) { if (currentWeaponSet == WeaponSet.Land1) { land1Weapon1 = skillData.WeaponType; } else if (currentWeaponSet == WeaponSet.Land2) { land2Weapon1 = skillData.WeaponType; } } if (skillData.WeaponType.IsTwoHanded() || skillData.Slot == SkillSlot.Weapon4 || skillData.Slot == SkillSlot.Weapon5) { if (currentWeaponSet == WeaponSet.Land1) { land1Weapon2 = skillData.WeaponType; } else if (currentWeaponSet == WeaponSet.Land2) { land2Weapon2 = skillData.WeaponType; } } } } } land1WeaponSkills = GameSkillDataRepository .GetWeaponSkillIds(player.Profession, land1Weapon1, land1Weapon2) .Select(x => x == -1 ? null : apiData.GetSkillData(x)); land2WeaponSkills = GameSkillDataRepository .GetWeaponSkillIds(player.Profession, land2Weapon1, land2Weapon2) .Select(x => x == -1 ? null : apiData.GetSkillData(x)); } if (apiData != null) { var skillDetections = SkillDetections.GetSkillDetections(player.Profession).ToArray(); foreach (var e in log.Events) { foreach (var detection in skillDetections) { if (detection.Detection.IsDetected(player, e)) { var skill = apiData.GetSkillData(detection.SkillId); if (detection.Slot == SkillSlot.Utility) { utilitySkills.Add(skill); } else if (detection.Slot == SkillSlot.Heal) { healingSkills.Add(skill); } else if (detection.Slot == SkillSlot.Elite) { eliteSkills.Add(skill); } } } } } var ignoredSkills = SkillDetections.GetIgnoredSkillIds(player.Profession); healingSkills?.RemoveWhere(x => ignoredSkills.Contains(x.Id)); utilitySkills?.RemoveWhere(x => ignoredSkills.Contains(x.Id)); eliteSkills?.RemoveWhere(x => ignoredSkills.Contains(x.Id)); var specializationDetections = SpecializationDetections.GetSpecializationDetections(player.Profession).ToArray(); var badges = new List <PlayerBadge>(); var specializations = new HashSet <CoreSpecialization>(); foreach (var e in log.Events) { foreach (var detection in specializationDetections) { if (detection.Detection.IsDetected(player, e)) { specializations.Add(detection.Specialization); } } } foreach (var spec in specializations.OrderBy(x => x.ToString())) { badges.Add(new PlayerBadge(spec.ToString(), BadgeType.Specialization)); } var rotation = RotationCalculator.GetRotation(log, player); var data = new PlayerData(player, downCounts[player], deathCounts[player], rotation, usedSkills[player], healingSkills, utilitySkills, eliteSkills, land1Weapon1, land1Weapon2, land2Weapon1, land2Weapon2, land1WeaponSkills, land2WeaponSkills, badges); playerData.Add(data); } return(playerData); }
public void RandomizeTrees(Random random, Permutation permutation, SkillSplitter.Assignment split) { // >= 700: prosthetics // < 400: skills before mushin GameEditor editor = game.Editor; PARAM param = game.Params["SkillParam"]; // Orderings for skills which completely supersede each other. (For prosthetics, just use their natural id ordering) Dictionary <int, int> skillOrderings = new Dictionary <int, int> { [110] = 111, // Nightjar slash [210] = 211, // Ichimonji [310] = 311, // Praying Strikes }; Dictionary <int, ItemKey> texts = new Dictionary <int, ItemKey> { [0] = game.ItemForName("Shinobi Esoteric Text"), [1] = game.ItemForName("Prosthetic Esoteric Text"), [2] = game.ItemForName("Ashina Esoteric Text"), [3] = game.ItemForName("Senpou Esoteric Text"), // [4] = game.ItemForName("Mushin Esoteric Text"), }; SortedDictionary <ItemKey, string> names = game.Names(); string descName(int desc) { return(names[new ItemKey(ItemType.WEAPON, desc)]); } Dictionary <int, SkillData> allData = new Dictionary <int, SkillData>(); Dictionary <int, SkillSlot> allSlots = new Dictionary <int, SkillSlot>(); Dictionary <ItemKey, SkillData> skillItems = new Dictionary <ItemKey, SkillData>(); List <SkillData> skills = new List <SkillData>(); List <SkillSlot> skillSlots = new List <SkillSlot>(); List <SkillData> prosthetics = new List <SkillData>(); List <SkillSlot> prostheticSlots = new List <SkillSlot>(); bool explain = false; foreach (PARAM.Row r in param.Rows) { SkillData data = new SkillData { ID = (int)r.ID, Item = (int)r["SkilLDescriptionId"].Value, Equip = (int)r["Unk1"].Value, Flag = (int)r["EventFlagId"].Value, Placeholder = (int)r["Unk5"].Value, SpEffects = new[] { (int)r["Unk2"].Value, (int)r["Unk3"].Value }, EmblemChange = (byte)r["Unk10"].Value != 0, }; data.Key = new ItemKey(ItemType.WEAPON, data.Item); skillItems[data.Key] = data; SkillSlot slot = new SkillSlot { ID = (int)r.ID, Col = (short)r["MenuDisplayPositionIndexXZ"].Value, Row = (short)r["MenuDisplayPositionIndexY"].Value, Text = data.ID < 400 && texts.TryGetValue((byte)r["Unk7"].Value, out ItemKey text) ? text : null, }; if (explain) { Console.WriteLine($"{r.ID}: {data.Item}, {data.Equip}, {descName(data.Item)}"); } if (data.ID < 400) { skills.Add(data); skillSlots.Add(slot); } else if (data.ID >= 700) { prosthetics.Add(data); prostheticSlots.Add(slot); } allData[data.ID] = data; allSlots[slot.ID] = slot; } void applyData(PARAM.Row r, SkillData data) { r["SkilLDescriptionId"].Value = data.Item; r["EventFlagId"].Value = data.Flag; r["Unk1"].Value = data.Equip; r["Unk2"].Value = data.SpEffects[0]; r["Unk3"].Value = data.SpEffects[0]; r["Unk5"].Value = data.Placeholder; r["Unk10"].Value = (byte)(data.EmblemChange ? 1 : 0); } Shuffle(random, skills); Shuffle(random, skillSlots); Shuffle(random, prosthetics); Shuffle(random, prostheticSlots); // Skills rando if (split == null) { Dictionary <ItemKey, string> textWeight = new Dictionary <ItemKey, string>(); Dictionary <ItemKey, string> textLocations = texts.Values.ToDictionary(t => t, t => { SlotKey target = permutation.GetFiniteTargetKey(t); textWeight[t] = permutation.GetLogOrder(target); SlotAnnotation sn = ann.Slot(data.Location(target).LocScope); if (explain) { Console.WriteLine($"{game.Name(t)} in {sn.Area} - {sn.Text}. Lateness {(permutation.ItemLateness.TryGetValue(t, out double val) ? val : -1)}"); } return(sn.Area); });
protected override void InitConfig(SkillData skillData) { base.InitConfig(skillData); }
public static Boolean loadSkills() { if (!Constants.VFSSkip) { vfsDataProvider.Instance.unpackFromVFS("data\\script\\skills.scr", "data\\skills.scr"); } if (!File.Exists(AppDomain.CurrentDomain.BaseDirectory + "data/skills.scr")) { return(false); } int skills_count = 0; byte[] data = File.ReadAllBytes(AppDomain.CurrentDomain.BaseDirectory + "data/skills.scr"); byte meh = 0; int i = 0, position = 0, hop = 0, real_length = 0; while (position < data.Length) { hop = 0; for (i = 0; i < 4; i++) { meh = data[position + 1496 + i]; if (meh != 0x00) { hop = ((i + 1) * (8 * meh)); } } real_length = 1500 + hop; SkillData sData = new SkillData(); //ID sData.setID(BitConverter.ToInt32(data, position + 0)); //SKILLGROUP sData.setGroup(BitConverter.ToInt32(data, position + 4)); //CLASS sData.setChClass(BitConverter.ToInt16(data, position + 518)); //STAGE sData.setStage(data[position + 520]); //REQSKILL1 sData.setReqSkill1(BitConverter.ToInt32(data, position + 1280)); //REQSKILL2 sData.setReqSkill2(BitConverter.ToInt32(data, position + 1284)); //REQSKILL3 sData.setReqSkill3(BitConverter.ToInt32(data, position + 1288)); //SKILLPOINTS sData.setSkillPoints(BitConverter.ToInt32(data, position + 1292)); //LVL sData.setLvl(BitConverter.ToInt16(data, position + 1304)); //SPECIFICTYPE sData.setTypeSpecific(BitConverter.ToInt16(data, position + 1306)); //TARGETS sData.setTargets(BitConverter.ToInt16(data, position + 1330)); //GENERALTYPE sData.setTypeGeneral(BitConverter.ToInt16(data, position + 1332)); //FACTION sData.setFaction(BitConverter.ToInt32(data, position + 1340)); //NEEDSWEPTOCAST sData.setNeedsWepToCast(BitConverter.ToInt32(data, position + 1344)); //ULTISETID sData.setUltiSetID(BitConverter.ToInt32(data, position + 1348)); //ISCASTABLE sData.setIsCastable(Convert.ToBoolean(data[position + 1352])); //HEALCOST -signed sData.setHealCost(BitConverter.ToInt16(data, position + 1368)); //MANACOST -signed sData.setManaCost(BitConverter.ToInt16(data, position + 1370)); //STAMINACOST -signed sData.setStaminaCost(BitConverter.ToInt16(data, position + 1372)); //DMG sData.setDmg(BitConverter.ToInt32(data, position + 1390)); //SPEED sData.setSpeed(BitConverter.ToSingle(data, position + 1408)); if (real_length >= 1508) { //EFFID sData.setEffectID(0, data[position + 1500]); //EFFDURATION sData.setEffectDuration(0, data[position + 1502]); //EFFVALUE -signed sData.setEffectValue(0, data[position + 1504]); if (real_length >= 1516) { //EFFID sData.setEffectID(1, data[position + 1508]); //EFFDURATION sData.setEffectDuration(1, data[position + 1510]); //EFFVALUE -signed sData.setEffectValue(1, data[position + 1512]); if (real_length >= 1524) { //EFFID sData.setEffectID(2, data[position + 1516]); //EFFDURATION sData.setEffectDuration(2, data[position + 1518]); //EFFVALUE -signed sData.setEffectValue(2, data[position + 1520]); } } } SkillDataCache.Instance.addToSkills(sData.getID(), sData); skills_count++; position += real_length; } Logger.WriteLog(Logger.LogTypes.Info, "Loaded data for {0} skills", skills_count); return(true); }
public virtual void Deserialize(XmlNode node,SkillData data) { }
public static void fwrite_skill(TextReaderProxy proxy, SkillData skill) { // TODO }
public static void WriterSkillData(CharacterSkillManager chSkillManager , SkillData skillData) { chSkillManager.skills.Add(skillData); }
internal override List <AbstractBuffEvent> SpecialBuffEventProcess(Dictionary <AgentItem, List <AbstractBuffEvent> > buffsByDst, Dictionary <long, List <AbstractBuffEvent> > buffsById, SkillData skillData) { var res = new List <AbstractBuffEvent>(); if (buffsById.TryGetValue(56118, out List <AbstractBuffEvent> list)) { var sappingSurgeByDst = list.GroupBy(x => x.To).ToDictionary(x => x.Key, x => x.ToList()); foreach (KeyValuePair <AgentItem, List <AbstractBuffEvent> > pair in sappingSurgeByDst.Where(x => x.Value.Exists(y => y is BuffRemoveSingleEvent))) { var sglRemovals = pair.Value.Where(x => x is BuffRemoveSingleEvent).ToList(); foreach (AbstractBuffEvent sglRemoval in sglRemovals) { AbstractBuffEvent ba = pair.Value.LastOrDefault(x => x is BuffApplyEvent && Math.Abs(x.Time - sglRemoval.Time) < 5); if (ba != null) { res.Add(new BuffRemoveAllEvent(sglRemoval.By, pair.Key, ba.Time - 1, int.MaxValue, ba.BuffSkill, 0, int.MaxValue)); res.Add(new BuffRemoveManualEvent(sglRemoval.By, pair.Key, ba.Time - 1, int.MaxValue, ba.BuffSkill)); } } } } return(res); }
// Update is called once per frame void FixedUpdate() { switch (states) { case "normal": if(!CanNotMove && path != null && path.Count != 0) { if(MoveTowards(path[0])) { path.RemoveAt(0); if (path.Count == 0) { MakeStop(); } } } break; case "doAction": if (Time.fixedTime - singDate >= singTimeout) { singDate = Time.fixedTime; states = "doActing"; ani.Play(doActionClipName); weaponAin.Play("StickAttack0_" + curClipName); } break; case "doActing": if (ani.CurrentFrame == 1) { if (doActionNameFix == "Attack" && currentSkill != null) { // if (RoleData.WeaponData.Type == WeaponType.EmptyHanded) { states = "doActionEnd"; for (int i = 0; i < currentSkill.BulletDatas.Count; i++) { Messenger.Broadcast<BulletData>(NotifyTypes.ShootBullet, currentSkill.BulletDatas[i]); } currentSkill = null; doActionNameFix = ""; // } // else { // states = "checkingWeapon"; //// weapon.DOLocalRotate(new Vector3(0, 0, -90), 0.5f) // weapon.DOPunchRotation(new Vector3(0, 0, -90), 0.2f) // .OnComplete(() => { // states = "doActionEnd"; // Messenger.Broadcast<BulletData>(NotifyTypes.ShootBullet, currentSkill.Bullet); // currentSkill = null; // doActionNameFix = ""; // }); // } } } break; case "checkingWeapon": break; case "doActionEnd": if (ani.CurrentFrame >= ani.CurrentClip.frames.Length - 1) { endAction(); Debug.LogWarning("doActionEnd"); } break; case "jump": break; default: break; } }
public override List <AbstractDamageEvent> SpecialDamageEventProcess(Dictionary <AgentItem, List <AbstractDamageEvent> > damageBySrc, Dictionary <AgentItem, List <AbstractDamageEvent> > damageByDst, Dictionary <long, List <AbstractDamageEvent> > damageById, SkillData skillData) { NegateDamageAgainstBarrier(Targets.Select(x => x.AgentItem).ToList(), damageByDst); return(new List <AbstractDamageEvent>()); }
public static void Main(string[] args) { if (args.Length == 0) { Console.WriteLine("Need the input file."); Console.Read(); return; } var inFile = args[0]; var outFile = inFile + ".json"; var outFile2 = inFile + ".txt"; if (!File.Exists(inFile)) { Console.WriteLine("File not found."); Console.Read(); return; } var isDone = false; try { // OBS: // It's better to convert using same class model // as the one used in AikaEmu.GameServer. var fileName = Path.GetFileNameWithoutExtension(inFile); if (fileName == null) { return; } BaseConvert convert = null; switch (fileName) { case "ItemList": convert = new ItemList(); break; case "npcpos": convert = new NpcPos(); break; case "MobPos": convert = new MobPos(); break; case "ExpList": convert = new ExpList(); break; case "PranExpList": convert = new PranExpList(); break; case "MN": convert = new Mn(); break; case "GearCore": convert = new GearCore(); break; case "ConvertCore": convert = new ConvertCore(); break; case "Title": convert = new Title(); break; case "Recipe": convert = new Recipe(); break; case "RecipeRate": convert = new RecipeRate(); break; case "ItemEffect": convert = new ItemEffect(); break; case "ReinforceA": case "ReinforceW": convert = new ReinforceA(); ((ReinforceA)convert).IsReinforceW = fileName == "ReinforceW"; break; case "Reinforce2": case "Reinforce3": convert = new Reinforce2(); break; case "MakeItems": convert = new MakeItems(); break; case "SetItem": convert = new SetItem(); break; case "SkillData": convert = new SkillData(); break; case "Quest": convert = new Quest(); break; case "Map": convert = new Map(); break; case "ObjPos": convert = new ObjPos(); break; case "SPosition": convert = new SPosition(); break; case "Dialog": convert = new Dialog(); break; case "StatusPoint": convert = new StatusPoint(); break; } if (convert != null) { convert.SetupFile(inFile, outFile, outFile2); convert.Convert(); convert.Save(); isDone = true; } } catch (Exception e) { Console.WriteLine(e); Console.Read(); throw; } finally { if (isDone) { Console.WriteLine("Input: " + Path.GetFileName(inFile)); Console.WriteLine("Output: " + Path.GetFileName(outFile)); Console.WriteLine("OutputSql: " + Path.GetFileName(outFile2)); Console.WriteLine("Converted with success."); } else { Console.WriteLine("Error in conversion."); } } Console.Read(); }
public virtual void OnSkillHit(BaseEntity2D sender, SkillData skill, Vector2 point) { }
//---------------------------------------AI Condition相关begin------------------------------------------------ public override bool ProcInSkillRange(int skillBagIndex) { if (m_monsterData.skillIds.Count < skillBagIndex || skillBagIndex <= 0) { return(false); } skillBagIndex--; if (blackBoard.enemyId == 0) { return(false); } int skillId = m_monsterData.skillIds[skillBagIndex]; if (!SkillData.dataMap.ContainsKey(skillId)) { return(false); } EntityParent enemy = GetTargetEntity(); if (enemy == null) { return(false); } bool rnt = false; if (!SkillData.dataMap.ContainsKey(skillId)) { return(false); } TargetRangeType targetRangeType = 0; SkillData tmpSkillData = SkillData.dataMap[skillId]; //逐个skillaction来判断是否等于TargetRangeType.WorldRange foreach (var tmpSkillActionId in tmpSkillData.skillAction) { if (SkillAction.dataMap[tmpSkillActionId].targetRangeType == (int)TargetRangeType.WorldRange) { targetRangeType = TargetRangeType.WorldRange; } } if (targetRangeType == TargetRangeType.WorldRange) { rnt = skillManager.IsInSkillRange(skillId, blackBoard.enemyId); } else { int skillRange = GetSkillRange(skillId); int distance = skillRange; float entityRadius = enemy.MonsterData.scaleRadius; if (entityRadius <= 0.1f) { entityRadius = (float)enemy.GetIntAttr("scaleRadius"); } int curdistance = (int)(Vector3.Distance(Transform.position, enemy.Transform.position) * 100 - entityRadius); if (distance >= curdistance) { rnt = true; //Mogo.Util.LoggerHelper.Debug("IsInSkillRange:true"); } else { rnt = false; //Mogo.Util.LoggerHelper.Debug("IsInSkillRange:false"); } } return(rnt); }
internal AbstractCastEvent(CombatItem baseItem, AgentData agentData, SkillData skillData) : base(baseItem.Time) { Skill = skillData.Get(baseItem.SkillID); Caster = agentData.GetAgent(baseItem.SrcAgent, baseItem.Time); }
protected override void InitConfig(SkillData skillData) { base.InitConfig(skillData); deAtt = skillData.param1 * skillLevel; }
internal override List <AbstractBuffEvent> SpecialBuffEventProcess(Dictionary <AgentItem, List <AbstractBuffEvent> > buffsByDst, Dictionary <long, List <AbstractBuffEvent> > buffsById, SkillData skillData) { NPC mainTarget = GetMainTarget(); if (mainTarget == null) { throw new MissingKeyActorsException("Xera not found"); } var res = new List <AbstractBuffEvent>(); if (_xeraSecondPhaseStartTime != 0) { res.Add(new BuffRemoveAllEvent(mainTarget.AgentItem, mainTarget.AgentItem, _xeraSecondPhaseStartTime, int.MaxValue, skillData.Get(762), 1, int.MaxValue)); res.Add(new BuffRemoveManualEvent(mainTarget.AgentItem, mainTarget.AgentItem, _xeraSecondPhaseStartTime, int.MaxValue, skillData.Get(762))); } return(res); }
public void ClearGraph() { this.CurrentData= null; base.Repaint(); }
/// <summary> /// 添加技能冷却 /// </summary> /// <param name="magicCode"></param> public void AddSkillCoolDownForClient(GameClient client, int skillID) { SystemXmlItem systemMagic = null; if (!GameManager.SystemMagicQuickMgr.MagicItemsDict.TryGetValue(skillID, out systemMagic)) { return; } long nowTicks = TimeUtil.NOW(); int cdTime = systemMagic.GetIntValue("CDTime"); if (cdTime <= 0) //不需要CD时间 { int skillType = systemMagic.GetIntValue("SkillType"); if (skillType == 1) { if (null != client.ClientData.SkillDataList) { for (int i = 0; i < client.ClientData.SkillDataList.Count; i++) { SkillData skillData = client.ClientData.SkillDataList[i]; if (null == skillData || skillData.DbID > 0) { continue; } Global.AddCoolDownItem(SkillCoolDownDict, skillData.SkillID, nowTicks, 375);//普通攻击统一加个375毫秒的CD } } return; } //连续技能使用首段技能的CD int nParentMagicID = systemMagic.GetIntValue("ParentMagicID"); if (nParentMagicID <= 0) //不需要CD时间 { return; } if (!GameManager.SystemMagicQuickMgr.MagicItemsDict.TryGetValue(nParentMagicID, out systemMagic)) { return; } cdTime = systemMagic.GetIntValue("CDTime"); // 判断父技能的CD是否到时 if (cdTime <= 0) { return; } } int pubCDTime = systemMagic.GetIntValue("PubCDTime"); Global.AddCoolDownItem(SkillCoolDownDict, skillID, nowTicks, cdTime * 1000 - 500); if (pubCDTime > 0) { if (null != client.ClientData.SkillDataList) { for (int i = 0; i < client.ClientData.SkillDataList.Count; i++) { SkillData skillData = client.ClientData.SkillDataList[i]; if (null == skillData) { continue; } Global.AddCoolDownItem(SkillCoolDownDict, skillData.SkillID, nowTicks, pubCDTime * 1000); } } } }
public virtual void Add(SkillData tableSample) { m_DataDic[tableSample.index] = tableSample; }
/// <summary> /// 加载选择的数据源 /// </summary> /// <param name="behaviorSource"></param> private void LoadDataSource(SkillData _data) { CurrentData = _data;//给当前行为树赋值 //设计器加载数据 this.mGraphDesigner.Load(CurrentData); //Vector2 vector2 = this.mGraphDesigner.rootNodePosition(); //this.mGraphOffset = new Vector2(-vector2.x +this.MidRect.width / (2f * this.mGraphZoom) - 50f, -vector2.y + 50f); }
public void Init(Character attacter, SkillData data, int id, int lv) { _id = id; _lv = lv; _skillData = data; this.attacker = attacter; damType = (DamageType)(_skillData.DamageType); rangeType = (RangeType)(_skillData.Range); attriType = _skillData.AttriType; string strSingSound = _skillData.SingSound; singSound = JsonMapper.ToObject(strSingSound); string strFireSound = _skillData.FireSound; fireSound = JsonMapper.ToObject(strFireSound); InitDamage(); InitTdamage(); damageTranJson = JsonMapper.ToObject(_skillData.DamageTran); }
// public static List <InstantCastEvent> ComputeInstantCastEvents(List <Player> players, CombatData combatData, SkillData skillData, AgentData agentData) { var instantCastFinders = new HashSet <InstantCastFinder>(_genericInstantCastFinders); var res = new List <InstantCastEvent>(); foreach (Player p in players) { switch (p.Prof) { // case "Elementalist": ElementalistHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Tempest": ElementalistHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); TempestHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Weaver": ElementalistHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); WeaverHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Necromancer": NecromancerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Reaper": NecromancerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); ReaperHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Scourge": NecromancerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); ScourgeHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Mesmer": MesmerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Chronomancer": MesmerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); ChronomancerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Mirage": MesmerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); MirageHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Thief": ThiefHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Daredevil": ThiefHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); DaredevilHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Deadeye": ThiefHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); DeadeyeHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Engineer": EngineerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Scrapper": EngineerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); ScrapperHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Holosmith": EngineerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); HolosmithHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Ranger": RangerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Druid": RangerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); DruidHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Soulbeast": RangerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); SoulbeastHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Revenant": RevenantHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Herald": RevenantHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); HeraldHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Renegade": RevenantHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); RenegadeHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Guardian": GuardianHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Dragonhunter": GuardianHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); DragonhunterHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Firebrand": GuardianHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); FirebrandHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; // case "Warrior": WarriorHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Berserker": WarriorHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); BerserkerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; case "Spellbreaker": WarriorHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); SpellbreakerHelper.InstantCastFinder.ForEach(x => instantCastFinders.Add(x)); break; } } res.AddRange(ComputeInstantCastEvents(combatData, skillData, agentData, instantCastFinders.ToList())); return(res); }
/// <summary> /// 普通攻击技能 /// 攻击距离 /// </summary> /// <param name="type">Type.</param> /// <param name="data">Data.</param> public void AddSkillDemo(CooldownType type, SkillData data) { skillDict.Add (type, data); }
private static List <InstantCastEvent> ComputeInstantCastEvents(CombatData combatData, SkillData skillData, AgentData agentData, List <InstantCastFinder> instantCastFinders) { var res = new List <InstantCastEvent>(); ulong build = combatData.GetBuildEvent().Build; foreach (InstantCastFinder icf in instantCastFinders) { if (icf.Available(build)) { if (icf.NotAccurate) { skillData.NotAccurate.Add(icf.SkillID); } res.AddRange(icf.ComputeInstantCast(combatData, skillData, agentData)); } } return(res); }
public bool drawVariables(SkillData _data) { if (_data == null) { return false; } GUILayout.BeginHorizontal(new GUILayoutOption[0]); GUILayout.Label("Name", new GUILayoutOption[0]); GUI.SetNextControlName("Name"); this.variableName = GUILayout.TextField(this.variableName, new GUILayoutOption[] { GUILayout.Width(220f) }); if (this.mFocusNameField) { GUI.FocusControl("Name"); this.mFocusNameField = false; } GUILayout.EndHorizontal(); GUILayout.Space(2f); GUILayout.BeginHorizontal(new GUILayoutOption[0]); GUILayout.Label("Type", new GUILayoutOption[0]); this.variableTypeIndex = EditorGUILayout.Popup(this.variableTypeIndex, this.sharedValueTypes, EditorStyles.toolbarPopup, new GUILayoutOption[] { GUILayout.Width(169f) }); GUILayout.Space(8f); bool flag = false; //List<SharedVariable> list = _data.Variables; bool flag2 = !this.variableName.Equals("") && _data.GetVariable(this.variableName) == null; GUI.enabled = flag2; if (GUILayout.Button("Add", EditorStyles.toolbarButton, new GUILayoutOption[]{GUILayout.Width(40f)}) && flag2) { if (!_data.Variables.ContainsKey(this.variableName)) { SharedVariable sharedVariable = ScriptableObject.CreateInstance(string.Format("Shared{0}", this.sharedValueTypes[this.variableTypeIndex])) as SharedVariable; sharedVariable.name = this.variableName; sharedVariable.IsShared = true; _data.Variables.Add(sharedVariable.name, sharedVariable); this.variableName = ""; flag = true; } } GUI.enabled = true; GUILayout.Space(6f); GUILayout.EndHorizontal(); //BehaviorDesignerUtility.DrawContentSeperator(2); GUILayout.Space(4f); this.mScrollPosition = GUILayout.BeginScrollView(this.mScrollPosition, new GUILayoutOption[0]); if (_data.Variables != null) { List<string> removekeys = new List<string>(); foreach (var item in _data.Variables.Values) { EditorGUI.BeginChangeCheck(); //SharedVariable sharedVariable2 = item; //if (sharedVariable2 == null) //{ // list = null; // flag = true; // break; //} GUILayout.BeginHorizontal(new GUILayoutOption[0]); if (GUILayout.Button("—", new GUILayoutOption[]{GUILayout.Width(16f)})) { removekeys.Add(item.name); flag = true; break; } GUILayout.Label(item.name, new GUILayoutOption[] { GUILayout.Width(128f) }); bool flag3 = false; switch (item.ValueType) { case SharedVariableTypes.Vector2: case SharedVariableTypes.Vector3: case SharedVariableTypes.Vector4: case SharedVariableTypes.Quaternion: case SharedVariableTypes.Rect: GUILayout.EndHorizontal(); flag3 = true; break; } VariableInspector.DrawSharedVariableValue(item, 160); if (!flag3) { GUILayout.EndHorizontal(); } GUILayout.Space(4f); if (EditorGUI.EndChangeCheck()) { flag = true; } } if(removekeys.Count>0) { for(int i=0;i<removekeys.Count;i++) { _data.Variables.Remove(removekeys[i]); } removekeys.Clear(); } } GUILayout.EndScrollView(); return flag; }
public void Reset() { _skillsData = new SkillData(); }
public bool Attack(int v_id) { SkillData selectSkill = null; if(v_id < m_SkillDataList.Count) { selectSkill = m_SkillDataList[v_id]; } if(selectSkill != null) { m_isAttack = true; MotionChange(ref selectSkill.motion_name, 0.25f, 0, 0); m_currentSkill = selectSkill; m_attackStartTime = Time.time; m_attackTime = selectSkill.attack_time; } else { m_attackStartTime = Time.time; m_attackTime = 0; return false; } return true; }
/// <summary> /// 按类型添加技能到相应的技能字典 /// </summary> public void AddSkill(string id) { if (id == string.Empty) { return; } SkillData tempSkill = ResMgr.Instance.Load <SkillData>(id); if (tempSkill == null) { return; } if (tempSkill.skillTag == SkillTag.FixSkill) { if (tempSkill.key != ReflectKey.none) { switch (tempSkill.key) { case ReflectKey.attack: tempCB = KeyCodeMgr.Instance.Attack; break; case ReflectKey.jump: tempCB = KeyCodeMgr.Instance.Jump; break; case ReflectKey.sprint: tempCB = KeyCodeMgr.Instance.Sprint; break; case ReflectKey.superSprint: tempCB = KeyCodeMgr.Instance.SuperSprint; break; case ReflectKey.recover: tempCB = KeyCodeMgr.Instance.Recover; break; } if (tempCB.SkillID == null) { tempCB.AttachSkill(id); } } if (!FixSkill.ContainsKey(id)) { FixSkill.Add(id, tempSkill); } tempSkill.owner = GameManager.Instance.playerGO; //处理此技能所附带的连击技能 while (tempSkill.isBatter) { SkillData batter = ResMgr.Instance.Load <SkillData>(tempSkill.nextBatterID); if (!FixSkill.ContainsKey(batter.skillID)) { FixSkill.Add(batter.skillID, batter); } batter.owner = GameManager.Instance.playerGO; batter.coolDownTime = -batter.coolTime; if (batter.nextBatterID == tempSkill.skillID) { break; } tempSkill = batter; } //只有平砍是需要单独处理组合按键,其他有组合按键的技能都由物品带来,无需额外处理 if (tempSkill.hasComboKey && tempSkill.key == ReflectKey.attack) { SkillData up = ResMgr.Instance.Load <SkillData>(tempSkill.upKeySkillID); if (up != null && !FixSkill.ContainsKey(up.skillID)) { FixSkill.Add(up.skillID, up); } up.owner = GameManager.Instance.playerGO; up.coolDownTime = -up.coolTime; SkillData down = ResMgr.Instance.Load <SkillData>(tempSkill.downKeySkillID); if (down != null && !FixSkill.ContainsKey(down.skillID)) { FixSkill.Add(down.skillID, down); } down.owner = GameManager.Instance.playerGO; down.coolDownTime = -down.coolTime; } if (tempSkill.canBeChangeByBadge) { SkillData that = ResMgr.Instance.Load <SkillData>(tempSkill.skillIDIfChanged); that.owner = GameManager.Instance.playerGO; } } else { if (!badgeSkill.ContainsKey(id)) { badgeSkill.Add(id, tempSkill); } tempSkill.owner = GameManager.Instance.playerGO; } if (tempSkill.hasCoolTime) { tempSkill.coolDownTime = -tempSkill.coolTime; } }
public override void Deserialize(XmlNode node,SkillData _data) { Init(null, node); }
public AbstractCastEvent(CombatItem startItem, AgentData agentData, SkillData skillData) : base(startItem.Time) { Skill = skillData.Get(startItem.SkillID); Caster = agentData.GetAgent(startItem.SrcAgent); }
/// <summary> /// Uses the skill. /// </summary> /// <param name="skill">Skill.</param> public void UseSkill(SkillData skill) { if (!canUseSkill) { return; } canUseSkill = false; currentSkill = skill; weapon.DOKill(); DoAction(currentSkill.BulletDatas[0].ToPosition, null, currentSkill.SingTime, "Attack"); }
public LevelComponent(SkillData skillData) : base(skillData) { }
void OnForgetEnvet(uint skId) { List <COM_Skill> skills = GetMianSkillList(); skillNumLab.text = skills.Count + "/10"; for (int i = 0; i < _mainSkillList.Count; ++i) { // if (_mainSkillList[i].GetComponent<SkillCellUI>().data.id_ == (int)skId) //{ //UpdateSKillInfoLevel(x.GetComponent<SkillCellUI>().SkillTabData.name_); //_mainSkillList.Remove(_mainSkillList[i]); _mainSkillList[i].transform.parent = null; skillGrid.RemoveChild(_mainSkillList[i].transform); Destroy(_mainSkillList[i]); // break; // } } _mainSkillList.Clear(); for (int k = 0; k < skillCellList.Count; k++) { skillCellList[k].transform.parent = null; skillCellList[k].gameObject.SetActive(false); skillCellPoolList.Add(skillCellList[k]); } skillCellList.Clear(); skillGrid.Reposition(); for (int i = 0; i < skills.Count; i++) { GameObject obj = Object.Instantiate(skillCell.gameObject) as GameObject; obj.SetActive(true); SkillData sData = SkillData.GetData((int)skills[i].skillID_, (int)skills[i].skillLevel_); SkillCellUI sCell = obj.GetComponent <SkillCellUI>(); obj.name = sData._Name; sCell.SkillName.text = sData._Name; sCell.SkillLevel.text = sData._Level.ToString(); HeadIconLoader.Instance.LoadIcon(sData._ResIconName, obj.GetComponent <SkillCellUI>().SkillIcon); if (!iconName_.Contains(sData._ResIconName)) { iconName_.Add(sData._ResIconName); } sCell.data = sData; sCell.skillInst = skills[i]; if (_profData.isProudSkill(_profType, (int)skills[i].skillID_, _profLevel)) { obj.transform.FindChild("deyi").GetComponent <UISprite>().gameObject.SetActive(true); } UIManager.SetButtonEventHandler(obj, EnumButtonEvent.OnClick, OnClickMainSkill, 0, 0); skillGrid.AddChild(obj.transform); _mainSkillList.Add(obj); obj.transform.localScale = Vector3.one; } skillDesc.text = ""; nextDescLabel.text = ""; expLab.text = ""; forgetBtn.gameObject.SetActive(false); learnBtn.gameObject.SetActive(false); topinfo.gameObject.SetActive(false); kjBtn.gameObject.SetActive(false); messageObj.SetActive(false); PopText.Instance.Show(LanguageManager.instance.GetValue("yiwangskill")); curCell = null; if (_mainSkillList.Count > 0) { curCell = _mainSkillList[0].GetComponent <SkillCellUI> (); curCell.back.gameObject.SetActive(true); //curCell.buleBack0.gameObject.SetActive (true); //curCell.buleBack1.gameObject.SetActive (true); UpdatetopInfo(_mainSkillList[0].GetComponent <SkillCellUI> ()); } }
void Start() { iconName_ = new List <string>(); GlobalValue.Get(Constant.C_SkillExpItem, out itemid); kjBtn.gameObject.SetActive(false); messageObj.SetActive(false); UIManager.SetButtonEventHandler(kjBtn.gameObject, EnumButtonEvent.OnClick, OnkjBtn, 0, 0); UIManager.SetButtonEventHandler(closeBtn.gameObject, EnumButtonEvent.OnClick, OnClose, 0, 0); UIManager.SetButtonEventHandler(forgetBtn.gameObject, EnumButtonEvent.OnClick, OnForgetBtn, 0, 0); UIManager.SetButtonEventHandler(learnBtn.gameObject, EnumButtonEvent.OnClick, OnLearnBtn, 0, 0); UIManager.SetButtonEventHandler(wenhaoBtn.gameObject, EnumButtonEvent.OnClick, OnWenhaoBtn, 0, 0); UIManager.SetButtonEventHandler(battleBtn.gameObject, EnumButtonEvent.OnClick, OnBattleBtn, 0, 0); UIManager.SetButtonEventHandler(liftBtn.gameObject, EnumButtonEvent.OnClick, OnLiftBtn, 0, 0); GamePlayer.Instance.SkillExpEnvet += new RequestEventHandler <int> (OnSkillExpEnevt); List <COM_Skill> skills = GetMianSkillList(); skillNumLab.text = skills.Count + "/10"; expLab.text = ""; _profType = GamePlayer.Instance.GetIprop(PropertyType.PT_Profession); _profLevel = GamePlayer.Instance.GetIprop(PropertyType.PT_ProfessionLevel); _profData = Profession.get((JobType)_profType, _profLevel); zhiyeLab.text = _profData.jobName_; OpenPanelAnimator.PlayOpenAnimation(this.panel, () => { for (int i = 0; i < skills.Count; i++) { GameObject obj = Object.Instantiate(skillCell.gameObject) as GameObject; obj.SetActive(true); SkillData sData = SkillData.GetData((int)skills[i].skillID_, (int)skills[i].skillLevel_); SkillCellUI sCell = obj.GetComponent <SkillCellUI>(); obj.name = sData._Name; sCell.SkillName.text = sData._Name; sCell.SkillLevel.text = sData._Level.ToString(); HeadIconLoader.Instance.LoadIcon(sData._ResIconName, obj.GetComponent <SkillCellUI>().SkillIcon); if (!iconName_.Contains(sData._ResIconName)) { iconName_.Add(sData._ResIconName); } sCell.data = sData; sCell.skillInst = skills[i]; if (_profData.isProudSkill(_profType, (int)skills[i].skillID_, _profLevel)) { obj.transform.FindChild("deyi").GetComponent <UISprite>().gameObject.SetActive(true); } UIManager.SetButtonEventHandler(obj, EnumButtonEvent.OnClick, OnClickMainSkill, 0, 0); skillGrid.AddChild(obj.transform); _mainSkillList.Add(obj); obj.transform.localScale = Vector3.one; } expbar.gameObject.SetActive(true); forgetBtn.gameObject.SetActive(false); learnBtn.gameObject.SetActive(false); curCell = null; if (_mainSkillList.Count > 0) { // UpdateSKillInfoLevel (_mainSkillList[0].name); curCell = _mainSkillList[0].GetComponent <SkillCellUI> (); curCell.back.gameObject.SetActive(true); //curCell.buleBack0.gameObject.SetActive (true); //curCell.buleBack1.gameObject.SetActive (true); UpdatetopInfo(_mainSkillList[0].GetComponent <SkillCellUI> ()); } if (skillType_ != 0) { liftBtn.isEnabled = false; skillObj.gameObject.SetActive(false); gatherObj.gameObject.SetActive(true); gatherObj.GetComponent <GatherUI> ().ShowMe(minType_, minId_); } else { battleBtn.isEnabled = false; } GamePlayer.Instance.forgetSkillEnvet += new RequestEventHandler <uint> (OnForgetEnvet); }); }
static void ProcessAniRead(List <AnimationClip> aniclips) { string a_strBuf = ""; a_strBuf = "idx_ui,casttime_f,hittime_f,mergetime_f,watingtime_f\n"; List <SkillData> skillDatas = new List <SkillData>(); //일단 유저꺼만 - 코스튬 Resource.AniInfo aniInfo = null; //var enumerator = itemLowData.CostumeInfoDic.GetEnumerator(); var enumerator = skillLowData.SkillSetInfoDic.GetEnumerator(); while (enumerator.MoveNext()) { //해당 리소스 데이터를 가져옴 Resource.UnitInfo data = null; if (resourceLowData.UnitInfoDic.TryGetValue(enumerator.Current.Value.AniId, out data)) { //평타1 SkillData newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[0]); newData.aniID = data.AniAttack01; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[1]); newData.aniID = data.AniAttack02; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator.Current.Value.skill0[2]); newData.aniID = data.AniAttack03; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = enumerator.Current.Value.skill1; newData.aniID = data.AniSkill01; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = enumerator.Current.Value.skill2; newData.aniID = data.AniSkill02; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = enumerator.Current.Value.skill3; newData.aniID = data.AniSkill03; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); newData = new SkillData(); newData.skillID = enumerator.Current.Value.skill4; newData.aniID = data.AniSkill04; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); } } //몬스터스킬 var enumerator2 = monsterLowData.MobInfoDic.GetEnumerator(); while (enumerator2.MoveNext()) { //해당 리소스 데이터를 가져옴 Resource.UnitInfo data = null; if (resourceLowData.UnitInfoDic.TryGetValue(enumerator2.Current.Value.AniId, out data)) { //평타1 if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[0]) != 0) { SkillData newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[0]); newData.aniID = data.AniAttack01; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); } if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[1]) != 0) { SkillData newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[1]); newData.aniID = data.AniAttack02; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); } if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[2]) != 0) { SkillData newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[2]); newData.aniID = data.AniAttack03; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); } if (System.Convert.ToUInt32(enumerator2.Current.Value.skill[3]) != 0) { SkillData newData = new SkillData(); newData.skillID = System.Convert.ToUInt32(enumerator2.Current.Value.skill[3]); newData.aniID = data.AniAttack03; if (resourceLowData.AniInfoDic.TryGetValue(newData.aniID, out aniInfo)) { newData.aniName = aniInfo.aniName; } skillDatas.Add(newData); } } } for (int i = 0; i < skillDatas.Count; i++) { for (int j = 0; j < aniclips.Count; j++) { if (skillDatas[i].aniName.Equals(aniclips[j].name) && !skillDatas[i].aniName.Equals("")) { //동일할경우 AnimationEvent[] aniEvents = AnimationUtility.GetAnimationEvents(aniclips[j]); //int count = 0; //uint iValue = (uint)skillDatas[i].skillID; //노티만 체크하던 버전 //foreach (AnimationEvent aniEvent in aniEvents) //{ // if(aniEvent.functionName.Equals("SkillUse") ) // { // ++count; // a_strBuf = a_strBuf + iValue.ToString() + "," + count.ToString() + "," + aniEvent.time.ToString() + "\n"; // } //} float castTime = 0; float mergeTime = 0; float lastAttackTime = 0; uint iValue = (uint)skillDatas[i].skillID; a_strBuf = a_strBuf + iValue.ToString() + ","; foreach (AnimationEvent aniEvent in aniEvents) { if (aniEvent.functionName.Equals("PrepareEnd")) { castTime = aniEvent.time; } else if (aniEvent.functionName.Equals("MergeTime")) { mergeTime = aniEvent.time; } else if (aniEvent.functionName.Equals("SkillUse")) { lastAttackTime = aniEvent.time; } } a_strBuf = a_strBuf + castTime.ToString() + "," + lastAttackTime.ToString() + "," + mergeTime.ToString() + "," + aniclips[i].length.ToString() + "\n"; } } } string a_temfname = Application.dataPath; a_temfname = a_temfname.Replace('\\', '/'); string a_RootPath = a_temfname.Remove(a_temfname.LastIndexOf("/") + 1); //프로젝트가 있는 경로... if (!System.IO.Directory.Exists(a_RootPath + "/ExportAniEvent")) { System.IO.Directory.CreateDirectory(a_RootPath + "/ExportAniEvent"); } string a_PathName = a_RootPath + "/ExportAniEvent/aniEvent.csv"; System.IO.File.WriteAllText(a_PathName, a_strBuf); skillDatas.Clear(); }
protected void CopyDataFrom(SkillData data) { base.CopyDataFrom(data); }