private void SettleBuffOnBoutStart(ObjectBase targetObj) { List <BuffInst> lstBuffInst = new List <BuffInst>(targetObj.lstBuffInst); foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (template.nType == BuffType.GET_BUFF_ROUND_START) { _battleModel.AddBuff(targetObj, targetObj, (uint)template.iEffectB, buffInst.effectVal); } if (buffInst.leftBout != -1) { //Debug.LogError("DecBuffLeftBout" + buffInst.leftBout); if (template.nTrigger == BuffTriggerType.BOUT_START) { _battleModel.DecBuffLeftBout(targetObj, buffInst, 1); } } } }
public static void Init(XmlNode xml) { foreach (XmlElement element in xml.ChildNodes) { BuffTemplate template = new BuffTemplate(); template.nId = element["nId"] != null?uint.Parse(element["nId"].InnerText) : 0; //id template.szName = element["szName"] != null ? element["szName"].InnerText : ""; //名字 template.szDesc = element["szDesc"] != null ? element["szDesc"].InnerText : ""; //描述 template.nType = element["nType"] != null?uint.Parse(element["nType"].InnerText) : 0; //enum BuffType template.nTrigger = element["nTrigger"] != null?uint.Parse(element["nTrigger"].InnerText) : 0; //enum BuffTriggerType template.nTriggerParam1 = element["nTriggerParam1"] != null?uint.Parse(element["nTriggerParam1"].InnerText) : 0; //触发类型参数1 template.nTriggerParam2 = element["nTriggerParam2"] != null?uint.Parse(element["nTriggerParam2"].InnerText) : 0; //触发类型参数2 template.iEffectA = element["iEffectA"] != null?int.Parse(element["iEffectA"].InnerText) : 0; //效果值A template.iEffectB = element["iEffectB"] != null?int.Parse(element["iEffectB"].InnerText) : 0; //效果值B(buffid etc..) template.iBout = element["iBout"] != null?int.Parse(element["iBout"].InnerText) : 0; //持续回合 template.szImg = element["szImg"] != null ? element["szImg"].InnerText : ""; //图片名 Data.Add(template.nId, template); } }
internal void SetData(BuffInst buffInst) { BuffTemplate templet = BuffTemplateData.GetData(buffInst.tplId); if (templet == null) { return; } img.url = ResPath.GetUiImagePath(PackageName.BATTLE, templet.szImg); switch (templet.nType) { case BuffType.ADD_ARMOR_ROUND_END: case BuffType.MULTI_ARMOR: txtValue.text = buffInst.effectVal.ToString(); txtValue.visible = true; break; case BuffType.MAGIC_SWORD: //幻剑 txtValue.text = buffInst.effectVal.ToString(); txtValue.visible = true; break; default: txtValue.text = buffInst.leftBout.ToString(); txtValue.visible = buffInst.leftBout > 0; break; } }
public static BuffDef Add(BuffTemplate buffTemplate, String contentPackIdentifier = null) { contentPackIdentifier = contentPackIdentifier ?? Assembly.GetCallingAssembly().GetName().Name; if (!ContentPacks.assemblyDict.ContainsKey(contentPackIdentifier)) { ContentPacks.assemblyDict[contentPackIdentifier] = Assembly.GetCallingAssembly(); } BuffDef buffDef = ScriptableObject.CreateInstance <BuffDef>(); buffDef.name = buffTemplate.internalName; buffDef.buffColor = buffTemplate.buffColor ?? buffDef.buffColor; buffDef.canStack = buffTemplate.canStack ?? buffDef.canStack; buffDef.eliteDef = buffTemplate.eliteDef ?? buffDef.eliteDef; buffDef.isCooldown = buffTemplate.isCooldown ?? buffDef.isCooldown; buffDef.isDebuff = buffTemplate.isDebuff ?? buffDef.isDebuff; buffDef.iconSprite = buffTemplate.iconSprite ?? buffDef.iconSprite; buffDef.isHidden = buffTemplate.isHidden ?? buffDef.isHidden; buffDef.m_CachedPtr = buffTemplate.m_CachedPtr ?? buffDef.m_CachedPtr; buffDef.startSfx = buffTemplate.startSfx ?? buffDef.startSfx; String nameToken = $"ARTIFACT_{buffTemplate.internalName.ToUpper()}_NAME"; String descriptionToken = $"ARTIFACT_{buffTemplate.internalName.ToUpper()}_DESC"; Languages.AddTokenString(nameToken, buffTemplate.name); Languages.AddTokenString(descriptionToken, buffTemplate.description); AddInfo(buffDef, nameToken, descriptionToken); return(Add(buffDef, contentPackIdentifier)); }
public void onSingleBuffAdd(X_GUID uid, BuffTemplate info) { UI_Blood mBlood = FindUIFBlood(uid); if (mBlood == null) { return; } mBlood.onSingleBuffAdd(info); }
public static BuffTemplate GetData(uint nId, object className = null) { if (!Data.ContainsKey(nId)) { if (className != null) { UnityEngine.Debug.LogError(string.Format("BuffTemplate is null, Id = {0} @ {1}", "nId=" + nId, className)); } return(null); } BuffTemplate template = Data[nId]; return(template); }
public bool HasBuff(uint buffType) { foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (template.nType == buffType) { return(true); } } return(false); }
public BuffInst GetBuffInstByType(uint buffType) { foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (template.nType == buffType) { return(buffInst); } } return(null); }
private void SettleBuffOnBoutEnd(ObjectBase targetObj) { List <BuffInst> lstBuffInst = new List <BuffInst>(targetObj.lstBuffInst); foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } switch (template.nType) { case BuffType.ADD_ARMOR_ROUND_END: case BuffType.MULTI_ARMOR: _battleModel.AddArmor(targetObj, buffInst.effectVal); break; default: //Debug.LogError("unhandle bout end buff:" + template.nType); break; } } foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (buffInst.selfAddDebuffThisBout) { buffInst.selfAddDebuffThisBout = false; //Debug.LogError("buffId:" + buffInst.tplId + " selfAddDebuffThisBout"); } else if (buffInst.leftBout != -1) { //Debug.LogError("DecBuffLeftBout" + buffInst.leftBout); if (template.nTrigger != BuffTriggerType.BOUT_START) { _battleModel.DecBuffLeftBout(targetObj, buffInst, 1); } } } }
// 创建bufficon结构 private void onCreateBuffIcon(BuffTemplate info) { int buffid = info.GetID(); GameObject obj = new GameObject("BuffIcon"); obj.transform.SetParent(transform, false); UI_BuffIcon icon = obj.AddComponent <UI_BuffIcon>(); //buff icon路径 //string filepath = "";// info.m_buffIconBig; string filepath = info.getBuffIconSmall();//m_buffIconSmall; if (string.IsNullOrEmpty(filepath)) { Debug.LogError("找不到资源:" + info.getDES()); return; } filepath = common.defaultPath + filepath; //string filepath = common.defaultPath + "Battle_Buff04"; //LogManager.LogError("Should use table filepath ..."); if (UIResourceMgr.LoadSprite(filepath) == null) { return; } Sprite sprite = Instantiate(UIResourceMgr.LoadSprite(filepath), Vector3.zero, Quaternion.identity) as Sprite; icon.onImageInit(sprite); BuffIcon buffIcon = new BuffIcon(icon, buffid); mBuffList.Add(buffIcon); // buff/debuff 排序 if (info.getConduce() != 0) { // buff 排在debuff前 obj.transform.SetSiblingIndex(iDebuffIdx); iDebuffIdx++; } else { // debuff 排在队尾 // 所以不处理 } }
/// <summary> /// 获取BUFF提示 /// </summary> /// <param name="buffInst"></param> /// <returns></returns> internal static TipStruct GetBuffTip(BuffInst buffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { return(null); } TipStruct tipStruct = new TipStruct() { name = template.szName, desc = template.szDesc, iconUrl = ResPath.GetUiImagePath(PackageName.BATTLE, template.szImg) }; return(tipStruct); }
// 移除buff public void RemoveBuff(BuffTemplate info) { BuffIcon buffIcon = GetItemByBuffID(info.GetID()); if (buffIcon == null) { return; } if (info.getMaxOverlayCount() > 1) { // 可叠加 if (buffIcon != null) { if (buffIcon.iCount < 2) { // 移除icon if (buffIcon.icon) { //buffIcon.icon.transform.DetachChildren() Destroy(buffIcon.icon.gameObject); buffIcon.icon = null; } mBuffList.Remove(buffIcon); buffIcon = null; } else { // 计数-- buffIcon.icon.onUpdateText(--buffIcon.iCount); } } } else { // 不可叠加 if (buffIcon.icon) { Destroy(buffIcon.icon.gameObject); buffIcon.icon = null; } mBuffList.Remove(buffIcon); buffIcon = null; } }
public void RecoverCost() { curCost = maxCost; foreach (var buffInst in selfData.lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (template.nType == BuffType.GET_ENERGY_ROUND_START) { curCost += buffInst.effectVal; } } CostChangeHandle(); }
public override void DoEffect(BattleManager battlemgr, CardInstance cardInstance, CardEffectTemplate effectTplt, int targetInstId) { BattleModel battleModel = BattleModel.Inst; List <BuffInst> lstBuffInst = new List <BuffInst>(battleModel.selfData.lstBuffInst); foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } if (template.nType > BuffType.DEBUFF_BEGIN && template.nType < BuffType.DEBUFF_END) { battleModel.RemoveBuff(battleModel.selfData, buffInst); } } }
//结算受击效果 private void OnObjectHitted(ObjectBase caster, ObjectBase target, int reduceHp, int reduceArmor) { List <BuffInst> lstBuffInst = new List <BuffInst>(target.lstBuffInst); foreach (var buffInst in lstBuffInst) { BuffTemplate template = BuffTemplateData.GetData(buffInst.tplId); if (template == null) { continue; } switch (template.nType) { case BuffType.ARMOR_REFLECT: if (0 == reduceArmor) { continue; } int reflectValue = (reduceArmor * buffInst.effectVal) / 100; _battleModel.ReduceEnemyHp(caster.instId, reflectValue); break; case BuffType.MULTI_ARMOR: if (reduceHp > 0) { //受伤少一层护甲 _battleModel.DecBuffEffectVal(target, buffInst, 1); } break; default: //Debug.LogError("unhandle on hit buff type:" + template.nType); break; } } }
// 添加buff public void AddBuff(BuffTemplate info) { BuffIcon buffIcon = GetItemByBuffID(info.GetID()); if (info.getMaxOverlayCount() > 1) { // 可叠加 if (buffIcon != null) { // 更新数字 buffIcon.icon.onUpdateText(++buffIcon.iCount); } else { // 创建icon onCreateBuffIcon(info); } } else { // 不可叠加 onCreateBuffIcon(info); } }
public void onSingleBuffAdd(BuffTemplate info) { mBuffControl.AddBuff(info); }
/// <summary> /// 处理buff /// </summary> /// <param name="uid"></param> /// <param name="info"></param> public void onSingleBuffRemove(BuffTemplate info) { mBuffControl.RemoveBuff(info); }
/// <summary> /// buffer 图标处理 /// </summary> public void onSelfAllBuffRemove(BuffTemplate info) { mSelfBuff.RemoveBuff(info); }
public void onSelfAllBuffAdd(BuffTemplate info) { mSelfBuff.AddBuff(info); }
public void onEnemyAllBuffRemove(BuffTemplate info) { mEnemyBuff.RemoveBuff(info); }
/// <summary> /// 目标对象获得buff /// </summary> /// <param name="buffId"></param> internal void AddBuff(ObjectBase casterObject, ObjectBase targetObject, uint buffId, int count = 1) { if (count == 0 || buffId == 0) { return; } if (null == targetObject) { return; } List <BuffInst> lstBuffInst = targetObject.lstBuffInst; BuffTemplate templet = BuffTemplateData.GetData(buffId); if (templet == null) { return; } foreach (var buffInst in lstBuffInst) { if (buffInst.tplId != buffId) { continue; } if (templet.iBout != -1) { // 无法抽卡只有1层 if (templet.nType != BuffType.CAN_NOT_DRAW_CARD) { buffInst.leftBout += templet.iBout * count; } } else { buffInst.effectVal += templet.iEffectA * count; } if (targetObject.objType == ObjectType.PLAYER) { SendEvent(BattleEvent.SELF_BUFF_UPDATE, buffInst); } else if (targetObject.objType == ObjectType.ENEMY) { SendEvent(BattleEvent.ENEMY_BUFF_UPDATE, buffInst); } return; } //加入新BUFF int iBout = -1; int iEffectVal = templet.iEffectA; if (templet.iBout != -1) { // 无法抽卡只有1层 iBout = 1; if (templet.nType != BuffType.CAN_NOT_DRAW_CARD) { iBout = templet.iBout * count; } } else { iEffectVal = templet.iEffectA * count; } BuffInst newBuffInst = new BuffInst(targetObject.instId) { tplId = buffId, leftBout = iBout, effectVal = iEffectVal, selfAddDebuffThisBout = (BuffInst.IsDebuff(templet.nType) && casterObject == targetObject) }; lstBuffInst.Add(newBuffInst); if (targetObject.objType == ObjectType.PLAYER) { SendEvent(BattleEvent.SELF_BUFF_ADD, newBuffInst); } else if (targetObject.objType == ObjectType.ENEMY) { SendEvent(BattleEvent.ENEMY_BUFF_ADD, newBuffInst); } }
public void onEnemyAllBuffAdd(BuffTemplate info) { mEnemyBuff.AddBuff(info); }