Exemple #1
0
        public float ScriptFormula(int index)
        {
            float result;

            if (!ScriptFormulaEvaluator.Evaluate(this.PowerSNO, PowerTagHelper.GenerateTagForScriptFormula(index),
                                                 User.Attributes, Rand, out result))
            {
                return(0);
            }

            return(result);
        }
        private static ScriptFormula FindScriptFormula(int powerSNO, TagKeyScript scriptTag)
        {
            TagMap tagmap = PowerTagHelper.FindTagMapWithKey(powerSNO, scriptTag);

            if (tagmap != null)
            {
                return(tagmap[scriptTag]);
            }
            else
            {
                return(null);
            }
        }
Exemple #3
0
        private TagMap _FindTagMapWithKey(TagKey key)
        {
            TagMap tagmap = PowerTagHelper.FindTagMapWithKey(PowerSNO, key);

            if (tagmap != null)
            {
                return(tagmap);
            }
            else
            {
                //Logger.Error("could not find tag key {0} in power {1}", key.ID, PowerSNO);
                return(null);
            }
        }
        private static bool LoadIdentifier(int powerSNO, TagKeyScript scriptTag, GameAttributeMap attributes, Random rand,
                                           int numb1, int numb2, int numb3, int numb4,
                                           out float result)
        {
            switch (numb1)
            {
            case 0:
                return(LoadAttribute(powerSNO, attributes, numb2, out result));

            case 1:     // slevel
                result = attributes[GameAttribute.Skill, powerSNO];
                return(true);

            case 22:     // absolute power formula ref
                return(Evaluate(numb2, new TagKeyScript(numb3), attributes, rand, out result));

            default:
                if (numb1 >= 23 && numb1 <= 62)     // SF_N, relative power formula ref
                {
                    int          SF_N        = numb1 - 23;
                    TagKeyScript relativeTag = PowerTagHelper.GenerateTagForScriptFormula(SF_N);
                    return(Evaluate(powerSNO, relativeTag, attributes, rand, out result));
                }
                else if (numb1 >= 63 && numb1 <= 72)     // known gamebalance power table id range
                {
                    result = BinaryIntToFloat(numb1);    // simply store id, used later by Table()
                    return(true);
                }
                else
                {
                    Logger.Error("unknown identifier");
                    result = 0;
                    return(false);
                }
            }
        }
Exemple #5
0
        public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null,
                             TargetMessage targetMessage             = null)
        {
            Actor target;

            if (targetId == uint.MaxValue)
            {
                target = null;
            }
            else
            {
                target = user.World.GetActorByDynamicId(targetId);
                if (target == null)
                {
                    return(false);
                }

                targetPosition = target.Position;
            }

            #region Items and Monster spawn HACK
            // HACK: intercept hotbar skill 1 to always spawn test mobs.
            if (user is Player && powerSNO == (user as Player).SkillSet.HotBarSkills[4].SNOSkill)
            {
                // number of monsters to spawn
                int spawn_count = 3;

                // list of actorSNO values to pick from when spawning
                int[] actorSNO_values = { 5387, 6652, 5346 };
                int   actorSNO        = actorSNO_values[RandomHelper.Next(actorSNO_values.Length)];
                Logger.Debug("3 monsters spawning with actor sno {0}", actorSNO);

                for (int n = 0; n < spawn_count; ++n)
                {
                    Vector3D position;

                    if (targetPosition.X == 0f)
                    {
                        position = new Vector3D(user.Position);
                        if ((n % 2) == 0)
                        {
                            position.X += (float)(RandomHelper.NextDouble() * 20);
                            position.Y += (float)(RandomHelper.NextDouble() * 20);
                        }
                        else
                        {
                            position.X -= (float)(RandomHelper.NextDouble() * 20);
                            position.Y -= (float)(RandomHelper.NextDouble() * 20);
                        }
                    }
                    else
                    {
                        position    = new Vector3D(targetPosition);
                        position.X += (float)(RandomHelper.NextDouble() - 0.5) * 20;
                        position.Y += (float)(RandomHelper.NextDouble() - 0.5) * 20;
                        position.Z  = user.Position.Z;
                    }

                    Monster mon = new Monster(user.World, actorSNO, null);
                    mon.SetBrain(new Mooege.Core.GS.AI.Brains.MonsterBrain(mon));
                    mon.Position = position;
                    mon.Scale    = 1.35f;
                    mon.Attributes[GameAttribute.Hitpoints_Max_Total]          = 5f;
                    mon.Attributes[GameAttribute.Hitpoints_Max]                = 5f;
                    mon.Attributes[GameAttribute.Hitpoints_Total_From_Level]   = 0f;
                    mon.Attributes[GameAttribute.Hitpoints_Cur]                = 5f;
                    mon.Attributes[GameAttribute.Attacks_Per_Second_Total]     = 1.0f;
                    mon.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0]   = 5f;
                    mon.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 7f;
                    mon.Attributes[GameAttribute.Casting_Speed_Total]          = 1.0f;
                    user.World.Enter(mon);
                }

                // spawn some useful items for testing at the ground of the player
                if (!_spawnedHelperItems)
                {
                    _spawnedHelperItems = true;
                    Items.ItemGenerator.Cook((Players.Player)user, "Sword_2H_205").EnterWorld(user.Position);
                    Items.ItemGenerator.Cook((Players.Player)user, "Crossbow_102").EnterWorld(user.Position);
                    for (int n = 0; n < 30; ++n)
                    {
                        Items.ItemGenerator.Cook((Players.Player)user, "Runestone_Unattuned_07").EnterWorld(user.Position);
                    }
                }

                return(true);
            }
            #endregion

            // find and run a power implementation
            var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO);
            if (implementation != null)
            {
                return(RunPower(user, implementation, target, targetPosition, targetMessage));
            }
            else
            {
                // no power script is available, but try to play the cast effects
                var efgTag = Mooege.Core.GS.Common.Types.TagMap.PowerKeys.CastingEffectGroup_Male;
                var tagmap = PowerTagHelper.FindTagMapWithKey(powerSNO, efgTag);
                if (tagmap != null)
                {
                    user.PlayEffectGroup(tagmap[efgTag].Id);
                }

                return(false);
            }
        }