//事件触发函数 public void _OnMonsterAttrChanged(MonsterAttr monsterAttr) { if (OnMonsterAttrChanged != null) { OnMonsterAttrChanged(monsterAttr); } }
//设置怪物血量和攻击显示 void SetMonsterAttrShow(MonsterAttr monsterAttr) { bloodText.transform.parent.gameObject.SetActive(monsterAttr.Blood != 0); attackText.transform.parent.gameObject.SetActive(monsterAttr.Attack != 0); bloodText.text = monsterAttr.Blood == -1 ? "???" : monsterAttr.Blood.ToString(); attackText.text = monsterAttr.Attack == -1 ? "???" : monsterAttr.Attack.ToString(); }
public static void FightWithMonster(MonsterAttr monsterAttr, BrickRoot brickRoot) { int lossBlood_player = Math.Max(monsterAttr.Attack - PlayerAttr.Defense, 1); int lossBlood_monster = Math.Max(PlayerAttr.Attack - monsterAttr.Defense, 1); PlayerAttr.Blood -= lossBlood_player; monsterAttr.Blood -= lossBlood_monster; UIBase.ShowAttrChange(-lossBlood_monster, brickRoot.transform.localPosition); brickRoot.MonsterAni.SetTrigger("BeAttacked"); }
public bool AddAttr(CreatureCommonAttr CAttrType, int attrValue) { MonsterAttr mAttrType = AttrMgr.GetMonsterAttr(CAttrType); if (attrValue < 0) { uint absValue = (uint)Math.Abs(attrValue); m_Attrs[(int)mAttrType] = ((m_Attrs[(int)mAttrType] > absValue) ? (m_Attrs[(int)mAttrType] - absValue) : 0); } else { m_Attrs[(int)mAttrType] = m_Attrs[(int)mAttrType] + (uint)attrValue; } return(true); }
//砖块生成怪物 public void GenMonster(int monsterId) { NPC_Info = Cfg_NPC.GetCfg(monsterId); if (NPC_Info.AppearOnStart == 1) { SetBrickState(BrickState.monster); } monsterAttr = new MonsterAttr(); monsterAttr.GameEvent.OnMonsterAttrChanged += SetMonsterAttrShow; monsterAttr.GameEvent.OnMonsterDie += MonsterDie; MonsterAttr.TransToAttr(NPC_Info, ref monsterAttr); //设置怪物图片和颜色 string monsterAsset = COMMON.MonsterIconPath + NPC_Info.AssetName; COMMON.SetSprite(modelIcon, monsterAsset); modelIcon.material = COMMON.spriteMaterials[NPC_Info.Color]; }
public static void TransToAttr(Cfg_NPC cfg_NPC, ref MonsterAttr monsterAttr) { monsterAttr.Attack = cfg_NPC.Attack; monsterAttr.Blood = cfg_NPC.Blood; monsterAttr.Defense = cfg_NPC.Defense; }
public static MapObjInfo CreateMonsterMapObjInfo(int poolID, int monsterTypeID, int monsterLevel, long ownerID, int camp, bool isBoss, Vector3 position, bool isFighting = true) { Monster monsterData = DataReader <Monster> .Get(monsterTypeID); if (monsterData == null) { EntityWorld.Instance.ForceOut("没有数据", string.Format("Monster表根本没有怪物{0}的数据", monsterTypeID), null); } MonsterAttr monsterAttr = Enumerable.FirstOrDefault <MonsterAttr>(DataReader <MonsterAttr> .DataList, (MonsterAttr x) => x.lv == monsterLevel && x.id == monsterData.AttributeTemplateID); if (monsterAttr == null) { EntityWorld.Instance.ForceOut("没有数据", string.Format("怪物属性表里没有模板ID{0} & 等级{1}的数据\n怪物id为{2}", monsterData.AttributeTemplateID, monsterLevel, monsterTypeID), null); } MapObjInfo mapObjInfo = new MapObjInfo(); mapObjInfo.objType = GameObjectType.ENUM.Soldier; mapObjInfo.id = (long)poolID; mapObjInfo.ownerId = ownerID; mapObjInfo.typeId = monsterTypeID; mapObjInfo.modelId = monsterData.model; mapObjInfo.name = mapObjInfo.id.ToString(); mapObjInfo.rankValue = 0; mapObjInfo.pos = new Pos(); mapObjInfo.pos.x = (float)((int)position.x * 100); mapObjInfo.pos.y = (float)((int)position.z * 100); mapObjInfo.vector = InstanceManager.GetMonsterFixBornDirection(monsterData.monsterBornDirection, position, ownerID, monsterData.scenePoint); mapObjInfo.mapLayer = 0; BattleBaseAttrs battleBaseAttrs = new BattleBaseAttrs(); battleBaseAttrs.SetValue(GameData.AttrType.Lv, monsterLevel, true); battleBaseAttrs.SetValue(GameData.AttrType.HpLmt, monsterAttr.hp, true); battleBaseAttrs.SetValue(GameData.AttrType.Atk, monsterAttr.atk, true); battleBaseAttrs.SetValue(GameData.AttrType.Defence, monsterAttr.defence, true); battleBaseAttrs.SetValue(GameData.AttrType.HitRatio, monsterAttr.hit, true); battleBaseAttrs.SetValue(GameData.AttrType.DodgeRatio, monsterAttr.dex, true); battleBaseAttrs.SetValue(GameData.AttrType.CritRatio, monsterAttr.crt, true); battleBaseAttrs.SetValue(GameData.AttrType.DecritRatio, monsterAttr.penetration, true); battleBaseAttrs.SetValue(GameData.AttrType.CritHurtAddRatio, monsterAttr.critHurtAddRatio, true); battleBaseAttrs.SetValue(GameData.AttrType.ParryRatio, monsterAttr.parry, true); battleBaseAttrs.SetValue(GameData.AttrType.DeparryRatio, monsterAttr.vigour, true); battleBaseAttrs.SetValue(GameData.AttrType.ParryHurtDeRatio, monsterAttr.parryHurtDeRatio, true); battleBaseAttrs.SetValue(GameData.AttrType.ActSpeed, monsterAttr.attackSpeed, true); battleBaseAttrs.SetValue(GameData.AttrType.VpLmt, monsterAttr.Vp, true); battleBaseAttrs.SetValue(GameData.AttrType.VpResume, monsterAttr.VpResume, true); battleBaseAttrs.SetValue(GameData.AttrType.IdleVpResume, monsterAttr.IdleVpResume, true); if (monsterData.propId != 0) { battleBaseAttrs.AddValuesByTemplateID(monsterData.propId); } battleBaseAttrs.SetValue(GameData.AttrType.HpLmt, (long)((double)battleBaseAttrs.GetValue(GameData.AttrType.HpLmt) * (1.0 + (double)monsterData.HpAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.Atk, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.Atk) * (1.0 + (double)monsterData.AttAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.Defence, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.Defence) * (1.0 + (double)monsterData.DefAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.HitRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.HitRatio) * (1.0 + (double)monsterData.HitAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.DodgeRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.DodgeRatio) * (1.0 + (double)monsterData.DexAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.CritRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.CritRatio) * (1.0 + (double)monsterData.CrtAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.DecritRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.DecritRatio) * (1.0 + (double)monsterData.PenAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.CritHurtAddRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.CritHurtAddRatio) * (1.0 + (double)monsterData.CthAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.ParryRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.ParryRatio) * (1.0 + (double)monsterData.ParAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.DeparryRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.DeparryRatio) * (1.0 + (double)monsterData.VigAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.ParryHurtDeRatio, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.ParryHurtDeRatio) * (1.0 + (double)monsterData.PrhAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.ActSpeed, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.ActSpeed) * (1.0 + (double)monsterData.AtsAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.VpLmt, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.VpLmt) * (1.0 + (double)monsterData.VpAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.VpResume, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.VpResume) * (1.0 + (double)monsterData.VsAmplificationRate * 0.001)), true); battleBaseAttrs.SetValue(GameData.AttrType.IdleVpResume, (int)((double)battleBaseAttrs.GetValue(GameData.AttrType.IdleVpResume) * (1.0 + (double)monsterData.IvAmplificationRate * 0.001)), true); mapObjInfo.battleInfo = LocalDimensionMonsterInfoCreator.CreateMonsterBattleBaseInfo(monsterData, battleBaseAttrs, camp, isBoss, isFighting); return(mapObjInfo); }