public async Task <IActionResult> Create(ComboDTO ComboDTO) { var Combo = _mapper.Map <ComboDTO, Combo>(ComboDTO); await _unitOfWork.Combos.Add(Combo); return(CreatedAtAction(nameof(GetBy), new { id = Combo.ComboId }, Combo)); }
public HitRequest(TargetHitType targetHitType, ClientSession session, Skill skill, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null, bool showTargetAnimation = false, int directDamage = 0) { HitTimestamp = DateTime.UtcNow; Session = session; Skill = skill; TargetHitType = targetHitType; SkillEffect = skillEffect ?? skill?.Effect ?? 0; ShowTargetHitAnimation = showTargetAnimation; DirectDamage = directDamage; if (mapX.HasValue) { MapX = mapX.Value; } if (mapY.HasValue) { MapY = mapY.Value; } if (skillCombo != null) { SkillCombo = skillCombo; } }
public HitRequest(TargetHitType targetHitType, ClientSession session, Skill skill, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null) { HitTimestamp = DateTime.Now; Session = session; Skill = skill; TargetHitType = targetHitType; if (skillEffect.HasValue) { SkillEffect = skillEffect.Value; } else { SkillEffect = skill.Effect; } if (mapX.HasValue) { MapX = mapX.Value; } if (mapY.HasValue) { MapY = mapY.Value; } if (skillCombo != null) { SkillCombo = skillCombo; } }
public HitRequest(TargetHitType targetHitType, ClientSession session, Skill skill, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null, bool showTargetAnimation = false, List <BCard> skillBCards = null) { HitTimestamp = DateTime.Now; Session = session; Skill = skill; TargetHitType = targetHitType; SkillEffect = skillEffect ?? skill.Effect; ShowTargetHitAnimation = showTargetAnimation; if (mapX.HasValue) { MapX = mapX.Value; } if (mapY.HasValue) { MapY = mapY.Value; } if (skillCombo != null) { SkillCombo = skillCombo; } if (skillBCards != null) { SkillBCards = skillBCards; } else { SkillBCards = skill?.BCards ?? new List <BCard>(); } }
public IHttpActionResult GetAnItemById(int id) { ComboDTO dto = ComboBUS.getById(id); if (dto == null) { return(NotFound()); } return(Ok(dto)); }
public ComboDTO Insert(ComboDTO combo) { using (var context = DataAccessHelper.CreateContext()) { Combo entity = _mapper.Map <Combo>(combo); context.Combo.Add(entity); context.SaveChanges(); return(_mapper.Map <ComboDTO>(entity)); } }
public static bool ToComboDTO(Combo input, ComboDTO output) { if (input == null) { return(false); } output.Animation = input.Animation; output.ComboId = input.ComboId; output.Effect = input.Effect; output.Hit = input.Hit; output.SkillVNum = input.SkillVNum; return(true); }
public IEnumerable <ComboDTO> LoadByVNumHitAndEffect(short skillVNum, short hit, short effect) { using (OpenNosContext context = DataAccessHelper.CreateContext()) { List <ComboDTO> result = new List <ComboDTO>(); foreach (Combo combo in context.Combo.Where(s => s.SkillVNum == skillVNum && s.Hit == hit && s.Effect == effect)) { ComboDTO dto = new ComboDTO(); Mapper.Mapper.Instance.ComboMapper.ToComboDTO(combo, dto); result.Add(dto); } return(result); } }
public IEnumerable <ComboDTO> LoadAll() { using (OpenNosContext context = DataAccessHelper.CreateContext()) { List <ComboDTO> result = new List <ComboDTO>(); foreach (Combo combo in context.Combo) { ComboDTO dto = new ComboDTO(); Mapper.Mapper.Instance.ComboMapper.ToComboDTO(combo, dto); result.Add(dto); } return(result); } }
public IEnumerable <ComboDTO> LoadBySkillVnum(short skillVNum) { using (OpenNosContext context = DataAccessHelper.CreateContext()) { List <ComboDTO> result = new List <ComboDTO>(); foreach (Combo combo in context.Combo.Where(c => c.SkillVNum == skillVNum)) { ComboDTO dto = new ComboDTO(); Mapper.Mapper.Instance.ComboMapper.ToComboDTO(combo, dto); result.Add(dto); } return(result); } }
private void buttonAddCombo_Click(object sender, EventArgs e) { string comboName = textBoxComboName.Text; decimal price = Convert.ToDecimal(textBoxPriceCombo.Text); string detail = textBoxComboDetail.Text; int idCatalog = (comboBoxComboCatalog.SelectedItem as CatalogDTO).Id; ComboDTO combo = new ComboDTO(); combo.ComboName = comboName; combo.ComboDetails = detail; combo.Price = price; combo.IdCatalog = idCatalog; service.createCombo(combo); loadCombo(); }
public ComboDTO Insert(ComboDTO combo) { try { using (var context = DataAccessHelper.CreateContext()) { Combo entity = _mapper.Map <Combo>(combo); context.Combo.Add(entity); context.SaveChanges(); return(_mapper.Map <ComboDTO>(entity)); } } catch (Exception e) { Logger.Error(e); return(null); } }
public ComboDTO LoadById(short comboId) { try { using (OpenNosContext context = DataAccessHelper.CreateContext()) { ComboDTO dto = new ComboDTO(); if (Mapper.Mapper.Instance.ComboMapper.ToComboDTO(context.Combo.FirstOrDefault(s => s.SkillVNum.Equals(comboId)), dto)) { return(dto); } return(null); } } catch (Exception e) { Logger.Error(e); return(null); } }
private void textBoxIdCombo_TextChanged(object sender, EventArgs e) { if (!textBoxIdCombo.Text.Equals("0") && !textBoxIdCombo.Text.Equals("")) { int idCombo = Convert.ToInt32(textBoxIdCombo.Text); ComboDTO combo = service.getComboByID(idCombo); bindingSourceComboProduct.DataSource = service.getProductByIdCombo(idCombo); int index = -1; int i = 0; foreach (CatalogDTO item in comboBoxComboCatalog.Items) { if (item.Id == combo.IdCatalog) { index = i; break; } i++; } comboBoxComboCatalog.SelectedIndex = index; } }
public async Task <IActionResult> Update(int id, ComboDTO ComboDTO) { if (ComboDTO.ComboId != id) { return(BadRequest()); } try { var Combo = _mapper.Map <ComboDTO, Combo>(ComboDTO); await _unitOfWork.Combos.Update(id, Combo); } catch (DbUpdateConcurrencyException) { if (!await ComboExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public ComboDTO Insert(ComboDTO combo) { try { using (OpenNosContext context = DataAccessHelper.CreateContext()) { Combo entity = new Combo(); Mapper.Mapper.Instance.ComboMapper.ToCombo(combo, entity); context.Combo.Add(entity); context.SaveChanges(); if (Mapper.Mapper.Instance.ComboMapper.ToComboDTO(entity, combo)) { return(combo); } return(null); } } catch (Exception e) { Logger.Error(e); return(null); } }
public void editCombo(ComboDTO combo) { comboService.edit(combo); }
public void edit(ComboDTO combo) { comboRepository.edit(mapper.Map <ComboDTO, Combo>(combo)); }
public void TargetHit(IBattleEntity target, TargetHitType hitType, Skill skill, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null, bool showTargetAnimation = false, bool isPvp = false) { if (target == null || Entity == null) { return; } if (!target.IsTargetable(Entity.SessionType(), isPvp) || target.Faction == Entity.Faction && ServerManager.Instance.Act4Maps.Any(m => m == Entity.MapInstance)) { if (Session is Character cha) { cha.Session.SendPacket($"cancel 2 {target.GetId()}"); } return; } MapInstance mapInstance = target.MapInstance; int hitmode = 0; bool onyxWings = false; int damage = DamageHelper.Instance.GenerateDamage(this, target, skill, ref hitmode, ref onyxWings); if (skill != null && SkillHelper.Instance.NoDamageSkills != null) { if (SkillHelper.Instance.NoDamageSkills.Any(s => s == skill.SkillVNum)) { target.DealtDamage = 0; damage = 0; } } if (Session is Character charact && mapInstance != null && hitmode != 1) { target.RemoveBuff(548); if (onyxWings) { short onyxX = (short)(charact.PositionX + 2); short onyxY = (short)(charact.PositionY + 2); int onyxId = mapInstance.GetNextId(); var onyx = new MapMonster { MonsterVNum = 2371, MapX = onyxX, MapY = onyxY, MapMonsterId = onyxId, IsHostile = false, IsMoving = false, ShouldRespawn = false }; mapInstance.Broadcast($"guri 31 1 {charact.CharacterId} {onyxX} {onyxY}"); onyx.Initialize(mapInstance); mapInstance.AddMonster(onyx); mapInstance.Broadcast(onyx.GenerateIn()); target.GetDamage(target.DealtDamage / 2, Entity, false); Observable.Timer(TimeSpan.FromMilliseconds(350)).Subscribe(o => { mapInstance.Broadcast( $"su 3 {onyxId} {(target is Character ? "1" : "3")} {target.GetId()} -1 0 -1 {skill.Effect} -1 -1 1 {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {(target.BattleEntity.IsReflecting ? 0 : target.DealtDamage) / 2} 0 0"); mapInstance.RemoveMonster(onyx); mapInstance.Broadcast(onyx.GenerateOut()); }); } if (target is Character tchar) { if (tchar.ReflectiveBuffs.Any()) { int?multiplier = 0; foreach (KeyValuePair <short, int?> entry in tchar.ReflectiveBuffs) { multiplier += entry.Value; } ushort damaged = (ushort)(damage > tchar.Level * multiplier ? tchar.Level * multiplier : damage); mapInstance.Broadcast( $"su 1 {tchar.GetId()} 1 {charact.GetId()} -1 0 -1 {skill.Effect} -1 -1 1 {(int)(tchar.Hp / (double)target.MaxHp * 100)} {damaged} 0 1"); charact.Hp = charact.Hp - damaged <= 0 ? 1 : charact.Hp - damaged; charact.Session.SendPacket(charact.GenerateStat()); target.DealtDamage = 0; } } else if (target is MapMonster tmon) { if (tmon.ReflectiveBuffs.Any()) { int?multiplier = 0; foreach (KeyValuePair <short, int?> entry in tmon.ReflectiveBuffs) { multiplier += entry.Value; } ushort damaged = (ushort)(damage > tmon.Monster.Level * multiplier ? tmon.Monster.Level * multiplier : damage); charact.Hp -= charact.Hp - damaged <= 0 ? 1 : charact.Hp - damaged; charact.Session.SendPacket(charact.GenerateStat()); mapInstance.Broadcast( $"su 3 {tmon.GetId()} 1 {charact.GetId()} -1 0 -1 {skill.Effect} -1 -1 1 {(int)(tmon.CurrentHp / (double)target.MaxHp * 100)} {damaged} 0 1"); target.DealtDamage = 0; } } } if (target.GetSession() is Character character) { damage = (ushort)(character.HasGodMode ? 0 : damage); target.DealtDamage = (ushort)(character.HasGodMode ? 0 : damage); if (character.IsSitting) { character.IsSitting = false; character.MapInstance.Broadcast(character.GenerateRest()); } } else if (target.GetSession() is Mate mate) { if (mate.IsSitting) { mate.IsSitting = false; mate.Owner.MapInstance.Broadcast(mate.GenerateRest()); } } int castTime = 0; if (skill != null && skill.CastEffect != 0) { Entity.MapInstance.Broadcast(Entity.GenerateEff(skill.CastEffect), Entity.GetPos().X, Entity.GetPos().Y); castTime = skill.CastTime * 100; } Observable.Timer(TimeSpan.FromMilliseconds(castTime)).Subscribe(o => TargetHit2(target, hitType, skill, damage, hitmode, skillEffect, mapX, mapY, skillCombo, showTargetAnimation, isPvp)); }
internal void InsertSkills(string folder) { _folder = folder; var skills = new List <SkillDTO>(); var skill = new SkillDTO(); var combo = new List <ComboDTO>(); var skillCards = new List <BCardDTO>(); var counter = 0; using (var skillIdStream = new StreamReader(_folder + fileSkillId, Encoding.Default)) { string line; while ((line = skillIdStream.ReadLine()) != null) { var currentLine = line.Split('\t'); if (currentLine.Length > 2 && currentLine[1] == "VNUM") { skill = new SkillDTO { SkillVNum = short.Parse(currentLine[2]) }; } else if (currentLine.Length > 2 && currentLine[1] == "NAME") { skill.Name = currentLine[2]; } else if (currentLine.Length > 2 && currentLine[1] == "TYPE") { skill.SkillType = byte.Parse(currentLine[2]); skill.CastId = short.Parse(currentLine[3]); skill.Class = byte.Parse(currentLine[4]); skill.Type = byte.Parse(currentLine[5]); skill.Element = byte.Parse(currentLine[7]); } else if (currentLine.Length > 2 && currentLine[1] == "FCOMBO") { for (var i = 3; i < currentLine.Length - 4; i += 3) { var comb = new ComboDTO { SkillVNum = skill.SkillVNum, Hit = short.Parse(currentLine[i]), Animation = short.Parse(currentLine[i + 1]), Effect = short.Parse(currentLine[i + 2]) }; if (comb.Hit == 0 && comb.Animation == 0 && comb.Effect == 0) { continue; } if (DAOFactory.ComboDAO.FirstOrDefault(s => s.SkillVNum.Equals(comb.SkillVNum) && s.Hit.Equals(comb.Hit) && s.Effect.Equals(comb.Effect)) == null) { combo.Add(comb); } } } else if (currentLine.Length > 3 && currentLine[1] == "COST") { skill.CPCost = currentLine[2] == "-1" ? (byte)0 : byte.Parse(currentLine[2]); skill.Price = int.Parse(currentLine[3]); } else if (currentLine.Length > 2 && currentLine[1] == "LEVEL") { skill.LevelMinimum = currentLine[2] != "-1" ? byte.Parse(currentLine[2]) : (byte)0; if (skill.Class > 31) { var firstskill = skills.FirstOrDefault(s => s.Class == skill.Class); if (firstskill == null || skill.SkillVNum <= firstskill.SkillVNum + 10) { switch (skill.Class) { case 8: switch (skills.Count(s => s.Class == skill.Class)) { case 3: skill.LevelMinimum = 20; break; case 2: skill.LevelMinimum = 10; break; default: skill.LevelMinimum = 0; break; } break; case 9: switch (skills.Count(s => s.Class == skill.Class)) { case 9: skill.LevelMinimum = 20; break; case 8: skill.LevelMinimum = 16; break; case 7: skill.LevelMinimum = 12; break; case 6: skill.LevelMinimum = 8; break; case 5: skill.LevelMinimum = 4; break; default: skill.LevelMinimum = 0; break; } break; case 16: switch (skills.Count(s => s.Class == skill.Class)) { case 6: skill.LevelMinimum = 20; break; case 5: skill.LevelMinimum = 15; break; case 4: skill.LevelMinimum = 10; break; case 3: skill.LevelMinimum = 5; break; case 2: skill.LevelMinimum = 3; break; default: skill.LevelMinimum = 0; break; } break; default: switch (skills.Count(s => s.Class == skill.Class)) { case 10: skill.LevelMinimum = 20; break; case 9: skill.LevelMinimum = 16; break; case 8: skill.LevelMinimum = 12; break; case 7: skill.LevelMinimum = 8; break; case 6: skill.LevelMinimum = 4; break; default: skill.LevelMinimum = 0; break; } break; } } } skill.MinimumAdventurerLevel = currentLine[3] != "-1" ? byte.Parse(currentLine[3]) : (byte)0; skill.MinimumSwordmanLevel = currentLine[4] != "-1" ? byte.Parse(currentLine[4]) : (byte)0; skill.MinimumArcherLevel = currentLine[5] != "-1" ? byte.Parse(currentLine[5]) : (byte)0; skill.MinimumMagicianLevel = currentLine[6] != "-1" ? byte.Parse(currentLine[6]) : (byte)0; } else if (currentLine.Length > 2 && currentLine[1] == "EFFECT") { skill.CastEffect = short.Parse(currentLine[3]); skill.CastAnimation = short.Parse(currentLine[4]); skill.Effect = short.Parse(currentLine[5]); skill.AttackAnimation = short.Parse(currentLine[6]); } else if (currentLine.Length > 2 && currentLine[1] == "TARGET") { skill.TargetType = byte.Parse(currentLine[2]); skill.HitType = byte.Parse(currentLine[3]); skill.Range = byte.Parse(currentLine[4]); skill.TargetRange = byte.Parse(currentLine[5]); } else if (currentLine.Length > 2 && currentLine[1] == "DATA") { skill.UpgradeSkill = short.Parse(currentLine[2]); skill.UpgradeType = short.Parse(currentLine[3]); skill.CastTime = short.Parse(currentLine[6]); skill.Cooldown = short.Parse(currentLine[7]); skill.MpCost = short.Parse(currentLine[10]); skill.ItemVNum = short.Parse(currentLine[12]); } else if (currentLine.Length > 2 && currentLine[1] == "BASIC") { var type = (byte)int.Parse(currentLine[3]); if (type == 0 || type == 255) { continue; } var first = int.Parse(currentLine[5]); var itemCard = new BCardDTO { SkillVNum = skill.SkillVNum, Type = type, SubType = (byte)((int.Parse(currentLine[4]) + 1) * 10 + 1 + (first < 0 ? 1 : 0)), IsLevelScaled = Convert.ToBoolean(first % 4), IsLevelDivided = first % 4 == 2, FirstData = (short)(first > 0 ? first : -first / 4), SecondData = (short)(int.Parse(currentLine[6]) / 4), ThirdData = (short)(int.Parse(currentLine[7]) / 4) }; skillCards.Add(itemCard); } else if (currentLine.Length > 2 && currentLine[1] == "FCOMBO") { // investigate /* * if (currentLine[2] == "1") * { * combo.FirstActivationHit = byte.Parse(currentLine[3]); * combo.FirstComboAttackAnimation = short.Parse(currentLine[4]); * combo.FirstComboEffect = short.Parse(currentLine[5]); * combo.SecondActivationHit = byte.Parse(currentLine[3]); * combo.SecondComboAttackAnimation = short.Parse(currentLine[4]); * combo.SecondComboEffect = short.Parse(currentLine[5]); * combo.ThirdActivationHit = byte.Parse(currentLine[3]); * combo.ThirdComboAttackAnimation = short.Parse(currentLine[4]); * combo.ThirdComboEffect = short.Parse(currentLine[5]); * combo.FourthActivationHit = byte.Parse(currentLine[3]); * combo.FourthComboAttackAnimation = short.Parse(currentLine[4]); * combo.FourthComboEffect = short.Parse(currentLine[5]); * combo.FifthActivationHit = byte.Parse(currentLine[3]); * combo.FifthComboAttackAnimation = short.Parse(currentLine[4]); * combo.FifthComboEffect = short.Parse(currentLine[5]); * } */ } else if (currentLine.Length > 2 && currentLine[1] == "CELL") { // investigate } else if (currentLine.Length > 1 && currentLine[1] == "Z_DESC") { // investigate var skill1 = skill; if (DAOFactory.SkillDAO.FirstOrDefault(s => s.SkillVNum.Equals(skill1.SkillVNum)) != null) { continue; } skills.Add(skill); counter++; } } IEnumerable <SkillDTO> skillDtos = skills; IEnumerable <ComboDTO> comboDtos = combo; IEnumerable <BCardDTO> bCardDtos = skillCards; DAOFactory.SkillDAO.InsertOrUpdate(skillDtos); DAOFactory.ComboDAO.InsertOrUpdate(comboDtos); DAOFactory.BCardDAO.InsertOrUpdate(bCardDtos); Logger.Log.Info(string.Format(LogLanguage.Instance.GetMessageFromKey(LanguageKey.SKILLS_PARSED), counter)); } }
public void TargetHit(IBattleEntity target, TargetHitType hitType, Skill skill, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null, bool showTargetAnimation = false, bool isPvp = false) { if (!target.IsTargetable(Entity.SessionType(), isPvp) || (target.Faction == Entity.Faction && ServerManager.Instance.Act4Maps.Any(m => m == Entity.MapInstance))) { if (Session is Character cha) { cha.Session.SendPacket($"cancel 2 {target.GetId()}"); } return; } MapInstance mapInstance = target.MapInstance; int hitmode = 0; bool onyxWings = false; ushort damage = GenerateDamage(target, skill, ref hitmode, ref onyxWings); if (Session is Character charact && onyxWings && mapInstance != null) { short onyxX = (short)(charact.PositionX + 2); short onyxY = (short)(charact.PositionY + 2); int onyxId = mapInstance.GetNextId(); var onyx = new MapMonster { MonsterVNum = 2371, MapX = onyxX, MapY = onyxY, MapMonsterId = onyxId, IsHostile = false, IsMoving = false, ShouldRespawn = false }; mapInstance.Broadcast($"guri 31 1 {charact.CharacterId} {onyxX} {onyxY}"); onyx.Initialize(mapInstance); mapInstance.AddMonster(onyx); mapInstance.Broadcast(onyx.GenerateIn()); target.GetDamage(damage / 2, Entity, false); Observable.Timer(TimeSpan.FromMilliseconds(350)).Subscribe(o => { mapInstance.Broadcast($"su 3 {onyxId} 3 {target.GetId()} -1 0 -1 {skill.Effect} -1 -1 1 {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage / 2} 0 0"); mapInstance.RemoveMonster(onyx); mapInstance.Broadcast(onyx.GenerateOut()); }); } if (target.GetSession() is Character character) { damage = (ushort)(character.HasGodMode ? 0 : damage); if (character.IsSitting) { character.IsSitting = false; character.MapInstance.Broadcast(character.GenerateRest()); } } else if (target.GetSession() is Mate mate) { if (mate.IsSitting) { mate.IsSitting = false; mate.Owner.MapInstance.Broadcast(mate.GenerateRest()); } } int castTime = 0; if (skill != null && skill.CastEffect != 0) { Entity.MapInstance.Broadcast(Entity.GenerateEff(skill.CastEffect), Entity.GetPos().X, Entity.GetPos().Y); castTime = skill.CastTime * 100; } Observable.Timer(TimeSpan.FromMilliseconds(castTime)).Subscribe(o => TargetHit2(target, hitType, skill, damage, hitmode, skillEffect, mapX, mapY, skillCombo, showTargetAnimation, isPvp)); }
private void TargetHit2(IBattleEntity target, TargetHitType hitType, Skill skill, int damage, int hitmode, short?skillEffect = null, short?mapX = null, short?mapY = null, ComboDTO skillCombo = null, bool showTargetAnimation = false, bool isPvp = false, bool isRange = false) { target.GetDamage(damage, Entity, !(Session is MapMonster mon && mon.IsInvicible)); string str = $"su {(byte)Entity.SessionType()} {Entity.GetId()} {(byte)target.SessionType()} {target.GetId()} {skill?.SkillVNum ?? 0} {skill?.Cooldown ?? 0}"; switch (hitType) { case TargetHitType.SingleTargetHit: str += $" {skill?.AttackAnimation ?? 11} {skill?.Effect ?? skillEffect ?? 0} {Entity.GetPos().X} {Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} {hitmode} {skill?.SkillType - 1 ?? 0}"; break; case TargetHitType.SingleTargetHitCombo: str += $" {skillCombo?.Animation ?? 0} {skillCombo?.Effect ?? 0} {Entity.GetPos().X} {Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} {hitmode} {skill.SkillType - 1}"; break; case TargetHitType.SingleAOETargetHit: switch (hitmode) { case 1: hitmode = 4; break; case 3: hitmode = 6; break; default: hitmode = 5; break; } if (showTargetAnimation) { Entity.MapInstance.Broadcast($" {skill?.AttackAnimation ?? 0} {skill?.Effect ?? 0} 0 0 {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} 0 0 {skill.SkillType - 1}"); } str += $" {skill?.AttackAnimation ?? 0} {skill?.Effect ?? 0} {Entity.GetPos().X} {Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} {hitmode} {skill.SkillType - 1}"; break; case TargetHitType.AOETargetHit: switch (hitmode) { case 1: hitmode = 4; break; case 3: hitmode = 6; break; default: hitmode = 5; break; } str += $" {skill?.AttackAnimation ?? 0} {skill?.Effect ?? 0} {Entity.GetPos().X} {Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} {hitmode} {skill.SkillType - 1}"; break; case TargetHitType.ZoneHit: str += $" {skill?.AttackAnimation ?? 0} {skillEffect ?? 0} {mapX ?? Entity.GetPos().X} {mapY ?? Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} 5 {skill.SkillType - 1}"; break; case TargetHitType.SpecialZoneHit: str += $" {skill?.AttackAnimation ?? 0} {skillEffect ?? 0} {Entity.GetPos().X} {Entity.GetPos().Y} {(target.CurrentHp > 0 ? 1 : 0)} {(int)(target.CurrentHp / (double)target.MaxHp * 100)} {damage} 0 {skill.SkillType - 1}"; break; } Entity.MapInstance.Broadcast(str); bool isBoss = false; if (Entity.GetSession() is Character character) { character.LastSkillUse = DateTime.Now; RemoveBuff(85); // Hideout } else if (Entity.GetSession() is Mate mate) { mate.LastSkillUse = DateTime.Now; } if (target.GetSession() is MapMonster monster) { if (monster.Target == null) { monster.LastSkill = DateTime.Now; } monster.Target = Entity; isBoss = monster.IsBoss; if (isBoss) { Entity.MapInstance?.Broadcast(monster.GenerateBoss()); } monster.DamageList.AddOrUpdate(Entity, damage, (key, oldValue) => oldValue + damage); } if (!isBoss && skill != null) { foreach (BCard bcard in skill.BCards.Where(b => b != null)) { switch ((CardType)bcard.Type) { case CardType.Buff: Buff.Buff b = new Buff.Buff(bcard.SecondData); switch (b.Card?.BuffType) { case BuffType.Bad: bcard.ApplyBCards(target, Entity); break; case BuffType.Good: case BuffType.Neutral: bcard.ApplyBCards(Entity, Entity); break; } break; case CardType.HealingBurningAndCasting: switch ((AdditionalTypes.HealingBurningAndCasting)bcard.SubType) { case AdditionalTypes.HealingBurningAndCasting.RestoreHP: case AdditionalTypes.HealingBurningAndCasting.RestoreHPWhenCasting: bcard.ApplyBCards(Entity, Entity); break; default: bcard.ApplyBCards(target, Entity); break; } break; case CardType.MeditationSkill: bcard.ApplyBCards(Entity); break; default: bcard.ApplyBCards(target, Entity); break; } } } if (skill == null || (skill.Range <= 0 && skill.TargetRange <= 0) || isRange || !(Entity.GetSession() is MapMonster)) { return; } foreach (IBattleEntity entitiesInRange in Entity.MapInstance?.GetBattleEntitiesInRange(Entity.GetPos(), skill.TargetRange).Where(e => e != target && e.IsTargetable(Entity.SessionType()))) { TargetHit2(entitiesInRange, TargetHitType.SingleTargetHit, skill, damage, hitmode, isRange: true); } }
public void createCombo(ComboDTO combo) { comboService.create(combo); }
public void TargetHit(int castingId, int targetId) { IList <string> broadcastPackets = new List <string>(); List <CharacterSkill> skills = Session.Character.UseSp ? Session.Character.SkillsSp.GetAllItems() : Session.Character.Skills.GetAllItems(); bool notcancel = false; if ((DateTime.Now - Session.Character.LastTransform).TotalSeconds < 3) { Session.SendPacket("cancel 0 0"); Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_ATTACK"), 0)); return; } if (skills != null) { ushort damage = 0; int hitmode = 0; CharacterSkill ski = skills.FirstOrDefault(s => s.Skill?.CastId == castingId && s.Skill?.UpgradeSkill == 0); Session.SendPacket("ms_c 0"); if (!Session.Character.WeaponLoaded(ski)) { Session.SendPacket("cancel 2 0"); return; } for (int i = 0; i < 10 && !ski.CanBeUsed(); i++) { Thread.Sleep(100); if (i == 10) { Session.SendPacket("cancel 2 0"); return; } } if (ski != null && Session.Character.Mp >= ski.Skill.MpCost) { if (ski.Skill.TargetType == 1 && ski.Skill.HitType == 1) { Session.Character.LastSkillUse = DateTime.Now; if (!Session.Character.HasGodMode) { Session.Character.Mp -= ski.Skill.MpCost; } if (Session.Character.UseSp && ski.Skill.CastEffect != -1) { Session.SendPackets(Session.Character.GenerateQuicklist()); } Session.SendPacket(Session.Character.GenerateStat()); CharacterSkill skillinfo = Session.Character.Skills.GetAllItems().OrderBy(o => o.SkillVNum).FirstOrDefault(s => s.Skill.UpgradeSkill == ski.Skill.SkillVNum && s.Skill.Effect > 0 && s.Skill.SkillType == 2); Session.CurrentMap?.Broadcast($"ct 1 {Session.Character.CharacterId} 1 {Session.Character.CharacterId} {ski.Skill.CastAnimation} {(skillinfo != null ? skillinfo.Skill.CastEffect : ski.Skill.CastEffect)} {ski.Skill.SkillVNum}"); // Generate scp ski.LastUse = DateTime.Now; if (ski.Skill.CastEffect != 0) { Thread.Sleep(ski.Skill.CastTime * 100); } notcancel = true; MapMonster mmon; broadcastPackets.Add($"su 1 {Session.Character.CharacterId} 1 {Session.Character.CharacterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(skillinfo != null ? skillinfo.Skill.Effect : ski.Skill.Effect)} {Session.Character.MapX} {Session.Character.MapY} 1 {((int)((double)Session.Character.Hp / Session.Character.HPLoad()) * 100)} 0 -2 {ski.Skill.SkillType - 1}"); if (ski.Skill.TargetRange != 0) { foreach (MapMonster mon in Session.CurrentMap.GetListMonsterInRange(Session.Character.MapX, Session.Character.MapY, ski.Skill.TargetRange).Where(s => s.CurrentHp > 0)) { mmon = Session.CurrentMap.GetMonster(mon.MapMonsterId); if (mmon != null) { damage = GenerateDamage(mon.MapMonsterId, ski.Skill, ref hitmode); broadcastPackets.Add($"su 1 {Session.Character.CharacterId} 3 {mmon.MapMonsterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(skillinfo != null ? skillinfo.Skill.Effect : ski.Skill.Effect)} {Session.Character.MapX} {Session.Character.MapY} {(mmon.IsAlive ? 1 : 0)} {(int)(((float)mmon.CurrentHp / (float)mon.Monster.MaxHP) * 100)} {damage} 5 {ski.Skill.SkillType - 1}"); Task.Factory.StartNew(() => { GenerateKillBonus(mon.MapMonsterId); }); } } } } else if (ski.Skill.TargetType == 0) { // if monster target MapMonster monsterToAttack = Session.CurrentMap.GetMonster(targetId); if (monsterToAttack != null && monsterToAttack.IsAlive) { NpcMonster monsterToAttackInfo = ServerManager.GetNpc(monsterToAttack.MonsterVNum); if (monsterToAttack != null && ski != null && ski.CanBeUsed()) { if (Session.Character.Mp >= ski.Skill.MpCost) { short distanceX = (short)(Session.Character.MapX - monsterToAttack.MapX); short distanceY = (short)(Session.Character.MapY - monsterToAttack.MapY); if (Map.GetDistance(new MapCell() { X = Session.Character.MapX, Y = Session.Character.MapY }, new MapCell() { X = monsterToAttack.MapX, Y = monsterToAttack.MapY }) <= ski.Skill.Range + (DateTime.Now - monsterToAttack.LastMove).TotalSeconds * 2 * (monsterToAttackInfo.Speed == 0 ? 1 : monsterToAttackInfo.Speed) || ski.Skill.TargetRange != 0) { Session.Character.LastSkillUse = DateTime.Now; damage = GenerateDamage(monsterToAttack.MapMonsterId, ski.Skill, ref hitmode); ski.LastUse = DateTime.Now; Task.Factory.StartNew(() => { GenerateKillBonus(monsterToAttack.MapMonsterId); }); notcancel = true; if (!Session.Character.HasGodMode) { Session.Character.Mp -= ski.Skill.MpCost; } if (Session.Character.UseSp && ski.Skill.CastEffect != -1) { Session.SendPackets(Session.Character.GenerateQuicklist()); } Session.SendPacket(Session.Character.GenerateStat()); CharacterSkill characterSkillInfo = Session.Character.Skills.GetAllItems().OrderBy(o => o.SkillVNum).FirstOrDefault(s => s.Skill.UpgradeSkill == ski.Skill.SkillVNum && s.Skill.Effect > 0 && s.Skill.SkillType == 2); Session.CurrentMap?.Broadcast($"ct 1 {Session.Character.CharacterId} 3 {monsterToAttack.MapMonsterId} {ski.Skill.CastAnimation} {(characterSkillInfo != null ? characterSkillInfo.Skill.CastEffect : ski.Skill.CastEffect)} {ski.Skill.SkillVNum}"); Session.Character.Skills.GetAllItems().Where(s => s.Id != ski.Id).ToList().ForEach(i => i.Hit = 0); // Generate scp ski.LastUse = DateTime.Now; if (damage == 0 || (DateTime.Now - ski.LastUse).TotalSeconds > 3) { ski.Hit = 0; } else { ski.Hit++; } if (ski.Skill.CastEffect != 0) { Thread.Sleep(ski.Skill.CastTime * 100); } ComboDTO skillCombo = ski.Skill.Combos.FirstOrDefault(s => ski.Hit == s.Hit); if (skillCombo != null) { if (ski.Skill.Combos.OrderByDescending(s => s.Hit).ElementAt(0).Hit == ski.Hit) { ski.Hit = 0; } broadcastPackets.Add($"su 1 {Session.Character.CharacterId} 3 {monsterToAttack.MapMonsterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {skillCombo.Animation} {skillCombo.Effect} {Session.Character.MapX} {Session.Character.MapY} {(monsterToAttack.IsAlive ? 1 : 0)} {(int)(((float)monsterToAttack.CurrentHp / (float)monsterToAttackInfo.MaxHP) * 100)} {damage} {hitmode} {ski.Skill.SkillType - 1}"); } else { broadcastPackets.Add($"su 1 {Session.Character.CharacterId} 3 {monsterToAttack.MapMonsterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(characterSkillInfo != null ? characterSkillInfo.Skill.Effect : ski.Skill.Effect)} {Session.Character.MapX} {Session.Character.MapY} {(monsterToAttack.IsAlive ? 1 : 0)} {(int)(((float)monsterToAttack.CurrentHp / (float)monsterToAttackInfo.MaxHP) * 100)} {damage} {hitmode} {ski.Skill.SkillType - 1}"); } if (ski.Skill.TargetRange != 0) { IEnumerable <MapMonster> monstersInAOERange = Session.CurrentMap?.GetListMonsterInRange(monsterToAttack.MapX, monsterToAttack.MapY, ski.Skill.TargetRange).ToList(); foreach (MapMonster mon in monstersInAOERange.Where(s => s.CurrentHp > 0)) { damage = GenerateDamage(mon.MapMonsterId, ski.Skill, ref hitmode); broadcastPackets.Add($"su 1 {Session.Character.CharacterId} 3 {mon.MapMonsterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(characterSkillInfo != null ? characterSkillInfo.Skill.Effect : ski.Skill.Effect)} {Session.Character.MapX} {Session.Character.MapY} {(mon.IsAlive ? 1 : 0)} {(int)(((float)mon.CurrentHp / (float)ServerManager.GetNpc(mon.MonsterVNum).MaxHP) * 100)} {damage} 5 {ski.Skill.SkillType - 1}"); Task.Factory.StartNew(() => { GenerateKillBonus(mon.MapMonsterId); }); } } } } } } } // send su packets Session.CurrentMap.Broadcast(broadcastPackets.ToArray()); Task t = Task.Factory.StartNew((Func <Task>)(async() => { await Task.Delay((ski.Skill.Cooldown) * 100); Session.SendPacket($"sr {castingId}"); })); } else { notcancel = false; Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MP"), 10)); } } if (!notcancel) { Session.SendPacket($"cancel 2 {targetId}"); } }
public void create(ComboDTO combo) { comboRepository.create(mapper.Map <ComboDTO, Combo>(combo)); }
public ComboDTO Insert(ComboDTO combo) { throw new NotImplementedException(); }
public void TargetHit(int castingId, int targetId) { if ((DateTime.Now - Session.Character.LastTransform).TotalSeconds < 3) { Session.SendPacket("cancel 0 0"); Session.SendPacket(Session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_ATTACK"), 0)); return; } bool doNotCancel = false; List <CharacterSkill> skills = Session.Character.UseSp ? Session.Character.SkillsSp.GetAllItems() : Session.Character.Skills.GetAllItems(); if (skills != null) { CharacterSkill ski = skills.FirstOrDefault(s => s.Skill?.CastId == castingId && s.Skill?.UpgradeSkill == 0); Session.SendPacket("ms_c 0"); if (!Session.Character.WeaponLoaded(ski) || !ski.CanBeUsed()) { Session.SendPacket("cancel 2 0"); return; } if (ski != null && Session.Character.Mp >= ski.Skill.MpCost) { // AOE Target hit if (ski.Skill.TargetType == 1 && ski.Skill.HitType == 1) { Session.Character.LastSkillUse = DateTime.Now; if (!Session.Character.HasGodMode) { Session.Character.Mp -= ski.Skill.MpCost; } if (Session.Character.UseSp && ski.Skill.CastEffect != -1) { Session.SendPackets(Session.Character.GenerateQuicklist()); } Session.SendPacket(Session.Character.GenerateStat()); CharacterSkill skillinfo = Session.Character.Skills.GetAllItems().OrderBy(o => o.SkillVNum).FirstOrDefault(s => s.Skill.UpgradeSkill == ski.Skill.SkillVNum && s.Skill.Effect > 0 && s.Skill.SkillType == 2); Session.CurrentMap?.Broadcast($"ct 1 {Session.Character.CharacterId} 1 {Session.Character.CharacterId} {ski.Skill.CastAnimation} {(skillinfo != null ? skillinfo.Skill.CastEffect : ski.Skill.CastEffect)} {ski.Skill.SkillVNum}"); // Generate scp ski.LastUse = DateTime.Now; if (ski.Skill.CastEffect != 0) { Thread.Sleep(ski.Skill.CastTime * 100); } doNotCancel = true; Session.CurrentMap.Broadcast($"su 1 {Session.Character.CharacterId} 1 {Session.Character.CharacterId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(skillinfo != null ? skillinfo.Skill.Effect : ski.Skill.Effect)} {Session.Character.MapX} {Session.Character.MapY} 1 {((int)((double)Session.Character.Hp / Session.Character.HPLoad()) * 100)} 0 -2 {ski.Skill.SkillType - 1}"); if (ski.Skill.TargetRange != 0) { foreach (MapMonster mon in Session.CurrentMap.GetListMonsterInRange(Session.Character.MapX, Session.Character.MapY, ski.Skill.TargetRange).Where(s => s.CurrentHp > 0)) { mon.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.AOETargetHit, Session, ski.Skill, skillEffect: (skillinfo != null ? skillinfo.Skill.Effect : ski.Skill.Effect))); } } } else if (ski.Skill.TargetType == 0) // monster target { MapMonster monsterToAttack = Session.CurrentMap.GetMonster(targetId); if (monsterToAttack != null && monsterToAttack.IsAlive) { if (monsterToAttack != null && ski != null && ski.CanBeUsed()) { if (Session.Character.Mp >= ski.Skill.MpCost) { short distanceX = (short)(Session.Character.MapX - monsterToAttack.MapX); short distanceY = (short)(Session.Character.MapY - monsterToAttack.MapY); if (Map.GetDistance(new MapCell() { X = Session.Character.MapX, Y = Session.Character.MapY }, new MapCell() { X = monsterToAttack.MapX, Y = monsterToAttack.MapY }) <= (ski.Skill.Range) + monsterToAttack.Monster.BasicArea) { Session.Character.LastSkillUse = DateTime.Now; ski.LastUse = DateTime.Now; doNotCancel = true; if (!Session.Character.HasGodMode) { Session.Character.Mp -= ski.Skill.MpCost; } if (Session.Character.UseSp && ski.Skill.CastEffect != -1) { Session.SendPackets(Session.Character.GenerateQuicklist()); } Session.SendPacket(Session.Character.GenerateStat()); CharacterSkill characterSkillInfo = Session.Character.Skills.GetAllItems().OrderBy(o => o.SkillVNum) .FirstOrDefault(s => s.Skill.UpgradeSkill == ski.Skill.SkillVNum && s.Skill.Effect > 0 && s.Skill.SkillType == 2); Session.CurrentMap?.Broadcast($"ct 1 {Session.Character.CharacterId} 3 {monsterToAttack.MapMonsterId} {ski.Skill.CastAnimation} {(characterSkillInfo != null ? characterSkillInfo.Skill.CastEffect : ski.Skill.CastEffect)} {ski.Skill.SkillVNum}"); Session.Character.Skills.GetAllItems().Where(s => s.Id != ski.Id).ToList().ForEach(i => i.Hit = 0); // Generate scp ski.LastUse = DateTime.Now; if ((DateTime.Now - ski.LastUse).TotalSeconds > 3) { ski.Hit = 0; } else { ski.Hit++; } if (ski.Skill.CastEffect != 0) { Thread.Sleep(ski.Skill.CastTime * 100); } // check if we will hit mutltiple targets if (ski.Skill.TargetRange != 0) { ComboDTO skillCombo = ski.Skill.Combos.FirstOrDefault(s => ski.Hit == s.Hit); if (skillCombo != null) { if (ski.Skill.Combos.OrderByDescending(s => s.Hit).First().Hit == ski.Hit) { ski.Hit = 0; } IEnumerable <MapMonster> monstersInAOERange = Session.CurrentMap?.GetListMonsterInRange(monsterToAttack.MapX, monsterToAttack.MapY, ski.Skill.TargetRange).ToList(); foreach (MapMonster mon in monstersInAOERange.Where(s => s.CurrentHp > 0)) { mon.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.SingleTargetHitCombo, Session, ski.Skill , skillCombo: skillCombo)); } } else { IEnumerable <MapMonster> monstersInAOERange = Session.CurrentMap?.GetListMonsterInRange(monsterToAttack.MapX, monsterToAttack.MapY, ski.Skill.TargetRange).ToList(); Session.CurrentMap.Broadcast($"su 1 {Session.Character.CharacterId} 3 {targetId} {ski.Skill.SkillVNum} {ski.Skill.Cooldown} {ski.Skill.AttackAnimation} {(characterSkillInfo != null ? characterSkillInfo.Skill.Effect : ski.Skill.Effect)} 0 0 {(monsterToAttack.IsAlive ? 1 : 0)} {((int)((double)Session.Character.Hp / Session.Character.HPLoad()) * 100)} 0 0 {ski.Skill.SkillType - 1}"); foreach (MapMonster mon in monstersInAOERange.Where(s => s.CurrentHp > 0)) { mon.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.SingleAOETargetHit, Session, ski.Skill , skillEffect: (characterSkillInfo != null ? characterSkillInfo.Skill.Effect : ski.Skill.Effect))); } } } else { ComboDTO skillCombo = ski.Skill.Combos.FirstOrDefault(s => ski.Hit == s.Hit); if (skillCombo != null) { if (ski.Skill.Combos.OrderByDescending(s => s.Hit).First().Hit == ski.Hit) { ski.Hit = 0; } monsterToAttack.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.SingleTargetHitCombo, Session, ski.Skill, skillCombo: skillCombo)); } else { monsterToAttack.HitQueue.Enqueue(new GameObject.Networking.HitRequest(TargetHitType.SingleTargetHit, Session, ski.Skill)); } } } } } } } Session.SendPacketAfterWait($"sr {castingId}", ski.Skill.Cooldown * 100); } else { doNotCancel = false; Session.SendPacket(Session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_ENOUGH_MP"), 10)); } } if (!doNotCancel) { Session.SendPacket($"cancel 2 {targetId}"); } }