2024-12-15 01:39:39 +00:00
|
|
|
using CodeStage.AntiCheat.ObscuredTypes;
|
|
|
|
|
using System.Collections;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class DropItem : ProjectileBase
|
|
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
public Collider m_Collider;
|
|
|
|
|
|
|
|
|
|
ObscuredInt _itemid;
|
|
|
|
|
int m_itemid
|
|
|
|
|
{
|
|
|
|
|
get { return _itemid; }
|
|
|
|
|
set { _itemid = value; _itemid.RandomizeCryptoKey(); }
|
|
|
|
|
}
|
|
|
|
|
ObscuredInt _itemamount;
|
|
|
|
|
int m_itemamount
|
|
|
|
|
{
|
|
|
|
|
get { return _itemamount; }
|
|
|
|
|
set { _itemamount = value; _itemamount.RandomizeCryptoKey(); }
|
|
|
|
|
}
|
2024-12-15 01:39:39 +00:00
|
|
|
|
|
|
|
|
int m_Magnet;
|
|
|
|
|
float MagnetUpTime = 0f;
|
|
|
|
|
Vector3 v3_MagnetUP;
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
|
{
|
|
|
|
|
switch (m_Magnet)
|
|
|
|
|
{
|
|
|
|
|
case 1:
|
|
|
|
|
if (MyValue.MyPC.IsDead())
|
|
|
|
|
m_Magnet = 0;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MagnetUpTime += Time.deltaTime * 2f;
|
2025-01-19 21:58:12 +00:00
|
|
|
transform.position = Vector3.MoveTowards(transform.position, v3_MagnetUP, Time.deltaTime * m_ProjecTileData.Speed);
|
2024-12-15 01:39:39 +00:00
|
|
|
if (MagnetUpTime >= 1f)
|
|
|
|
|
{
|
|
|
|
|
MagnetUpTime = 0f;
|
|
|
|
|
m_Magnet = 2;
|
2025-01-19 21:58:12 +00:00
|
|
|
m_ProjecTileData.Speed = 15f;
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
if (MyValue.MyPC.IsDead())
|
|
|
|
|
m_Magnet = 0;
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-01-19 21:58:12 +00:00
|
|
|
m_ProjecTileData.Speed += Time.deltaTime * 2f;
|
|
|
|
|
transform.position = Vector3.MoveTowards(transform.position, MyValue.MyPC.Get_Center_position(), Time.deltaTime * m_ProjecTileData.Speed);
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 06:11:41 +00:00
|
|
|
public void Set(int itemid, int amount, Vector3 startpos)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
gameObject.SetActive(true);
|
|
|
|
|
m_itemid = itemid;
|
|
|
|
|
m_itemamount = amount;
|
2025-03-06 06:15:45 +00:00
|
|
|
Vector3 targetpos = startpos;
|
2024-12-15 01:39:39 +00:00
|
|
|
|
2025-03-06 06:11:41 +00:00
|
|
|
switch (m_itemid)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:15:45 +00:00
|
|
|
case 2:
|
|
|
|
|
startpos += Vector3.up * 0.25f;
|
|
|
|
|
targetpos = DSUtil.Get_RandomPos_onNavMesh(startpos, 2f, 3f);
|
|
|
|
|
targetpos += Vector3.up * 0.25f;
|
|
|
|
|
break;
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
|
2025-03-06 06:11:41 +00:00
|
|
|
m_Collider.enabled = false;
|
2024-12-15 01:39:39 +00:00
|
|
|
StartCoroutine(Co_Move_Split(() =>
|
|
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
m_Collider.enabled = true;
|
2024-12-15 01:39:39 +00:00
|
|
|
if (m_Magnet == 0)
|
|
|
|
|
{
|
|
|
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
|
|
|
// TODO 정인호 : 컨텐츠에서 자석 기능이 있었는 데 어떻게 될 지 모르니 일단 주석처리
|
|
|
|
|
//if (InGameInfo.Ins.Get_CurStageData().Chapter > 100)
|
|
|
|
|
//{
|
|
|
|
|
// var costume16 = sdata.PC.Get_Value(16); // 코스튬 16
|
|
|
|
|
// if (costume16 > 0f && Vector3.Distance(transform.position, MyValue.MyPC.Get_position()) <= costume16)
|
|
|
|
|
// {
|
|
|
|
|
// m_Magnet = 1;
|
|
|
|
|
// v3_MagnetUP = transform.position + Vector3.up * 3f;
|
|
|
|
|
// m_ProjectTileData.Speed = 5f;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
}
|
2025-03-06 06:15:45 +00:00
|
|
|
}, startpos, targetpos));
|
2025-03-06 06:11:41 +00:00
|
|
|
StartCoroutine(Co_Rotation_Y());
|
|
|
|
|
StartCoroutine(Co_Off(20f));
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
|
2025-03-06 06:11:41 +00:00
|
|
|
public bool ItemTouch(Actor touchActor)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
if (gameObject.activeInHierarchy && touchActor)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
if (touchActor.IsRole(eRole.PC) || touchActor.IsRole(eRole.Fairy))
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
var sdata = ServerInfo.Ins.m_ServerData;
|
|
|
|
|
var statdata = touchActor.Get_StatInfo();
|
2024-12-15 01:39:39 +00:00
|
|
|
|
2025-03-06 07:47:57 +00:00
|
|
|
if (MyValue.MyChoiceMapData.Get_MapData().e_Dungeon == eDungeon.d4_Wave)
|
|
|
|
|
{
|
|
|
|
|
DungeonInfo.Ins.Add_WaveScore(1); // TODO 정인호 : 웨이브 점수
|
|
|
|
|
DungeonInfo.Ins.Add_WaveGold(10); // TODO 정인호 : 웨이브 골드
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (m_itemid == 2)
|
|
|
|
|
{
|
|
|
|
|
m_itemamount += (int)statdata.Get_Stat(eStat.GOLD_INCREASE);
|
|
|
|
|
m_itemamount += (int)(m_itemamount *
|
|
|
|
|
(statdata.Get_Stat(eStat.GOLD_Multiplier) + statdata.Get_Stat(eStat.Battle_GOLD_Multiplier)));
|
|
|
|
|
}
|
|
|
|
|
sdata.Add_Item(m_itemid, _itemamount);
|
|
|
|
|
}
|
2025-03-06 06:11:41 +00:00
|
|
|
|
|
|
|
|
InGameInfo.Ins.Show_Effect("Effect_GetCoin", transform.position);
|
|
|
|
|
gameObject.SetActive(false);
|
|
|
|
|
NewGameUI.Ins.m_GuideQuestUI.Add_GuideQuest(ePurpose.GetDropItem);
|
|
|
|
|
return true;
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-06 06:11:41 +00:00
|
|
|
public override bool ProcessCollider(Collider other, bool Off_byHit = true, bool noDmg = false)
|
2024-12-15 01:39:39 +00:00
|
|
|
{
|
2025-03-06 06:11:41 +00:00
|
|
|
return ItemTouch(other.GetComponent<Actor>());
|
2024-12-15 01:39:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
IEnumerator Co_Rotation_Y()
|
|
|
|
|
{
|
|
|
|
|
float t = 0f;
|
|
|
|
|
while (true)
|
|
|
|
|
{
|
2025-03-06 06:15:45 +00:00
|
|
|
t += Time.deltaTime * 30f;
|
2024-12-15 01:39:39 +00:00
|
|
|
t = Mathf.Repeat(t, 359.9f);
|
2025-03-06 06:11:41 +00:00
|
|
|
transform.eulerAngles = new Vector3(0f, t, 0f);
|
2024-12-15 01:39:39 +00:00
|
|
|
yield return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|