Cute_OctopusCc

This commit is contained in:
Ino 2025-02-13 13:40:04 +09:00
parent 1960c748e6
commit 838e22011d
14 changed files with 221 additions and 51 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -0,0 +1,139 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3688278240300928816
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3791624769364244468}
- component: {fileID: 6673251188135490187}
m_Layer: 0
m_Name: Effect_Reincarnation
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3791624769364244468
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3688278240300928816}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 5779525916069411976}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6673251188135490187
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3688278240300928816}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 456d2bd1c5c2e5e4b8b948836c4975a4, type: 3}
m_Name:
m_EditorClassIdentifier:
NoUseParticleTime: 1
OffTime: 5
e_EffectLocation: 2
--- !u!1001 &2561240930099581834
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 3791624769364244468}
m_Modifications:
- target: {fileID: 1156336430657372121, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_Name
value: FX_Turnback Time
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalScale.x
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalScale.y
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalScale.z
value: 0.1
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 84fa12b09c6fbec499a075026248c20d, type: 3}
--- !u!4 &5779525916069411976 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 8340203878624390914, guid: 84fa12b09c6fbec499a075026248c20d,
type: 3}
m_PrefabInstance: {fileID: 2561240930099581834}
m_PrefabAsset: {fileID: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cedb83d970c6e3446a8d28f6aa9237b0
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,3 +1,4 @@
using CodeStage.AntiCheat.ObscuredTypes;
using System;
using System.Collections;
using System.Collections.Generic;
@ -64,10 +65,17 @@ public class Actor : MyCoroutine
protected Renderer[] arr_Renderer;
protected TurnOff_GO[] arr_Effects;
protected Dictionary<eSkillExtraType, bool> dic_skillextra = new Dictionary<eSkillExtraType, bool>(); // 부가 효과 적용 여부
protected Dictionary<eSkillExtraType, int> dic_skillextraCount = new Dictionary<eSkillExtraType, int>(); // 부가 효과 적용 여부
//protected Dictionary<eSkillExtraType, int> dic_skillextraCount = new Dictionary<eSkillExtraType, int>(); // 부가 효과 적용 여부
protected Dictionary<eCC, CCData> dic_ccData = new Dictionary<eCC, CCData>();
protected Dictionary<eCC, Dictionary<Actor, double>> dic_ccAddRate = new Dictionary<eCC, Dictionary<Actor, double>>();
protected Dictionary<eCC, TurnOff_GO> dic_CCEffect = new Dictionary<eCC, TurnOff_GO>();
protected ObscuredInt _Reincarnation;
public int n_Reincarnation
{
get { return _Reincarnation; }
set { _Reincarnation = value; _Reincarnation.RandomizeCryptoKey(); }
}
protected void Init_CC()
{
@ -439,7 +447,7 @@ public class Actor : MyCoroutine
Cal_Damage(_dinfo);
Check_CC_byAttack(_dinfo);
Check_Extra();
Check_Extra(eSkillExtraTiming.GetHit);
#if UNITY_EDITOR
if (SceneManager.GetActiveScene().name == "StatTest")
@ -544,6 +552,9 @@ public class Actor : MyCoroutine
}
protected virtual void After_Die()
{
Check_Extra(eSkillExtraTiming.AfterDie);
if (!IsDead()) return; // 부활한 경우
#if UNITY_EDITOR
if (SceneManager.GetActiveScene().name == "StatTest")
{
@ -1008,7 +1019,7 @@ public class Actor : MyCoroutine
}
}
}
protected virtual void Check_Extra() { }
protected virtual void Check_Extra(eSkillExtraTiming timing) { }
public void Check_Extra(DamageInfo _dinfo)
{
var pd = _dinfo.Beater_pd;
@ -1943,14 +1954,14 @@ public class Actor : MyCoroutine
public virtual void Check_10_4() { }
public virtual MonsterAppearData Get_MonsterStatTableData() { return null; }
public virtual bool isNoseeMob() { return false; }
public virtual void On_Regen()
public virtual void On_Regen(bool reincarnation = false, float healrate = 1f)
{
gameObject.SetActive(true);
DeadStatus = false;
m_Stat.Clear_BuffDebuff();
m_Stat.Set_Stat(eStat.HP, 0);
Heal(1f, false);
Heal(healrate, false);
Init_CC();
m_animation.speed = 1f;
}

View File

@ -1,10 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UIElements;
using static UILabel;
public enum eMobStatus { None, PatrolWait, PatrolRot, Patroling, Battle, BattleStop, Attack, Chase }
@ -65,7 +62,6 @@ public class MobActor : Actor
bool IsBoss = IsSubRole(eSubRol.Boss);
m_MonsterTableData = mobtable;
transform.localScale = m_MonsterTableData.f_DefaultScale * Vector3.one;
Reset_Extra();
m_AttackType = m_MonsterTableData.e_AttackType;
b_IsFirstAttack = m_MonsterTableData.b_IsFirstAttack;
@ -105,13 +101,18 @@ public class MobActor : Actor
f_BaseChaseRange *= chaseRange;
m_Stat.Set_Wave(iteration);
}
public override void On_Regen()
public override void On_Regen(bool reincarnation = false, float healrate = 1f)
{
base.On_Regen();
Set_Warp(OriginalPos);
base.On_Regen(reincarnation, healrate);
Change_MobStatus(eMobStatus.PatrolWait);
InGameInfo.Ins.Show_Effect("Effect_MonsterSpawn", Get_position());
Reset_Extra();
if (m_BoxCollider) m_BoxCollider.enabled = true;
m_NavMeshAgent.enabled = true;
if (!reincarnation)
{
Set_Warp(OriginalPos);
InGameInfo.Ins.Show_Effect("Effect_MonsterSpawn", Get_position());
Reset_Extra();
}
}
protected override void Awake()
@ -386,10 +387,13 @@ public class MobActor : Actor
return;
#endif
var sdata = ServerInfo.Ins.m_ServerData;
m_actDie?.Invoke(m_MonsterTableData.n_MonsterID);
DungeonInfo.Ins.Add_WaveScore(1); // TODO 정인호 : 웨이브 점수
DungeonInfo.Ins.Add_WaveGold(10); // TODO 정인호 : 웨이브 골드
sdata.Add_CollectionMobKill(m_MonsterTableData.n_MonsterID);
if (n_Reincarnation <= 0)
{
m_actDie?.Invoke(m_MonsterTableData.n_MonsterID);
DungeonInfo.Ins.Add_WaveScore(1); // TODO 정인호 : 웨이브 점수
DungeonInfo.Ins.Add_WaveGold(10); // TODO 정인호 : 웨이브 골드
sdata.Add_CollectionMobKill(m_MonsterTableData.n_MonsterID);
}
base.Set_Die();
m_DieTime = m_MonsterAppearData.f_SpawnerDelay;
//m_MonsterAppearData.Cal_DropItems(this);
@ -403,11 +407,6 @@ public class MobActor : Actor
}, 0.4f);
sdata.Add_MissionCount(MyValue.arr_Mission[0], 3);
sdata.Add_MissionCount(MyValue.arr_Mission[1], 2);
if (dic_ccData[eCC.Freeze].CCTime > 0) sdata.Add_TitleCondition(57); // 칭호 : 얼음땡
if (dic_ccData[eCC.KnockedAirborne].CCTime > 0) sdata.Add_TitleCondition(58); // 칭호 : 비행기 태우는
//GameUI.Ins.IngameUI.m_ChapterQuest.Add_PurposeCount(new ChapterQuestAddData { purpose = ePurpose.BossKill, mobid = m_MonsterTableData.n_MonsterID });
}
else
{
@ -416,8 +415,6 @@ public class MobActor : Actor
#endif
sdata.Add_MissionCount(MyValue.arr_Mission[0], 2);
sdata.Add_MissionCount(MyValue.arr_Mission[1], 1);
//GameUI.Ins.IngameUI.m_ChapterQuest.Add_PurposeCount(new ChapterQuestAddData { purpose = ePurpose.MobKill, mobid = m_MonsterTableData.n_MonsterID });
}
}
public override void Shoot_Skill()
@ -544,9 +541,9 @@ public class MobActor : Actor
m_MonsterTableData.f_ProjectileLifeTime1);
}
protected override void Check_Extra()
protected override void Check_Extra(eSkillExtraTiming timing)
{
base.Check_Extra();
base.Check_Extra(timing);
// Dictionary의 Key를 배열로 가져오기 (복사본을 사용하여 수정 방지)
var keys = new List<SkillListTableData>(dic_skill.Keys);
@ -555,17 +552,17 @@ public class MobActor : Actor
{
var temp = keys[i];
var skilltype = table_skilltypeconfig.Ins.Get_Data_orNull(temp.e_SkillExtraType);
if (skilltype.e_SkillExtraTiming == eSkillExtraTiming.GetHit)
if (skilltype.e_SkillExtraTiming == timing)
{
switch (skilltype.e_SkillExtraType)
{
case eSkillExtraType.Barrier: // 배리어 On
if (dic_skill[temp] > 0) // Dictionary 직접 접근
if (dic_skill[temp] > 0)
{
var conditionHP = Get_MaxHP() * temp.f_ExtraValue1;
if (conditionHP >= Get_HP())
{
dic_skill[temp] = 0; // Dictionary 수정 가능
dic_skill[temp] = 0;
dic_skillextra[skilltype.e_SkillExtraType] = true;
InGameInfo.Ins.Show_Effect(skilltype.e_SkillEffect, this, skilltype.e_EffectLocation, 10000,
effect =>
@ -578,6 +575,15 @@ public class MobActor : Actor
}
}
break;
case eSkillExtraType.Reincarnation: // 부활 체크
if (n_Reincarnation > 0 && IsDead())
{
--n_Reincarnation;
On_Regen(true, temp.f_ExtraValue2);
InGameInfo.Ins.Show_Effect(skilltype.e_SkillEffect, Get_position());
Check_Battle();
}
break;
}
}
}
@ -594,19 +600,26 @@ public class MobActor : Actor
// 2. dic_skill에 추가할 때 예외 방지
if (!dic_skill.ContainsKey(pSkill))
dic_skill[pSkill] = 0;
n_Reincarnation = 0;
// 3. 배리어 스킬이면 값 초기화
if (pSkill.e_SkillExtraType == eSkillExtraType.Barrier)
switch (pSkill.e_SkillExtraType)
{
dic_skill[pSkill] = 1;
case eSkillExtraType.Barrier:
dic_skill[pSkill] = 1;
dic_skillextra[pSkill.e_SkillExtraType] = false;
// dic_ccData[eCC.Barrier]가 존재하는지 확인 후 초기화
if (dic_ccData.ContainsKey(eCC.Barrier))
dic_ccData[eCC.Barrier].CCDmg = 0;
// dic_ccData[eCC.Barrier]가 존재하는지 확인 후 초기화
if (dic_ccData.ContainsKey(eCC.Barrier))
dic_ccData[eCC.Barrier].CCDmg = 0;
// dic_CCEffect[eCC.Barrier]가 존재하는지 확인 후 제거
if (dic_CCEffect.ContainsKey(eCC.Barrier) && dic_CCEffect[eCC.Barrier].IsMyEffect(this))
dic_CCEffect[eCC.Barrier].Off_Imm();
// dic_CCEffect[eCC.Barrier]가 존재하는지 확인 후 제거
if (dic_CCEffect.ContainsKey(eCC.Barrier) && dic_CCEffect[eCC.Barrier].IsMyEffect(this))
dic_CCEffect[eCC.Barrier].Off_Imm();
break;
case eSkillExtraType.Reincarnation:
n_Reincarnation = (int)pSkill.f_ExtraValue1; // 부활 횟수
break;
}
}

View File

@ -176,9 +176,9 @@ public class MyActor : Actor
AnimationPlay(aniname);
}
public override void On_Regen()
public override void On_Regen(bool reincarnation = false, float healrate = 1f)
{
base.On_Regen();
base.On_Regen(reincarnation, healrate);
Set_Warp(LoadMapMgr.Ins.Get_ReincanationPos(MyValue.MyChoiceMapData));
}

View File

@ -186,9 +186,9 @@ public class PCActor : MyActor
LoadMapMgr.Ins.Get_PortalPos(MyValue.MyChoiceMapData, Set_Warp); // TODO 정인호 : PvP 일 경우 적 위치 잡기
}
public override void On_Regen()
public override void On_Regen(bool reincarnation = false, float healrate = 1f)
{
base.On_Regen();
base.On_Regen(reincarnation, healrate);
Del_Target(true);
Del_Magic();
Play_Idle();

View File

@ -125,9 +125,9 @@ public class PetActor : MyActor
m_Stat.Reset();
}
public override void On_Regen()
public override void On_Regen(bool reincarnation = false, float healrate = 1f)
{
base.On_Regen();
base.On_Regen(reincarnation, healrate);
Del_Target();
Play_Idle();
}

View File

@ -24,6 +24,6 @@ public class FieldBossData : MyCoroutine
private void AfterDie(int obj)
{
Set_Coroutine(m_FieldBoss.On_Regen, 10f);
Set_Coroutine(()=> { m_FieldBoss.On_Regen(); }, 10f);
}
}

View File

@ -7,7 +7,7 @@ public enum eSkillType { Active, Passive, JobPassive, MobPassive }
public enum eSkillTarget { Enemy, Self, SelfEnemy, Team, Pet }
public enum eSkillExtraType { None, Frost, Cure, Freezing, Blood, Poison, Burn, Stun, Slow, StatUp, ManaShield, SwordShield,
SpeedUp, DefenceDecrease, Aggro, VampirHeal, Knockback, Airborne, Curse, ManaBurn, HPBurn,
SilenceCurse, Barrier, }
SilenceCurse, Barrier, Reincarnation }
public class SkillListTableData : TableDataBase
{

View File

@ -4,9 +4,9 @@ using Newtonsoft.Json;
public enum eEffectLocation { Top, Mid, Bottom }
/// <summary>
/// Start 시전 시, Hit 때릴 때, GetHit 맞을 때, Skill ?
/// Start 시전 시, Hit 때릴 때, GetHit 맞을 때, Skill ?, AfterDie 죽은 뒤
/// </summary>
public enum eSkillExtraTiming { Start, Hit, GetHit, Skill }
public enum eSkillExtraTiming { Start, Hit, GetHit, Skill, AfterDie }
public class SkillTypeConfigTableData : TableDataBase
{