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 list_rate = new List { 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(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); if (MagnetUpTime >= 1f) { MagnetUpTime = 0f; m_Magnet = 2; m_ProjecTileData.Speed = 15f; } } 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); } 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(); 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_ProjecTileData.Amount + m_ProjecTileData.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; } } }