private bool KindCheck(ActionEffectInfo info, FlyTextKind targetKind) { var result = targetKind == info.kind; // Screenlog will log misses from enemies as Named/Miss, but they will show up to us as Named/Dodge if (!result) { return(targetKind is FlyTextKind.NamedDodge or FlyTextKind.Dodge && info.kind is FlyTextKind.NamedMiss or FlyTextKind.Miss); } return(true); }
/** * @brief 提取数据 * * @param node * * @return */ public bool CollectDataFromDBC(DBC_Row node) { ActionId = DBCUtil.ExtractNumeric <int>(node, "Id", 0, true); ActionLogicId = DBCUtil.ExtractNumeric <int>(node, "LogicId", 0, true); BreakLevel = DBCUtil.ExtractNumeric <int>(node, "BreakLevel", 0, true); CallbackSection = DBCUtil.ExtractNumeric <int>(node, "CallbackSection", 0, true); CallbackPoint = DBCUtil.ExtractNumeric <float>(node, "CallbackPoint", 0, true); SectionNumber = DBCUtil.ExtractNumeric <int>(node, "SectionNum", 0, true); EffectNum = DBCUtil.ExtractNumeric <int>(node, "EffectNum", 0, true); EffectList.Clear(); for (int i = 0; i < EffectNum; i++) { string keySuffix = i.ToString(); ActionEffectInfo effect_info = new ActionEffectInfo(); effect_info.EffectTime = DBCUtil.ExtractNumeric <float>(node, "EffectTime" + keySuffix, 0, false); effect_info.SkeletonNodeName = DBCUtil.ExtractString(node, "SkeletonNodeName" + keySuffix, "", false); effect_info.EffectName = DBCUtil.ExtractString(node, "EffectName" + keySuffix, "", false); EffectList.Insert(i, effect_info); } for (int i = 0; i < SectionNumber; i++) { string keySuffix = i.ToString(); ActionSection actionSection = new ActionSection(); actionSection.ActionType = DBCUtil.ExtractNumeric <int>(node, "ActionType" + keySuffix, -1, true); actionSection.WapMode = DBCUtil.ExtractString(node, "WapMode" + keySuffix, "ONCE", false); actionSection.IsUpperBody = DBCUtil.ExtractBool(node, "IsUpperBody" + keySuffix, false, false); actionSection.PlaySpeed = DBCUtil.ExtractNumeric <float>(node, "PlaySpeed" + keySuffix, 1.0f, false); actionSection.PlayTime = DBCUtil.ExtractNumeric <float>(node, "PlayTime" + keySuffix, 0, false); actionSection.MoveSpeed = DBCUtil.ExtractNumeric <float>(node, "MoveSpeed" + keySuffix, 0, false); actionSection.MoveTowards = DBCUtil.ExtractNumeric <int>(node, "MoveTowards" + keySuffix, 0, false); SectionList.Insert(i, actionSection); } ParamNum = DBCUtil.ExtractNumeric <int>(node, "ParamNum", 0, false); if (ParamNum > 0) { for (int i = 0; i < ParamNum; ++i) { string key = "Param" + i.ToString(); ExtraParams.Insert(i, DBCUtil.ExtractString(node, key, "", false)); } } return(true); }
public void AddEffect(ActionEffectInfo info) { info.tick = GetTick(); if (_store.TryGetValue(info.value, out var tmpList)) { tmpList.Add(info); } else { tmpList = new List <ActionEffectInfo> { info }; _store.TryAdd(info.value, tmpList); } StoreLog($"Added effect {info}"); }
private bool TargetCheck(ActionEffectInfo info, uint charaId, List <uint> petIds) { return(info.sourceId == charaId || info.targetId == charaId || petIds.Contains(info.sourceId)); }
public bool TryGetEffect(uint value, FlyTextKind targetKind, uint charaId, List <uint> petIds, out ActionEffectInfo info) { StoreLog($"Looking for effect {value} {targetKind}..."); info = default; if (!_store.TryGetValue(value, out var list)) { return(false); } var effect = list.FirstOrDefault(x => x.value == value && x.step == ActionStep.Screenlog && KindCheck(x, targetKind) && TargetCheck(x, charaId, petIds)); if (!list.Remove(effect)) { return(false); } info = effect; StoreLog($"Retrieved effect {effect}"); return(true); }
public BaseInfo() { attackEffectInfo = new ActionEffectInfo(); animationInfo = new AnimationInfo(); audioInfo = new AudioInfo(); attackModifierIcons = new List<string>(); projectileInfo = null; }