private void _useItem(ItemUseData data) { World.Instance.MainPlayer.ActiveCharacter.UpdateInventoryItem(data.ItemID, data.CharacterAmount, data.Weight, data.MaxWeight); switch (data.Type) { case ItemType.Teleport: /*Warp packet handles the rest!*/ break; case ItemType.Heal: { World.Instance.MainPlayer.ActiveCharacter.Stats.SetHP(data.HP); World.Instance.MainPlayer.ActiveCharacter.Stats.SetTP(data.TP); int percent = (int)Math.Round(100.0 * ((double)data.HP / World.Instance.MainPlayer.ActiveCharacter.Stats.maxhp)); if (data.HPGain > 0) World.Instance.ActiveCharacterRenderer.SetDamageCounterValue(data.HPGain, percent, true); m_game.Hud.RefreshStats(); } break; case ItemType.HairDye: { World.Instance.MainPlayer.ActiveCharacter.RenderData.SetHairColor(data.HairColor); } break; case ItemType.Beer: World.Instance.ActiveCharacterRenderer.MakeDrunk(); m_game.Hud.SetStatusLabel(DATCONST2.STATUS_LABEL_TYPE_WARNING, DATCONST2.STATUS_LABEL_ITEM_USE_DRUNK); break; case ItemType.EffectPotion: { //World.Instance.ActiveCharacterRenderer.ShowEffect(data.EffectID); //todo: get effects working } break; case ItemType.CureCurse: { //actually remove the item(s) from the main character Character c = World.Instance.MainPlayer.ActiveCharacter; for (int i = 0; i < (int)EquipLocation.PAPERDOLL_MAX; ++i) { int nextID = c.PaperDoll[i]; if (nextID > 0 && World.Instance.EIF.GetItemRecordByID(nextID).Special == ItemSpecial.Cursed) { c.PaperDoll[i] = 0; switch ((EquipLocation)i) { case EquipLocation.Boots: c.RenderData.SetBoots(0); break; case EquipLocation.Armor: c.RenderData.SetArmor(0); break; case EquipLocation.Hat: c.RenderData.SetHat(0); break; case EquipLocation.Shield: c.RenderData.SetShield(0); break; case EquipLocation.Weapon: c.RenderData.SetWeapon(0); break; } } } //update main character's stats CharStatData s = c.Stats; s.SetMaxHP(data.CureStats.MaxHP); s.SetMaxTP(data.CureStats.MaxTP); s.SetStr(data.CureStats.Str); s.SetInt(data.CureStats.Int); s.SetWis(data.CureStats.Wis); s.SetAgi(data.CureStats.Agi); s.SetCon(data.CureStats.Con); s.SetCha(data.CureStats.Cha); s.SetMinDam(data.CureStats.MinDam); s.SetMaxDam(data.CureStats.MaxDam); s.SetAccuracy(data.CureStats.Accuracy); s.SetEvade(data.CureStats.Evade); s.SetArmor(data.CureStats.Armor); m_game.Hud.RefreshStats(); } break; case ItemType.EXPReward: { CharStatData s = World.Instance.MainPlayer.ActiveCharacter.Stats; if (s.level < data.RewardStats.Level) { //level up! World.Instance.MainPlayer.ActiveCharacter.Emote(Emote.LevelUp); World.Instance.ActiveCharacterRenderer.PlayerEmote(); s.level = data.RewardStats.Level; } s.exp = data.RewardStats.Exp; s.statpoints = data.RewardStats.StatPoints; s.skillpoints = data.RewardStats.SkillPoints; s.maxhp = data.RewardStats.MaxHP; s.maxtp = data.RewardStats.MaxTP; s.maxsp = data.RewardStats.MaxSP; } break; } }
private void _useItem(ItemUseData data) { World.Instance.MainPlayer.ActiveCharacter.UpdateInventoryItem(data.ItemID, data.CharacterAmount, data.Weight, data.MaxWeight); switch (data.Type) { case ItemType.Teleport: /*Warp packet handles the rest!*/ break; case ItemType.Heal: { World.Instance.MainPlayer.ActiveCharacter.Stats.HP = data.HP; World.Instance.MainPlayer.ActiveCharacter.Stats.TP = data.TP; int percent = (int)Math.Round(100.0 * ((double)data.HP / World.Instance.MainPlayer.ActiveCharacter.Stats.MaxHP)); if (data.HPGain > 0) World.Instance.ActiveCharacterRenderer.SetDamageCounterValue(data.HPGain, percent, true); m_game.Hud.RefreshStats(); } break; case ItemType.HairDye: { World.Instance.MainPlayer.ActiveCharacter.RenderData.SetHairColor(data.HairColor); } break; case ItemType.Beer: World.Instance.ActiveCharacterRenderer.MakeDrunk(); m_game.Hud.SetStatusLabel(DATCONST2.STATUS_LABEL_TYPE_WARNING, DATCONST2.STATUS_LABEL_ITEM_USE_DRUNK); break; case ItemType.EffectPotion: { m_game.Hud.DisableEffectPotionUse(); var effectRenderer = new EffectRenderer(m_game, World.Instance.ActiveCharacterRenderer, m_game.Hud.EnableEffectPotionUse); effectRenderer.SetEffectInfoTypeAndID(EffectType.Potion, data.EffectID); effectRenderer.ShowEffect(); } break; case ItemType.CureCurse: { //actually remove the item(s) from the main character Character c = World.Instance.MainPlayer.ActiveCharacter; for (int i = 0; i < (int)EquipLocation.PAPERDOLL_MAX; ++i) { int nextID = c.PaperDoll[i]; if (nextID > 0 && World.Instance.EIF.GetItemRecordByID(nextID).Special == ItemSpecial.Cursed) { c.PaperDoll[i] = 0; switch ((EquipLocation)i) { case EquipLocation.Boots: c.RenderData.SetBoots(0); break; case EquipLocation.Armor: c.RenderData.SetArmor(0); break; case EquipLocation.Hat: c.RenderData.SetHat(0); break; case EquipLocation.Shield: c.RenderData.SetShield(0); break; case EquipLocation.Weapon: c.RenderData.SetWeapon(0); break; } } } //update main character's stats CharStatData s = c.Stats; s.MaxHP = data.CureStats.MaxHP; s.MaxTP = data.CureStats.MaxTP; s.Str = data.CureStats.Str; s.Int = data.CureStats.Int; s.Wis = data.CureStats.Wis; s.Agi = data.CureStats.Agi; s.Con = data.CureStats.Con; s.Cha = data.CureStats.Cha; s.MinDam = data.CureStats.MinDam; s.MaxDam = data.CureStats.MaxDam; s.Accuracy = data.CureStats.Accuracy; s.Evade = data.CureStats.Evade; s.Armor = data.CureStats.Armor; m_game.Hud.RefreshStats(); } break; case ItemType.EXPReward: { CharStatData s = World.Instance.MainPlayer.ActiveCharacter.Stats; if (s.Level < data.RewardStats.Level) { //level up! World.Instance.MainPlayer.ActiveCharacter.Emote(Emote.LevelUp); World.Instance.ActiveCharacterRenderer.PlayerEmote(); s.Level = data.RewardStats.Level; } s.Experience = data.RewardStats.Exp; s.StatPoints = data.RewardStats.StatPoints; s.SkillPoints = data.RewardStats.SkillPoints; s.MaxHP = data.RewardStats.MaxHP; s.MaxTP = data.RewardStats.MaxTP; s.MaxSP = data.RewardStats.MaxSP; } break; } }