Esempio n. 1
0
 public override void OnDestroy()
 {
     base.OnDestroy();
     _skill   = null;
     _message = null;
     GameMessage.StopListen <SkillMessage>(OnSkillSelected);
 }
        public void EmoteAction(Player player, Player target, Room room, SkillMessage emote)
        {
            if (target.ConnectionId == player.ConnectionId)
            {
                _writer.WriteLine(
                    $"<p>{ReplacePlaceholders(emote.Hit.ToPlayer, target, true)}</p>",
                    target.ConnectionId);
            }
            else
            {
                _writer.WriteLine(
                    $"<p>{ReplacePlaceholders(emote.Hit.ToPlayer, target, false)}</p>",
                    player.ConnectionId);
            }


            if (!string.IsNullOrEmpty(emote.Hit.ToTarget))
            {
                _writer.WriteLine(
                    $"<p>{emote.Hit.ToTarget}</p>",
                    target.ConnectionId);
            }

            foreach (var pc in room.Players)
            {
                if (pc.ConnectionId.Equals(player.ConnectionId) ||
                    pc.ConnectionId.Equals(target.ConnectionId))
                {
                    continue;
                }

                _writer.WriteLine($"<p>{ReplacePlaceholders(emote.Hit.ToRoom, target, false)}</p>",
                                  pc.ConnectionId);
            }
        }
Esempio n. 3
0
        public int Slash(Player player, Player target, Room room, string obj)
        {
            if (player.Equipped.Wielded == null)
            {
                _writer.WriteLine("Slash with what?", player.ConnectionId);
            }


            var weaponDam = player.Equipped.Wielded?.Damage.Maximum ?? 1 * 2;
            var str       = player.Attributes.Attribute[EffectLocation.Strength];
            var damage    = weaponDam + _dice.Roll(1, 2, 10) + str / 5;

            /*dexterity check */
            var chance = 50;

            chance += player.Attributes.Attribute[EffectLocation.Dexterity];
            chance -= target.Attributes.Attribute[EffectLocation.Dexterity];

            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            /* level check */
            chance += player.Level - target.Level;

            /* TODO: terrain check, can't dirt kick underwater *taps head* */
            /* Check if player is flying/floating then fail dirt kick */

            if (_dice.Roll(1, 1, 100) < chance)
            {
                _skillManager.DamagePlayer("slash", damage, player, target, room);

                player.Lag += 1;

                _skillManager.updateCombat(player, target, room);
            }
            else
            {
                var skillMessageMiss = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You try to slash {target.Name} and miss.",
                        ToRoom   = $"{player.Name} tries to slash {target.Name} but {target.Name} easily avoids it.",
                        ToTarget = $"{player.Name} tries to slash you but misses."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessageMiss);
            }

            return(damage);
        }
Esempio n. 4
0
        public int Trip(Player player, Player target, Room room)
        {
            var str    = player.Attributes.Attribute[EffectLocation.Strength];
            var damage = _dice.Roll(1, 1, 4) + str / 5;

            var skillMessage = new SkillMessage()
            {
                Hit =
                {
                    ToPlayer = $"You trip {target.Name} and {target.Name} goes down!",
                    ToRoom   = $"{player.Name} trips {target.Name} and {target.Name} goes down!",
                    ToTarget = $"{player.Name} trips you and you go down!"
                },
                Miss =
                {
                    ToPlayer = $"You trip {target.Name} and {target.Name} goes down!",
                    ToRoom   = $"{player.Name} trips {target.Name} and {target.Name} goes down!",
                    ToTarget = $"{player.Name} trips you and you go down!"
                }
            };

            if (target.Lag == 0)
            {
                _skillManager.EmoteAction(player, target, room, skillMessage);

                _skillManager.DamagePlayer("trip", damage, player, target, room);

                player.Lag += 1;
                target.Lag += 2;

                target.Status = CharacterStatus.Status.Stunned;

                _skillManager.updateCombat(player, target, room);
            }
            else
            {
                player.Lag += 1;

                var skillMessageMiss = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You try to trip {target.Name} and miss.",
                        ToRoom   = $"{player.Name} tries to trip {target.Name} but {target.Name} easily avoids it.",
                        ToTarget = $"{player.Name} tries to trip you but fails."
                    },
                    Miss =
                    {
                        ToPlayer = $"You try to trip {target.Name} and miss.",
                        ToRoom   = $"{player.Name} tries to trip {target.Name} but {target.Name} easily avoids it.",
                        ToTarget = $"{player.Name} tries to trip you but fails."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessageMiss);
            }

            return(damage);
        }
Esempio n. 5
0
 private void OnSkillSelected(SkillMessage value)
 {
     Outline.enabled = _skill.Index == value.Index;
     if (Outline.enabled)
     {
         SetState(value.State);
     }
 }
Esempio n. 6
0
        public int UpperCut(Player player, Player target, Room room, string obj)
        {
            var str    = player.Attributes.Attribute[EffectLocation.Strength];
            var damage = _dice.Roll(1, 1, 6) + str / 5;


            _skillManager.DamagePlayer("uppercut", damage, player, target, room);

            var helmet = target.Equipped.Head;
            var chance = _dice.Roll(1, 1, 100);

            if (helmet != null)
            {
                if (chance <= 15)
                {
                    room.Items.Add(helmet);
                    target.Equipped.Head = null;


                    var skillMessage = new SkillMessage()
                    {
                        Hit =
                        {
                            ToPlayer = $"Your uppercut knocks{helmet.Name.ToLower()} off {target.Name}'s head.",
                            ToRoom   = $"{player.Name} knocks {helmet.Name.ToLower()} off {target.Name}'s head.",
                            ToTarget = $"{player.Name} knocks {helmet.Name.ToLower()} off your head."
                        }
                    };

                    _skillManager.EmoteAction(player, target, room, skillMessage);
                }
            }
            else
            {
                if (chance <= 15)
                {
                    var skillMessage = new SkillMessage()
                    {
                        Hit =
                        {
                            ToPlayer = $"Your uppercut stuns {target.Name}.",
                            ToRoom   = $"{player.Name}'s uppercut stuns {target.Name}.",
                            ToTarget = $"{player.Name}'s uppercut stuns you!"
                        }
                    };

                    _skillManager.EmoteAction(player, target, room, skillMessage);

                    target.Lag += 2;
                }
            }

            player.Lag += 1;

            _skillManager.updateCombat(player, target, room);

            return(damage);
        }
Esempio n. 7
0
        public int Mount(Player player, Player target, Room room)
        {
            if (!string.IsNullOrEmpty(player.Mounted.Name))
            {
                _writer.WriteLine($"You are already riding a mount called {player.Mounted.Name}", player.ConnectionId);
                return(0);
            }

            if (!string.IsNullOrEmpty(target.Mounted.MountedBy) && target.Mounted.MountedBy != player.Name)
            {
                _writer.WriteLine($"This mount is ridden by {target.Mounted.MountedBy}", player.ConnectionId);
                return(0);
            }

            if (!string.IsNullOrEmpty(player.Mounted.Name) && target.Name != player.Mounted.Name)
            {
                _writer.WriteLine($"You must dismount {player.Mounted.Name} first.", player.ConnectionId);
                return(0);
            }

            if (!target.Mounted.IsMount)
            {
                _writer.WriteLine($"{target.Name} is not a mount.", player.ConnectionId);
                return(0);
            }


            var skillMessage = new SkillMessage()
            {
                Hit =
                {
                    ToPlayer = $"You jump upon {target.Name}.",
                    ToRoom   = $"{player.Name} jumps upon {target.Name}.",
                    ToTarget = $""
                }
            };


            target.Mounted.MountedBy = player.Name;
            player.Mounted.Name      = target.Name;
            player.Pets.Add(target);

            _skillManager.EmoteAction(player, target, room, skillMessage);


            _updateClientUi.UpdateScore(player);



            return(0);
        }
Esempio n. 8
0
        public void CauseAffect()
        {
            var action = new SkillMessage(_writer);


            if (_skillTarget.Skill.Effect.Modifier.PositiveEffect)
            {
                _skillTarget.Target.Attributes.Attribute[_skillTarget.Skill.Effect.Location] += _value;
            }
            else
            {
                _skillTarget.Target.Attributes.Attribute[_skillTarget.Skill.Effect.Location] -= _value;
            }
        }
        public void CureLightWounds(Player player, Player target, Room room)
        {
            var casterLevel = player.Level > 10 ? 5 : player.Level;
            var value       = _dice.Roll(1, 1, 4) + 1 + casterLevel / 4;

            var skillMessage = new SkillMessage()
            {
                NoEffect = new Messages()
                {
                    ToPlayer = "#target# is at full health."
                },
                Hit = new Messages()
                {
                    ToPlayer = "#target# looks better!",
                    ToTarget = "You feel better.",
                    ToRoom   = "#target# looks better!"
                },
                Death = new Messages(),
                Miss  = new Messages()
            };

            var skillMessageNoEffect = new SkillMessage()
            {
                NoEffect = new Messages(),
                Hit      = new Messages()
                {
                    ToPlayer = "#target# is at full health.",
                    ToTarget = "You are at full health.",
                    ToRoom   = "#target# is at full health."
                },
                Death = new Messages(),
                Miss  = new Messages()
            };

            var hasAffcted = _skillManager.AffectPlayerAttributes("Cure light wounds", EffectLocation.Hitpoints, value, player, target, room, skillMessage.NoEffect.ToPlayer);

            if (hasAffcted)
            {
                _skillManager.EmoteAction(player, target, room, skillMessage);
                _skillManager.UpdateClientUI(target);
            }
            else
            {
                _skillManager.EmoteAction(player, target, room, skillMessageNoEffect);
                _skillManager.UpdateClientUI(target);
            }

            _skillManager.UpdateClientUI(player);
        }
Esempio n. 10
0
    private void OnSkillMessage(SkillMessage value)
    {
        _message.Index = value.Index;

        if (_unit.Skills.ContainsKey(value.Index))
        {
            UnlockButton.interactable = false;
            ChooseButton.interactable = true;
        }
        else
        {
            UnlockButton.interactable = true;
            ChooseButton.interactable = false;
        }
    }
Esempio n. 11
0
        public void EmoteEffectWearOffAction(Player player, Room room, SkillMessage emote)
        {
            foreach (var pc in room.Players)
            {
                if (pc.ConnectionId.Equals(player.ConnectionId))
                {
                    _writer.WriteLine($"<p>{emote.EffectWearOff.ToPlayer}</p>",
                                      pc.ConnectionId);
                    continue;
                }

                _writer.WriteLine($"<p>{ReplacePlaceholders(emote.EffectWearOff.ToRoom, player, false)}</p>",
                                  pc.ConnectionId);
            }
        }
Esempio n. 12
0
        public void CauseAffect()
        {
            var action = new SkillMessage(_writer);

            action.DisplayActionToUser(_skillTarget.Skill.LevelBasedMessages, _skillTarget.Skill.SkillAction, _skillTarget.Origin.Level);

            if (_skillTarget.Skill.Effect.Modifier.PositiveEffect)
            {
                _skillTarget.Target.Attributes.Attribute[_skillTarget.Skill.Effect.Location] += _value;
            }
            else
            {
                _skillTarget.Target.Attributes.Attribute[_skillTarget.Skill.Effect.Location] -= _value;
            }
        }
Esempio n. 13
0
        public int WarCry(Player player, Player target, Room room)
        {
            if (player.Affects.Custom.FirstOrDefault(x => x.Name.Equals("War Cry")) != null)
            {
                _writer.WriteLine("You are already affected by War Cry.", player.ConnectionId);
                return(0);
            }


            var skillMessage = new SkillMessage()
            {
                Hit =
                {
                    ToPlayer = $"You scream a loud war cry.",
                    ToRoom   = $"{player.Name} screams a loud war cry.",
                    ToTarget = $""
                }
            };


            _skillManager.EmoteAction(player, target, room, skillMessage);

            var affect = new Affect()
            {
                Duration = player.Level + player.Level / 5,
                Modifier = new Modifier()
                {
                    DamRoll = 3,
                    Armour  = -2
                },
                Affects = DefineSpell.SpellAffect.Berserk,
                Name    = "War Cry"
            };

            player.Affects.Custom.Add(affect);

            Helpers.ApplyAffects(affect, player);
            _updateClientUi.UpdateScore(player);
            _updateClientUi.UpdateMoves(player);
            _updateClientUi.UpdateHP(player);
            _updateClientUi.UpdateAffects(player);
            _updateClientUi.UpdateExp(player);


            return(0);
        }
Esempio n. 14
0
        public void Bless(Player player, Player target, Room room, bool wearOff)
        {
            var skillMessage = new SkillMessage()
            {
                NoEffect = new Messages(),
                Hit      = new Messages()
                {
                    ToPlayer = "You lay the blessing of your god upon #target#",
                    ToTarget = "A powerful blessing is laid upon you.",
                    ToRoom   = "#caster# beams as a powerful blessing is laid upon #target#."
                },
                Death         = new Messages(),
                Miss          = new Messages(),
                EffectWearOff = new Messages()
                {
                    ToPlayer = "The blessing fades away.",
                    ToRoom   = "#target#'s blessing fades away."
                }
            };

            var affect = target.Affects.Custom.FirstOrDefault(x =>
                                                              x.Name.Equals("Bless", StringComparison.CurrentCultureIgnoreCase));

            if (wearOff)
            {
                target.ArmorRating.Armour -= 20;
                target.Attributes.Attribute[EffectLocation.DamageRoll] -= 20;


                target.Affects.Custom.Remove(affect);

                _skillManager.EmoteEffectWearOffAction(player, room, skillMessage);

                _updateClientUi.UpdateAffects(player);
                _updateClientUi.UpdateScore(player);
                return;
            }

            var skill = new AllSpells().Armour();

            target = _skillManager.GetValidTarget(player, target, skill.ValidTargets);

            //create emote effectWear off message
            _skillManager.EmoteAction(player, target, room, skillMessage);

            if (affect == null)
            {
                var newAffect = new Affect()
                {
                    Modifier = new Modifier()
                    {
                        Armour  = 10,
                        DamRoll = 10,
                    },
                    Benefits = "Affects armour by 20\r\n Affects Dam by 10",
                    Affects  = DefineSpell.SpellAffect.ArmorClass,
                    Duration = player.Level + player.Attributes.Attribute[EffectLocation.Intelligence] / 2,
                    Name     = "Bless",
                };


                target.Affects.Custom.Add(newAffect);

                Helpers.ApplyAffects(newAffect, target);
            }
            else
            {
                affect.Duration = player.Level + player.Attributes.Attribute[EffectLocation.Intelligence] / 2;
            }



            _updateClientUi.UpdateAffects(target);
            _updateClientUi.UpdateScore(target);
            _updateClientUi.UpdateScore(player);
        }
Esempio n. 15
0
        public int Disarm(Player player, Player target, Room room, string obj)
        {
            if (string.IsNullOrEmpty(player.Target))
            {
                _writer.WriteLine("You are not fighting anyone.", player.ConnectionId);

                return(0);
            }

            if (player.Equipped.Wielded == null)
            {
                _writer.WriteLine("You must wield a weapon to disarm.", player.ConnectionId);

                return(0);
            }

            if (target.Equipped.Wielded == null)
            {
                _writer.WriteLine("Your opponent is not wielding a weapon.", player.ConnectionId);

                return(0);
            }

            var playerWeaponSkill = Helpers.GetWeaponSkill(player.Equipped.Wielded, player);

            var targetWeaponSkill = Helpers.GetWeaponSkill(target.Equipped.Wielded, target);

            var playerSkillOfTargetsWeapon = Helpers.GetWeaponSkill(target.Equipped.Wielded, player);

            var chance = playerWeaponSkill;

            chance += (playerSkillOfTargetsWeapon - targetWeaponSkill) / 2;

            /* dex vs. strength */
            chance += player.Attributes.Attribute[EffectLocation.Dexterity];
            chance -= target.Attributes.Attribute[EffectLocation.Strength];

            chance += (player.Level - target.Level) * 2;
            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            var hasGrip = target.Skills.FirstOrDefault(x =>
                                                       x.SkillName.Equals("grip", StringComparison.CurrentCultureIgnoreCase));

            var gripChance = _dice.Roll(1, 1, 100);

            if (hasGrip != null)
            {
                if (gripChance <= hasGrip.Proficiency)
                {
                    chance -= 20;
                }
                else
                {
                    _gain.GainSkillExperience(target, hasGrip.Level * 100, hasGrip, _dice.Roll(1, 1, 5));
                }
            }

            if (_dice.Roll(1, 1, 100) < chance)
            {
                if ((target.Equipped.Wielded.ItemFlag & Item.Item.ItemFlags.Noremove) != 0)
                {
                    var skillMessageNoRemove = new SkillMessage()
                    {
                        Hit =
                        {
                            ToPlayer = $"{target.Name}'s weapon won't budge!",
                            ToRoom   = $"{player.Name} tries to disarm {target.Name}, but fails.",
                            ToTarget = $"{player.Name} tries to disarm you, but your weapon won't budge!"
                        }
                    };

                    _skillManager.EmoteAction(player, target, room, skillMessageNoRemove);
                    return(0);
                }

                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You disarm {target.Name}!",
                        ToRoom   = $"{player.Name} disarms {target.Name}!",
                        ToTarget = $"{player.Name} DISARMS you and sends your weapon flying!"
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);

                room.Items.Add(target.Equipped.Wielded);
                target.Equipped.Wielded = null;
            }
            else
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You fail to disarm {target.Name}.",
                        ToRoom   = $"{player.Name} tries to disarm {target.Name}, but fails.",
                        ToTarget = $"{player.Name} tries to disarm you, but fails."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);
            }

            player.Lag += 1;

            return(0);
        }
Esempio n. 16
0
        public void Armor(Player player, Player target, Room room, bool wearOff)
        {
            var skillMessage = new SkillMessage()
            {
                NoEffect = new Messages()
                {
                    ToPlayer = "A protective white light engulfs #target#."
                },
                Hit = new Messages()
                {
                    ToPlayer = "#target# is engulfed by a protective white light.",
                    ToTarget = "You feel protected.",
                    ToRoom   = "A protective white light engulfs #target#."
                },
                Death         = new Messages(),
                Miss          = new Messages(),
                EffectWearOff = new Messages()
                {
                    ToPlayer = "Your protective white light fades away.",
                    ToRoom   = "#target#'s protective white light fades away."
                }
            };

            var affect = target.Affects.Custom.FirstOrDefault(x =>
                                                              x.Name.Equals("Armour", StringComparison.CurrentCultureIgnoreCase));

            if (wearOff)
            {
                player.ArmorRating.Armour -= 20;


                target.Affects.Custom.Remove(affect);

                _skillManager.EmoteEffectWearOffAction(player, room, skillMessage);

                _updateClientUi.UpdateAffects(player);
                _updateClientUi.UpdateScore(player);
                return;
            }

            var skill = new AllSpells().Armour();

            target = _skillManager.GetValidTarget(player, target, skill.ValidTargets);

            //create emote effectWear off message
            _skillManager.EmoteAction(player, target, room, skillMessage);

            if (affect == null)
            {
                var newAffect = new Affect()
                {
                    Modifier = new Modifier()
                    {
                        Armour = 20
                    },
                    Benefits = "Affects armour by 20",
                    Affects  = DefineSpell.SpellAffect.ArmorClass,
                    Duration = player.Level + player.Attributes.Attribute[EffectLocation.Intelligence] / 2,
                    Name     = "Armour",
                };

                target.Affects.Custom.Add(newAffect);

                Helpers.ApplyAffects(newAffect, target);
            }
            else
            {
                affect.Duration = player.Level + player.Attributes.Attribute[EffectLocation.Intelligence] / 2;
            }



            _updateClientUi.UpdateAffects(target);
            _updateClientUi.UpdateScore(target);
            _updateClientUi.UpdateScore(player);
        }
Esempio n. 17
0
        public int ShieldBash(Player player, Player target, Room room, string obj)
        {
            if (player.Equipped.Shield == null)
            {
                _writer.WriteLine("You need a shield before you can bash", player.ConnectionId);
                return(0);
            }

            /*dexterity check */
            var chance = 50;

            chance += player.Attributes.Attribute[EffectLocation.Strength];
            chance -= target.Attributes.Attribute[EffectLocation.Dexterity];

            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            if (target.Weight > player.Weight)
            {
                chance -= 10;
            }
            else
            {
                chance += 5;
            }

            if (target.Equipped.Shield != null)
            {
                chance += 15;
            }

            /* level check */
            chance += player.Level - target.Level;
            var weaponDam = player.Equipped.Shield != null ? player.Equipped.Shield.ArmourRating.Armour : 1 * 2;
            var str       = player.Attributes.Attribute[EffectLocation.Strength];
            var damage    = _dice.Roll(3, 1, 6) + str / 5 + weaponDam;

            if (_dice.Roll(1, 1, 100) < chance)
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You lift your shield and smash it at {target.Name}",
                        ToRoom   = $"{player.Name} lifts {Helpers.GetPronoun(player.Gender)} shield and smashes it at {target.Name}!",
                        ToTarget = $"{player.Name} lifts {Helpers.GetPronoun(player.Gender)} shield and smashes it at you!"
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);
                _skillManager.DamagePlayer("shield bash", damage, player, target, room);
                target.Lag += 3;
            }
            else
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You lift your shield and swing it at {target.Name} but miss.",
                        ToRoom   = $"{player.Name} lifts {Helpers.GetPronoun(player.Gender)} shield and swings it at {target.Name} but misses.",
                        ToTarget = $"{player.Name} lifts {Helpers.GetPronoun(player.Gender)} shield and swings it at you but you avoid it easily."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);


                player.Lag += 2;
            }

            player.Lag += 1;


            _skillManager.updateCombat(player, target, room);

            return(0);
        }
Esempio n. 18
0
        public int DirtKick(Player player, Player target, Room room, string obj)
        {
            if (target.Affects.Blind)
            {
                _writer.WriteLine($"{target.Name} has already been blinded.", player.ConnectionId);
            }

            /*dexterity check */
            var chance = 50;

            chance += player.Attributes.Attribute[EffectLocation.Dexterity];
            chance -= target.Attributes.Attribute[EffectLocation.Dexterity] / 2;

            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            /* level check */
            chance += player.Level - target.Level;

            /* TODO: terrain check, can't dirt kick underwater *taps head* */
            /* Check if player is flying/floating then fail dirt kick */

            if (_dice.Roll(1, 1, 100) < chance)
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You kick dirt in {target.Name}'s eyes!",
                        ToRoom   = $"{player.Name} kicks dirt into {target.Name}'s eyes!",
                        ToTarget = $"{player.Name} kicks dirt into your eyes!"
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);

                _writer.WriteLine("You can't see a thing!", target.ConnectionId);

                target.Affects.Blind = true;

                var affect = new Affect()
                {
                    Duration = 2,
                    Modifier = new Modifier()
                    {
                        Dexterity = -4,
                        HitRoll   = -4
                    },
                    Affects = DefineSpell.SpellAffect.Blind,
                    Name    = "Blindness from dirt kick"
                };

                target.Affects.Custom.Add(affect);

                Helpers.ApplyAffects(affect, target);
            }
            else
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You kick dirt but {target.Name} shuts his eyes in time.",
                        ToRoom   = $"{player.Name} tries to kick dirt in {target.Name} eyes.",
                        ToTarget = $"{player.Name} tries to kick dirt into your eyes."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);
            }

            player.Lag += 1;

            _skillManager.updateCombat(player, target, room);

            _updateClientUi.UpdateScore(player);
            _updateClientUi.UpdateMoves(player);
            _updateClientUi.UpdateHP(player);
            _updateClientUi.UpdateAffects(target);
            _updateClientUi.UpdateExp(player);


            return(0);
        }
Esempio n. 19
0
        public int Lunge(Player player, Player target, Room room, string obj)
        {
            /*dexterity check */
            var chance = 50;

            chance += player.Attributes.Attribute[EffectLocation.Strength];
            chance -= target.Attributes.Attribute[EffectLocation.Dexterity];

            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            /* level check */
            chance += player.Level - target.Level;

            var weaponDam = player.Equipped.Wielded != null ? player.Equipped.Wielded.Damage.Maximum : 1 * 2;
            var str       = player.Attributes.Attribute[EffectLocation.Strength];
            var damage    = _dice.Roll(3, 1, 6) + str / 5 + weaponDam;


            if (_dice.Roll(1, 1, 100) < chance)
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You lunge at {target.Name}",
                        ToRoom   = $"{player.Name} lunges at {target.Name}!",
                        ToTarget = $"{player.Name} lunges at you!"
                    }
                };
                player.Lag += 1;


                _skillManager.EmoteAction(player, target, room, skillMessage);
                _skillManager.DamagePlayer("lunge", damage, player, target, room);
            }
            else
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You lunge at {target.Name} but miss.",
                        ToRoom   = $"{player.Name} lunges at {target.Name} but misses.",
                        ToTarget = $"{player.Name}lunges at you but you avoid it easily."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);


                player.Lag += 2;
            }


            _skillManager.updateCombat(player, target, room);

            return(0);
        }
Esempio n. 20
0
        public int Rescue(Player player, Player target, Room room, string obj)
        {
            if (target == null)
            {
                _writer.WriteLine("Rescue whom?", player.ConnectionId);
                return(0);
            }

            if (player.Followers.FirstOrDefault(x => x.Name.Equals(target.Name)) == null)
            {
                _writer.WriteLine("You can only rescue those in your group.", player.ConnectionId);
                return(0);
            }


            if ((target.Status & CharacterStatus.Status.Fighting) == 0)
            {
                _writer.WriteLine($"{target.Name} is not fighting right now.", player.ConnectionId);

                return(0);
            }

            if (target == player)
            {
                _writer.WriteLine("What about fleeing instead?", player.ConnectionId);

                return(0);
            }

            var foundSkill = player.Skills
                             .FirstOrDefault(x => x.SkillName.Equals("Rescue", StringComparison.CurrentCultureIgnoreCase));

            var chance = foundSkill
                         .Proficiency;

            if (_dice.Roll(1, 1, 100) < chance)
            {
                player.Target = target.Target;
                target.Target = string.Empty;
                target.Status = CharacterStatus.Status.Standing;

                var findTarget = Helpers.FindMob(Helpers.findNth($"{player.Target}"), room) ?? Helpers.FindPlayer(Helpers.findNth($"{player.Target}"), room);

                findTarget.Target = player.Name;

                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You rescue {target.Name}!",
                        ToRoom   = $"{player.Name} rescues {target.Name}!",
                        ToTarget = $"{player.Name} rescues you!"
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);

                _skillManager.updateCombat(player, findTarget, room);
                return(0);
            }
            var increase = _dice.Roll(1, 1, 5);

            _gain.GainExperiencePoints(player, 100 * foundSkill.Level / 4, false);

            _updateClientUi.UpdateExp(player);

            _writer.WriteLine(
                $"<p class='improve'>You learn from your mistakes and gain {100 * foundSkill.Level / 4} experience points.</p>" +
                $"<p class='improve'>Your knowledge of {foundSkill.SkillName} increases by {increase}%.</p>",
                player.ConnectionId, 0);

            return(0);
        }
Esempio n. 21
0
        public int HamString(Player player, Player target, Room room, string obj)
        {
            /*dexterity check */
            var chance = 50;

            chance += player.Attributes.Attribute[EffectLocation.Strength];
            chance -= target.Attributes.Attribute[EffectLocation.Dexterity];

            if (player.Affects.Haste)
            {
                chance += 10;
            }

            if (target.Affects.Haste)
            {
                chance -= 25;
            }

            /* level check */
            chance += player.Level - target.Level;

            var weaponDam = player.Equipped.Wielded != null ? player.Equipped.Wielded.Damage.Maximum : 1 * 2;
            var str       = player.Attributes.Attribute[EffectLocation.Strength];
            var damage    = _dice.Roll(2, 1, 6) + str / 5 + weaponDam;


            if (_dice.Roll(1, 1, 100) < chance)
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You slash the back of {target.Name}'s legs.",
                        ToRoom   = $"{player.Name} slashes the back of {target.Name}'s legs!",
                        ToTarget = $"{player.Name} slashes the back of your legs!"
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);
                _skillManager.DamagePlayer("hamstring slash", damage, player, target, room);

                target.Attributes.Attribute[EffectLocation.Moves] -=
                    target.Attributes.Attribute[EffectLocation.Moves] / 2;

                if (target.Attributes.Attribute[EffectLocation.Moves] < 0)
                {
                    target.Attributes.Attribute[EffectLocation.Moves] = 0;
                }
            }
            else
            {
                var skillMessage = new SkillMessage()
                {
                    Hit =
                    {
                        ToPlayer = $"You try to slash the back of {target.Name}'s legs but miss.",
                        ToRoom   = $"{player.Name} tries to slash the back of {target.Name}'s legs. but misses",
                        ToTarget = $"{player.Name} tries to slash the back of your legs but misses."
                    }
                };

                _skillManager.EmoteAction(player, target, room, skillMessage);


                player.Lag += 3;
            }

            player.Lag += 2;

            _skillManager.updateCombat(player, target, room);

            return(0);
        }
Esempio n. 22
0
        public int Berserk(Player player, Player target, Room room)
        {
            if (player.Affects.Berserk)
            {
                _writer.WriteLine("You get a little madder", player.ConnectionId);
                return(0);
            }

            if (player.Attributes.Attribute[EffectLocation.Moves] < 50)
            {
                _writer.WriteLine("You can't get up enough energy.", player.ConnectionId);
                return(0);
            }

            /* below 50% of hp helps, above hurts */

            var foundSkill = player.Skills
                             .FirstOrDefault(x => x.SkillName.Equals("Berserk", StringComparison.CurrentCultureIgnoreCase));

            if (foundSkill != null)
            {
                var chance = foundSkill
                             .Proficiency;

                chance += (player.Status & CharacterStatus.Status.Fighting) != 0 ? 10 : 1;
                var hpPercent = 100 * player.Attributes.Attribute[EffectLocation.Hitpoints] /
                                player.MaxAttributes.Attribute[EffectLocation.Hitpoints];
                chance += 25 - hpPercent / 2;


                if (_dice.Roll(1, 1, 100) < chance)
                {
                    target.Affects.Berserk = true;
                    var affect = new Affect()
                    {
                        Duration = 4 + player.Level / 5,
                        Modifier = new Modifier()
                        {
                            DamRoll = 4 + player.Level / 5,
                            HitRoll = 4 + player.Level / 8,
                            Armour  = 4 + player.Level / 5
                        },
                        Affects = DefineSpell.SpellAffect.Berserk,
                        Name    = "Berserk"
                    };
                    target.Affects.Custom.Add(affect);

                    Helpers.ApplyAffects(affect, player);

                    player.Attributes.Attribute[EffectLocation.Moves]      = player.Attributes.Attribute[EffectLocation.Moves] /= 2;
                    player.Attributes.Attribute[EffectLocation.Hitpoints] += player.Level * 2;

                    var skillMessage = new SkillMessage()
                    {
                        Hit =
                        {
                            ToPlayer = "Your pulse races as you are consumed by rage!",
                            ToRoom   = $"{player.Name} gets a wild look in {Helpers.GetPronoun(player.Gender)} eyes.",
                            ToTarget = ""
                        }
                    };

                    _skillManager.EmoteAction(player, target, room, skillMessage);
                }
                else
                {
                    _writer.WriteLine("Your pulse speeds up, but nothing happens", target.ConnectionId);

                    player.Attributes.Attribute[EffectLocation.Moves] = player.Attributes.Attribute[EffectLocation.Moves] /= 4;

                    var increase = _dice.Roll(1, 1, 5);

                    foundSkill.Proficiency += increase;

                    _gain.GainExperiencePoints(player, 100 * foundSkill.Level / 4, false);

                    _updateClientUi.UpdateExp(player);

                    _writer.WriteLine(
                        $"<p class='improve'>You learn from your mistakes and gain {100 * foundSkill.Level / 4} experience points.</p>" +
                        $"<p class='improve'>Your knowledge of {foundSkill.SkillName} increases by {increase}%.</p>",
                        player.ConnectionId, 0);
                }
            }

            player.Lag += 1;
            _updateClientUi.UpdateScore(player);
            _updateClientUi.UpdateMoves(player);
            _updateClientUi.UpdateHP(player);
            _updateClientUi.UpdateAffects(player);
            _updateClientUi.UpdateExp(player);

            return(0);
        }