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); } }
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); } } }
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); } }