Project_WL/Assets/Script/DropItem/DropItem.cs

222 lines
8.9 KiB
C#
Raw Normal View History

2024-12-15 01:39:39 +00:00
using CodeStage.AntiCheat.ObscuredTypes;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Random = UnityEngine.Random;
public class DropItem : ProjectileBase
{
eItem m_Item;
eItem[] arr_Item = new eItem[] { eItem.Book, eItem.Fairy, eItem.Extra, eItem.Skill, eItem.Necklace, eItem.Pet, eItem.Ring, eItem.Weapon };
List<float> list_rate = new List<float> { 0.125f, 0.125f, 0.125f, 0.125f, 0.125f, 0.125f, 0.125f, 0.125f };
bool IsReady;
int m_Magnet;
float MagnetUpTime = 0f;
Vector3 v3_MagnetUP;
private void Awake()
{
var split = name.Split('_');
m_Item = DSUtil.StringToEnum<eItem>(split[1].Replace("(Clone)", ""));
}
private void Update()
{
switch (m_Magnet)
{
case 1:
if (MyValue.MyPC.IsDead())
m_Magnet = 0;
else
{
MagnetUpTime += Time.deltaTime * 2f;
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;
m_ProjecTileData.Speed = 15f;
2024-12-15 01:39:39 +00:00
}
}
break;
case 2:
if (MyValue.MyPC.IsDead())
m_Magnet = 0;
else
{
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;
}
}
public override void Set(ProjectileData _data)
{
base.Set(_data);
IsReady = false;
m_Magnet = 0;
switch (m_Item)
{
case eItem.Heart:
transform.localScale = Vector3.one * 1.5f;
break;
case eItem.Gem:
transform.localScale = Vector3.one * 0.3f;
break;
case eItem.Gold:
transform.localScale = Vector3.one * 2f;
StartCoroutine(Co_Rotation_Y());
break;
case eItem.Food:
case eItem.Seed:
StartCoroutine(Co_Rotation_Y());
break;
default:
transform.localScale = Vector3.one * 3f;
break;
}
_data.v3_StartPos = DSUtil.Get_RandomPos_onNavMesh(_data.shooter.Get_position(), 0.5f);
StartCoroutine(Co_Move_Split(() =>
{
IsReady = true;
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;
// }
//}
}
}, _data.shooter.Get_Center_position(), _data.v3_StartPos));
//StartCoroutine(Co_Off(20f));
}
ItemData itemdata = new ItemData { UICardType = eUICardType.GetItem };
public bool ItemTouch()
{
if (gameObject.activeInHierarchy)
{
var data = m_ProjecTileData.shooter.Get_MonsterStatTableData();
2024-12-15 01:39:39 +00:00
var sdata = ServerInfo.Ins.m_ServerData;
var statdata = MyValue.MyPC.Get_StatInfo();
switch (m_Item)
{
case eItem.Heart:
var heal = 0.05f;
ActorInfo.Ins.All_Heal(heal);
MessageInfo.Ins.Add_Log(110, heal * 100);
break;
case eItem.Gem:
itemdata.ItemType = m_Item;
itemdata.Set_ID(0);
itemdata.Amount = Random.Range(1, 4);
break;
case eItem.Gold: // 확정 드랍으로 변경됨
//itemdata.ItemType = m_Item;
//itemdata.Set_ID(0);
//itemdata.Amount = data.dic_amount[m_Item] + data.dic_amount[m_Item] * statdata.Get_Stat(eStat.GoldDrop);
//GameUI.Ins.IngameUI.m_StageResult.Add_Gold(itemdata.Amount);
//MessageInfo.Ins.Add_Log(DSUtil.Format("금화 {0:N0}개 획득", itemdata.Amount));
break;
case eItem.MobDropItem:
//if (InGameInfo.Ins.Get_CurStageData().Chapter == 12) // 책 안 나오게
// itemdata.ItemType = arr_Item[Random.Range(1, arr_Item.Length)];
//else
itemdata.ItemType = arr_Item[DSUtil.Get_RandomIndex(list_rate)];
itemdata.Amount = 1;
if (itemdata.ItemType == eItem.Book)
{
// TODO 정인호 : 책 페이지 나오는 거 테이블 설정 필요
//var pageid = table_bookpage.Ins.Get_RandomPageID(data.dic_itemid[itemdata.ItemType]);
//itemdata.ItemType = eItem.Page;
//itemdata.Set_ID(pageid);
}
//else
// itemdata.Set_ID(data.dic_itemid[itemdata.ItemType][Random.Range(0, data.dic_itemid[itemdata.ItemType].Count)]);
2024-12-22 01:07:25 +00:00
//MessageInfo.Ins.Add_Log(111, MyText.Get_ItemName(itemdata.Get_ID()));
2024-12-15 01:39:39 +00:00
break;
case eItem.WeaponStone:
case eItem.RingStone:
case eItem.NeckStone:
case eItem.BootsStone:
case eItem.FairyStone:
itemdata.ItemType = m_Item;
itemdata.Set_ID(0);
if (data == null) // 광석
itemdata.Amount = Math.Truncate(m_ProjecTileData.Amount + m_ProjecTileData.Amount * statdata.Get_Stat(Get_StoneStat(m_Item)));
2024-12-15 01:39:39 +00:00
else // 몹
{
//itemdata.Amount = Math.Truncate(data.dic_amount[m_Item] + data.dic_amount[m_Item] * statdata.Get_Stat(Get_StoneStat(m_Item)));
//if (InGameInfo.Ins.Get_CurStageData().Chapter == 103 && m_ProjectTileData.actor_shooter.Get_ID() > 0)
// itemdata.Amount *= 10d;
}
itemdata.Amount = Math.Truncate(itemdata.Amount * Random.Range(0.9f, 1.1f));
2024-12-22 01:07:25 +00:00
//MessageInfo.Ins.Add_Log(112, MyText.Get_ItemName(itemdata.Get_ID()), NumberFormatter.FormatNumber(itemdata.Amount));
2024-12-15 01:39:39 +00:00
break;
case eItem.Food: case eItem.Seed:
//itemdata.ItemType = m_Item;
//itemdata.Set_ID(data.dic_itemid[itemdata.ItemType][Random.Range(0, data.dic_itemid[itemdata.ItemType].Count)]);
//itemdata.Amount = 1;
break;
}
itemdata.Amount.RandomizeCryptoKey();
if (m_Item != eItem.Heart)
SmallItemGetUI.Ins.Set(itemdata);
switch (m_Item)
{
case eItem.Heart: case eItem.Gold: case eItem.Exp:
break;
default:
InGameInfo.Ins.Add_ObtainItem(itemdata);
break;
}
InGameInfo.Ins.Show_Effect("ItemTouch", transform.position);
gameObject.SetActive(false);
NewGameUI.Ins.m_GuideQuestUI.Add_GuideQuest(ePurpose.GetDropItem);
return true;
}
return false;
}
public bool Get_IsReady() { return IsReady; }
eStat Get_StoneStat(eItem item)
{
// TODO 정인호 : 강화석 드랍 없는 듯?
//switch (item)
//{
// case eItem.WeaponStone: return eStat.WeaponStoneDrop;
// case eItem.RingStone: return eStat.RingStoneDrop;
// case eItem.NeckStone: return eStat.NeckStoneDrop;
// case eItem.BootsStone: return eStat.BootsStoneDrop;
// case eItem.FairyStone: return eStat.FairyStoneDrop;
//}
return eStat.None;
}
IEnumerator Co_Rotation_Y()
{
float t = 0f;
while (true)
{
t += Time.deltaTime * 20f;
t = Mathf.Repeat(t, 359.9f);
transform.eulerAngles = new Vector3(90f, t, transform.rotation.eulerAngles.z);
yield return null;
}
}
}