Exemplo n.º 1
0
		public override void onDefence(BattleFighter attacker, BattleFighter owner)
		{
			if (!attacker.Hero)
			{
				return;
			}
			//˯Ãß״̬²»»á´ò»¤¶Ü
			if (attacker.hasState(BattleConstants.ATTACK_ZERO_FLAG))
			{
				return;
			}
			BattleFighterBuff _buff = owner.BuffManager.getBattleBuff(this);
			if (_buff == null)
			{
				// TODO: loggers.error
				return;
			}

			int _shieldOrder = getCurShieldOrder(_buff);
			if (isShieldOff(_shieldOrder))
			{
				Logger.Log(string.Format("shield off, index = {0:D}", owner.Index));
				return;
			}

			int _resultShield = hitShield(attacker, _shieldOrder);

			Logger.Log(string.Format("shield refresh, index = {0:D}, value = {1:D}", owner.Index, _resultShield));

			_buff.setParam(BattleKeyConstants.BATTLE_BUFF_CUR_SHIELD_ORDER, _resultShield);

			checkShieldBreak(owner, _buff, _resultShield);
		}
Exemplo n.º 2
0
		public override List<BattleFighter> getTarget(BattleFighter attacker, BattleTeam defencerTeam)
		{
			List<BattleFighter> _curFighterList = new List<BattleFighter>();
			BattleFighter _fighter = defencerTeam.getActor(index);
			_curFighterList.Add(_fighter);
			return _curFighterList;
		}
Exemplo n.º 3
0
		public BattleHeroSkillManager(BattleFighter fighter, HeroTeam ownerTeam) : base(fighter)
		{
			// TODO: 这里之后是单例的Action
			this.ownerTeam = ownerTeam;
			init();
			// TODO: 以后重构
		}
Exemplo n.º 4
0
		public static int calcBattleFighterCurHpPercent(int percent, BattleFighter fighter)
		{
			float _totalHp = fighter.FighterCurHp;
			float _percent = percent;
			float _costHp = _totalHp * (_percent / BattleConstants.BATTLE_RATIO_BASE);
			return (int) _costHp;
		}
Exemplo n.º 5
0
		/// <summary>
		/// S1=(武将战斗中攻击力*(1+无双技能加成倍数)-怪物防御力)*伤害加成倍数*弱点加成倍数*带盾减伤倍数*(1-减伤比)*攻击次数
		/// </summary>
		/// <param name="attacker"> </param>
		/// <param name="defencer"> </param>
		/// <param name="fightRecord"> </param>
		public virtual void onAttack(BattleFighter attacker, BattleFighter defencer, BattleFightRecord fightRecord)
		{
			// TODO: afterAttack在其他effect也可能会涉及
			SingleActionRecord _record = initDefenceRecord(defencer, fightRecord);

			float _attack = getAttack(attacker);
			float _spValMuti = this.attackValMuti / BattleConstants.BATTLE_RATIO_BASE;
			float _defence = defencer.Defence;
			float _indexValMuti = calcIndexRatio(attacker);
			float _weakRatio = calcJobWeakValue(attacker, defencer);
			float _damageMuti = calcDamageModify(attacker.DamageMuti);
			float _damageFree = calcDamageModify(defencer.DamageFree);

			_attack = calcSingleDamage(_attack, _defence, _indexValMuti, _spValMuti, _weakRatio, _damageMuti, _damageFree);

			_attack = calcAttackerState(attacker, _attack);

			_attack = calcDefencerState(defencer, _attack);

			float _costHpFloat = _attack * this.hitCount;
			// 四舍五入
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int _costHp = com.kx.sglm.core.util.MathUtils.float2Int(_costHpFloat);
			int _costHp = MathUtils.float2Int(_costHpFloat);

			costHp(_costHp, defencer, _record);

			recordDamageInfo(attacker.Battle, (int) _attack, _record);

			fightRecord.finishCurDefecner();

			Console.WriteLine("Fighter fight costHp " + _costHp);
		}
Exemplo n.º 6
0
		/// <summary>
		/// 初始化必要的数据:攻击者动作类型,攻击者初始数据
		/// </summary>
		/// <param name="actType"> </param>
		/// <param name="attacker"> </param>
		/// <param name="fightRecord"> </param>
		public static void initBattleFight(int actType, BattleFighter attacker, BattleFightRecord fightRecord)
		{
			fightRecord.SourceIndex = attacker.Index;
			SingleActionRecord _attackAction = fightRecord.OrCreateAttack;
			_attackAction.ActType = actType;
			initSingleRecord(attacker, _attackAction);
		}
Exemplo n.º 7
0
		protected internal override void onSingleAction(BattleFighter attacker, BattleFighter defencer, SkillDataHolder resultData)
		{
			foreach (int _buffId in buffIds)
			{
				defencer.addBuff(new BuffInfo(_buffId, buffCondition));
			}
		}
Exemplo n.º 8
0
		public override List<BattleFighter> getTarget(BattleFighter attacker, BattleTeam targetTeam)
		{
			List<BattleFighter> _curFighterList = new List<BattleFighter>();
			_curFighterList.Add(attacker);
			return _curFighterList;

		}
		/// <summary>
		/// 核心方法,执行技能动作
		/// </summary>
		/// <param name="attacker"> </param>
		/// <param name="record"> </param>
		internal virtual void optionAction(BattleFighter attacker, BattleFightRecord record)
		{
			// 创建一个供不同动作之间数据沟通的记录
			SkillDataHolder _holder = new SkillDataHolder();
			// 动作分两步
			// 准备数据
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.List<com.kx.sglm.gs.battle.share.actor.impl.BattleFighter> _enemyList = calcTargetList(attacker, true);
			List<BattleFighter> _enemyList = calcTargetList(attacker, true);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.List<com.kx.sglm.gs.battle.share.actor.impl.BattleFighter> _friendList = calcTargetList(attacker, false);
			List<BattleFighter> _friendList = calcTargetList(attacker, false);
			List<ISkillEffect> _activeEffects = calcActiveEffectByRate();

			_holder.Record = record;
			_holder.Attacker = attacker;
			_holder.EnemyList = _enemyList;
			_holder.FriendList = _friendList;
			_holder.ActiveEffect = _activeEffects;

			// 执行动作内容
			optionEffectAction(_holder);
			// 执行动作后操作
			optionAfterAction(_holder);

		}
Exemplo n.º 10
0
		public BattleBuffManager(BattleFighter owner)
		{
			this.owner = owner;
			allBuffs = new Dictionary<int, BattleFighterBuff>();
			buffHolderMap = new Dictionary<int, BuffTypeHolder>();
			debuffHolderMap = new Dictionary<int, BuffTypeHolder>();
		}
Exemplo n.º 11
0
		public override List<BattleFighter> getTarget(BattleFighter attacker, BattleTeam targetTeam)
		{
			List<BattleFighter> _curFighterList = new List<BattleFighter>();
			int _index = attacker.getOwnerTeam().getIntProp(BattleKeyConstants.BATTLE_KEY_HERO_TEAM_TARGET);
			BattleFighter _fighter = targetTeam.getActor(_index);
			_curFighterList.Add(_fighter);
			return _curFighterList;
		}
Exemplo n.º 12
0
		public BattleFighterBuff(BattleFighter owner, IBuffAction buffAction)
		{
			this.buffAction = buffAction;
			this.owner = owner;
			this.stackingList = new LinkedList<BuffStackInfo>();
			this.paramMap = new Dictionary<int, int>();
			this.permanent = buffAction.CDRound <= 0;
		}
Exemplo n.º 13
0
		public virtual BattleFighterBuff putBuff(BattleFighter owner, BuffInfo info)
		{
			IBuffAction _buffAction = info.BuffAction;
			BattleFighterBuff _buff = createBattleFighterBuff(owner, _buffAction);
			buffMap[_buffAction.TypeB] = _buff;
			_buff.stackingBuff(info);
			return _buff;
		}
Exemplo n.º 14
0
		public override List<BattleFighter> getTarget(BattleFighter attacker, BattleTeam targetTeam)
		{
			List<BattleFighter> _curFighterList = new List<BattleFighter>();
			List<BattleFighter> _fighters = targetTeam.AllBattingFighter;
			int _index = MathUtils.random(0, _fighters.Count - 1);
			BattleFighter _fighter = _fighters[_index];
			_curFighterList.Add(_fighter);
			return _curFighterList;
		}
Exemplo n.º 15
0
		public static void refreshState(BattleFighter fighter)
		{
			fighter.refreshState();
			List<BattleFighterState> _stateList = fighter.BuffManager.AllFighterState;
			foreach (BattleFighterState _state in _stateList)
			{
				fighter.addState(_state);
			}
		}
Exemplo n.º 16
0
		public override void onAction(BattleFighter attacker, List<BattleFighter> defencerList, SkillDataHolder resultData)
		{
			initRecord(attacker, resultData.Record);
			foreach (BattleFighter _defencer in defencerList)
			{
				onSingleAction(attacker, _defencer, resultData);
			}

		}
Exemplo n.º 17
0
		protected internal override float recoverOption(BattleFighter attacker, BattleFighter defencer)
		{
			float _totalHp = attacker.BattleTotalHp;
			float _ratio = percent / BattleConstants.BATTLE_RATIO_BASE;
			float _recover = _totalHp * _ratio + baseValue;
			_recover = BattleLogicHelper.calcAttackerState(attacker, _recover);
			attacker.changeFighterHp((int)_recover);
			return _totalHp * _ratio;
		}
Exemplo n.º 18
0
		public static float calcAttackerState(BattleFighter attacker, float damage)
		{
			float _resultDamage = damage;
			if (attacker.hasState(BattleConstants.ATTACK_ZERO_FLAG))
			{
				_resultDamage = 0;
			}
			return _resultDamage;
		}
Exemplo n.º 19
0
		public override bool canOption(BattleFighter attacker)
		{
			if (attacker.Hero)
			{
				Logger.Log(string.Format("#AIHpLeftLessCondition.canOption, attacker is hero, uuid = {0:D}", attacker.Battle.BattleSource.Uuid));
				return false;
			}
			return leftHpPercent >= attacker.FighterCurHpPercent;
		}
Exemplo n.º 20
0
		public override bool canOptionSkill(BattleFighter attacker)
		{
			if (!attacker.Hero)
			{
				return false;
			}
			BattleTeam _team = attacker.getOwnerTeam();
			int _curFighterCount = _team.CurTeamShotFighterCount;
			return _curFighterCount >= pointCount;
		}
Exemplo n.º 21
0
		protected internal override void onSingleAction(BattleFighter attacker, BattleFighter defencer, SkillDataHolder resultData)
		{
			HeroColor _color = HeroColor.getValue(colorIndex);
			BattleFightRecord _record = resultData.Record;
			SingleActionRecord _singleRecord = _record.OrCreateDefence;
			_singleRecord.ActType = BattleRecordConstants.SINGLE_ACTION_TYPE_CHANGED_COLOR;
			BattleRecordHelper.initSingleRecord(defencer, _singleRecord);
			defencer.changeColor(_color, _singleRecord);
			_record.finishCurDefecner();
		}
Exemplo n.º 22
0
		public override void onTeamBeforeAttack(BattleFighter fighter)
		{
			//TODO: 这里要优化和调试,战斗Record还是有些不顺
			BattleTeamFightRecord _teamRecord = fighter.Battle.Record.OrCreateTeamFighterRecord;

			BattleFightRecord _record = _teamRecord.OrCreateRecord;

			fighter.SkillManager.useSkill(skillId, _record);

			_teamRecord.finishCurRecord();
		}
Exemplo n.º 23
0
		protected internal virtual int hitShield(BattleFighter attacker, int shieldOrder)
		{
			HeroColor _curColor = attacker.getOwnerTeam().CurFightColor;
			int _curShieldOrder = shieldOrder % 10;
			int _resultValue = shieldOrder;
			if (_curColor.Index == _curShieldOrder)
			{
				_resultValue = shieldOrder / 10;
			}
			return _resultValue;
		}
Exemplo n.º 24
0
		public override bool canOptionSkill(BattleFighter attacker)
		{
			if (!attacker.Hero)
			{
				return false;
			}
			BattleTeam _fighterTeam = attacker.getOwnerTeam();
			int _realIndex = _fighterTeam.getCurTeamShotFighterIndex(attacker);

			return nIndex == _realIndex;
		}
Exemplo n.º 25
0
		private int calcResultFlag(BattleFighter attacker, BattleTeam targetTeam)
		{
			int _targetFlag = 0xffff;
			foreach (ISkillTargetGetter _targetGetter in targetGetterList)
			{
				List<BattleFighter> _targetFighterList = _targetGetter.getTarget(attacker, targetTeam);
				int _curFlag = calcTargetFlag(_targetFighterList);
				_targetFlag &= _curFlag;
			}
			return _targetFlag;
		}
Exemplo n.º 26
0
		protected internal virtual List<BaseHeroBattleSkillAction> getSkillAction(int trigger, BattleFighter attacker)
		{
			List<BaseHeroBattleSkillAction> _actionList = new List<BaseHeroBattleSkillAction>();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.kx.sglm.gs.battle.share.skill.model.SkillActionHolder _holder = actionHolderArr[trigger];
			SkillActionHolder _holder = actionHolderArr[trigger];
			if (_holder != null)
			{
				_actionList.AddRange(_holder.getActAction(attacker));
			}
			return _actionList;
		}
Exemplo n.º 27
0
		public virtual List<BaseHeroBattleSkillAction> getActAction(BattleFighter attacker)
		{
			List<BaseHeroBattleSkillAction> _toActList = new List<BaseHeroBattleSkillAction>();
			foreach (BaseHeroBattleSkillAction _action in skillActionList)
			{
				if (_action.canOption(attacker))
				{
					_toActList.Add(_action);
				}
			}
			return _toActList;
		}
Exemplo n.º 28
0
		protected internal override void initRecord(BattleFighter attacker, BattleFightRecord fightRecord)
		{
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final com.kx.sglm.gs.battle.share.actor.impl.BattleTeam _attackerTeam = attacker.getOwnerTeam();
			BattleTeam _attackerTeam = attacker.getOwnerTeam();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int _targetIndex = _attackerTeam.getIntProp((com.kx.sglm.gs.battle.share.BattleKeyConstants.BATTLE_KEY_HERO_TEAM_TARGET));
			int _targetIndex = _attackerTeam.getIntProp((BattleKeyConstants.BATTLE_KEY_HERO_TEAM_TARGET));
			BattleRecordHelper.initBattleFight(AttackType, attacker, fightRecord);
			SingleActionRecord _attackAction = fightRecord.OrCreateAttack;
			_attackAction.addProp(BattleRecordConstants.SINGLE_ACTION_PROP_ATTACK_TARGET, _targetIndex);
		}
Exemplo n.º 29
0
		public override List<BattleFighter> getTarget(BattleFighter attacker, BattleTeam targetTeam)
		{
			List<BattleFighter> _fighterList = new List<BattleFighter>();
			List<BattleFighter> _baseFighters = getBaseFighter(targetTeam);
			foreach (BattleFighter _fighter in _baseFighters)
			{
				if (isFitFlag(_fighter))
				{
					_fighterList.Add(_fighter);
				}
			}
			return _fighterList;
		}
Exemplo n.º 30
0
		protected internal virtual List<BattleFighter> calcTargetList(BattleFighter attacker, BattleTeam targetTeam)
		{
			int _targetFlag = calcResultFlag(attacker, targetTeam);

			List<BattleFighter> _resultTarget = new List<BattleFighter>();
			int _teamSize = targetTeam.allActorSize();
			for (int _i = 0; _i < _teamSize; _i++)
			{
				if (MathUtils.hasFlagIndex(_targetFlag, _i))
				{
					_resultTarget.Add(targetTeam.getActor(_i));
				}
			}
			return _resultTarget;
		}