public static void set_stateType_Hook(ref SerializableEntityStateType self, Type value) { var typeName = typeof(SerializableEntityStateType).GetFieldCached("_typeName"); typeName.SetValue(self, value != null && value.IsSubclassOf(typeof(EntityState)) ? value.AssemblyQualifiedName : ""); }
internal static void set_stateType_Hook(ref SerializableEntityStateType self, Type value) { self.SetStructFieldValue("_typeName", value != null && value.IsSubclassOf(typeof(EntityState)) ? value.AssemblyQualifiedName : ""); }
public override void SetupAttributes() { base.SetupAttributes(); rewindStateType = ContentAddition.AddEntityState <RewindState>(out _); R2API.Networking.NetworkingAPI.RegisterMessageType <MsgRewind>(); blacklistedSkills = new[] { LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CallSupplyDropHealing"), LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CallSupplyDropHacking"), LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CallSupplyDropShocking"), LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CallSupplyDropEquipmentRestock"), LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CaptainSkillUsedUp"), LegacyResourcesAPI.Load <RoR2.Skills.SkillDef>("SkillDefs/CaptainBody/CaptainCancelDummy") }; rewindBuff = ScriptableObject.CreateInstance <BuffDef>(); rewindBuff.buffColor = Color.white; rewindBuff.canStack = true; rewindBuff.isDebuff = false; rewindBuff.isCooldown = true; rewindBuff.name = "TKSATRewind"; rewindBuff.iconSprite = TinkersSatchelPlugin.resources.LoadAsset <Sprite>("Assets/TinkersSatchel/Textures/MiscIcons/rewindBuffIcon.png"); ContentAddition.AddBuffDef(rewindBuff); if (Compat_ClassicItems.enabled) { LanguageAPI.Add("TKSAT_REWIND_CI_EMBRYO_APPEND", "\n<style=cStack>Beating Embryo: 50% chance to not consume stock.</style>"); Compat_ClassicItems.RegisterEmbryoHook(equipmentDef, "TKSAT_REWIND_CI_EMBRYO_APPEND", () => "TKSAT.CausalCamera"); } }
private static SkillDef NewSkillDef(SerializableEntityStateType state, string stateMachine, int stock, float cooldown, int stockConsumed) { SkillDef skillDef = ScriptableObject.CreateInstance <SkillDef>(); skillDef.skillName = "SKILL_LUNAR_PRIMARY_REPLACEMENT_NAME"; skillDef.skillNameToken = "SKILL_LUNAR_PRIMARY_REPLACEMENT_NAME"; skillDef.skillDescriptionToken = "SKILL_LUNAR_PRIMARY_REPLACEMENT_DESCRIPTION"; skillDef.icon = null; skillDef.activationState = state; skillDef.activationStateMachineName = stateMachine; skillDef.baseMaxStock = stock; skillDef.baseRechargeInterval = cooldown; skillDef.beginSkillCooldownOnSkillEnd = false; skillDef.canceledFromSprinting = false; skillDef.forceSprintDuringState = false; skillDef.fullRestockOnAssign = true; skillDef.interruptPriority = InterruptPriority.Any; skillDef.resetCooldownTimerOnUse = false; skillDef.isCombatSkill = true; skillDef.mustKeyPress = false; skillDef.cancelSprintingOnActivation = true; skillDef.rechargeStock = 1; skillDef.requiredStock = 1; skillDef.stockToConsume = stockConsumed; Loadouts.AddSkillDef(skillDef); return(skillDef); }
internal static SkillDef CreatePrimarySkillDef(SerializableEntityStateType state, string stateMachine, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, bool agile) { SkillDef skillDef = ScriptableObject.CreateInstance <SkillDef>(); skillDef.skillName = skillNameToken; skillDef.skillNameToken = skillNameToken; skillDef.skillDescriptionToken = skillDescriptionToken; skillDef.icon = skillIcon; skillDef.activationState = state; skillDef.activationStateMachineName = stateMachine; skillDef.baseMaxStock = 1; skillDef.baseRechargeInterval = 0; skillDef.beginSkillCooldownOnSkillEnd = false; skillDef.canceledFromSprinting = false; skillDef.forceSprintDuringState = false; skillDef.fullRestockOnAssign = true; skillDef.interruptPriority = InterruptPriority.Any; skillDef.isBullets = false; skillDef.isCombatSkill = true; skillDef.mustKeyPress = false; skillDef.noSprint = !agile; skillDef.rechargeStock = 1; skillDef.requiredStock = 0; skillDef.shootDelay = 0f; skillDef.stockToConsume = 0; LoadoutAPI.AddSkillDef(skillDef); return(skillDef); }
public static void SetSkill(ref GenericSkill skillslot, Type skill) { var statestype = new SerializableEntityStateType(skill); object box = statestype; if (field == null) { field = typeof(SerializableEntityStateType).GetField("_typeName", BindingFlags.NonPublic | BindingFlags.Instance); } field.SetValue(box, skill.AssemblyQualifiedName); statestype = (SerializableEntityStateType)box; skillslot.activationState = statestype; }
private bool CanLoad() { try { var stateTest = new SerializableEntityStateType(typeof(ChargePlasmoids)); stateTest.stateType.ToString(); return(true); } catch { Logger.LogError("Missing R2API Submodule! R2API may be installed incorrectly."); return(false); } }
public static SerializableEntityStateType StateType <TState>(Boolean register = true) where TState : EntityState { //Log.Counter(); if (register) { AddSkill(typeof(TState)); } //var res = new SerializableEntityStateType(); //res._typeName = var res = new SerializableEntityStateType(typeof(TState)); //Log.Counter(); return(res); }
internal static SkillDef CreatePrimarySkillDef(SerializableEntityStateType state, string stateMachine, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, bool agile) { SkillDef skillDef = ScriptableObject.CreateInstance <SkillDef>(); skillDef.skillName = skillNameToken; skillDef.skillNameToken = skillNameToken; skillDef.skillDescriptionToken = skillDescriptionToken; skillDef.icon = skillIcon; skillDef.activationState = state; skillDef.activationStateMachineName = stateMachine; skillDef.baseMaxStock = 1; skillDef.baseRechargeInterval = 0; skillDef.beginSkillCooldownOnSkillEnd = false; skillDef.canceledFromSprinting = false; skillDef.forceSprintDuringState = false; skillDef.fullRestockOnAssign = true; skillDef.interruptPriority = InterruptPriority.Any; skillDef.resetCooldownTimerOnUse = false; skillDef.isCombatSkill = true; skillDef.mustKeyPress = false; skillDef.cancelSprintingOnActivation = !agile; skillDef.rechargeStock = 1; skillDef.requiredStock = 0; skillDef.stockToConsume = 0; if (agile) { skillDef.keywordTokens = new string[] { "KEYWORD_AGILE" } } ; skillDefs.Add(skillDef); return(skillDef); }
internal static void Set_typeName_Hook(ref SerializableEntityStateType self, string value) => Set_stateType_Hook(ref self, Type.GetType(value) ?? GetTypeAllAssemblies(value));
private static SkillDef NewSkillDef(SerializableEntityStateType state, string stateMachine) { return(NewSkillDef(state, stateMachine, 1, 0, 0)); }
internal static SkillDef CreatePrimarySkillDef(SerializableEntityStateType state, string stateMachine, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, bool agile) { return(CreatePrimarySkillDef(state, stateMachine, skillNameToken, skillDescriptionToken, skillIcon, agile, false)); }
// Entity State Configurations require very specific 'Assembly Qualified Names' in order to work correctly. // This should print you the name that you need to put into the Entity State Configuration. // replace `ThunderHenry.SkillStates.SlashCombo` with a skillstate in your mod. private static void PrintEntityStatesForConfigNames() { var state = new SerializableEntityStateType(typeof(ManipulatorMod.SkillStates.ElementalSpellFire)); Debug.LogWarning(ManipulatorPlugin.MODNAME + ": DEBUG: TypeName print: " + state.typeName); }