222 lines
8.9 KiB
C#
222 lines
8.9 KiB
C#
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_ProjectTileData.Speed);
|
|
if (MagnetUpTime >= 1f)
|
|
{
|
|
MagnetUpTime = 0f;
|
|
m_Magnet = 2;
|
|
m_ProjectTileData.Speed = 15f;
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
if (MyValue.MyPC.IsDead())
|
|
m_Magnet = 0;
|
|
else
|
|
{
|
|
m_ProjectTileData.Speed += Time.deltaTime * 2f;
|
|
transform.position = Vector3.MoveTowards(transform.position, MyValue.MyPC.Get_Center_position(), Time.deltaTime * m_ProjectTileData.Speed);
|
|
}
|
|
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_ProjectTileData.shooter.Get_MonsterStatTableData();
|
|
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)]);
|
|
MessageInfo.Ins.Add_Log(111, MyText.Get_ItemName(itemdata.Get_ID()));
|
|
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_ProjectTileData.Amount + m_ProjectTileData.Amount * statdata.Get_Stat(Get_StoneStat(m_Item)));
|
|
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));
|
|
MessageInfo.Ins.Add_Log(112, MyText.Get_ItemName(itemdata.Get_ID()), NumberFormatter.FormatNumber(itemdata.Amount));
|
|
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;
|
|
}
|
|
}
|
|
} |