2024-12-15 01:39:39 +00:00
|
|
|
using System.Collections;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class FairyActor : Actor
|
|
|
|
|
{
|
|
|
|
|
EquipmentTableBase m_FairyTableData;
|
2025-03-06 06:11:41 +00:00
|
|
|
DropItem go_finditem;
|
2024-12-15 01:39:39 +00:00
|
|
|
float SeekTime = 5f, t;
|
|
|
|
|
|
|
|
|
|
byte Status = 0; // 0 아이들, 1 캐릭터 뒤로 이동 중, 2 아이템으로 이동 중
|
|
|
|
|
|
|
|
|
|
protected override void Awake()
|
|
|
|
|
{
|
|
|
|
|
base.Awake();
|
|
|
|
|
m_Stat = new ActorStatInfo(eRole.Fairy, ServerInfo.Ins.m_ServerData, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override void Set(bool isEnemy, Actor owner, ServerData sdata, int _id, bool _stop, bool _ui = false)
|
|
|
|
|
{
|
|
|
|
|
base.Set(isEnemy, owner, sdata, _id, _stop);
|
|
|
|
|
|
2025-04-17 21:43:38 +00:00
|
|
|
//m_FairyTableData = table_fairy.Ins.Get_Data(_id);
|
2024-12-15 01:39:39 +00:00
|
|
|
if (!_ui)
|
|
|
|
|
{
|
|
|
|
|
int lv = sdata.Get_SmeltingLv(_id);
|
|
|
|
|
m_NavMeshAgent.speed = m_NavSpeed = 6f; // TODO 정인호 : 요정은 날개로 변경될 예정 m_FairyTableData.Get_StatValue(eStat.FairyMoveSpeed, lv);
|
|
|
|
|
t = SeekTime = 2f; //m_FairyTableData.Get_StatValue(eStat.FairySeek, lv);
|
|
|
|
|
Set_Warp(Get_Pos());
|
|
|
|
|
if (!m_NavMeshAgent.isOnNavMesh)
|
|
|
|
|
Set_Warp(Get_Pos());
|
|
|
|
|
Status = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vector3 Get_Pos()
|
|
|
|
|
{
|
|
|
|
|
return DSUtil.Get_RandomPos_onNavMesh(MyValue.MyPC.Get_position(), 0f, 1f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void Update()
|
|
|
|
|
{
|
|
|
|
|
t -= Time.deltaTime;
|
|
|
|
|
switch (Status)
|
|
|
|
|
{
|
|
|
|
|
case 0: // 대기 중
|
2025-03-06 06:11:41 +00:00
|
|
|
if (DSUtil.CheckNull(go_finditem) || !go_finditem.gameObject.activeInHierarchy)
|
|
|
|
|
go_finditem = DropItemInfo.Ins.Get_NearestDropItem(Get_position());
|
2024-12-15 01:39:39 +00:00
|
|
|
|
|
|
|
|
if (t > 0f)
|
|
|
|
|
{
|
|
|
|
|
if (go_finditem)
|
|
|
|
|
{ // 다음 아이템으로 미리 가서 대기
|
|
|
|
|
Play_Run();
|
|
|
|
|
Set_Path(go_finditem.transform.position);
|
|
|
|
|
Status = 3;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (go_finditem && Set_Path(go_finditem.transform.position))
|
|
|
|
|
{
|
|
|
|
|
Play_Run();
|
|
|
|
|
Status = 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Status == 0 && Vector3.Distance(MyValue.MyPC.Get_position(), Get_position()) > 3f)
|
|
|
|
|
{ // 캐릭터 근처로 옴
|
|
|
|
|
Play_Run();
|
|
|
|
|
Set_Path(Get_Pos());
|
|
|
|
|
Status = 1;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 1: // 캐릭터 뒤로 가는 중
|
|
|
|
|
if (Complete_Destination())
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 2: // 아이템으로 뛰어가는 중
|
|
|
|
|
if (CurAnim >= eAnim.Attack)
|
|
|
|
|
{
|
|
|
|
|
if (!isPlaying())
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
t = SeekTime;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (Complete_Destination())
|
|
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
if (!DSUtil.CheckNull(go_finditem))
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
if (go_finditem.gameObject.activeInHierarchy)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
|
|
|
|
Play_Attack(Random.Range(0, 2), 1f);
|
2025-03-06 06:11:41 +00:00
|
|
|
if (go_finditem.ItemTouch(this))
|
2024-12-15 01:39:39 +00:00
|
|
|
ServerInfo.Ins.m_ServerData.Add_TitleCondition(46, 47); // 칭호 : 요정은 내 친구, 요정은 내 노예
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
t = SeekTime;
|
|
|
|
|
}
|
|
|
|
|
go_finditem = null;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Play_Idle();
|
|
|
|
|
Status = 0;
|
|
|
|
|
t = SeekTime;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 3: // 아무것도 안함
|
|
|
|
|
if (CurAnim != eAnim.Idle && Complete_Destination())
|
|
|
|
|
Play_Idle();
|
|
|
|
|
if (t <= 0f)
|
|
|
|
|
Status = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|