public void SpawnItemBox(RefItemSpawn[] refDropItems, Vector3 pos) { if (refDropItems == null) { refDropItems = GetCurrentWave().itemSpawn.defaultItem; } float goldAlpha = m_wave*0.1f; int spawnedItemCount = 0; float ratioAlpha = 0; foreach(RefItemSpawn desc in refDropItems) { for(int i = 0; i < desc.count; ++i) { float ratio = Random.Range(0f, 1f); ratioAlpha = 0f; if (desc.refItem.type == ItemData.Type.WeaponParts) { ratioAlpha = Mathf.Min(Mathf.Max(0, m_wave-Const.MaxWave)/10000f, 0.1f); } else if (desc.refItem.type == ItemData.Type.WeaponDNA) { if (GetStage() < GetCurrentWave().mobSpawns.Length) ratio = 0f; } if (ratio > 0 && ratio <= (desc.ratio+ratioAlpha)) { float scale = 1f; ItemData item = null; switch(desc.refItem.type) { case ItemData.Type.Gold: item = new ItemGoldData(1); if (m_champ != null) { item.Count *= m_champ.GoldLevel; int extraCount = (int)(item.Count*m_champ.m_creatureProperty.GainExtraGold); item.Count += extraCount; } break; case ItemData.Type.HealPosion: item = new ItemHealPosionData(Random.Range(desc.minValue, desc.maxValue)); break; case ItemData.Type.Weapon: item = new ItemWeaponData(desc.refItem.id); break; case ItemData.Type.WeaponParts: if (m_champ != null && m_champ.WeaponHolder.MainWeapon != null) { ItemObject hasItem = Warehouse.Instance.FindItem(desc.refItemId); if (hasItem == null) item = new ItemWeaponPartsData(desc.refItemId); else if (hasItem != null && hasItem.Item.Level < hasItem.Item.RefItem.maxLevel) item = new ItemWeaponPartsData(desc.refItemId); } break; case ItemData.Type.WeaponDNA: item = new ItemWeaponDNAData(desc.refItem.id); break; case ItemData.Type.Accessory: item = new ItemAccessoryData(desc.refItem.id); break; case ItemData.Type.GoldMedal: { item = new ItemGoldMedalData(Random.Range(desc.minValue, desc.maxValue)); } break; case ItemData.Type.Skill: item = new ItemSkillData(Random.Range(desc.minValue, desc.maxValue+1)); break; case ItemData.Type.XPPotion: item = new ItemXPPotionData(Random.Range(desc.minValue, desc.maxValue)); item.Count += (int)(item.Count*goldAlpha); if (m_champ != null) item.Count += (int)(item.Count*m_champ.m_creatureProperty.GainExtraExp); break; case ItemData.Type.MobEgg: break; } if (item != null) { ++spawnedItemCount; GameObject itemBoxObj = (GameObject)Instantiate(m_prefItemBox, pos, Quaternion.Euler(0f, 0f, 0f)); ItemBox itemBox = itemBoxObj.GetComponent<ItemBox>(); itemBox.Item = item; itemBox.PickupCallback = (Creature obj)=>{ }; GameObject itemSkinObj = (GameObject)Instantiate(m_prefItemBoxSkins[(int)desc.refItem.type], pos, Quaternion.Euler(0f, 0f, 0f)); if (desc.refItem.type == ItemData.Type.Skill) { itemSkinObj.transform.Find(item.RefItem.codeName).gameObject.SetActive(true); itemBox.LifeTime = 60f; } else if (desc.refItem.type == ItemData.Type.WeaponParts) { itemSkinObj.transform.Find(item.RefItem.codeName).gameObject.SetActive(true); } itemSkinObj.transform.parent = itemBoxObj.transform; itemSkinObj.transform.localPosition = Vector3.zero; itemSkinObj.transform.localRotation = m_prefItemBoxSkins[(int)desc.refItem.type].transform.rotation; itemBoxObj.transform.localScale = Vector3.one * scale; itemBoxObj.SetActive(false); StartCoroutine(EffectSpawnItemBox(itemBox, 0.15f*spawnedItemCount)); } } } } }
public void Load(BinaryReader pReader) { Identifier = pReader.ReadInt32(); Flags = (EItemFlags)pReader.ReadUInt16(); Price = pReader.ReadInt32(); MaxSlotQuantity = pReader.ReadUInt16(); MaxPossessionCount = pReader.ReadByte(); MinLevel = pReader.ReadByte(); MaxLevel = pReader.ReadByte(); Experience = pReader.ReadInt32(); MakerLevel = pReader.ReadByte(); Money = pReader.ReadInt32(); StateChangeItem = pReader.ReadInt32(); NPC = pReader.ReadInt32(); if (pReader.ReadBoolean()) { Equipment = new ItemEquipmentData(); Equipment.Load(pReader); } if (pReader.ReadBoolean()) { Consume = new ItemConsumeData(); Consume.Load(pReader); } if (pReader.ReadBoolean()) { Card = new ItemCardData(); Card.Load(pReader); } if (pReader.ReadBoolean()) { Pet = new ItemPetData(); Pet.Load(pReader); } if (pReader.ReadBoolean()) { Recharge = new ItemRechargeData(); Recharge.Load(pReader); } if (pReader.ReadBoolean()) { Scroll = new ItemScrollData(); Scroll.Load(pReader); } int morphsCount = pReader.ReadInt32(); Morphs = new List<ItemMorphData>(morphsCount); while (morphsCount-- > 0) { ItemMorphData morph = new ItemMorphData(); morph.Load(pReader); Morphs.Add(morph); } int skillsCount = pReader.ReadInt32(); Skills = new List<ItemSkillData>(skillsCount); while (skillsCount-- > 0) { ItemSkillData skill = new ItemSkillData(); skill.Load(pReader); Skills.Add(skill); } int summonsCount = pReader.ReadInt32(); Summons = new List<ItemSummonData>(summonsCount); while (summonsCount-- > 0) { ItemSummonData summon = new ItemSummonData(); summon.Load(pReader); Summons.Add(summon); } }