public void init(FightPlayerModel data, int myTeam) { this.data = data; title.init(data, data.team == myTeam); head.material.SetTexture("_MainTex", Resources.Load <Texture>("HeroIcon/" + data.code)); //如果不是己方单位移除遮罩 //是友方单位 移除战争视野处理 if (data.team != myTeam) { mask.SetActive(false); root.SetActive(false); title.gameObject.SetActive(false); gameObject.layer = LayerMask.NameToLayer("enemy"); } else { gameObject.layer = LayerMask.NameToLayer("friend"); Destroy(GetComponentInChildren <Eye>()); } if (data.id < -20) { //进行怪物寻路 } }
internal static Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> > ReadBuildingModel(string dir, int sheetIndex) { FileInfo file = new FileInfo(dir); ExcelPackage package = new ExcelPackage(file); Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> > buildingModelList = null; if (package.Workbook.Worksheets.Count > 0) { buildingModelList = new Dictionary <int, KeyValuePair <AbsFightModel, BuildingModel> >(); ExcelWorksheet excelWorksheet = package.Workbook.Worksheets[sheetIndex]; for (int m = excelWorksheet.Dimension.Start.Row + 1, n = excelWorksheet.Dimension.End.Row; m <= n; m++) { BuildingModel buildingModel = new BuildingModel(); AbsFightModel fightModel = new AbsFightModel(); fightModel.category = excelWorksheet.GetValue <byte>(m, 1); fightModel.specieId = excelWorksheet.GetValue <int>(m, 3); fightModel.name = excelWorksheet.GetValue <string>(m, 4); fightModel.maxHp = excelWorksheet.GetValue <int>(m, 7); fightModel.atk = excelWorksheet.GetValue <int>(m, 8); fightModel.def = excelWorksheet.GetValue <int>(m, 9); fightModel.atkSpeed = excelWorksheet.GetValue <int>(m, 10); fightModel.atkRange = excelWorksheet.GetValue <int>(m, 11); fightModel.eyeRange = excelWorksheet.GetValue <int>(m, 12); buildingModel.couldAttack = excelWorksheet.GetValue <bool>(m, 13); buildingModel.isAntiStealth = excelWorksheet.GetValue <bool>(m, 14); buildingModel.isReborn = excelWorksheet.GetValue <bool>(m, 15); buildingModel.rebornTime = excelWorksheet.GetValue <int>(m, 16); buildingModelList.Add(fightModel.category.GetHashCode() + fightModel.specieId.GetHashCode(), new KeyValuePair <AbsFightModel, BuildingModel>(fightModel, buildingModel)); } } package.Dispose(); return(buildingModelList); }
private AbsFightInstance GetSoilderInstance(byte teamId, int posId) { entityMinIndex--; AbsFightModel soilderModel = SoilderData.SoilderModels[teamId]; AbsFightInstance soilderInstance = new AbsFightInstance(); soilderInstance.instanceId = entityMinIndex; soilderInstance.name = soilderModel.name; soilderInstance.fightModel = soilderModel; soilderInstance.teamId = teamId; soilderInstance.atk = soilderModel.atk; soilderInstance.def = soilderModel.def; soilderInstance.hp = soilderModel.maxHp; soilderInstance.atkRange = soilderModel.atkRange; soilderInstance.speed = soilderModel.speed; soilderInstance.atkSpeed = soilderModel.atkSpeed; soilderInstance.eyeRange = soilderModel.eyeRange; if (teamId == 1) { soilderInstance.posX = MapData.soilderBornPointTeamOne[posId].x; soilderInstance.posY = MapData.soilderBornPointTeamOne[posId].y; soilderInstance.posZ = MapData.soilderBornPointTeamOne[posId].z; } else { soilderInstance.posX = MapData.soilderBornPointTeamTwo[posId].x; soilderInstance.posY = MapData.soilderBornPointTeamTwo[posId].y; soilderInstance.posZ = MapData.soilderBornPointTeamTwo[posId].z; } return(soilderInstance); }
//伤害计算 public void damage(int level, ref AbsFightModel atk, ref AbsFightModel target, ref List <int[]> damages) { int value = atk.atk - target.def; value = value > 0 ? value : 1; target.hp = target.hp - value <= 0 ? 0 : target.hp - value; damages.Add(new int[] { target.id, value, target.hp == 0 ? 0 : 1 }); }
void damage(NetFrame.UserToken token, DamageDTO value) { int userID = getUserID(token); AbsFightModel atkModel; int skillLevel = 0; //判断攻击者 if (value.userId >= 0) { if (value.userId != userID) { return; } atkModel = getPlayer(userID); if (value.skill > 0) { skillLevel = (atkModel as FightPlayerModel).SkillLevel(value.skill); if (skillLevel == -1) { return; } } } else { atkModel = getPlayer(userID); } //TODO //获取技能算法 //循环获取目标数据 和攻击者数据 进行伤害计算 得出伤害数值 if (!SkillProcessMap.has(value.skill)) { return; } ISkill skill = SkillProcessMap.get(value.skill); List <int[]> damages = new List <int[]>(); foreach (int[] item in value.target) { AbsFightModel target = getPlayer(item[0]); skill.damage(skillLevel, ref atkModel, ref target, ref damages); //Console.WriteLine("计算伤害值"); if (target.hp == 0) { switch (target.type) { case ModelType.HUMAN: if (target.id > 0) { //击杀英雄 //启动定时任务 指定时间之后发送英雄复活信息 并且将英雄数据设置为满状态 } else { //击杀小兵 //移除小兵数据 } break; case ModelType.BUILD: //打破了建筑 给钱 break; } } } value.target = damages.ToArray(); brocast(FightProtocol.DAMAGE_BRO, value); }
private void damage(UserToken token, DamageDTO value) { AbsFightModel atkPlayer = null; int userId = getUserId(token); int skillLevel = 0; int atkTeam = 0; FightModelType atkType; if (value.id > 0) { if (value.id != userId) { return; } atkPlayer = getPlayer(userId); if (value.skill > 0) { skillLevel = (atkPlayer as FightPlayerModel).skillLevel(value.skill); if (skillLevel == -1) { return; } } atkTeam = getPlayerTeam(userId); atkType = FightModelType.HUMAN; } else { //TODO 如果ID小于0的话 则为炮塔或者小兵 需要判断目标是否为用户 if (value.id >= -20) { atkType = FightModelType.BUILD; } else { atkType = FightModelType.HUMAN; } } if (!SkillProcessMap.has(value.skill)) { return; } ISkill skill = SkillProcessMap.get(value.skill); List <int[]> damages = new List <int[]>(); foreach (int[] item in value.targetDamage) { AbsFightModel beatk = null; int beTeam = 0; FightModelType beatkType; if (item[0] > 0) { beatk = getPlayer(item[0]); beTeam = getPlayerTeam(item[0]); beatkType = FightModelType.HUMAN; } else { if (item[0] >= -20) { if (item[0] >= -10) { beatk = teamOneBuildMap[item[0]]; beTeam = 1; } else { beatk = teamTwoBuildMap[item[0]]; beTeam = 2; } beatkType = FightModelType.BUILD; } else { //TODO这里是小兵了 beatkType = FightModelType.HUMAN; } } skill.damage(skillLevel, ref atkPlayer, ref beatk, atkType, beatkType, atkTeam == beTeam, ref damages); if (beatk.hp == 0) { if (beatk.id > 0) { //说明是英雄 给予击杀者奖金 } else if (beatk.id < -20) { //说明是小兵 给予周围辅助 辅助金 } else { //说明是炮台 判断是否拥有复活能力 给予全体奖金 } } } DamageDTO dto = new DamageDTO(); dto.id = value.id; dto.skill = value.skill; dto.targetDamage = damages.ToArray(); brocast(FightProtocol.DAMAGE_BRO, dto); }
private void Damage(UserToken token, DamageDTO value) { int userId = GetUserId(token); AbsFightModel atkModel; int skillLevel = 0; //判断攻击者是玩家英雄 还是小兵 if (value.UserID >= 0) { if (value.UserID != userId) { return; } atkModel = GetPlayer(userId); if (value.Skill > 0) { skillLevel = (atkModel as FightPlayerModel).SkillLevel(value.Skill); if (skillLevel == -1) { return; } } } else { //TODO: atkModel = GetPlayer(userId); } //获取技能算法 //循环获取目标数据 和攻击者数据 进行伤害计算 得出伤害数值 if (!SkillProcessMap.Has(value.Skill)) { return; } ISkill skill = SkillProcessMap.Get(value.Skill); List <int[]> damages = new List <int[]>(); foreach (int[] item in value.Targets) { AbsFightModel target = GetPlayer(item[0]); skill.Damage(skillLevel, ref atkModel, ref target, ref damages); if (target.Hp == 0) { switch (target.Type) { case ModelType.HUMAN: if (target.Id > 0) { //击杀英雄 //启动定时任务 指定时间之后发送英雄复活信息 并且将英雄数据设置为满状态 } else { //击杀小兵 //移除小兵数据 } break; case ModelType.BUILD: //打破了建筑 给钱 break; } } } value.Targets = damages.ToArray(); Brocast(FightProtocol.DAMAGE_BRO, value); }
public void refreshView(AbsFightModel model) { hpSlider.value = model.hp / model.maxHp; levelText.text = ((FightPlayerModel)model).level.ToString(); }