public void Complete(Creature creature, Skill skill, Packet packet) { var itemEntityId = packet.GetLong(); var hwEntityId = packet.GetLong(); var item = creature.Inventory.GetItemSafe(itemEntityId); var hw = creature.Inventory.GetItemSafe(hwEntityId); var isHolyWater = (hw.Info.Id == 63016); // There's only one item using this skill. // TODO: Check loading time if (item.IsBlessable && isHolyWater) { creature.Inventory.Decrement(hw, 1); creature.Bless(item); } else Log.Warning("Blessing.Complete: Invalid item or Holy Water."); Send.UseMotion(creature, 14, 0); Send.SkillComplete(creature, skill.Info.Id, itemEntityId, hwEntityId); }
public void Complete(Creature creature, Skill skill, Packet packet) { var str = packet.GetString(); var dict = new MabiDictionary(str); var hwEntityId = dict.GetLong("ITEMID"); if (hwEntityId == 0) goto L_End; var hw = creature.Inventory.GetItemSafe(hwEntityId); if (!hw.HasTag("/large_blessing_potion/")) goto L_End; // TODO: Check loading time var items = creature.Inventory.GetEquipment(a => a.IsBlessable); creature.Bless(items); creature.Inventory.Decrement(hw, 1); L_End: Send.UseMotion(creature, 14, 0); Send.SkillComplete(creature, skill.Info.Id, str); }
/// <summary> /// Applies random fountain effect to creature. /// </summary> /// <param name="creature"></param> protected virtual void Touch(Creature creature) { var rnd = RandomProvider.Get(); // All notices are unofficial switch (rnd.Next(15)) { case 0: // Full Life { creature.FullLifeHeal(); Send.Notice(creature, Localization.Get("Full Life")); break; } case 1: // 0 Injuries { creature.Injuries = 0; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("No Injuries")); break; } case 2: // Full Stamina { creature.Stamina = creature.StaminaMax; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("Full Stamina")); break; } case 3: // Full Mana { creature.Mana = creature.ManaMax; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("Full Mana")); break; } case 4: // No Hunger { creature.Hunger = 0; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("No Hunger")); break; } case 5: // Gold { creature.GiveItem(Item.CreateGold(rnd.Next(100, 200 + 1))); Send.Notice(creature, Localization.Get("Gold")); break; } case 6: // Exp { creature.GiveExp(1000); Send.Notice(creature, Localization.Get("Exp")); break; } case 7: // Bless All { var items = creature.Inventory.GetEquipment(a => a.IsBlessable); creature.Bless(items); Send.Notice(creature, Localization.Get("Blessed All")); break; } case 8: // Bless One { var equip = creature.Inventory.GetEquipment(a => !a.IsBlessed && a.IsBlessable); var count = equip.Count(); if (count == 0) break; var item = equip.ElementAt(rnd.Next(count)); creature.Bless(item); Send.Notice(creature, Localization.Get("Blessed {0}"), item.Data.Name); break; } case 9: // Repair One { var equip = creature.Inventory.GetEquipment(a => a.OptionInfo.Durability != a.OptionInfo.DurabilityMax); var count = equip.Count(); if (count == 0) break; var item = equip.ElementAt(rnd.Next(count)); item.OptionInfo.Durability = item.OptionInfo.DurabilityMax; Send.ItemDurabilityUpdate(creature, item); Send.Notice(creature, Localization.Get("Repaired {0}"), item.Data.Name); break; } case 10: // No Stamina and Hungry { creature.Stamina = 0; creature.Hunger = creature.StaminaMax; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("No Stamina and Hungry")); break; } case 11: // Lose one blessing { var equip = creature.Inventory.GetEquipment(a => a.IsBlessed); var count = equip.Count(); if (count == 0) break; var item = equip.ElementAt(rnd.Next(count)); item.OptionInfo.Flags &= ~ItemFlags.Blessed; Send.ItemBlessed(creature, item); Send.Notice(creature, Localization.Get("Lost blessing on {0}"), item.Data.Name); break; } case 12: // No Stamina { creature.Stamina = 0; Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("No Stamina")); break; } case 13: // Random Injuries { creature.Injuries = rnd.Next((int)(creature.Life * 0.9f) + 1); Send.StatUpdateDefault(creature); Send.Notice(creature, Localization.Get("Random Injuries")); break; } case 14: // Lose one durability on random equip { var equip = creature.Inventory.GetEquipment(a => a.OptionInfo.Durability >= 1000); var count = equip.Count(); if (count == 0) break; var item = equip.Random(); creature.Inventory.ReduceDurability(item, 1000); Send.Notice(creature, Localization.Get("Repaired {0}"), item.Data.Name); break; } } }