SKILL_RESULT_CODE CastOnCasterSingle(KCharacter pDisplayCaster, KCharacter pLogicCaster) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; KSKILL_BULLET pBullet = new KSKILL_BULLET(); KTarget pTarget = new KTarget(); nRetCode = pTarget.SetTarget(pDisplayCaster); if (nRetCode == 0) { goto Exit0; } nRetCode = SetupBullet(pBullet, pLogicCaster, ref pTarget); if (nRetCode == 0) { goto Exit0; } if (pBullet.nEndFrame > FirstFightMgr.Instance().m_nGameLoop) { pLogicCaster.AddBullet(pBullet); } else { ApplyOnSingle(pBullet); } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
SKILL_RESULT_CODE CastOnCasterArea(KCharacter pDisplayCaster, KCharacter pLogicCaster) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; KTarget pTarget = new KTarget(); KSKILL_BULLET pBullet = new KSKILL_BULLET(); float fX = 0f; float fZ = 0f; nRetCode = pTarget.SetTarget(pDisplayCaster); if (nRetCode == 0) { goto Exit0; } nRetCode = SetupBullet(pBullet, pLogicCaster, ref pTarget); if (nRetCode == 0) { goto Exit0; } if (pBullet.nEndFrame > FirstFightMgr.Instance().m_nGameLoop) { pLogicCaster.AddBullet(pBullet); } else { pDisplayCaster.GetAbsoluteCoordinate(ref fX, ref fZ); nRetCode = (int)ApplyOnArea(pBullet, fX, fZ); } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
SKILL_RESULT_CODE CastOnSector(KCharacter pDisplayCaster, KCharacter pLogicCaster) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; KSKILL_BULLET pBullet = new KSKILL_BULLET(); KTarget pTarget = new KTarget(); nRetCode = pTarget.SetTarget(pDisplayCaster); if (nRetCode == 0) { return(SKILL_RESULT_CODE.srcFailed); } nRetCode = SetupBullet(pBullet, pLogicCaster, ref pTarget); if (nRetCode == 0) { goto Exit0; } nRetCode = (int)ApplyOnSector(pBullet); if (nRetCode != (int)SKILL_RESULT_CODE.srcSuccess) { return((SKILL_RESULT_CODE)nRetCode); } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
SKILL_RESULT_CODE ApplyOnArea(KSKILL_BULLET pBullet, float fX, float fZ) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; KCharacter pCaster = null; KSkill pSkill = null; KScene pScene = null; pSkill = pBullet.pSkillPointer; if (pSkill == null) { goto Exit0; } pCaster = pBullet.pSkillSrc; if (pCaster == null) { goto Exit0; } pScene = pCaster.m_pScene; if (pScene == null) { goto Exit0; } KSkillAreaTravFunc AreaTravFunc = new KSkillAreaTravFunc(); AreaTravFunc.pBullet = pBullet; AreaTravFunc.nLeftCount = 3; if (m_pBaseInfo.nCastMode == KSKILL_CAST_MODE.scmTargetArea) { KCharacter pObject = null; pBullet.pTarget.GetTarget(ref pObject); if (pObject == null) { goto Exit0; } AreaTravFunc.bTargetArea = true; AreaTravFunc.nTargetType = (int)pBullet.pTarget.GetTargetType(); AreaTravFunc.dwTargetID = pObject.m_dwID; AreaTravFunc.nLeftCount -= 1; } else { AreaTravFunc.bTargetArea = false; AreaTravFunc.nTargetType = (int)TARGET_TYPE.ttInvalid; AreaTravFunc.dwTargetID = 0; } pScene.TraverseRangePlayer <KSkillAreaTravFunc>(ref AreaTravFunc); pScene.TraverseRangeNpc <KSkillAreaTravFunc>(ref AreaTravFunc); nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
public SKILL_RESULT_CODE CastSkill(uint dwSkillID, ref KTarget pTarget) { int nRetCode = 0; SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; KCharacter pTargetCharacter = null; if (m_pEntity == null) { return(SKILL_RESULT_CODE.srcFailed); } ISkillPart skillPart = m_pEntity.GetPart(EntityPart.Skill) as ISkillPart; if (skillPart == null) { return(SKILL_RESULT_CODE.srcFailed); } if (pTarget == null) { return(SKILL_RESULT_CODE.srcFailed); } nRetCode = pTarget.GetTarget(ref pTargetCharacter); if (nRetCode == 0 || pTargetCharacter == null) { return(SKILL_RESULT_CODE.srcFailed); } IEntity targetEntity = pTargetCharacter.m_pEntity; if (targetEntity == null) { return(SKILL_RESULT_CODE.srcFailed); } skillPart.ReqNpcUseSkill(targetEntity, dwSkillID); // KSkill pSkill = FirstFightMgr.Instance().m_SkillManager.GetSkill(dwSkillID); pSkill.Cast(this, this, ref pTarget); //测试代码 // 伤害飘子 //FlyFontDataManager.Instance.ShowDamage(999, 1, pTargetCharacter.m_dwID, EntityType.EntityType_NPC, 1000000); //pTargetCharacter.Test_ConcludeResult(); nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
SKILL_RESULT_CODE ApplyOnSector(KSKILL_BULLET pBullet) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
//以目标为中心的圆形区域 SKILL_RESULT_CODE CastOnTargetArea(KCharacter pDisplayCaster, KCharacter pLogicCaster, ref KTarget rTarget) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; KSKILL_BULLET pBullet = new KSKILL_BULLET(); float fTargetX = 0f; float fTargetZ = 0f; nRetCode = SetupBullet(pBullet, pLogicCaster, ref rTarget); if (nRetCode == 0) { goto Exit0; } if (pBullet.nEndFrame > FirstFightMgr.Instance().m_nGameLoop) { pLogicCaster.AddBullet(pBullet); } else { nRetCode = rTarget.GetTarget(ref fTargetX, ref fTargetZ); if (nRetCode == 0) { goto Exit0; } nRetCode = (int)ApplyOnSingle(pBullet); if (nRetCode != (int)SKILL_RESULT_CODE.srcSuccess) { return((SKILL_RESULT_CODE)nRetCode); } nRetCode = (int)ApplyOnArea(pBullet, fTargetX, fTargetZ); if (nRetCode != (int)SKILL_RESULT_CODE.srcSuccess) { return((SKILL_RESULT_CODE)nRetCode); } } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
public SKILL_RESULT_CODE CanCast(KCharacter pSrcCharacter, ref KTarget rTarget) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; SKILL_RESULT_CODE nRetCode = SKILL_RESULT_CODE.srcFailed; switch (m_pBaseInfo.nCastMode) { case KSKILL_CAST_MODE.scmCasterSingle: // 对单体对象(限于自己)施放 break; case KSKILL_CAST_MODE.scmCasterArea: // 以自己为中心的圆形区域 break; case KSKILL_CAST_MODE.scmTargetArea: // 以目标为中心的圆形区域 case KSKILL_CAST_MODE.scmTargetSingle: // 对单体对象(指定目标)施放 nRetCode = CheckTargetRange(pSrcCharacter, ref rTarget); if (nRetCode != SKILL_RESULT_CODE.srcSuccess) { return(nRetCode); } break; case KSKILL_CAST_MODE.scmSector: // 扇形范围,扇心固定在自己 break; default: goto Exit0; break; } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
public SKILL_RESULT_CODE CheckTargetRange(KCharacter pCaster, ref KTarget rTarget) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; float fMaxRange = 0f; float fCasterX = 0f; float fCasterZ = 0f; float fTargetX = 0f; float fTargetZ = 0f; float fTouchRange = 0f; pCaster.GetAbsoluteCoordinate(ref fCasterX, ref fCasterZ); nRetCode = rTarget.GetTarget(ref fTargetX, ref fTargetZ); if (nRetCode == 0) { goto Exit0; } fMaxRange = pCaster.m_fTouchRange + m_fMaxRadius + fTouchRange; nRetCode = (int)SkillInRange(fCasterX, fCasterZ, fTargetX, fTargetZ, m_fMinRadius, fMaxRange); if (nRetCode == (int)IN_RANGE_RESULT.irrTooClose) { return(SKILL_RESULT_CODE.srcTooCloseTarget); } if (nRetCode == (int)IN_RANGE_RESULT.irrTooFar) { return(SKILL_RESULT_CODE.srcTooFarTarget); } if (nRetCode != (int)IN_RANGE_RESULT.irrInRange) { goto Exit0; } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
public SKILL_RESULT_CODE ApplyOnSingle(KSKILL_BULLET pBullet) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; TARGET_TYPE eTargetType = TARGET_TYPE.ttInvalid; KCharacter pCharacter = null; eTargetType = pBullet.pTarget.GetTargetType(); switch (eTargetType) { case TARGET_TYPE.ttNoTarget: break; case TARGET_TYPE.ttCoordination: break; case TARGET_TYPE.ttNpc: case TARGET_TYPE.ttPlayer: nRetCode = pBullet.pTarget.GetTarget(ref pCharacter); if (nRetCode == 0 || pCharacter == null) { goto Exit0; } pCharacter.ApplyBullet(pBullet); break; default: goto Exit0; break; } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }
public SKILL_RESULT_CODE Cast(KCharacter pDisplayCaster, KCharacter pLogicCaster, ref KTarget rTarget) { SKILL_RESULT_CODE nResult = SKILL_RESULT_CODE.srcFailed; int nRetCode = 0; KCharacter pTarget = null; if (pDisplayCaster == null) { goto Exit0; } if (pLogicCaster == null) { goto Exit0; } //... switch (rTarget.GetTargetType()) { case TARGET_TYPE.ttPlayer: case TARGET_TYPE.ttNpc: nRetCode = rTarget.GetTarget(ref pTarget); if (nRetCode == 0) { goto Exit0; } break; default: break; } switch (m_pBaseInfo.nCastMode) { case KSKILL_CAST_MODE.scmSector: // 扇形范围,扇心固定在自己 nRetCode = (int)CastOnSector(pDisplayCaster, pLogicCaster); break; case KSKILL_CAST_MODE.scmCasterArea: // 以自己为中心的圆形区域 nRetCode = (int)CastOnCasterArea(pDisplayCaster, pLogicCaster); break; case KSKILL_CAST_MODE.scmTargetSingle: // 对单体对象(指定目标)施放 nRetCode = (int)CastOnTargetSingle(pDisplayCaster, pLogicCaster, ref rTarget); break; case KSKILL_CAST_MODE.scmCasterSingle: // 对单体对象(限于自己)施放 nRetCode = (int)CastOnCasterSingle(pDisplayCaster, pLogicCaster); break; case KSKILL_CAST_MODE.scmTargetArea: // 以目标为中心的圆形区域 nRetCode = (int)CastOnTargetArea(pDisplayCaster, pLogicCaster, ref rTarget); break; default: goto Exit0; break; } if (nRetCode != (int)SKILL_RESULT_CODE.srcSuccess) { return((SKILL_RESULT_CODE)nRetCode); } nResult = SKILL_RESULT_CODE.srcSuccess; Exit0: return(nResult); }