public override void Init() { base.Init(); if (this.Properties.Values.ContainsKey("RandomIndex")) { this.RandomIndex = StringParsers.ParseSInt32(this.Properties.Values["RandomIndex"], 0, -1, NumberStyles.Any); } }
public static void Postfix(EntityAlive __instance, ref int ___walkType) { // Check if this feature is enabled. if (Configuration.CheckFeatureStatus(AdvFeatureClass, Feature)) { if ((___walkType != 4 && ___walkType != 8) && __instance is EntityZombie) { // Distribution of Walk Types in an array. Adjust the numbers as you want for distribution. The 9 in the default int[9] indicates how many walk types you've specified. int[] numbers = new int[9] { 1, 2, 2, 3, 4, 5, 6, 7, 7 }; System.Random random = new System.Random(); // Randomly generates a number between 0 and the maximum number of elements in the numbers. int randomNumber = random.Next(0, numbers.Length); // return the randomly selected walk type ___walkType = numbers[randomNumber]; AdvLogging.DisplayLog(AdvFeatureClass, " Random Walk Type: " + ___walkType); } EntityClass entityClass = __instance.EntityClass; if (entityClass.Properties.Values.ContainsKey("RandomWalkTypes")) { List <int> Ranges = new List <int>(); foreach (string text in entityClass.Properties.Values["RandomWalkTypes"].Split(new char[] { ',' })) { Ranges.Add(StringParsers.ParseSInt32(text)); } System.Random random = new System.Random(); int randomIndex = random.Next(0, Ranges.Count); ___walkType = Ranges[randomIndex]; AdvLogging.DisplayLog(AdvFeatureClass, " Random Walk Type: " + ___walkType); } } }
public static bool Postfix(bool ___result, TileEntity __instance, World world) { BlockValue block = GameManager.Instance.World.GetBlock(__instance.ToWorldPos()); Block block2 = Block.list[block.type]; bool isAlwaysActive = false; if (block2.Properties.Values.ContainsKey("AlwaysActive")) { isAlwaysActive = StringParsers.ParseBool(block2.Properties.Values["AlwaysActive"], 0, -1, true); if (isAlwaysActive) { ___result = true; AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": TileEntity is Active."); bool blCanTrigger = false; int Bounds = 6; if (block2.Properties.Values.ContainsKey("ActivationDistance")) { Bounds = StringParsers.ParseSInt32(block2.Properties.Values["ActivationDistance"].ToString()); } // Scan for the player in the radius as defined by the Activation distance of the block List <Entity> entitiesInBounds = GameManager.Instance.World.GetEntitiesInBounds(null, new Bounds(__instance.ToWorldPos().ToVector3(), (Vector3.one * 20))); if (entitiesInBounds.Count > 0) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": TileEntity has Entities in Bound of " + Bounds); for (int i = 0; i < entitiesInBounds.Count; i++) { EntityPlayer player = entitiesInBounds[i] as EntityPlayer; if (player) { float distance = (player.position - __instance.ToWorldPos().ToVector3()).sqrMagnitude; if (distance > block2.GetActivationDistanceSq()) { continue; } AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Player: " + player.EntityName + " is in bounds"); if (block2.Properties.Values.ContainsKey("ActivationBuffs")) { foreach (String strbuff in block2.Properties.Values["ActivationBuffs"].Split(',')) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Checking ActivationBuffs: " + strbuff); String strBuffName = strbuff; float CheckValue = -1f; // Check if there's a ( ) at the end of the buff; this will be used as a cvar hook. int start = strbuff.IndexOf('('); int end = strbuff.IndexOf(')'); if (start != -1 && end != -1 && end > start + 1) { CheckValue = StringParsers.ParseFloat(strbuff.Substring(start + 1, end - start - 1), 0, -1, NumberStyles.Any); strBuffName = strbuff.Substring(0, start); AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Actviation Buff is a cvar: " + strBuffName + ". Requires value: " + CheckValue); } // If the player has a buff by this name, trigger it. if (player.Buffs.HasBuff(strBuffName)) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Buff has been found: " + strBuffName); blCanTrigger = true; } // If the player has a cvar, then do some extra checks if (player.Buffs.HasCustomVar(strBuffName)) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Cvar has been found: " + strBuffName); // If there's no cvar value specified, just allow it. if (CheckValue == -1) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Cvar found, and does not require a specific value."); blCanTrigger = true; } // If a cvar is set, then check to see if it matches if (CheckValue > -1) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Cvar found, and requires a value of " + CheckValue + " Player has: " + player.Buffs.GetCustomVar(strBuffName)); if (player.Buffs.GetCustomVar(strBuffName) == CheckValue) { blCanTrigger = true; } } // If any of these conditions match, trigger the Activate block if (blCanTrigger) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Checks successfully passed for player: " + player.EntityName); break; } else { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": Checks were NOT success for player: " + player.EntityName); } } } } else { blCanTrigger = true; } if (blCanTrigger) { break; } } } } if (blCanTrigger) { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": TileEntity can call ActivateBlock. Calling it..."); Block.list[block.type].ActivateBlock(world, __instance.GetClrIdx(), __instance.ToWorldPos(), block, true, true); } else { AdvLogging.DisplayLog(AdvFeatureClass, block2.GetBlockName() + ": TileEntity is Active but is not Activating."); Block.list[block.type].ActivateBlock(world, __instance.GetClrIdx(), __instance.ToWorldPos(), block, false, true); } return(true); } } return(false); }
// Create a stack of item, using name and count ( as string for reading from dynamicproperties ) public static ItemStack CreateItemStack(string strItemName, string Count) { int amount = StringParsers.ParseSInt32(Count); return(CreateItemStack(strItemName, amount)); }