Esempio n. 1
0
        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 : "");
        }
Esempio n. 2
0
 internal static void set_stateType_Hook(ref SerializableEntityStateType self, Type value)
 {
     self.SetStructFieldValue("_typeName",
                              value != null && value.IsSubclassOf(typeof(EntityState))
             ? value.AssemblyQualifiedName
             : "");
 }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
        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;
        }
Esempio n. 7
0
 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);
     }
 }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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);
        }
Esempio n. 10
0
 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));
 }
Esempio n. 12
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));
 }
Esempio n. 13
0
        // 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);
        }