Пример #1
0
	void OnSoulStone( AsIMessage _msg)
	{
		Msg_CharSkillSoulStone soul = _msg as Msg_CharSkillSoulStone;
		soul.SetPlayerFsm( this);

		eGENDER gender = m_Entity.GetProperty<eGENDER>(eComponentProperty.GENDER);
		Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( soul.soul_.nSkillTableIdx, soul.soul_.nSkillLevel, gender);
		ready.SetCurrentTarget( Target);

		if( ready.skillRecord.CheckNonAnimation() == true)
		{
			TargetDecider.sTargeting_AsSlot( this, ready.skillRecord);

			if( TargetDecider.CheckValidSkill( this, ready.skillRecord) == false)
				return;

			if( TargetDecider.TargetSkillCheck( ready.skillRecord.Index, this) == false)
				return;

			int mainTargetIdxNpc = 0;
			uint mainTargetIdxUser = 0;

			TargetDecider decider = new TargetDecider();			
			if( decider.SetTarget( this, ready) == true)
			{
				mainTargetIdxNpc = decider.listTargets_Npc[0];
				mainTargetIdxUser = decider.listTargets_User[0];

				if( mainTargetIdxNpc != int.MaxValue && mainTargetIdxUser != uint.MaxValue)
				{
					AS_CS_CHAR_ATTACK_NPC attack = new AS_CS_CHAR_ATTACK_NPC( ready.skillLvRecord.Skill_GroupIndex,
						ready.skillLvRecord.Skill_Level, ready.actionRecord.Index,
						0, false, false, ready.itemSlot,
						decider.listTargets_Npc , decider.listTargets_User, ready.picked, transform.forward,
						decider.decidedEntities.TargetCount, decider.decidedEntities.CharCount,
						decider.decidedEntities.listTarget.ToArray(), decider.decidedEntities.listChar.ToArray());
					
					attack.SetEquipSlot( soul.soul_.eEquipSlot);

//					if( showSendingPacket == true)
//					{
						Tbl_Action_Record action = AsTableManager.Instance.GetTbl_Action_Record( attack.nActionTableIdx);

						Debug.Log( "OnActionItem::SendingPacket: action name=" + action.ActionName +
							" skill index=" + attack.nSkillTableIdx +
							" skill level=" + attack.nSkillLevel + " action index=" + attack.nActionTableIdx +
							" charge step=" + attack.nChargeStep + " casting=" + attack.bCasting + " attack.nSlot =" + attack.nSlot +
							" main target id=" + attack.nNpcIdx[0] + " skill pos=" + attack.sTargeting +
							" transform.forward=" + transform.forward);
//					}

					byte[] bytes = attack.ClassToPacketBytes();
					AsCommonSender.Send( bytes);
				}
			}
		}
	}
Пример #2
0
	bool CheckSkillMovable( Msg_Player_Skill_Ready _ready)
	{
		Tbl_Action_HitAnimation hitAnim = _ready.actionRecord.HitAnimation;
		if( hitAnim == null)
			return true;

		switch( hitAnim.MoveType)
		{
		case eHitMoveType.Dash:
		case eHitMoveType.TargetDash:
		case eHitMoveType.TabDash:
			float moveDist = hitAnim.MoveDistance * 0.01f;
			Vector3 dir = Vector3.zero;

			switch( _ready.skillRecord.Attack_Direction)
			{
			case eATTACK_DIRECTION.Camera:
				dir = Camera.mainCamera.transform.position;
				break;
			case eATTACK_DIRECTION.FingerPoint:
			case eATTACK_DIRECTION.LineEnd:
				dir = GetWorldPositionFromCamera( _ready.tail);
				break;
			case eATTACK_DIRECTION.LineMiddle:
				dir = GetWorldPositionFromCamera( _ready.center);
				break;
			case eATTACK_DIRECTION.LineStart:
				dir = GetWorldPositionFromCamera( _ready.head);
				break;
			case eATTACK_DIRECTION.Target:
				if( Target != null)
					dir = Target.transform.position;
				else
					return false;
				break;
			default:
				return true;
			}

			dir = dir - transform.position; dir.Normalize();
			Vector3 dest = dir * moveDist + transform.position;
			float dist = m_Entity.GetNavPathDistance( transform.position, dest, true);
			if( dist > moveDist + 0.1f) // revision
				return false;
			else
				return true;
		default:
			return true;
		}
	}
Пример #3
0
	void OnSkillDoubleTap( AsIMessage _msg)
	{
		Msg_Input_DoubleTab doubleTap = _msg as Msg_Input_DoubleTab;
		
		if( AsPStoreManager.Instance.UnableActionByPStore() == true)
		{
			if( doubleTap.type_ == Msg_Input_DoubleTab.eDoubleTabType.Player)
				m_CurrentFsmState.MessageProcess( new Msg_OpenPrivateShopUI());

			return;
		}

		if( CheckSpecificWindowOpened() == true)
			return;

//		if( CheckMap_Village() == true)
//		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
//			return;
//		}

		if( WeaponEquip == false)
		{
			AsMyProperty.Instance.AlertNoWeapon();
			return;
		}

		eCLASS __class = UserEntity.GetProperty<eCLASS>( eComponentProperty.CLASS);
		Tbl_Skill_Record skill = null;
		int idx = -1;
		eCommandPicking_Type pickingType = eCommandPicking_Type.NONE;

		switch( doubleTap.type_)
		{
		case Msg_Input_DoubleTab.eDoubleTabType.Terrain:
		case Msg_Input_DoubleTab.eDoubleTabType.OtherUser:
		case Msg_Input_DoubleTab.eDoubleTabType.Monster:
			idx = (int)COMMAND_SKILL_TYPE._DOUBLE_TAP_MONSTER;
			pickingType = eCommandPicking_Type.FingerPoint;
			break;
		case Msg_Input_DoubleTab.eDoubleTabType.Player:
			idx = (int)COMMAND_SKILL_TYPE._DOUBLE_TAP_PLAYER;
			pickingType = eCommandPicking_Type.Self;
			break;
//		case Msg_Input_DoubleTab.eDoubleTabType.OtherUser:
//			idx = (int)COMMAND_SKILL_TYPE._DOUBLE_TAP_OTHERUSER;
//			break;
//		case Msg_Input_DoubleTab.eDoubleTabType.Monster:
//			idx = (int)COMMAND_SKILL_TYPE._DOUBLE_TAP_MONSTER;
//			pickingType = eCommandPicking_Type.Enemy;
//			break;
		}

//		skill = AsTableManager.Instance.GetTbl_Skill_RecordByPickingType( __class, pickingType);
		skill = SkillBook.Instance.GetLearnedDoubleTapSkill( pickingType);
		if( null == skill)
			return;

		if( SkillBook.Instance.dicCurSkill.ContainsKey( skill.Index) == false)
			return;

		else if( CheckMap_Village() == true)
		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
			AsMyProperty.Instance.AlertSkillInTown();
			return;
		}

		if( AsUserInfo.Instance.CommandSkillCoolTimeCompletion[idx] == true)
		{
			if( false == IsAvailableDoubleTapSkill( __class, pickingType))
				return;

			if( skill == null)
			{
				Debug.LogError( "AsPlayerFsm::OnSkillDoubleTap: this character[" + __class + "] doesnt have [" + doubleTap.type_ + "]type skill");
				return;
			}

			eGENDER gender = UserEntity.GetProperty<eGENDER>( eComponentProperty.GENDER);

			AsBaseEntity entity = AsEntityManager.Instance.GetEntityByInstanceId( doubleTap.input_.inputObject_.GetInstanceID());
			Vector3 skillPos = Vector3.zero;
			if( entity == null)
				skillPos = doubleTap.input_.worldPosition_;
			else
				skillPos = entity.transform.position;

			Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( skill, gender, 1,
				entity, skillPos,
				doubleTap.input_.screenPosition_, doubleTap.input_.screenPosition_, doubleTap.input_.screenPosition_,
				doubleTap.input_.worldPosition_ - m_Entity.transform.position, eClockWise.CW);

//			if( ready.constructSucceed == true)
//				m_CurrentFsmState.MessageProcess( ready);

			if( ready.constructSucceed == true)
			{
				if( TargetDecider.CheckDisableSkillByMap(ready.skillRecord) == true)
					return;
				
				if( AsCommonSender.CheckSkillUseProcessing() == true)
					return;

				if( m_Entity.CheckCondition( eSkillIcon_Enable_Condition.Movable) == false &&
					ready.skillRecord.CheckSkillUsingOnly_Movable() == true)
				{
					AsMyProperty.Instance.AlertState();
					return;
				}

				if( Vector3.Distance( Entity.transform.position, ready.picked) >
					ready.skillLvRecord.Usable_Distance * 0.01f)// * m_Character_Size)
				{
					Msg_Player_Skill_Target_Move targetMove = new Msg_Player_Skill_Target_Move( ready, AsPlayerState_BattleRun.eRunType.NonTarget);
					m_CurrentFsmState.MessageProcess( targetMove);
				}
				else
					m_CurrentFsmState.MessageProcess( ready);
			}
		}
		else
		{
			AsMyProperty.Instance.AlertCoolTime( ( COMMAND_SKILL_TYPE)idx);
		}
	}
Пример #4
0
	void OnActionItem( AsIMessage _msg)
	{
		if( AsPStoreManager.Instance.UnableActionByPStore() == true)
			return;

		if( CheckSpecificWindowOpened() == true)
			return;

		Msg_Player_Use_ActionItem msg = _msg as Msg_Player_Use_ActionItem;
		ItemData itemData = msg.realItem.item.ItemData;
		Tbl_Skill_Record record = AsTableManager.Instance.GetTbl_Skill_Record( itemData.itemSkill);
		eGENDER gender = UserEntity.GetProperty<eGENDER>( eComponentProperty.GENDER);
		Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( itemData, msg.realItem.getSlot, gender);
		ready.SetCurrentTarget( Target);

		if( CheckMap_Village() == true && ready.constructSucceed == true)
		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
			AsMyProperty.Instance.AlertSkillInTown();
			return;
		}

//		Msg_Player_Use_ActionItem msg = _msg as Msg_Player_Use_ActionItem;
//		ItemData itemData = msg.realItem.item.ItemData;
//		Tbl_Skill_Record record = AsTableManager.Instance.GetTbl_Skill_Record( itemData.itemSkill);

		bool permit = true;

		if( record.Skill_Type == eSKILL_TYPE.SlotBase && m_ElapsedCoolTime_BaseAttack > 0)
			permit = false;

		if( permit == true)
		{
//			eGENDER gender = UserEntity.GetProperty<eGENDER>( eComponentProperty.GENDER);
//			Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( itemData, msg.realItem.getSlot, gender);

			if( ready.constructSucceed == true)
			{
				if( WeaponEquip == false)
				{
					AsMyProperty.Instance.AlertNoWeapon();
					return;
				}

				if( null == msg || null == msg.realItem || msg.realItem.CheckSkillUsable() == false)
					return;

				int iCurLevel = m_Entity.GetProperty<int>( eComponentProperty.LEVEL);
				if( iCurLevel < itemData.levelLimit)
				{
					AsChatManager.Instance.InsertChat( AsTableManager.Instance.GetTbl_String(1651), eCHATTYPE.eCHATTYPE_SYSTEM);
					AsEventNotifyMgr.Instance.CenterNotify.AddTradeMessage( AsTableManager.Instance.GetTbl_String(1651));
					return;
				}

				if( AsCommonSender.CheckSkillUseProcessing() == true)
					return;

				if( m_Entity.CheckCondition( eSkillIcon_Enable_Condition.Movable) == false &&
					ready.skillRecord.CheckSkillUsingOnly_Movable() == true)
				{
					AsMyProperty.Instance.AlertState();
					return;
				}

//				if( SetTargetInActionItem( record) == false)
//					return;
				
				TargetDecider.sTargeting_AsSlot( this, ready.skillRecord);
				
				if( TargetDecider.CheckValidSkill( this, ready.skillRecord) == false)
					return;

				if( m_Target == null &&
					( ready.skillRecord.Skill_Type == eSKILL_TYPE.Target ||
					ready.skillRecord.Skill_Type == eSKILL_TYPE.SlotBase))
					return;
				
				if( TargetDecider.TargetSkillCheck( ready.skillRecord.Index, this) == false)
					return;

				if( ready.CheckValidTargeting( m_Target) == false)
					return;

				if( Target != null &&
					m_Entity.GetNavPathDistance( Entity.transform.position, Target.transform.position, true) >
					ready.skillLvRecord.Usable_Distance * 0.01f)// * m_Character_Size)
				{
					Debug.Log( "AsPlayerFsm::OnSkillActive: msg.skillIdx_ = " + itemData.itemSkill + ", BattleRun state began [time:" + Time.realtimeSinceStartup + "]");
					Msg_Player_Skill_Target_Move targetMove = new Msg_Player_Skill_Target_Move( ready);
					m_CurrentFsmState.MessageProcess( targetMove);
				}
				else
				{
					Debug.Log( "AsPlayerFsm::OnSkillActive: msg.skillIdx_ = " + itemData.itemSkill + ", SkillReady state began [time:" + Time.realtimeSinceStartup + "]");
					m_CurrentFsmState.MessageProcess( ready);
				}
			}
			else if( ready.skillRecord.CheckNonAnimation() == true)
			{
				if( msg.realItem.CheckSkillUsable() == false)
					return;

				int iCurLevel = m_Entity.GetProperty<int>( eComponentProperty.LEVEL);
				if( iCurLevel < itemData.levelLimit)
				{
					AsChatManager.Instance.InsertChat( AsTableManager.Instance.GetTbl_String(1651), eCHATTYPE.eCHATTYPE_SYSTEM);
					AsEventNotifyMgr.Instance.CenterNotify.AddTradeMessage( AsTableManager.Instance.GetTbl_String(1651));
					return;
				}
				
				if( AsCommonSender.CheckSkillUseProcessing() == true)
					return;
				
				TargetDecider.sTargeting_AsSlot( this, ready.skillRecord);
				
				if( TargetDecider.CheckValidSkill( this, ready.skillRecord) == false)
					return;
				
				if( TargetDecider.TargetSkillCheck( ready.skillRecord.Index, this) == false)
					return;

				int mainTargetIdxNpc = 0;
				uint mainTargetIdxUser = 0;

				TargetDecider decider = new TargetDecider();
				if( decider.SetTarget( this, ready) == true)
				{
					mainTargetIdxNpc = decider.listTargets_Npc[0];
					mainTargetIdxUser = decider.listTargets_User[0];

					if( mainTargetIdxNpc != int.MaxValue && mainTargetIdxUser != uint.MaxValue)
					{
						AS_CS_CHAR_ATTACK_NPC attack = new AS_CS_CHAR_ATTACK_NPC( ready.skillLvRecord.Skill_GroupIndex,
							ready.skillLvRecord.Skill_Level, ready.actionRecord.Index,
							0, false, false, ready.itemSlot,
							decider.listTargets_Npc , decider.listTargets_User, ready.picked, transform.forward,
							decider.decidedEntities.TargetCount, decider.decidedEntities.CharCount,
							decider.decidedEntities.listTarget.ToArray(), decider.decidedEntities.listChar.ToArray());

						if( showSendingPacket == true)
						{
							Tbl_Action_Record action = AsTableManager.Instance.GetTbl_Action_Record( attack.nActionTableIdx);

							Debug.Log( "OnActionItem::SendingPacket: action name=" + action.ActionName +
								" skill index=" + attack.nSkillTableIdx +
								" skill level=" + attack.nSkillLevel + " action index=" + attack.nActionTableIdx +
								" charge step=" + attack.nChargeStep + " casting=" + attack.bCasting + " attack.nSlot =" + attack.nSlot +
								" main target id=" + attack.nNpcIdx[0] + " skill pos=" + attack.sTargeting +
								" transform.forward=" + transform.forward);
						}

//						byte[] bytes = attack.ClassToPacketBytes();
//						AsCommonSender.Send( bytes);
						ePotency_Type potencyType = ready.skillRecord.listSkillPotency[0].Potency_Type;
						if( ePotency_Type.NormalHardPlayCount == potencyType || ePotency_Type.HellPlayCount == potencyType || ePotency_Type.HellPlayCountAll == potencyType)
						{
							if( null != AsHudDlgMgr.Instance && null != AsHudDlgMgr.Instance.invenDlg)
							{
								AsHudDlgMgr.Instance.invenDlg.ConfirmIndunCountItem( potencyType, attack, itemData, ready.skillRecord.Index);
							}
						}
						else
						{
							byte[] bytes = attack.ClassToPacketBytes();
							AsCommonSender.Send( bytes);
						}
					}
				}
			}
		}
	}
Пример #5
0
	void OnSkillActive( AsIMessage _msg)
	{
//		Msg_Input_Slot_Active __msg = _msg as Msg_Input_Slot_Active;
//		Debug.Log( "AsPlayerFsm::OnSkillActive: __msg.skillIdx_ = " + __msg.skillIdx_);

		if( AsPStoreManager.Instance.UnableActionByPStore() == true)
			return;

		if( CheckSpecificWindowOpened() == true)
			return;

		if( CheckMap_Village() == true)
		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
			AsMyProperty.Instance.AlertSkillInTown();
			return;
		}

		if( WeaponEquip == false)
		{
			AsMyProperty.Instance.AlertNoWeapon();
			return;
		}

		Msg_Input_Slot_Active msg = _msg as Msg_Input_Slot_Active;
		Tbl_Skill_Record record = AsTableManager.Instance.GetTbl_Skill_Record( msg.skillIdx_);

		bool permit = true;

		if( record.Skill_Type == eSKILL_TYPE.SlotBase && m_ElapsedCoolTime_BaseAttack > 0)
		{
			Debug.Log( "AsPlayerFsm::OnSkillActive: SlotBase skill is used in base attack cool time.");
			permit = false;
		}
		
//		if(record.Skill_Type == eSKILL_TYPE.Stance)
//		{
//			body_CS_CHAR_SKILL_STANCE stance = new body_CS_CHAR_SKILL_STANCE();
//			byte[] bytes = stance.ClassToPacketBytes();
//			AsCommonSender.Send(bytes);
//			
////			AsCommonSender.BeginSkillUseProcess( record.Index);
//		}

		if( permit == true)
		{
			eGENDER gender = UserEntity.GetProperty<eGENDER>( eComponentProperty.GENDER);

			Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( record, gender, msg.step_,
				null, Vector3.zero, Vector3.zero, Vector3.zero, Vector3.zero,
				m_Entity.transform.forward, eClockWise.CW);

			if( ready.constructSucceed == true)
			{
				if( AsCommonSender.CheckSkillUseProcessing() == true)
					return;
				
				if( ready.CheckValidTargeting( m_Target) == false)
				{
					Debug.Log( "AsPlayerFsm::OnSkillActive: m_Target.GetInstanceID() = " + m_Target.GetInstanceID());
					Target = null;
					return;
				}

				if( Target != null &&
					m_Entity.GetNavPathDistance( Entity.transform.position, Target.transform.position, true) >
					ready.skillLvRecord.Usable_Distance * 0.01f)// * m_Character_Size)
				{
//					Debug.Log( "AsPlayerFsm::OnSkillActive: msg.skillIdx_ = " + msg.skillIdx_ + ", BattleRun state began [time:" + Time.realtimeSinceStartup + "]");
					Msg_Player_Skill_Target_Move targetMove = new Msg_Player_Skill_Target_Move( ready);
					m_CurrentFsmState.MessageProcess( targetMove);
				}
				else
				{
//					Debug.Log( "AsPlayerFsm::OnSkillActive: msg.skillIdx_ = " + msg.skillIdx_ + ", SkillReady state began [time:" + Time.realtimeSinceStartup + "]");
					m_CurrentFsmState.MessageProcess( ready);
				}
			}
		}
	}
Пример #6
0
	void OnSkillCircle( AsIMessage _msg)
	{
		if( AsPStoreManager.Instance.UnableActionByPStore() == true)
			return;

		if( CheckSpecificWindowOpened() == true)
			return;

//		if( CheckMap_Village() == true)
//		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
//			return;
//		}

		if( WeaponEquip == false)
		{
			AsMyProperty.Instance.AlertNoWeapon();
			return;
		}

		Msg_Input_Circle msg = _msg as Msg_Input_Circle;
		eCommand_Type commandType = eCommand_Type.CircleCW;
		COMMAND_SKILL_TYPE commandSkillType = COMMAND_SKILL_TYPE._CIRCLE_CW;

		switch( msg.cw_)
		{
		case eClockWise.CW:
			commandType = eCommand_Type.CircleCW;
			commandSkillType = COMMAND_SKILL_TYPE._CIRCLE_CW;
			break;
		case eClockWise.CCW:
			commandType = eCommand_Type.CircleCCW;
			commandSkillType = COMMAND_SKILL_TYPE._CIRCLE_CCW;
			break;
		}

		if( AsUserInfo.Instance.CommandSkillCoolTimeCompletion[(int)commandSkillType] == true)
		{
			eCLASS __class = UserEntity.GetProperty<eCLASS>( eComponentProperty.CLASS);
			eGENDER gender = UserEntity.GetProperty<eGENDER>( eComponentProperty.GENDER);

			Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( 
				__class, eSKILL_TYPE.Command, commandType, gender,
				null, Vector3.zero,
				msg.head_, msg.center_, msg.tail_, msg.direction_, msg.cw_);

			if( ready.constructSucceed == true && SkillBook.Instance.dicCurSkill.ContainsKey( ready.skillRecord.Index) == true)
			{
				if( TargetDecider.CheckDisableSkillByMap(ready.skillRecord) == true)
					return;
				
				if( AsCommonSender.CheckSkillUseProcessing() == true)
					return;

				if( m_Entity.CheckCondition( eSkillIcon_Enable_Condition.Movable) == false &&
					ready.skillRecord.CheckSkillUsingOnly_Movable() == true)
				{
					AsMyProperty.Instance.AlertState();
					return;
				}

				if( CheckMap_Village() == true)
				{
//					string content = AsTableManager.Instance.GetTbl_String(830);
//					AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
					AsMyProperty.Instance.AlertSkillInTown();
				}
				else if( false == IsAvailableCommandSkill( __class, commandType))
					return;
				else
					m_CurrentFsmState.MessageProcess( ready);
			}
		}
		else
		{
			AsMyProperty.Instance.AlertCoolTime( commandSkillType);
		}
	}
Пример #7
0
	public bool SetTarget(AsPlayerFsm _playerFsm, Msg_Player_Skill_Ready _ready)
	{
		m_PlayerFsm = _playerFsm;
		m_SkillReady = _ready;
		
		#region - main target -
//		m_MainTarget_Npc = GetTargetSessionIdNpc();
//		if( m_MainTarget_Npc != 0)
//			m_listTargets_Npc.Add( m_MainTarget_Npc);
		
//		m_MainTarget_User = GetTargetUniqIdUser();
//		if( m_MainTarget_User != 0)
//			m_listTargets_User.Add( m_MainTarget_User);
		#endregion
		
		m_listTargets_Npc = new int[MAX_SKILL_TARGET];
		m_listTargets_User = new uint[MAX_SKILL_TARGET];
		m_DecidedEntities.Clear();
		
//		Tbl_Action_HitInfo hitInfo = m_SkillReady.actionRecord.HitAnimation.hitInfo;
//		Tbl_Skill_Record skill = AsTableManager.Instance.GetTbl_Skill_Record(m_SkillReady.skillLvRecord.Skill_GroupIndex);
		
		return SetEachTarget();
		/*
		switch(skill.Skill_Type)
		{
		#region - eSKILL_TYPE.Base -
		case eSKILL_TYPE.Base:
		case eSKILL_TYPE.SlotBase:
			switch(hitInfo.HitType)
			{
			case eHitType.Target:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			case eHitType.ProjectileTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			default:
				Debug.LogError("HitDecision: eSKILL_TYPE.Base doesnt treat hit type[" + hitInfo.HitType + "]");
				break;
			}
			break;
		#endregion
		#region - eSKILL_TYPE.Active -
		case eSKILL_TYPE.Active:
			switch(hitInfo.HitType)
			{
			case eHitType.NonTarget://self
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision("self");
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_PlayerFsm.transform.position);
					break;
				}
				break;
			default:
				Debug.LogError("HitDecision: eSKILL_TYPE.Active doesnt treat hit type[" + hitInfo.HitType + "]");
				break;
			}
			break;
		#endregion
		#region - eSKILL_TYPE.Command -
		case eSKILL_TYPE.Command:
			switch(hitInfo.HitType)
			{
			case eHitType.NonTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision("self");
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_PlayerFsm.transform.position);
					break;
				}
				break;
			case eHitType.PositionTarget:
				switch(hitInfo.AreaShape)
				{
//				case eHitAreaShape.Point:
//					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.picked);
					break;
				}
				break;
			default:
				Debug.LogError("HitDecision: eSKILL_TYPE.Command cannot treat hit type[" + hitInfo.HitType + "]");
				break;
			}
			break;
		#endregion
		#region - eSKILL_TYPE.Target -
		case eSKILL_TYPE.Target:
			switch(hitInfo.HitType)
			{
			case eHitType.Target:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			case eHitType.NonTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision("self");
					break;
//				case eHitAreaShape.Circle:
//					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
//					break;
				}
				break;
			case eHitType.PositionTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			case eHitType.ProjectileTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			default:
				Debug.LogError("HitDecision: eSKILL_TYPE.Target doesnt treat hit type[" + hitInfo.HitType + "]");
				break;
			}
			break;
		#endregion
		#region - eSKILL_TYPE.Charge -
		case eSKILL_TYPE.Charge:
		case eSKILL_TYPE.TargetCharge:
			switch(hitInfo.HitType)
			{
			case eHitType.Target:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			case eHitType.NonTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision("self");
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_PlayerFsm.transform.position);
					break;
				}
				break;
			case eHitType.PositionTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			case eHitType.ProjectileTarget:
				switch(hitInfo.AreaShape)
				{
				case eHitAreaShape.Point:
					SingleTargetDecision();
					break;
				case eHitAreaShape.Circle:
					MultiTargetHitDecision(m_SkillReady.Target.transform.position);
					break;
				}
				break;
			default:
				Debug.LogError("HitDecision: eSKILL_TYPE.Charge doesnt treat hit type[" + hitInfo.HitType + "]");
				break;
			}
			break;
		#endregion
		#region - etc -
		case eSKILL_TYPE.Stance:
			break;
		#endregion
		default:
			Debug.LogError("TargetDecider::SetTarget: invalid eSKILL_TYPE [" + skill.Skill_Type + "]");
			break;
		}
		//*/
		return true;
	}
Пример #8
0
	//SKILL
	#region - charge & active & drag & arc & circle & double tap & action item & stance -
	void OnBeginCharge( AsIMessage _msg)
	{
		if( AsPStoreManager.Instance.UnableActionByPStore() == true)
			return;

		if( CheckSpecificWindowOpened() == true)
			return;

		if( CheckMap_Village() == true)
		{
//			string content = AsTableManager.Instance.GetTbl_String(830);
//			AsChatManager.Instance.InsertChat( content, eCHATTYPE.eCHATTYPE_SYSTEM, true);
			AsMyProperty.Instance.AlertSkillInTown();
			return;
		}

		if( WeaponEquip == false)
		{
			AsMyProperty.Instance.AlertNoWeapon();
			return;
		}

		Msg_Input_Begin_Charge msg = _msg as Msg_Input_Begin_Charge;
		Tbl_Skill_Record record = AsTableManager.Instance.GetTbl_Skill_Record( msg.skillIdx_);

		eGENDER gender = Entity.GetProperty<eGENDER>( eComponentProperty.GENDER);
		Msg_Player_Skill_Ready ready = new Msg_Player_Skill_Ready( record, gender);
		ready.SetCharging();
		
		if(TargetDecider.sSkillUsable_TargetCharge(this, ready) == false)
			return;

		if( ready.constructSucceed == true)
			m_CurrentFsmState.MessageProcess( ready);
	}
Пример #9
0
	public Msg_Player_Skill_Target_Move( Msg_Player_Skill_Ready _ready, AsPlayerState_BattleRun.eRunType _runType)
	{
		m_MessageType = eMessageType.PLAYER_SKILL_TARGET_MOVE;
		m_Ready = _ready;
		m_RunType = _runType;
	}
Пример #10
0
	public static bool sSkillUsable_TargetCharge(AsPlayerFsm _playerFsm, Msg_Player_Skill_Ready _ready)// use targetting slot only 
	{
		float _range = _ready.skillLvRecord.Usable_Distance * 0.01f;// * _playerFsm.Character_Size;
		
		if( null == _playerFsm.Target) // no entity is targeted
		{
			if( _ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
			{
				AsBaseEntity target = _playerFsm.HostileEntityExistInRange( _range);
				_playerFsm.Target = target;
			}
		}
		else // taget is exist
		{
			if( _playerFsm.Target.FsmType == eFsmType.NPC || _playerFsm.Target.FsmType == eFsmType.COLLECTION)
			{
				if(_ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true)
				{
					AsBaseEntity target = _playerFsm.MonsterExistInRange( _range);
					if( target != null && target.CheckObjectMonster() == false)
						_playerFsm.Target = target;
				}
			}
			else if(_playerFsm.Target.FsmType == eFsmType.OTHER_USER)
			{
				if(CheckOtherUserIsEnemy(_playerFsm.Target) == false)
				{
					if( ( null != _ready.skillRecord) && ( eSkillAutoTarget.Disable != _ready.skillRecord.SkillAutoTarget))
					{
						if(_ready.skillRecord.CheckPotencyTargetTypeIncludeEnemy() == true &&
							_ready.skillRecord.CheckPotencyTypeIncludeHeal() == false)
						{
							AsUserEntity targetUser = _playerFsm.Target as AsUserEntity;
							AsBaseEntity targetUserTarget = targetUser.GetGetterTarget();
							if( targetUserTarget != null &&
								targetUserTarget.FsmType == eFsmType.MONSTER &&
								Vector3.Distance(_playerFsm.transform.position, targetUser.transform.position) < _range)
								_playerFsm.Target = targetUserTarget;
							else
								_playerFsm.Target = _playerFsm.MonsterExistInRange( _range);
						}
					}
				}
			}
		}
		
		if( null == _playerFsm.Target)
		{
			AsMyProperty.Instance.AlertInvalidTarget();
			return false;
		}
		else
			return TargetSkillCheck( _ready.skillRecord.Index, _playerFsm);
	}
Пример #11
0
	public Msg_Player_Skill_Target_Move( Msg_Player_Skill_Ready _ready)
	{
		m_MessageType = eMessageType.PLAYER_SKILL_TARGET_MOVE;
		m_Ready = _ready;
	}
Пример #12
0
	public Msg_Player_Skill_Linkaction( Msg_Player_Skill_Ready _ready)
	{
		m_MessageType = eMessageType.PLAYER_SKILL_LINKACTION;

		ready_ = _ready;
	}
Пример #13
0
	public Msg_Player_Skill_Finish( Msg_Player_Skill_Ready _ready,
		bool _targetReleased)
	{
		m_MessageType = eMessageType.PLAYER_SKILL_FINISH;

		ready_ = _ready;

		targetReleased_ = _targetReleased;
	}
Пример #14
0
	public Msg_Player_Skill_Hit( Msg_Player_Skill_Ready _ready,
		int _chargeStep, bool _casting,
//		int _mainTargetNpc, uint _mainTargetUser,
		bool _targetReleased)
	{
		m_MessageType = eMessageType.PLAYER_SKILL_HIT;

		ready_ = _ready;

		if( _chargeStep == int.MaxValue)
			_chargeStep = 0;

		chargeStep_ = _chargeStep;
		casting_ = _casting;

//		mainTargetNpc_ = _mainTargetNpc;
//		mainTargetUser_ = _mainTargetUser;

		targetReleased_ = _targetReleased;
	}
Пример #15
0
	public Msg_Player_Skill_Ready( Msg_Player_Skill_Ready _ready, Tbl_Action_Record _action)
	{
		skillRecord_ = _ready.skillRecord;
		skillLv_ = _ready.skillLv_;
		skillLvRecord_ = _ready.skillLvRecord;
		actionRecord_ = _action;//IMPORTANT

		pickedEntity_ = _ready.pickedEntity;

		head_ = _ready.head;
		center_ = _ready.center;
		tail_ = _ready.tail;
		direction_ = _ready.direction;
		cw_ = _ready.cw;

		constructSucceed_ = true;
	}