private void SendMsg(X_GUID guid, int count) { CUseItem msg = new CUseItem(); msg.bagid = (int)EM_BAG_HASHTABLE_TYPE.EM_BAG_HASHTABLE_TYPE_COMMON; msg.itemkey = (int)guid.GUID_value; msg.num = (short)count; IOControler.GetInstance().SendProtocol(msg); }
public override void OnUseItem(int _count) { if (_count > m_Count) { return; } CUseItem msg = new CUseItem(); msg.bagid = (int)EM_BAG_HASHTABLE_TYPE.EM_BAG_HASHTABLE_TYPE_COMMON; msg.itemkey = (int)m_BaseGuid.GUID_value; msg.num = (short)_count; IOControler.GetInstance().SendProtocol(msg); }
protected override void DetectedItemAction() { if (!CanMove || IsUseItem || !m_movement.IsOnGround || InAction) { return; } if (!m_input.InputData.btnInputs[(int)InputIndex.B]) { return; } CPlayerUnit player = m_unit as CPlayerUnit; if (player == null) { return; } CInventory inventory = player.Inventory; if (inventory == null) { return; } IsUseItem = true; m_anim.SetBool("IsUseItem", IsUseItem); CUseItem item = inventory.ItemUse(inventory.CurItemSelect) as CUseItem; int nIdx = (int)UseAnimType.MAX; if (item == null) { m_anim.Play("Item" + nIdx); return; } nIdx = (int)item.UseAnimType; // 아이템 사용 번호에 따라 아이템 액션 변경 및 던지는 물체의 경우 발사체 소환 m_anim.Play("Item" + nIdx); m_unit.CurUseItem = item; }
public async Task CUseItem(GSSession session, CUseItem message) { var @char = session.Player.Character; var inv = @char.Inventory; Logger.Debug("CUseItem {0} {1} {2}", message.Source, message.Dest, message.Type); var Source = inv.Get(message.Source); if (Source.BasicInfo.Skill != Spell.None) { if (await @char.Spells.TryAdd(Source.BasicInfo.Skill)) { await inv.Delete(message.Source); } @char.HPorSDChanged(); return; } switch (Source.Number) { case 14 * 512 + 0: // Apple case 14 * 512 + 1: // Small HP Potion case 14 * 512 + 2: // Medium HP Potion case 14 * 512 + 3: // Big HP Potion var AddLife = (Source.SellPrice * 10) - (@char.Level * 2); if (AddLife < 0) { AddLife = 0; } float AddLifeRate = ((Source.Number.Index + 1) * 10.0f) + (Source.Plus * 5.0f); AddLife += (long)(@char.MaxHealth * AddLifeRate / 100.0f); if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Health += AddLife; break; case 14 * 512 + 4: // Small MP Potion case 14 * 512 + 5: // Medium MP Potion case 14 * 512 + 6: // Big MP Potion var AddMana = (Source.SellPrice * 10) - @char.Level; if (AddMana < 0) { AddMana = 0; } float AddManaRate = ((Source.Number.Index - 3) * 10.0f) + (Source.Plus * 5.0f); AddMana += (uint)(@char.MaxMana * AddManaRate / 100.0f); if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Mana += AddMana; break; case 14 * 512 + 8: // Antidote if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } await @char.Spells.DelBuff(SkillStates.Ice); await @char.Spells.DelBuff(SkillStates.Poison); break; case 14 * 512 + 46: // Haloween Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Spells.SetBuff(SkillStates.HAttackSpeed, TimeSpan.FromMilliseconds(1800)); break; case 14 * 512 + 47: // Haloween Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Spells.SetBuff(SkillStates.HAttackPower, TimeSpan.FromMilliseconds(1800)); break; case 14 * 512 + 48: // Haloween Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Spells.SetBuff(SkillStates.HDefensePower, TimeSpan.FromMilliseconds(1800)); break; case 14 * 512 + 49: // Haloween Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Spells.SetBuff(SkillStates.HMaxLife, TimeSpan.FromMilliseconds(1800)); break; case 14 * 512 + 50: // Haloween Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } @char.Spells.SetBuff(SkillStates.HMaxMana, TimeSpan.FromMilliseconds(1800)); break; case 14 * 512 + 10: // Town Portal Scroll if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } if (@char.MapID == Maps.Davias) { await @char.WarpTo(22); } else if (@char.MapID == Maps.Noria) { await @char.WarpTo(27); } else if (@char.MapID == Maps.LostTower) { await @char.WarpTo(42); } else if (@char.MapID == Maps.Atlans) { await @char.WarpTo(49); } else if (@char.MapID == Maps.Tarkan) { await @char.WarpTo(57); } else if (@char.MapID == Maps.BloodCastle1) { await @char.WarpTo(22); } else if (@char.MapID == Maps.ChaosCastle1) { await @char.WarpTo(22); } else if (@char.MapID == Maps.Kalima1) { await @char.WarpTo(22); } else if (@char.MapID == Maps.Aida) { await @char.WarpTo(27); } else if (@char.MapID == Maps.Crywolf) { await @char.WarpTo(27); } else { await @char.WarpTo(17); } break; case 14 * 512 + 9: // Ale if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } break; case 14 * 512 + 20: // Remedy Of Love if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } await session.SendAsync(new SItemUseSpecialTime { Number = 1, Time = 90 }); break; case 14 * 512 + 7: // Siege Potion if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } var SS = Source.Plus == 0 ? SkillStates.PotionBless : SkillStates.PotionSoul; var time = TimeSpan.FromSeconds(Source.Plus == 0 ? 120 : 60); @char.Spells.SetBuff(SS, time); if (Source.Plus == 1) { await session.SendAsync(new SItemUseSpecialTime { Number = 2, Time = 60 }); } break; case 14 * 512 + 63: // Fireworks if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } await session.SendAsync(new SCommand(ServerCommandType.Fireworks, (byte)@char.Position.X, (byte)@char.Position.Y)); break; case 14 * 512 + 35: // Small SD Potion case 14 * 512 + 36: // Medium SD Potion case 14 * 512 + 37: // Big SD Potion float addSDRate = @char.MaxShield * (25.0f + (Source.Number.Index - 35) * 10.0f) / 100.0f; @char.Shield += addSDRate; if (Source.Durability == 1) { await inv.Delete(message.Source); } else { Source.Durability--; } await session.SendAsync(new SEffect((ushort)session.ID, ClientEffect.RecoverShield)); break; case 14 * 512 + 13: // Jewel of Bless { var Target = inv.Get(message.Dest); if (Target.Plus >= 7) { break; } await inv.Delete(message.Source); Target.Plus++; } break; case 14 * 512 + 14: // Jewel of Soul { var Target = inv.Get(message.Dest); if (Target.Plus >= 9) { break; } await inv.Delete(message.Source); var soulRate = 50 + (Target.Luck ? 25 : 0); if (new Random().Next(100) < soulRate) { Target.Plus++; } else { if (Target.Plus > 7) { Target.Plus = 0; } else { Target.Plus--; } } } break; case 14 * 512 + 16: // Jewel of Life { var Target = inv.Get(message.Dest); if (Target.Option28 >= 3) { break; } if (!Target.BasicInfo.Option) { break; } await inv.Delete(message.Source); var lifeRate = 50 + (Target.Luck ? 25 : 0); if (new Random().Next(100) < lifeRate) { Target.Option28++; } else { Target.Option28--; } } break; case 13 * 512 + 66: //Invitation of the Santa Town's break; } }