public void HitEffect(Buff_HitEffect buff, Vector3 pos, string skillId) { #if !SERVER PlayHitEffect(buff.hitObjId, pos + buff.posOffset.ToV3(), buff.duration).Coroutine(); #else bool isInApplyData = false; BaseSkillData baseSkillData = SkillHelper.GetBaseSkillData(skillId); foreach (var v in baseSkillData.applyDatas) { PipelineDataWithBuff pipelineDataWithBuff = v as PipelineDataWithBuff; if (pipelineDataWithBuff != null) { if (pipelineDataWithBuff.buffs.Find(b => b.buffData.buffSignal == buff.buffSignal) != null) { isInApplyData = true; break; } } } if (!isInApplyData) { return; } M2C_HitEffect m2C = new M2C_HitEffect(); m2C.Duration = buff.duration; m2C.HitObjId = buff.hitObjId; m2C.Pos = (pos + buff.posOffset.ToV3()).ToV3Info(); ETHotfix.MessageHelper.Broadcast(m2C); #endif }
public void PlayAudio(Buff_PlaySound buff_PlaySound, Unit v, float playSpeed, string skillId) { #if !SERVER PlayAudio(buff_PlaySound.audioClipName, v, playSpeed, buff_PlaySound.onlyPlayOnceTime ? 0 : buff_PlaySound.duration); #else bool isInApplyData = false; BaseSkillData baseSkillData = SkillHelper.GetBaseSkillData(skillId); foreach (var _v in baseSkillData.applyDatas) { PipelineDataWithBuff pipelineDataWithBuff = _v as PipelineDataWithBuff; if (pipelineDataWithBuff != null) { if (pipelineDataWithBuff.buffs.Find(b => b.buffData.buffSignal == buff_PlaySound.buffSignal) != null) { isInApplyData = true; break; } } } if (!isInApplyData) { return; } M2C_PlaySound m2C = new M2C_PlaySound(); m2C.Duration = buff_PlaySound.onlyPlayOnceTime ? 0 : buff_PlaySound.duration; m2C.AudioClipName = buff_PlaySound.audioClipName; m2C.Id = v.Id; m2C.PlaySpeed = playSpeed; ETHotfix.MessageHelper.Broadcast(m2C); #endif }
//============= PRE DAMAGE 계산기 1~8번, 33번. =================// float physicAtkDamagePreCalc(BaseSkillData skillData, int skillLevel, Monster skillTarget, int applyReinforceLevel, Monster attacker = null, float damagePer = 1.0f, float minimumDamagePer = 1.0f) { if (levelCorrection && skillData.checkLevelCorrection(skillLevel, skillTarget.stat.skillTargetLevel, null, attacker) == false) { return(0.0f); } return(skillTarget.preDamageCalc(1, getApplyValue(0, applyReinforceLevel, attacker.stat), 0, damagePer, minimumDamagePer)); }
public float getSkillTimeUp(BaseSkillData hsd) { switch (playerType) { case PlayerType.NotPlayer: return(skillTimeUp); break; case PlayerType.Player: return(GameManager.me.player.skillTimeUp(hsd)); break; case PlayerType.PVPPlayer: return(GameManager.me.pvpPlayer.skillTimeUp(hsd)); break; } return(skillTimeUp); }
public void start(bool isPlayerBullet, Monster attacker, float totalDistanceLimit, float distanceLimitA, float distanceLimitB, int maxConnection, float connectionDelay, int damagePer, int skillLevel, int applyInforceLevel, BaseSkillData sd = null) { if (damagePer <= 0) { damagePer = 100; } if (damagePer < 100) { _damageOffsetPerConnectionLevel = ((float)damagePer) / 100.0f / (float)maxConnection; } else { _damageOffsetPerConnectionLevel = 0.0f; } isDeleteObject = false; _skillData = sd; _attacker = attacker; _delay = 0.0f; _totalDistanceLimit.Set(totalDistanceLimit); _distanceLimitA.Set(distanceLimitA); _distanceLimitB.Set(distanceLimitB); _maxConnection = maxConnection; _connectionDelay = connectionDelay; _nowConnectionNum = 0; _canMore = true; _restoreCharacterAni = false; _timeSinceBeginning = 0.0f; _isPlayerBullet = isPlayerBullet; _firstRemove = true; _nextDelay = 0.3f; _applyInforceLevel = applyInforceLevel; _skillLevel = skillLevel; getNextTarget(_isPlayerBullet); }
public void init(AttackerType attackerType, AttackType aType, BaseSkillData hsd = null, TranscendData td = null, int[] transcendLevel = null, bool isFromHeroSkill = false) { //Log.log("init attackdata!!!"); if (td != null) { for (int i = attrOriginal.Length - 1; i >= 0; --i) { if (isFromHeroSkill) { attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), E_ATTR_STR[i]); } else { attr[i] = td.getValueByATTR(transcendLevel, attrOriginal[i].Get(), ATTR_STR[i]); } } } cm = GameManager.me.characterManager; _skillData = hsd; switch (type) { case NONE_0: chracterMove = moveStay; monsterShoot = shootMonster0; playerShoot = shootPlayer0; playSkill = playSkillRightNow; preDamageCalc = damageCalc0; if (_skillData.skillDataType == BaseSkillData.SkillDataType.Hero && _skillData.targeting == 1) { targetRange = _skillData.targetAttr[1]; } break; case SHORT_1: //1 //len = 1; chracterMove = moveShortAttackType; if (aType == AttackType.Attack) { monsterShoot = shootMonster1; playerShoot = shootPlayer1; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case SHORT_RANGE_2: //2 //len = 3; //데미지범위 최소데미지비율 최대타겟유닛수 chracterMove = moveShortAttackType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonster2; playerShoot = shootPlayer2; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case LINE_3: //3 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet3; playerShoot = shootPlayerBullet3; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case LINE_RANGE_4: //4 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet4; playerShoot = shootPlayerBullet4; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case LINE_PASS_5: //5 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[4]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet5; playerShoot = shootPlayerBullet5; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; case CURVE_RANGE_6: //6 //len = 4; //타임리밋 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[1]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet6; playerShoot = shootPlayerBullet6; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case DROP_RANGE_7: //7 //len = 4; //타임리밋 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[1]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet7; playerShoot = shootPlayerBullet7; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CIRCLE_RANGE_8: if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[0]; maxHit = attr[2]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet8; playerShoot = shootPlayerBullet8; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; //len = 3; //데미지범위 최소데미지비율 최대타겟유닛수 break; case FIXED_EFFECT_9: //len = 4; //최대타겟유닛수 이펙트타입 이펙트Z/R 이펙트X if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[1] > 12) { targetRange = attr[2]; } else { targetRange = attr[3]; } maxHit = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet9; playerShoot = shootPlayerBullet9; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CONTINUE_FIXED_EFFECT_10: //최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X //len = 5; if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[2] > 12) { targetRange = attr[3]; } else { targetRange = attr[4]; } maxHit = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet10; playerShoot = shootPlayerBullet10; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CURVE_AFTER_CONTINUE_FIXED_EFFECT_11: //타임리밋 최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X //len = 6; if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; // 11~12 사각기둥. 21~22. 원기둥. if (attr[3] > 12) { targetRange = attr[4]; } else { targetRange = attr[5]; } maxHit = attr[1]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet11; playerShoot = shootPlayerBullet11; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case ATTACH_BULLET_12: //len = 5; // 최대타겟유닛수 지속시간 이펙트타입 이펙트Z/R 이펙트X if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet12; playerShoot = shootPlayerBullet12; preDamageCalc = damageCalc0; } playSkill = playSkillLoop; break; case TIME_BOMB_13: //13 #if UNITY_EDITOR Debug.Log("==== 안쓰는 것!!!! ====!!!!"); #endif //len = 4; //폭발대기시간 데미지범위 최소데미지비율 최대타겟유닛수 if (attackerType == AttackerType.Hero) { chracterMove = moveLineType; skillMove = moveSkillHeroMonsterLineType; } else if (attackerType == AttackerType.Unit) { chracterMove = moveLineType; } if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet12; playerShoot = shootPlayerBullet12; } playSkill = playSkillNormal; break; case LAND_MINE_14: //14 //len = 4; //데미지범위 최소데미지비율 최대타겟유닛수 자연폭발시간 if (attackerType == AttackerType.Hero) { chracterMove = moveLandMineType; //moveLandMineAttackType; skillMove = moveLandMineType; //moveLandMineAttackType; } else if (attackerType == AttackerType.Unit) { chracterMove = moveLandMineType; //moveLandMineAttackType; } if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet14; playerShoot = shootPlayerBullet14; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CHAIN_LIGHTING_15: //15 // Debug.Log("==== 수정해야함 ====!!!!"); //len = 3; //최대전체거리 최대연결거리A 최대연결거리B 최대연결유닛수 연결딜레이 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet15; playerShoot = shootPlayerBullet15; preDamageCalc = damageCalc0; } playSkill = playSkillLoop; break; case SCREEN_ATTACK_16: // 이동은 수정해야함. 그런데 굳이 할 필요는 없을듯??? if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[0]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet16; playerShoot = shootPlayerBullet16; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case METHEO_17: //17 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; targetRange = attr[5]; maxHit = attr[3]; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet17; playerShoot = shootPlayerBullet17; preDamageCalc = damageCalc0; } playSkill = playSkillNormal; break; case CHASER_18: //18 if (attackerType == AttackerType.Hero) { skillMove = moveSkillHeroMonsterLineType; } chracterMove = moveLineType; if (aType == AttackType.Attack || aType == AttackType.Skill) { monsterShoot = shootMonsterBullet18; playerShoot = shootPlayerBullet18; preDamageCalc = damageCalc0; } playSkill = playSkillLinear; break; } }