コード例 #1
0
        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;
            }
        }
コード例 #2
0
		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;
			}
		}