몬스터 경험치 지급, 경험치 공식 에러 수정, 스킬 사용 중 pc 조이스틱 관련 로직 수정

This commit is contained in:
Ino 2025-03-07 08:52:59 +09:00
parent 74da53a303
commit 5ae5724dd5
15 changed files with 51 additions and 48 deletions

View File

@ -57,8 +57,10 @@ messageinfo 엄청 느린 버그
- 몬스터 패트롤 거리 조절 - 몬스터 패트롤 거리 조절
- 점수와 골드 (기본 1점, 10골드만 주는 중(밸런스 필요)) - 점수와 골드 (기본 1점, 10골드만 주는 중(밸런스 필요))
장비 스탯 추가 구현 장비 스탯 추가 구현
- 일꾼 이속, RND_SKILL - 일꾼 이속, RND_SKILL
몬스터 골드, 아이템 드랍
일꾼 추가
몬스터 아이템 드랍
몬스터 경험치

View File

@ -766,13 +766,6 @@ ModelImporter:
floatParameter: 0 floatParameter: 0
intParameter: 0 intParameter: 0
messageOptions: 0 messageOptions: 0
- time: 0.8657505
functionName: SkillEvent
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 1
messageOptions: 0
transformMask: [] transformMask: []
maskType: 3 maskType: 3
maskSource: {fileID: 101100000, guid: 4ebc95c8618479f4d8251c7dafa10029, type: 2} maskSource: {fileID: 101100000, guid: 4ebc95c8618479f4d8251c7dafa10029, type: 2}
@ -1531,7 +1524,8 @@ ModelImporter:
hasTranslationDoF: 0 hasTranslationDoF: 0
hasExtraRoot: 0 hasExtraRoot: 0
skeletonHasParents: 0 skeletonHasParents: 0
lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e57e9b8cd5e115f4f8d7736473e5c7fd, type: 3} lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e57e9b8cd5e115f4f8d7736473e5c7fd,
type: 3}
autoGenerateAvatarMappingIfUnspecified: 1 autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3 animationType: 3
humanoidOversampling: 1 humanoidOversampling: 1

View File

@ -851,13 +851,6 @@ ModelImporter:
floatParameter: 0 floatParameter: 0
intParameter: 0 intParameter: 0
messageOptions: 0 messageOptions: 0
- time: 0.82727265
functionName: SkillEvent
data:
objectReferenceParameter: {instanceID: 0}
floatParameter: 0
intParameter: 1
messageOptions: 0
transformMask: [] transformMask: []
maskType: 3 maskType: 3
maskSource: {fileID: 101100000, guid: 4ebc95c8618479f4d8251c7dafa10029, type: 2} maskSource: {fileID: 101100000, guid: 4ebc95c8618479f4d8251c7dafa10029, type: 2}
@ -1616,7 +1609,8 @@ ModelImporter:
hasTranslationDoF: 0 hasTranslationDoF: 0
hasExtraRoot: 0 hasExtraRoot: 0
skeletonHasParents: 0 skeletonHasParents: 0
lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e57e9b8cd5e115f4f8d7736473e5c7fd, type: 3} lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: e57e9b8cd5e115f4f8d7736473e5c7fd,
type: 3}
autoGenerateAvatarMappingIfUnspecified: 1 autoGenerateAvatarMappingIfUnspecified: 1
animationType: 3 animationType: 3
humanoidOversampling: 1 humanoidOversampling: 1

View File

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.AI; using UnityEngine.AI;
using UnityEngine.Rendering;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
public class Actor : MyCoroutine public class Actor : MyCoroutine
@ -797,6 +798,7 @@ public class Actor : MyCoroutine
#region #region
IEnumerator Co_JumpAttack(float heightPos_y, float duration) IEnumerator Co_JumpAttack(float heightPos_y, float duration)
{ {
OptionInfo.Ins.Set_PCMove(this, false);
var startPos = Get_position(); // 현재 위치 var startPos = Get_position(); // 현재 위치
var targetPos = Get_TeleportPostion(m_Target); var targetPos = Get_TeleportPostion(m_Target);
@ -826,7 +828,7 @@ public class Actor : MyCoroutine
m_bImmortal = true; m_bImmortal = true;
Model_OnOff(false); Model_OnOff(false);
Weapon_OnOff(false); Weapon_OnOff(false);
OptionInfo.Ins.PCMove = false; OptionInfo.Ins.Set_PCMove(this, false);
yield return new WaitForSeconds(invisibleTime); yield return new WaitForSeconds(invisibleTime);
@ -834,7 +836,7 @@ public class Actor : MyCoroutine
m_bImmortal = false; m_bImmortal = false;
Model_OnOff(true); Model_OnOff(true);
Weapon_OnOff(true); Weapon_OnOff(true);
OptionInfo.Ins.PCMove = true; OptionInfo.Ins.Set_PCMove(this, true);
actVisible?.Invoke(); actVisible?.Invoke();
} }
@ -2128,22 +2130,12 @@ public class Actor : MyCoroutine
} }
} }
} }
/// <summary>
/// 0 None, 1 스킬 사용 시 이동 금지
/// </summary>
public virtual void SkillEvent(int a) public virtual void SkillEvent(int a)
{ {
#if UNITY_EDITOR #if UNITY_EDITOR
if (SettingsMain.Ins) SettingsMain.Ins.Add_Event(System.Reflection.MethodBase.GetCurrentMethod().Name, 1, a); if (SettingsMain.Ins) SettingsMain.Ins.Add_Event(System.Reflection.MethodBase.GetCurrentMethod().Name, 1, a);
#endif #endif
Shoot_Skill(); Shoot_Skill();
if (a == 0 && m_NavMeshAgent.isOnNavMesh) // 움직임 가능
m_NavMeshAgent.isStopped = false;
else if (a == 1)
{
IsStop = true;
m_NavMeshAgent.ResetPath();
}
} }
public virtual void FootR(string s) public virtual void FootR(string s)
{ {

View File

@ -394,11 +394,14 @@ public class MobActor : Actor
if (n_Reincarnation <= 0) if (n_Reincarnation <= 0)
{ {
DropItemInfo.Ins.Drop_DropItem(2, m_MonsterAppearData.n_DropGold, Get_position()); DropItemInfo.Ins.Drop_DropItem(2, m_MonsterAppearData.n_DropGold, Get_position());
var pcstat = MyValue.MyPC.Get_StatInfo();
var exp = m_MonsterAppearData.n_DropExp;
exp += (uint)(exp * (pcstat.Get_Stat(eStat.EXP_Multiplier) + pcstat.Get_Stat(eStat.Battle_EXP_Multiplier)));
sdata.PC.Add_Exp(exp);
sdata.Add_CollectionMobKill(m_MonsterTableData.n_MonsterID); sdata.Add_CollectionMobKill(m_MonsterTableData.n_MonsterID);
} }
base.Set_Die(); base.Set_Die();
m_DieTime = m_MonsterAppearData.f_SpawnerDelay; m_DieTime = m_MonsterAppearData.f_SpawnerDelay;
//m_MonsterAppearData.Cal_DropItems(this);
if (IsSubRole(eSubRol.Boss)) if (IsSubRole(eSubRol.Boss))
{ {

View File

@ -45,12 +45,12 @@ public class Skill_DeathBlade : ProjectileBase
IEnumerator Co_JoyStick(Actor hitter) IEnumerator Co_JoyStick(Actor hitter)
{ {
OptionInfo.Ins.PCMove = false; OptionInfo.Ins.Set_PCMove(hitter, false);
yield return new WaitForSeconds(0.2f); yield return new WaitForSeconds(0.2f);
go_nextattack.SetActive(true); go_nextattack.SetActive(true);
go_nextattack.transform.position = hitter.Get_Center_position(); go_nextattack.transform.position = hitter.Get_Center_position();
yield return new WaitForSeconds(0.3f); yield return new WaitForSeconds(0.3f);
OptionInfo.Ins.PCMove = true; OptionInfo.Ins.Set_PCMove(hitter, true);
yield return new WaitForSeconds(0.5f); yield return new WaitForSeconds(0.5f);
Off(true); Off(true);
} }

View File

@ -23,6 +23,7 @@ public class Skill_FatalBlow : ProjectileBase
yield return null; yield return null;
yield return null; yield return null;
m_boxcollider.enabled = false; m_boxcollider.enabled = false;
OptionInfo.Ins.Set_PCMove(m_ProjecTileData.shooter, true);
yield return new WaitForSeconds(1f); yield return new WaitForSeconds(1f);
Off(true); Off(true);
} }

View File

@ -1,5 +1,6 @@
using System.Collections; using System.Collections;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering;
public class Skill_JumpAttack : ProjectileBase public class Skill_JumpAttack : ProjectileBase
{ {
@ -24,15 +25,16 @@ public class Skill_JumpAttack : ProjectileBase
Set_ReduceCoolTime_byStep(2); Set_ReduceCoolTime_byStep(2);
_data.e_SkillExtraType = IsStep(3) ? eSkillExtraType.Stun : eSkillExtraType.None; _data.e_SkillExtraType = IsStep(3) ? eSkillExtraType.Stun : eSkillExtraType.None;
StartCoroutine(Co_Update()); StartCoroutine(Co_Update(_data.shooter));
} }
IEnumerator Co_Update() IEnumerator Co_Update(Actor hitter)
{ {
m_boxcollider.enabled = true; m_boxcollider.enabled = true;
yield return null; yield return null;
yield return null; yield return null;
m_boxcollider.enabled = false; m_boxcollider.enabled = false;
OptionInfo.Ins.Set_PCMove(hitter, true);
yield return new WaitForSeconds(4f); yield return new WaitForSeconds(4f);
Off(true); Off(true);
} }

View File

@ -22,9 +22,8 @@ public class Skill_PhantomFrenzy : ProjectileBase
// 아래는 순간이동 후 공격인데, 이펙트와 애님이 마땅한 게 없음(트레일) // 아래는 순간이동 후 공격인데, 이펙트와 애님이 마땅한 게 없음(트레일)
IEnumerator Co_Update() IEnumerator Co_Update()
{ {
OptionInfo.Ins.PCMove = false;
var shooter = m_ProjecTileData.shooter; var shooter = m_ProjecTileData.shooter;
OptionInfo.Ins.Set_PCMove(shooter, false);
ObscuredInt attackTimes = AttackCount; // 공격 횟수 설정 ObscuredInt attackTimes = AttackCount; // 공격 횟수 설정
attackTimes.RandomizeCryptoKey(); attackTimes.RandomizeCryptoKey();
Actor target = m_ProjecTileData.target; Actor target = m_ProjecTileData.target;
@ -55,7 +54,7 @@ public class Skill_PhantomFrenzy : ProjectileBase
} }
// 이동 활성화 및 대기 상태로 전환 // 이동 활성화 및 대기 상태로 전환
OptionInfo.Ins.PCMove = true; OptionInfo.Ins.Set_PCMove(shooter, true);
shooter.Play_Idle(); shooter.Play_Idle();
} }

View File

@ -8,14 +8,14 @@ public class Skill_ShadowSlash : ProjectileBase
{ {
go_effect.gameObject.SetActive(false); go_effect.gameObject.SetActive(false);
base.Set(_data); base.Set(_data);
OptionInfo.Ins.PCMove = false; OptionInfo.Ins.Set_PCMove(_data.shooter, false);
_data.shooter.Set_CurAnim(eAnim.Skill); _data.shooter.Set_CurAnim(eAnim.Skill);
_data.shooter.Jump(2.1f, 1f, 5f, 2f, () => _data.shooter.Jump(2.1f, 1f, 5f, 2f, () =>
{ {
go_effect.gameObject.SetActive(true); go_effect.gameObject.SetActive(true);
go_effect.Set(_data); go_effect.Set(_data);
go_effect.transform.position = _data.target.Get_Center_position() + Vector3.up; go_effect.transform.position = _data.target.Get_Center_position() + Vector3.up;
OptionInfo.Ins.PCMove = true; OptionInfo.Ins.Set_PCMove(_data.shooter, true);
_data.shooter.Play_Idle(); _data.shooter.Play_Idle();
}); });

View File

@ -28,7 +28,7 @@ public class OptionInfo : MonoBehaviourSingletonTemplateBackKeyAdd<OptionInfo>
public TextMeshProUGUI tmp_bgm, tmp_sfx; public TextMeshProUGUI tmp_bgm, tmp_sfx;
public DelAccountUI m_DelAccountUI; public DelAccountUI m_DelAccountUI;
public SleepMode m_SleepMode; public SleepMode m_SleepMode;
public bool PCMove = true; bool PCMove = true;
List<CheckShadow> list_CheckShadow = new List<CheckShadow>(); List<CheckShadow> list_CheckShadow = new List<CheckShadow>();
int SaveTime = 0; int SaveTime = 0;
@ -155,6 +155,13 @@ public class OptionInfo : MonoBehaviourSingletonTemplateBackKeyAdd<OptionInfo>
Set_UI(); Set_UI();
} }
public void Set_PCMove(Actor actor, bool status)
{
if (actor.IsRole(eRole.PC) && !actor.IsEnemy())
PCMove = status;
}
public bool Get_PCMove() { return PCMove; }
public void Add_CheckShadow(CheckShadow _cs) public void Add_CheckShadow(CheckShadow _cs)
{ {
list_CheckShadow.RemoveAll(r => r == null); list_CheckShadow.RemoveAll(r => r == null);

View File

@ -2670,11 +2670,15 @@ public class SD_PC
Lv.RandomizeCryptoKey(); Lv.RandomizeCryptoKey();
// TODO 정인호 : 유저 레벨업 함 // TODO 정인호 : 유저 레벨업 함
} }
if (MyInfoUI.isIns) MyInfoUI.Ins.Set_Exp();
} }
public float Get_ExpSliderValue() public float Get_ExpSliderValue()
{ {
return DSUtil.Get_SliderValue((float)(Exp / Get_Exp(Lv + 1))); float prevLevelExp = Get_Exp(Lv);
float nextLevelExp = Get_Exp(Lv + 1);
return (Exp - prevLevelExp) / (nextLevelExp - prevLevelExp);
} }
public void Reset_Stat() public void Reset_Stat()

View File

@ -73,8 +73,8 @@ public class MonsterAppearData : TableDataBase
set { _PatrolRange = value; _PatrolRange.RandomizeCryptoKey(); } set { _PatrolRange = value; _PatrolRange.RandomizeCryptoKey(); }
} // 몬스터들의 순찰 범위 } // 몬스터들의 순찰 범위
ObscuredInt _DropExp; ObscuredUInt _DropExp;
public int n_DropExp public uint n_DropExp
{ {
get { return _DropExp; } get { return _DropExp; }
set { _DropExp = value; _DropExp.RandomizeCryptoKey(); } set { _DropExp = value; _DropExp.RandomizeCryptoKey(); }

View File

@ -31,15 +31,20 @@ public class MyInfoUI : MonoBehaviourSingletonuScrollViewArrMgr<MyInfoUI>
labels[0].text = ServerInfo.Ins.UserName; labels[0].text = ServerInfo.Ins.UserName;
labels[1].text = classData.Get_JobName(); labels[1].text = classData.Get_JobName();
slider_exp.value = sdata.PC.Get_ExpSliderValue(); Set_Exp();
texts[2].text = DSUtil.Format("Lv.{0}", sdata.PC.Lv);
texts[3].text = DSUtil.Format("{0}%", DSUtil.GetCommaText_N2(slider_exp.value * 100f));
Set_MainStats(); Set_MainStats();
Set_ScrollView(1, list_buffindex, false); Set_ScrollView(1, list_buffindex, false);
m_IngameBuffDebuffBase.AllOff(); m_IngameBuffDebuffBase.AllOff();
} }
public void Set_Exp()
{
var sdata = ServerInfo.Ins.m_ServerData;
slider_exp.value = sdata.PC.Get_ExpSliderValue();
texts[2].text = DSUtil.Format("Lv.{0}", sdata.PC.Lv);
texts[3].text = DSUtil.Format("{0}%", DSUtil.GetCommaText_N2(slider_exp.value * 100f));
}
public void Set_HP(double curHP, double maxHP) public void Set_HP(double curHP, double maxHP)
{ {
slider_hp.value = DSUtil.Get_SliderValue((float)(curHP / maxHP)); slider_hp.value = DSUtil.Get_SliderValue((float)(curHP / maxHP));

View File

@ -31,7 +31,7 @@ public class FloatingJoystick : Joystick
// 입력 방향을 카메라 방향에 맞춰 변환 // 입력 방향을 카메라 방향에 맞춰 변환
Vector3 direction = cameraForward.normalized * Vertical + cameraRight.normalized * Horizontal; Vector3 direction = cameraForward.normalized * Vertical + cameraRight.normalized * Horizontal;
if (OptionInfo.Ins.PCMove && direction != Vector3.zero) if (OptionInfo.Ins.Get_PCMove() && direction != Vector3.zero)
{ {
MyValue.m_RealCamera.Set_DistanceUp(Vertical < 0); // 아래로 움직일 경우 MyValue.m_RealCamera.Set_DistanceUp(Vertical < 0); // 아래로 움직일 경우
MyValue.m_RealCamera.m_BackMove = Vertical < 0; MyValue.m_RealCamera.m_BackMove = Vertical < 0;