protected void targetGiveBuff(GameObject target, Buff buff) { int charDamage = (int)character.characterInfo.damage + character.characterInfo.addedDamage; Buff newBuff = buff.Clone(); // 버프 계수 계산 switch (buff.buffType) { case BuffType.ArmorDown: case BuffType.ArmorUP: case BuffType.AttackDown: case BuffType.AttackUP: case BuffType.DotDamage: case BuffType.DotHeal: newBuff.amount *= charDamage; break; } BuffSystem buffSystem = target.GetComponent <BuffSystem>(); if (buffSystem != null) { buffSystem.AddBuff(newBuff); } }
private static bool AddBuff(YiObj target, Skill skill) { var shieldBuff = new Buff(target, SkillId.AdvancedDispel, BuffDuration) { PhysDefMod = DefenseBonusPercent, Effect = StatusEffect.MagicShield, Description = $"MagicShield Level {skill.Level}: +{(DefenseBonusPercent*100)-100}% Physical Defense." }; BuffSystem.AddBuff(target, shieldBuff); return(true); }
private static bool AddBuff(YiObj target, Skill skill) { var shieldBuff = new Buff(target, SkillId.Shield, BuffDuration) { Effect = StatusEffect.Invisibility, Description = $"Invisibility Level {skill.Level}" }; target.RemoveStatusEffect(StatusEffect.XpList); BuffSystem.AddBuff(target, shieldBuff); return(true); }
private static bool AddBuff(YiObj target, Skill skill) { var shieldBuff = new Buff(target, SkillId.Superman, BuffDuration) { PhysAtkMod = AttackBonusPercent, Effect = StatusEffect.SuperMan, Description = "Superman: +1.000% Attack!" }; target.RemoveStatusEffect(StatusEffect.XpList); BuffSystem.AddBuff(target, shieldBuff); return(true); }
private static bool AddBuff(YiObj target, Skill skill) { var shieldBuff = new Buff(target, SkillId.Cyclone, BuffDuration) { SpeedMod = SpeedBonusPercent, Effect = StatusEffect.Cyclone, Description = "Cyclone: +100% Speed!" }; target.RemoveStatusEffect(StatusEffect.XpList); BuffSystem.AddBuff(target, shieldBuff); return(true); }
void EnemyAttack(GameObject gameObject) { if (takeDamageInfo.skillInfo.doUseBuff) { Buff newBuff = takeDamageInfo.skillInfo.buff.Clone(); // 버프 계수 계산 switch (newBuff.buffType) { case BuffType.ArmorDown: case BuffType.ArmorUP: case BuffType.AttackDown: case BuffType.AttackUP: case BuffType.DotDamage: case BuffType.DotHeal: newBuff.amount *= takeDamageInfo.damage; break; } BuffSystem buffSystem = gameObject.GetComponent <BuffSystem>(); if (buffSystem != null) { buffSystem.AddBuff(newBuff); } } float bloodPercent = takeDamageInfo.skillInfo.bloodPercent; if (targetTag != "unit") { bloodPercent = ArtifactManager.Instance.CalcBloodSucking(bloodPercent); } if (takeDamageInfo.skillInfo.bloodSucking) { if (user.gameObject.activeInHierarchy && user.characterInfo.currentHP > 0) { user.SendMessage("takeHeal", (takeDamageInfo.damage * bloodPercent)); } } gameObject.SendMessage("takeAttack", takeDamageInfo); }
private static bool AddBuff(YiObj target, Skill skill) { //Map map; //if (GameWorld.Maps.TryGetValue(target.MapId, out map)) //{ // if (map.Flags.HasFlag(MapFlags.DisableFly)) // target.GetMessage("SYSTEM", target.Name, "Flying forbidden on this map.", MsgTextType.Action); // return false; //} var flyBuff = new Buff(target, SkillId.Fly, BuffDuration) { Effect = StatusEffect.Flying, Description = $"XP Fly:{skill.Level}: Makes you fly :3" }; BuffSystem.AddBuff(target, flyBuff); target.RemoveStatusEffect(StatusEffect.XpList); return(true); }
private void OnTriggerEnter(Collider other) { if (other.tag == "MoveBuff") { BuffSystem.AddBuff(new MoveSpeedBuff(null, 2f, BuffSystem, 3f, BuffType.buff)); Destroy(other.gameObject); } if (other.tag == "HeatBuff") { BuffSystem.AddBuff(new HeatBuff(null, 10f, BuffType.buff, BuffSystem, -2)); Destroy(other.gameObject); } if (other.tag == "MPBuff") { BuffSystem.AddBuff(new MPBuff(null, 10f, BuffType.buff, BuffSystem, 3)); Destroy(other.gameObject); } if (other.tag == "FreeFromInjuryBuff") { BuffSystem.AddBuff(new FreeFromInjuryBuff(null, 3f, BuffSystem)); Destroy(other.gameObject); } }
private static async void Process(Player player, int npcIdoverride = 0) { if (Control == 255 && player.Online) { player.CurrentNpcId = 0; } if (player.CurrentNpcId == 0) { return; } var id = player.CurrentNpcId; if (npcIdoverride != 0) { id = npcIdoverride; } switch (id) { case 1337: { switch (Control) { case 255: player.CurrentNpcId = 1337; using (var packet = new NpcDialog(10)) { packet .Text("Select Char") .Link("Next", 1) .Link("Select", 10) .Link("New", 100) .Finish(); player.Send(packet); } break; case 1: var players = SelectorSystem.GetPlayersFor(player.AccountId).ToList(); var index = players.IndexOf(player); if (index + 1 > players.Count - 1) { index = 0; } else { index++; } player = SelectorSystem.SwapCharacter(player, players[index]); player.Send(LegacyPackets.CharacterInformation(player)); player.Send(MsgAction.MapShowPacket(player)); player.AddStatusEffect(StatusEffect.Frozen); ScreenSystem.Create(player); ScreenSystem.Update(player); break; case 10: player.RemoveStatusEffect(StatusEffect.Frozen); ScreenSystem.Create(player); player.AddSpawnProtection(); player.IncrementXp(); foreach (var kvp in player.Skills) { player.Send(MsgSkill.Create(kvp.Value)); } foreach (var prof in player.Profs) { player.Send(MsgProf.Create(prof.Value)); } EntityLogic.Recalculate(player); player.CurrentHp = player.MaximumHp; player.CurrentMp = player.MaximumMp; GameWorld.Maps[player.MapId].Enter(player); player.Send(MsgAction.Create(player, (int)player.PkMode, MsgActionType.ChangePkMode)); player.Send(MsgUpdate.Create(player, player.Stamina, MsgUpdateType.Stamina)); player.Send(MsgUpdate.Create(player, player.Class, MsgUpdateType.Class)); player.Online = true; if (player.HasFlag(StatusEffect.SuperMan)) { BuffSystem.Create(player); BuffSystem.AddBuff(player, new Buff(player, SkillId.Superman, TimeSpan.FromSeconds(10))); } if (player.HasFlag(StatusEffect.Cyclone)) { BuffSystem.Create(player); BuffSystem.AddBuff(player, new Buff(player, SkillId.Cyclone, TimeSpan.FromSeconds(10))); } if (player.PkPoints > 1) { player.PkPJob = new Job(TimeSpan.FromSeconds(15), () => player.PkPoints--); YiScheduler.Instance.Do(player.PkPJob); } ScreenSystem.Send(player, MsgAction.Create(player, player.UniqueId, MsgActionType.EntityRemove)); ScreenSystem.Send(player, MsgSpawn.Create(player)); break; case 100: SelectorSystem.CreateNewCharacterFor(player.AccountId); player.Disconnect(); break; } break; } default: { if (!await ScriptEngine.ActivateNpc(player, NpcId, (byte)Control, Input)) { if (GameWorld.Find(NpcId, out Npc npc) && Control == 0) { ConquerActionProcessor.ExecuteAction(npc, player, Control); } //Message.SendTo(player, $"[{player.CurrentNpcId}] Npc has no script.", MsgTextType.Talk); } break; } } }