//for deactivating powerups
    IEnumerator ResetAfterTime(float time, SkillStat curStat, SkillStatBoost statBoost)
    {
        yield return(new WaitForSeconds(time)); //csak a "time" után folytatódik ez a függvény

        curStat.ModifyStatValues(statBoost.multiplierDifference * (-1), statBoost.valueDifference * (-1));
        ApplyStatChange(statBoost.name);
    }
예제 #2
0
    private void UpdateHealthBar(SkillStat skill)
    {
        var now  = skill.CurrentValue;
        var next = skill.Level;

        pbHealth.progress = (float)now / (float)next;
    }
예제 #3
0
 public Skill(string name, string description, SkillStat stat, SkillDifficulty difficulty)
 {
     Name = name;
     Description = description;
     Stat = stat;
     Difficulty = difficulty;
     RelativeLevel = null;
 }
예제 #4
0
 public void PlayerLevelUp(PlayerController player, SkillStat skill)
 {
     if (!player)
     {
         return;
     }
     SaveGameStat("last-level-up-name", player.PlayerName);
     SaveGameStat("last-level-up-skill", skill?.ToString());
 }
예제 #5
0
    public override void Handle(PlayerStatsRequest data, GameClient client)
    {
        var player = this.PlayerManager.GetPlayer(data.Player);

        if (!player)
        {
            client.SendCommand(data.Player.Username, "player_stats", "You are not currently playing. Use !join to start playing!");
            return;
        }

        var ps = player.Stats;
        var eq = player.EquipmentStats;

        if (!string.IsNullOrEmpty(data.Skill))
        {
            SkillStat skill = null;
            var       csi   = player.GetCombatTypeFromArgs(data.Skill);
            if (csi != -1)
            {
                skill = player.GetCombatSkill(csi);
            }

            if (skill == null)
            {
                var cs = player.GetSkillTypeFromArgs(data.Skill);
                if (cs != -1)
                {
                    skill = player.GetSkill(cs);
                }
            }

            if (skill != null)
            {
                client.SendCommand(data.Player.Username, "player_stats", skill.ToString());
            }
            return;
        }

        var combatLevel = ps.CombatLevel;
        var skills      = "";
        var total       = ps
                          .GetType()
                          .GetFields(BindingFlags.Instance | BindingFlags.Public)
                          .Where(x => x.FieldType == typeof(SkillStat))
                          .Select(x => { skills += (SkillStat)x.GetValue(ps) + ", "; return(x); })
                          .Sum(x => ((SkillStat)x.GetValue(ps)).Level);

        client.SendCommand(data.Player.Username,
                           "player_stats",
                           $"Combat level {combatLevel}, " +
                           skills +
                           $" -- TOTAL {total} --, " +
                           $"Eq - power {eq.WeaponPower}, " +
                           $"aim {eq.WeaponAim}, " +
                           $"armor {eq.ArmorPower}");
    }
예제 #6
0
    public override void Handle(HighestSkillRequest data, GameClient client)
    {
        var players       = this.PlayerManager.GetAllPlayers();
        var isCombatSkill = false;
        var anySkill      = true;
        var skillName     = data.Skill;

        if (Enum.TryParse <CombatSkill>(skillName, true, out var combat))
        {
            isCombatSkill = true;
        }

        if (Enum.TryParse <Skill>(skillName, true, out var skill))
        {
            anySkill = false;
        }

        // get the player with highest exp on any skill.
        SkillStat        highest = null;
        PlayerController p       = null;

        foreach (var player in players)
        {
            if (isCombatSkill)
            {
                var combatSkill = player.GetCombatSkill(combat);
                if (highest == null || highest.Experience < combatSkill.Experience)
                {
                    p       = player;
                    highest = combatSkill;
                }
            }
            else if (!anySkill)
            {
                var secondary = player.GetSkill((int)skill);
                if (highest == null || highest.Experience < secondary.Experience)
                {
                    p       = player;
                    highest = secondary;
                }
            }
        }

        if (p == null || highest == null)
        {
            client.SendCommand(data.Player.Username,
                               "highest_skill",
                               $"No player could be found that has a skill named {skillName}");
            return;
        }

        client.SendCommand(data.Player.Username,
                           "highest_skill",
                           $"{p.PlayerName} has the highest level {skillName} with level {highest.Level}.");
    }
예제 #7
0
 internal void TakeBestOf(Skills target)
 {
     for (int i = 0; i < SkillList.Length; i++)
     {
         SkillStat skill  = SkillList[i];
         SkillStat tskill = target.SkillList[i];
         if (tskill.Experience > skill.Experience)
         {
             skill.SetExp(tskill.Experience);
         }
     }
 }
예제 #8
0
    public void init(Quaternion direction, SkillStat stat, Transform target)
    {
        transform.rotation = direction;
        List <float> stats = stat.getStats();

        damage          = stats[2];
        duration        = stats[3];
        speed           = stats[4];
        normalizedSpeed = (transform.rotation * new Vector3(1, 0, 0)).normalized * speed;
        type            = stat.getSkillType();
        this.target     = target;
    }
예제 #9
0
    public static float CalculateSkillDamage(SkillStat skillStat, int targetLevel)
    {
        var levelDiff = skillStat.CurrentValue - targetLevel;
        var hit       = Mathf.Max(1f, Math.Abs(levelDiff));

        if (levelDiff >= 5 || UnityEngine.Random.value <= 0.5)
        {
            return(hit);
        }

        return(0);
    }
예제 #10
0
    public override void Handle(PlayerStatsRequest data, GameClient client)
    {
        var player = PlayerManager.GetPlayer(data.Player);

        if (!player)
        {
            client.SendMessage(data.Player.Username, Localization.MSG_NOT_PLAYING);
            return;
        }

        if (!string.IsNullOrEmpty(data.Skill))
        {
            var targetPlayer = PlayerManager.GetPlayerByName(data.Skill);
            if (targetPlayer != null)
            {
                SendPlayerStats(targetPlayer, client);
                return;
            }

            SkillStat skill = null;
            var       csi   = player.GetCombatTypeFromArgs(data.Skill);
            if (csi != -1)
            {
                skill = player.GetCombatSkill(csi);
            }

            if (skill == null)
            {
                var cs = player.GetSkillTypeFromArgs(data.Skill);
                if (cs != -1)
                {
                    skill = player.GetSkill((Skill)cs);
                }
            }

            if (skill != null)
            {
                var expRequired = GameMath.ExperienceForLevel(skill.Level + 1);
                var expReq      = (long)expRequired;
                var curExp      = (long)skill.Experience;
                client.SendMessage(data.Player.Username, Localization.MSG_SKILL,
                                   skill.ToString(),
                                   FormatValue(curExp),
                                   FormatValue(expReq));
            }
            return;
        }

        SendPlayerStats(player, client);
    }
    //ezt hívjuk meg amikor változtatni akarjuk a statokat
    public void ApplyStatBoost(SkillStatBoost statBoost)
    {
        SkillStat curStat = skillStats.Find(x => x.name == statBoost.name); //megkeressük a változtatnivaló stat-ot a listában

        curStat.ModifyStatValues(statBoost.multiplierDifference, statBoost.valueDifference);
        //modify-oljuk ezt a statot
        //(magában a SkillStat class-ban van ez a függvény)

        ApplyStatChange(statBoost.name);

        //ha powerup, akkor a powerupDuration után reverse-elni akarjuk
        if (statBoost.isPowerup)
        {
            StartCoroutine(ResetAfterTime(statBoost.duration, curStat, statBoost));
        }
    }
예제 #12
0
    private void UpdateSkillProgressBar(SkillStat skill)
    {
        var thisLevelExp = GameMath.LevelToExperience(skill.Level);
        var nextLevelExp = GameMath.LevelToExperience(skill.Level + 1);
        var now          = skill.Experience - thisLevelExp;
        var next         = nextLevelExp - thisLevelExp;

        pbSkill.progress = (float)now / (float)next;

        var expPerHour = skill.GetExperiencePerHour();

        if (lblExpPerHour && ExpPerHourVisible)
        {
            SetText(lblExpPerHour, Utility.FormatValue(expPerHour) + " xp / h");
        }
    }
예제 #13
0
 public Skills()
 {
     Attack      = new SkillStat(nameof(Attack), 0);
     Defense     = new SkillStat(nameof(Defense), 0);
     Strength    = new SkillStat(nameof(Strength), 0);
     Health      = new SkillStat(nameof(Health), 1000);
     Woodcutting = new SkillStat(nameof(Woodcutting), 0);
     Fishing     = new SkillStat(nameof(Fishing), 0);
     Mining      = new SkillStat(nameof(Mining), 0);
     Crafting    = new SkillStat(nameof(Crafting), 0);
     Cooking     = new SkillStat(nameof(Cooking), 0);
     Farming     = new SkillStat(nameof(Farming), 0);
     Magic       = new SkillStat(nameof(Magic), 0);
     Ranged      = new SkillStat(nameof(Ranged), 0);
     Slayer      = new SkillStat(nameof(Slayer), 0);
     Sailing     = new SkillStat(nameof(Sailing), 0);
 }
예제 #14
0
 public Skills(RavenNest.Models.Skills skills)
 {
     Attack      = new SkillStat(nameof(Attack), skills.Attack);
     Defense     = new SkillStat(nameof(Defense), skills.Defense);
     Strength    = new SkillStat(nameof(Strength), skills.Strength);
     Health      = new SkillStat(nameof(Health), skills.Health);
     Woodcutting = new SkillStat(nameof(Woodcutting), skills.Woodcutting);
     Fishing     = new SkillStat(nameof(Fishing), skills.Fishing);
     Mining      = new SkillStat(nameof(Mining), skills.Mining);
     Crafting    = new SkillStat(nameof(Crafting), skills.Crafting);
     Cooking     = new SkillStat(nameof(Cooking), skills.Cooking);
     Farming     = new SkillStat(nameof(Farming), skills.Farming);
     Magic       = new SkillStat(nameof(Magic), skills.Magic);
     Ranged      = new SkillStat(nameof(Ranged), skills.Ranged);
     Slayer      = new SkillStat(nameof(Slayer), skills.Slayer);
     Sailing     = new SkillStat(nameof(Sailing), skills.Sailing);
 }
예제 #15
0
    public override void Handle(PlayerStatsRequest data, GameClient client)
    {
        var player = PlayerManager.GetPlayer(data.Player);

        if (!player)
        {
            client.SendCommand(data.Player.Username, "player_stats", "You are not currently playing. Use !join to start playing!");
            return;
        }

        if (!string.IsNullOrEmpty(data.Skill))
        {
            var targetPlayer = PlayerManager.GetPlayerByName(data.Skill);
            if (targetPlayer != null)
            {
                SendPlayerStats(targetPlayer, client);
                return;
            }

            SkillStat skill = null;
            var       csi   = player.GetCombatTypeFromArgs(data.Skill);
            if (csi != -1)
            {
                skill = player.GetCombatSkill(csi);
            }

            if (skill == null)
            {
                var cs = player.GetSkillTypeFromArgs(data.Skill);
                if (cs != -1)
                {
                    skill = player.GetSkill(cs);
                }
            }

            if (skill != null)
            {
                client.SendCommand(data.Player.Username, "player_stats", skill.ToString());
            }
            return;
        }

        SendPlayerStats(player, client);
    }
예제 #16
0
    public void ShowSkillRange(int skill)
    {
        currentSkill = skillStats[skill];
        Transform transform = GetComponent <Transform>();

        switch (currentSkill.getSkillType())
        {
        case SkillStat.SkillType.Projectile:
            skillRange = Instantiate(currentSkill.getPrefabs()[1], new Vector3(transform.position.x, transform.position.y, -2), Quaternion.identity);
            skillRange.GetComponent <SkillRange>().init(this, false);
            currentSkillNum = skill;
            break;

        case SkillStat.SkillType.TargetedProjectile:
            skillRange = Instantiate(currentSkill.getPrefabs()[1], new Vector3(transform.position.x, transform.position.y, -2), Quaternion.identity);
            skillRange.GetComponent <SkillRange>().init(this, true);
            currentSkillNum = skill;
            break;
        }
    }
예제 #17
0
    public Skills()
    {
        Attack      = new SkillStat(nameof(Attack), 1, 0);
        Defense     = new SkillStat(nameof(Defense), 1, 0);
        Strength    = new SkillStat(nameof(Strength), 1, 0);
        Health      = new SkillStat(nameof(Health), 10, 1000);
        Woodcutting = new SkillStat(nameof(Woodcutting), 1, 0);
        Fishing     = new SkillStat(nameof(Fishing), 1, 0);
        Mining      = new SkillStat(nameof(Mining), 1, 0);
        Crafting    = new SkillStat(nameof(Crafting), 1, 0);
        Cooking     = new SkillStat(nameof(Cooking), 1, 0);
        Farming     = new SkillStat(nameof(Farming), 1, 0);
        Magic       = new SkillStat(nameof(Magic), 1, 0);
        Ranged      = new SkillStat(nameof(Ranged), 1, 0);
        Slayer      = new SkillStat(nameof(Slayer), 1, 0);
        Sailing     = new SkillStat(nameof(Sailing), 1, 0);
        Healing     = new SkillStat(nameof(Healing), 1, 0);

        skills = new ConcurrentDictionary <string, SkillStat>(
            SkillList.ToDictionary(x => x.Name.ToLower(), x => x));
    }
    public void ApplyStatChange(SkillStatName skillName)
    {
        SkillStat curStat = skillStats.Find(x => x.name == skillName);

        float newValue = curStat.GetCurValue();

        switch (skillName)
        {
        case SkillStatName.MaxHealth:
            myHealthScript.maxHealth = (int)newValue;
            myHealthScript.UpdateHealthVisuals();     //ha megv�ltozik a maxHealth, a visual representation is m�s lesz
            break;

        case SkillStatName.MoveSpeed:
            myControllerScript.moveSpeed = newValue;
            break;

        case SkillStatName.BaseDamageMultiplier:
            myWeaponManager.damageMultiplier = newValue;
            myWeaponManager.UpdateCurWeaponStats();
            break;

        case SkillStatName.ShootingCooldownMultiplier:
            myWeaponManager.cooldownMultiplier = newValue;
            myWeaponManager.UpdateCurWeaponStats();
            break;

        case SkillStatName.BulletSpeedMultiplier:
            myWeaponManager.bulletSpeedMultiplier = newValue;
            myWeaponManager.UpdateCurWeaponStats();
            break;

        default:
            Debug.LogError("You probably havent set up your new SkillStat here properly");
            break;
        }
    }
예제 #19
0
 public static float CalculateHouseExpBonus(SkillStat skill)
 {
     // up to 50% exp bonus
     return((skill.Level / (float)OldMaxLevel) * MaxExpBonusPerSlot);
 }
예제 #20
0
    private void UpdateSkillProgressBar(SkillStat skill)
    {
        var nextLevelExp = GameMath.ExperienceForLevel(skill.Level + 1);

        pbSkill.Progress = skill.Experience > 0 && nextLevelExp > 0 ? ((float)(skill.Experience / nextLevelExp)) : 0;

        var expPerHour = skill.GetExperiencePerHour();
        var expLeft    = nextLevelExp - skill.Experience;

        if (lblExpPerHour)
        {
            SetText(lblExpPerHour, "");
            switch (ExpProgressHelpState)
            {
            case ExpProgressHelpStates.ExpLeft:
                SetText(lblExpPerHour, FormatValue((long)expLeft) + " xp");
                break;

            case ExpProgressHelpStates.TimeLeft:
            {
                if (expPerHour <= 0 || expLeft <= 0)
                {
                    break;
                }

                var hours = (double)(expLeft / expPerHour);
                if (hours < 1)
                {
                    var minutes = hours * 60d;
                    if (minutes > 1)
                    {
                        SetText(lblExpPerHour, (int)minutes + "m");
                    }
                    else
                    {
                        var seconds = minutes * 60d;
                        SetText(lblExpPerHour, (int)seconds + "s");
                    }
                }
                else
                {
                    var minutes = (int)(hours - (long)hours) * 60d;
                    if (minutes > 1)
                    {
                        SetText(lblExpPerHour, (int)hours + "h " + minutes + "m");
                    }
                    else
                    {
                        SetText(lblExpPerHour, (int)hours + "h");
                    }
                }
            }
            break;

            case ExpProgressHelpStates.ExpPerHour:
                if (expPerHour <= 0)
                {
                    break;
                }
                SetText(lblExpPerHour, Utility.FormatValue(expPerHour) + " xp / h");
                break;
            }
        }
    }
예제 #21
0
파일: ItemService.cs 프로젝트: tbs005/Temu
        public void ItemUse(Player player, int itemId, WorldPosition position)
        {
            StorageItem i = Global.StorageService.GetItemById(player.Inventory, itemId);

            if (i == null)
            {
                return;
            }

            if (!CanUseItem(player, i, null, true))
            {
                return;
            }

            if (i.ItemTemplate.Id == 98) //Campfire
            {
                if (MapService.TryPutCampfire(player, position))
                {
                    Global.StorageService.RemoveItemById(player, player.Inventory, itemId, 1);
                }

                return;
            }

            ItemTemplate template = i.ItemTemplate;

            SkillStat skillStat = template.CatigorieStat as SkillStat;

            if (skillStat == null && template.CombatItemType != CombatItemType.RECIPE)
            {
                return;
            }

            switch (template.CombatItemType)
            {
            case CombatItemType.SKILLBOOK:
                Global.SkillsLearnService.UseSkillBook(player, template.Id);
                break;

            case CombatItemType.IMMEDIATE:
            case CombatItemType.DISPOSAL:
            {
                Global.SkillEngine.UseSkill(
                    player.Connection,
                    new UseSkillArgs
                    {
                        IsItemSkill   = true,
                        SkillId       = skillStat.SkillId,
                        StartPosition = position,
                    });

                new SpItemCooldown(itemId, template.Cooltime).Send(player);
            }
            break;

            case CombatItemType.NO_COMBAT:
                //new SpSystemNotice("Process use NO_COMBAT item").Send(player.Connection);
                break;

            case CombatItemType.RECIPE:
                Global.CraftService.AddRecipe(player, itemId);
                SystemMessages.YouLearnedToMakeRecipe("@item:" + itemId);
                //new SpSystemNotice("You learned new recipe").Send(player.Connection);
                break;
            }

            int groupId = ItemTemplate.Factory(itemId).CoolTimeGroup;

            if (groupId != 0)
            {
                if (player.ItemCoodowns.ContainsKey(groupId))
                {
                    player.ItemCoodowns[groupId] = RandomUtilities.GetCurrentMilliseconds();
                }
                else
                {
                    player.ItemCoodowns.Add(groupId, RandomUtilities.GetCurrentMilliseconds());
                }
            }

            Global.StorageService.RemoveItemById(player, player.Inventory, itemId, 1);
        }
예제 #22
0
 public static float CalculateHouseExpBonus(SkillStat skill)
 {
     // up to 50% exp bonus
     return((skill.CurrentValue / (float)MaxLevel) * 50f);
 }
예제 #23
0
    public override void Handle(HighestSkillRequest data, GameClient client)
    {
        var players       = PlayerManager.GetAllPlayers();
        var isCombatSkill = false;
        var anySkill      = true;
        var skillName     = data.Skill;

        if (skillName.Equals("all", StringComparison.OrdinalIgnoreCase) || skillName.Equals("overall", StringComparison.OrdinalIgnoreCase))
        {
            var highestAll = players.OrderByDescending(x => x.Stats.LevelList.Sum()).FirstOrDefault();
            if (highestAll != null)
            {
                client.SendFormat(data.Player.Username, Localization.MSG_HIGHEST_TOTAL,
                                  highestAll.PlayerName,
                                  highestAll.Stats.LevelList.Sum());
                return;
            }
        }

        if (skillName.Equals("combat", StringComparison.OrdinalIgnoreCase) || skillName.Equals("level", StringComparison.OrdinalIgnoreCase))
        {
            var highestAll = players.OrderByDescending(x => x.Stats.CombatLevel).FirstOrDefault();
            if (highestAll != null)
            {
                client.SendFormat(data.Player.Username, Localization.MSG_HIGHEST_COMBAT,
                                  highestAll.PlayerName,
                                  highestAll.Stats.CombatLevel);
                return;
            }
        }

        if (Enum.TryParse <CombatSkill>(skillName, true, out var combat))
        {
            isCombatSkill = true;
        }

        if (Enum.TryParse <Skill>(skillName, true, out var skill))
        {
            anySkill = false;
        }

        // get the player with highest exp on any skill.
        SkillStat        highest = null;
        PlayerController p       = null;

        foreach (var player in players)
        {
            if (isCombatSkill)
            {
                var combatSkill = player.GetCombatSkill(combat);
                if (highest == null || (highest.Level <= combatSkill.Level && highest.Experience < combatSkill.Experience))
                {
                    p       = player;
                    highest = combatSkill;
                }
            }
            else if (!anySkill)
            {
                var secondary = player.GetSkill(skill);
                if (highest == null || (highest.Level <= secondary.Level && highest.Experience < secondary.Experience))
                {
                    p       = player;
                    highest = secondary;
                }
            }
        }

        if (p == null || highest == null)
        {
            return;
        }

        client.SendFormat(data.Player.Username, Localization.MSG_HIGHEST_SKILL,
                          p.PlayerName,
                          skillName,
                          highest.Level);
    }
예제 #24
0
 public void Observe(SkillStat stat)
 {
     this.observedStat = stat;
 }
예제 #25
0
    public override void Handle(HighestSkillRequest data, GameClient client)
    {
        var players       = PlayerManager.GetAllPlayers();
        var isCombatSkill = false;
        var anySkill      = true;
        var skillName     = data.Skill;


        if (skillName.Equals("all", StringComparison.OrdinalIgnoreCase) || skillName.Equals("overall", StringComparison.OrdinalIgnoreCase))
        {
            var highestAll = players.OrderByDescending(x => x.Stats.LevelList.Sum()).FirstOrDefault();
            if (highestAll != null)
            {
                client.SendCommand(data.Player.Username, "highest_skill",
                                   $"{highestAll.PlayerName} has the highest total level with {highestAll.Stats.LevelList.Sum()}.");
                return;
            }
        }

        if (skillName.Equals("combat", StringComparison.OrdinalIgnoreCase) || skillName.Equals("level", StringComparison.OrdinalIgnoreCase))
        {
            var highestAll = players.OrderByDescending(x => x.Stats.CombatLevel).FirstOrDefault();
            if (highestAll != null)
            {
                client.SendCommand(data.Player.Username, "highest_skill",
                                   $"{highestAll.PlayerName} has the highest combat level with {highestAll.Stats.CombatLevel}.");
                return;
            }
        }

        if (Enum.TryParse <CombatSkill>(skillName, true, out var combat))
        {
            isCombatSkill = true;
        }

        if (Enum.TryParse <Skill>(skillName, true, out var skill))
        {
            anySkill = false;
        }

        // get the player with highest exp on any skill.
        SkillStat        highest = null;
        PlayerController p       = null;

        foreach (var player in players)
        {
            if (isCombatSkill)
            {
                var combatSkill = player.GetCombatSkill(combat);
                if (highest == null || highest.Experience < combatSkill.Experience)
                {
                    p       = player;
                    highest = combatSkill;
                }
            }
            else if (!anySkill)
            {
                var secondary = player.GetSkill((int)skill);
                if (highest == null || highest.Experience < secondary.Experience)
                {
                    p       = player;
                    highest = secondary;
                }
            }
        }

        if (p == null || highest == null)
        {
            client.SendCommand(data.Player.Username,
                               "highest_skill",
                               $"No player could be found that has a skill named {skillName}");
            return;
        }

        client.SendCommand(data.Player.Username,
                           "highest_skill",
                           $"{p.PlayerName} has the highest level {skillName} with level {highest.Level}.");
    }