//构建改变属性 private void createAttrChange(BattleDataErlang battleData, BattleSkillMsg msg, ErlArray array) { //被改变者id string str1 = array.Value [0].getValueString(); int[] arrInt1 = new int[1] { StringKit.toInt(str1) }; msg.targets = arrInt1; //改变的具体属性 数字代替 string str2 = array.Value [1].getValueString(); msg.valueType = StringKit.toInt(str2); //具体数值 string str3 = array.Value [2].getValueString(); msg.damage = StringKit.toInt(str3); if (msg.valueType == 1) { BattleHpInfo info = null; if (battleData.hpMap.ContainsKey(msg.targets [0])) { info = battleData.hpMap [msg.targets [0]]; } else { info = new BattleHpInfo(); battleData.hpMap.Add(msg.targets [0], info); } info.hp += msg.damage; } }
public void skipBattle() { List <CharacterData> ctrlList = getActionCharacters(); foreach (CharacterData characterData in ctrlList) { if (battleData.hpMap.ContainsKey(characterData.serverID)) { if (characterData == null || characterData.characterCtrl == null || characterData.characterCtrl.HpBar == null) { continue; } BattleHpInfo info = battleData.hpMap [characterData.serverID]; int hp = Mathf.Max(characterData.fixedServer_hp + info.hp, 0); characterData.server_hp = hp; characterData.characterCtrl.HpBar.updateValue(characterData.server_hp, characterData.server_max_hp); characterData.characterCtrl.HpBar.lockBar(); //替补战中 主力死了激活替补 //battleData.battleType =BattleType.BATTLE_SUBSTITUTE; if (characterData.server_hp <= 0 && battleData.battleType == BattleType.BATTLE_SUBSTITUTE) { switchPlayerInSkillBattle(characterData); } } } battleOver(); }
void switchPlayerInSkillBattle(CharacterData characterData) { //队伍管理器里的队伍逻辑数据中找出对应替补 BattleTeamManager teamM = characterData.parentTeam; TeamInfoPlayer sub = teamM.teamInfo.getSubstitute(characterData.TeamPosIndex); //替补战的情况,主力死了换替补上来显示 if (sub != null) { //主力下场 characterData.characterCtrl.outBattleField(); teamM.players.Remove(characterData); for (int i = 0; i < teamM.players.Count; i++) { if (teamM.players[i].serverID == sub.id) { return; } } //创建替补的战斗用数据 CharacterData subData = BattleCharacterManager.Instance.CreateBattleCharacterData(sub, teamM, BattleManager.battleData.battleType); teamM.players.Add(subData); teamM.CreateCharacterInstance(subData); //创建图像实例 //计算新上来的替补的最终血量 if (battleData.hpMap != null && subData != null && battleData.hpMap.ContainsKey(subData.serverID)) { BattleHpInfo info = battleData.hpMap [subData.serverID]; int hp = Mathf.Max(subData.fixedServer_hp + info.hp, 0); subData.server_hp = hp; subData.characterCtrl.HpBar.updateValue(subData.server_hp, subData.server_max_hp); subData.characterCtrl.HpBar.lockBar(); } } }
private void createRoundBuffer(BattleDataErlang battleData, ErlList el, int frame) { // 处理回合开始buffer // [{"15",{9,27003,34}}, // {"5",{9,1,-258}}, // {"15",{15,27003,33}}, // {"5",{15,1,-266}}, // {"14",{15,27003,33}}] //建立每一个战斗回合 BattleClipErlang battleClip = new BattleClipErlang(); battleClip.frame = frame; battleData.battleClip.Add(battleClip); //建立每个战斗条目 BattleInfoErlang battleInfo = new BattleInfoErlang(); battleClip.battleInfo.Add(battleInfo); BattleSkillErlang skillerlang = new BattleSkillErlang(); battleInfo.battleSkill.Add(skillerlang); BattleSkillMsg msg = new BattleSkillMsg(); skillerlang.skillMsg = msg; msg.operationType = BUFFER_CHECK; List <BuffAttrChange> bcs = new List <BuffAttrChange> (); BuffAttrChange bc; List <BattleAttrChange> acs; BattleAttrChange ac; ErlArray ea1; ErlArray ea2; string type; //类型 int length = el.Value.Length; for (int i = 0; i < length; i++) { ea1 = el.Value [i] as ErlArray; type = (ea1.Value [0] as ErlString).Value; if (type == BUFFER_ABILITY) //buffer生效 { bc = new BuffAttrChange(); ea2 = ea1.Value [1] as ErlArray; bc.operationType = type; bc.skillSID = StringKit.toInt(ea2.Value [1].getValueString()); // MonoBase. print("bc.skillID "+bc.skillID ); bc.skillID = StringKit.toInt(ea2.Value [2].getValueString()); acs = new List <BattleAttrChange> (); //装在效果 do { ea1 = el.Value [++i] as ErlArray; ea2 = ea1.Value [1] as ErlArray; ac = new BattleAttrChange(); ac.damageType = StringKit.toInt(ea2.Value [1].getValueString()); ac.damage = StringKit.toInt(ea2.Value [2].getValueString()); //BattleDataErlang battleDate=BattleManager.battleData; BattleHpInfo info = null; if (battleData.hpMap.ContainsKey(StringKit.toInt(ea2.Value [0].getValueString()))) { info = battleData.hpMap [StringKit.toInt(ea2.Value [0].getValueString())]; } else { info = new BattleHpInfo(); battleData.hpMap.Add(StringKit.toInt(ea2.Value [0].getValueString()), info); } info.hp += ac.damage; acs.Add(ac); } while(i < length - 1 && ((el.Value[i + 1] as ErlArray).Value[0] as ErlString).Value != BUFFER_ABILITY && ((el.Value[i + 1] as ErlArray).Value[0] as ErlString).Value != BUFFER_REMOVE); bc.changes = acs.ToArray(); bcs.Add(bc); } else if (type == BUFFER_REMOVE) //移除buffer { bc = new BuffAttrChange(); ea2 = ea1.Value [1] as ErlArray; bc.operationType = type; bc.skillSID = StringKit.toInt(ea2.Value [1].getValueString()); bc.skillID = StringKit.toInt(ea2.Value [2].getValueString()); bcs.Add(bc); } else { } } msg.changes = bcs.ToArray(); }