void OnGUI()
    {
        skillManager = EditorGUILayout.ObjectField("Skill Manager", skillManager, typeof(SkillManager), false) as SkillManager;
        if (skillManager != null)
        {
            currentSkillTypeToCreate = (SkillTypeToCreate)EditorGUILayout.EnumPopup(currentSkillTypeToCreate);

            newSkillName = EditorGUILayout.TextField("Skill Name: ", newSkillName);
            newSkillDescription = EditorGUILayout.TextField("Description: ", newSkillDescription);
            newSkillCost = EditorGUILayout.IntField("Cost: ", newSkillCost);
            switch(currentSkillTypeToCreate)
            {
                case SkillTypeToCreate.DefaultSkill:
                    break;

                case SkillTypeToCreate.SwordSkill:
                    break;

            }

            if (GUILayout.Button("Add New Skill"))
            {
                switch(currentSkillTypeToCreate)
                {
                    case SkillTypeToCreate.DefaultSkill:
                        DefaultSkill newDefaultSkill = new DefaultSkill();
                        newDefaultSkill.skillName = newSkillName;
                        newDefaultSkill.description = newSkillDescription;
                        newDefaultSkill.cost = newSkillCost;
                        newDefaultSkill.type = (int)currentSkillTypeToCreate;
                        skillManager.skillList.Add(newDefaultSkill);
                        break;

                    case SkillTypeToCreate.SwordSkill:
                        SwordSkill newSwordSkill = new SwordSkill();
                        newSwordSkill.skillName = newSkillName;
                        newSwordSkill.description = newSkillDescription;
                        newSwordSkill.cost = newSkillCost;
                        newSwordSkill.type = (int)currentSkillTypeToCreate;
                        skillManager.skillList.Add(newSwordSkill);
                        break;

                }
            }
        }
    }
示例#2
0
    public void LoadDatas()
    {
        // if (skillList.Count > 0) {
        // 	foreach (Skill removeSkill in skillList) {
        // 		switch ((int)removeSkill.type)
        // 		{
        // 			case 0:
        // 				DefaultSkill.DestroyImmediate(removeSkill);
        // 				break;
        // 			case 1:
        // 				SwordSkill.DestroyImmediate(removeSkill);
        // 				break;
        // 			default:
        // 			Skill.DestroyImmediate(removeSkill);
        // 				break;
        // 		}
        // 	}
        // }
        skillList.Clear();
        foreach (SaveDataForSkill skill in saveList) {
            Skill tmpSkill = new Skill();
            switch ((int)skill.type)
            {
                case 0:
                    tmpSkill = new DefaultSkill();
                    break;
                case 1:
                    tmpSkill = new SwordSkill();
                    break;
                default:
                break;
            }
            tmpSkill.cost = skill.cost;
            tmpSkill.skillName = skill.skillName;
            tmpSkill.description = skill.description;
            tmpSkill.gi = skill.gi;
            tmpSkill.sal = skill.sal;
            tmpSkill.showing = false;
            tmpSkill.type = skill.type;
            skillList.Add(tmpSkill);
        }

        ReorderSkills();
    }
示例#3
0
        public void Update(TimeSpan update)
        {
            if (Template == null)
            {
                return;
            }

            if (IsConfused || IsFrozen || IsParalyzed || IsSleeping)
            {
                return;
            }

            if (Target != null && !WithinRangeOf(Target))
            {
                Target = null;
            }

            var nearby = GetObjects <Aisling>(Map, i => i.WithinRangeOf(this));

            if (!nearby.Any())
            {
                return;
            }

            if (Template.ChatTimer != null)
            {
                Template.ChatTimer.Update(update);

                if (Template.ChatTimer.Elapsed && nearby.Any())
                {
                    foreach (var obj in nearby)
                    {
                        if (Template.Speech.Count > 0)
                        {
                            var msg = Template.Speech[ChatIdx++ % Template.Speech.Count];

                            obj.Show(Scope.Self,
                                     new ServerFormat0D
                            {
                                Serial = Serial,
                                Text   = msg,
                                Type   = 0
                            });
                        }
                    }

                    Template.ChatTimer.Reset();
                }
            }

            if (Template.EnableTurning)
            {
                if (Template.TurnTimer != null)
                {
                    Template.TurnTimer.Update(update);
                    if (Template.TurnTimer.Elapsed)
                    {
                        lock (Generator.Random)
                        {
                            Direction = (byte)Generator.Random.Next(0, 4);
                        }

                        Turn();

                        Template.TurnTimer.Reset();
                    }
                }
            }

            if (Template.EnableCasting)
            {
                Template.SpellTimer.Update(update);

                if (Template.SpellTimer.Elapsed)
                {
                    if (Target == null || Target.CurrentHp == 0 || !Target.WithinRangeOf(this))
                    {
                        var targets = GetObjects <Monster>(Map, i => i.WithinRangeOf(this))
                                      .OrderBy(i => i.Position.DistanceFrom(Position));

                        foreach (var t in targets)
                        {
                            t.Target = this;
                        }

                        var target = Target ?? targets.FirstOrDefault();

                        if (target?.CurrentHp == 0)
                        {
                            target = null;
                        }

                        if (!CanCast)
                        {
                            return;
                        }

                        Target = target;
                    }

                    if (Target != null && Target != null && SpellScripts.Count > 0)
                    {
                        var idx = 0;
                        lock (Generator.Random)
                        {
                            idx = Generator.Random.Next(SpellScripts.Count);
                        }

                        SpellScripts[idx].OnUse(this, Target);
                    }

                    Template.SpellTimer.Reset();
                }
            }

            if (Template.AttackTimer != null && Template.EnableWalking)
            {
                Template.AttackTimer.Update(update);
                if (Template.AttackTimer.Elapsed)
                {
                    var targets = GetObjects <Monster>(Map, i => i.WithinRangeOf(this))
                                  .OrderBy(i => i.Position.DistanceFrom(Position));

                    foreach (var t in targets)
                    {
                        t.Target = this;
                    }

                    var target = Target ?? targets.FirstOrDefault();

                    if (target?.CurrentHp == 0)
                    {
                        target = null;
                    }

                    if (target != null)
                    {
                        foreach (var script in Scripts.Values)
                        {
                            script?.TargetAcquired(target);
                        }

                        if (!Position.IsNextTo(target.Position))
                        {
                            WalkTo(target.XPos, target.YPos);
                        }
                        else
                        {
                            if (!Facing(target, out var direction))
                            {
                                Direction = (byte)direction;
                                Turn();
                            }
                            else
                            {
                                target.Target = this;
                                DefaultSkill?.OnUse(this);

                                if (SkillScripts.Count > 0 && target.Target != null)
                                {
                                    var obj = SkillScripts.FirstOrDefault(i => i.Skill.Ready);

                                    if (obj != null)
                                    {
                                        var skill = obj.Skill;

                                        obj?.OnUse(this);
                                        {
                                            skill.InUse = true;

                                            if (skill.Template.Cooldown > 0)
                                            {
                                                skill.NextAvailableUse =
                                                    DateTime.UtcNow.AddSeconds(skill.Template.Cooldown);
                                            }
                                            else
                                            {
                                                skill.NextAvailableUse =
                                                    DateTime.UtcNow.AddMilliseconds(ServerContext.Config
                                                                                    .GlobalBaseSkillDelay);
                                            }
                                        }

                                        skill.InUse = false;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        if (Template.PathQualifer.HasFlag(PathQualifer.Patrol))
                        {
                            if (Template.Waypoints == null)
                            {
                                Wander();
                            }
                            else
                            {
                                if (Template.Waypoints?.Count > 0)
                                {
                                    Patrol();
                                }
                                else
                                {
                                    Wander();
                                }
                            }
                        }
                        else
                        {
                            Wander();
                        }
                    }

                    Template.AttackTimer.Reset();
                }
            }
        }
        private void Bash()
        {
            if (!Monster.CanCast)
            {
                return;
            }

            var obj = Monster.GetInfront(1);

            if (obj == null)
            {
                return;
            }


            if (Monster.Target != null)
            {
                if (!Monster.Facing(Target.X, Target.Y, out int direction))
                {
                    Monster.Direction = (byte)direction;
                    Monster.Turn();
                    return;
                }
            }


            if (Target == null || Target.CurrentHp == 0)
            {
                ClearTarget();
                return;
            }

            if (Monster != null && Monster.Target != null && SkillScripts.Count > 0)
            {
                var sobj = SkillScripts.FirstOrDefault(i => i.Skill.Ready);

                if (sobj != null)
                {
                    var skill = sobj.Skill;

                    sobj?.OnUse(Monster);
                    {
                        skill.InUse = true;

                        if (skill.Template.Cooldown > 0)
                        {
                            skill.NextAvailableUse = DateTime.UtcNow.AddSeconds(skill.Template.Cooldown);
                        }
                        else
                        {
                            skill.NextAvailableUse = DateTime.UtcNow.AddMilliseconds(ServerContext.Config.GlobalBaseSkillDelay);
                        }
                    }

                    skill.InUse = false;
                }
            }

            if (Monster != null && DefaultSkill != null)
            {
                DefaultSkill.OnUse(Monster);
            }
        }