private static void CreateSkillFamilies() { skillLocator.SetFieldValue <GenericSkill[]>("allSkills", new GenericSkill[0]); { skillLocator.primary = megaMushrum.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.primary.SetFieldValue("_skillFamily", newFamily); } { skillLocator.secondary = megaMushrum.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.secondary.SetFieldValue("_skillFamily", newFamily); } { skillLocator.utility = megaMushrum.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.utility.SetFieldValue("_skillFamily", newFamily); } { skillLocator.special = megaMushrum.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.special.SetFieldValue("_skillFamily", newFamily); } }
private static void SpecialSetup() { SkillLocator component = WispSurvivor.characterPrefab.GetComponent <SkillLocator>(); LanguageAPI.Add("EXAMPLESURVIVOR_SPECIAL_BURST_NAME", "Burst"); LanguageAPI.Add("EXAMPLESURVIVOR_SPECIAL_BURST_DESCRIPTION", "Shatter your barrier for <style=cIsDamage>700-800%</style> damage. " + "If tethered, duplicate explosion on target."); // set up your primary skill def here! SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.WispSurvivorStates.WispBurst)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 7f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Skill; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 1f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon4; mySkillDef.skillDescriptionToken = "EXAMPLESURVIVOR_SPECIAL_BURST_DESCRIPTION"; mySkillDef.skillName = "EXAMPLESURVIVOR_SPECIAL_BURST_NAME"; mySkillDef.skillNameToken = "EXAMPLESURVIVOR_SPECIAL_BURST_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.special = WispSurvivor.characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.special.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; // add this code after defining a new skilldef if you're adding an alternate skill /*Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); * skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant * { * skillDef = newSkillDef, * unlockableName = "", * viewableNode = new ViewablesCatalog.Node(newSkillDef.skillNameToken, false, null) * };*/ }
void PrimarySetup() { SkillLocator component = characterPrefab.GetComponent <SkillLocator>(); LanguageAPI.Add("EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME", "Crossbow"); LanguageAPI.Add("EXAMPLESURVIVOR_PRIMARY_CROSSBOW_DESCRIPTION", "Fire an arrow, dealing <style=cIsDamage>200% damage</style>."); // set up your primary skill def here! SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ExampleSurvivorFireArrow)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 0f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon1; mySkillDef.skillDescriptionToken = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_DESCRIPTION"; mySkillDef.skillName = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME"; mySkillDef.skillNameToken = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.primary = characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.primary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.primary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; // add this code after defining a new skilldef if you're adding an alternate skill /*Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1); * skillFamily.variants[skillFamily.variants.Length - 1] = new SkillFamily.Variant * { * skillDef = newSkillDef, * unlockableName = "", * viewableNode = new ViewablesCatalog.Node(newSkillDef.skillNameToken, false, null) * };*/ }
/// <summary> /// Creates an EmptySkillFamily. Be sure to call DestroyGenericSkillComponents before doing this. /// </summary> /// <param name="survivor"></param> public static void CreateEmptySkillFamily(GameObject survivor) { SkillLocator skillLocator = survivor.GetComponent <SkillLocator>(); skillLocator.SetFieldValue <GenericSkill[]>("allSkills", new GenericSkill[0]); { skillLocator.primary = survivor.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.primary.SetFieldValue("_skillFamily", newFamily); } { skillLocator.secondary = survivor.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.secondary.SetFieldValue("_skillFamily", newFamily); } { skillLocator.utility = survivor.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.utility.SetFieldValue("_skillFamily", newFamily); } { skillLocator.special = survivor.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.special.SetFieldValue("_skillFamily", newFamily); } }
internal static void UltSetup() { { SkillLocator component = characterPrefab.GetComponent <SkillLocator>(); LanguageAPI.Add("ROCKETEER_ULT_NAME", "Big Booma Cannon"); LanguageAPI.Add("ROCKETEER_ULT_DESCRIPTION", "Ready to go, Boss. " + "Each rocket does <style=cIsDamage>1500% damage</style> and takes <style=cIsDamage>12 seconds</style> to recharge. " + "When launched each rocket increases the damage of all rockets additively by <style=cIsDamage>175%</style>. Hold up to <style=cIsDamage>5</style>."); // set up your primary skill def here! chargeUltDef = ScriptableObject.CreateInstance <SkillDef>(); chargeUltDef.activationState = new SerializableEntityStateType(typeof(RocketeerChargeUlt)); chargeUltDef.activationStateMachineName = "Weapon"; chargeUltDef.baseMaxStock = 5; chargeUltDef.baseRechargeInterval = 12f; chargeUltDef.beginSkillCooldownOnSkillEnd = true; chargeUltDef.canceledFromSprinting = false; chargeUltDef.fullRestockOnAssign = true; chargeUltDef.interruptPriority = InterruptPriority.Skill; chargeUltDef.isCombatSkill = true; chargeUltDef.mustKeyPress = false; chargeUltDef.rechargeStock = 1; chargeUltDef.requiredStock = 1; chargeUltDef.stockToConsume = 0; chargeUltDef.icon = Resources.Load <Sprite>("Textures/MiscIcons/texMysteryIcon"); chargeUltDef.skillDescriptionToken = "ROCKETEER_ULT_DESCRIPTION"; chargeUltDef.skillName = "ROCKETEER_ULT_NAME"; chargeUltDef.skillNameToken = "ROCKETEER_ULT_NAME"; LoadoutAPI.AddSkillDef(chargeUltDef); component.special = characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.special.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = chargeUltDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(chargeUltDef.skillNameToken, false, null) }; // add this code after defining a new skilldef if you're adding an alternate skill ContentPacks.skillDefs.Add(chargeUltDef); ContentPacks.skillFamilies.Add(newFamily); } }
void SecondarySkills() { { SkillLocator skillLocator = myCharacter.GetComponent <SkillLocator>(); skillLocator.secondary = myCharacter.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.secondary.SetFieldValue("_skillFamily", newFamily); } { GameObject gameObject = myCharacter; SkillLocator component = gameObject.GetComponent <SkillLocator>(); SkillFamily skillFamily = component.secondary.skillFamily; SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.Drone.DroneWeapon.FireTwinRocket)); mySkillDef.activationStateMachineName = "WeaponRocket"; mySkillDef.baseMaxStock = 2; mySkillDef.baseRechargeInterval = 4f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = false; mySkillDef.interruptPriority = InterruptPriority.PrioritySkill; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0.25f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <GameObject>("Prefabs/CharacterBodies/engibody").GetComponent <SkillLocator>().primary.skillFamily.variants[0].skillDef.icon; mySkillDef.skillDescriptionToken = "Fire two large rockets"; mySkillDef.skillName = "PP_PLAYABLETC_SPECIAL"; mySkillDef.skillNameToken = "Explosive Ordenance"; LoadoutAPI.AddSkillDef(mySkillDef); skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } }
private static void PrimarySetup(GameObject bodyPrefab) { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(PaladinMod.States.Slash)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 0f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0.5f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon1; mySkillDef.skillDescriptionToken = "PALADIN_PRIMARY_SLASH_DESCRIPTION"; mySkillDef.skillName = "PALADIN_PRIMARY_SLASH_NAME"; mySkillDef.skillNameToken = "PALADIN_PRIMARY_SLASH_NAME"; mySkillDef.keywordTokens = new string[] { "KEYWORD_SWORDBEAM" }; if (bodyPrefab.name == "LunarKnightBody") { mySkillDef.activationState = new SerializableEntityStateType(typeof(PaladinMod.States.LunarKnight.MaceSlam)); mySkillDef.activationStateMachineName = "Body"; } LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.primary = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.primary._skillFamily = newFamily; SkillFamily skillFamily = skillLocator.primary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
void PrimarySkills() { { SkillLocator skillLocator = myCharacter.GetComponent <SkillLocator>(); skillLocator.primary = myCharacter.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.primary.SetFieldValue("_skillFamily", newFamily); } { GameObject gameObject = myCharacter; SkillLocator component = gameObject.GetComponent <SkillLocator>(); SkillFamily skillFamily = component.primary.skillFamily; SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.Drone.DroneWeapon.FireMegaTurret)); mySkillDef.activationStateMachineName = "WeaponGun"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 2f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 1f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <GameObject>("Prefabs/CharacterBodies/commandobody").GetComponent <SkillLocator>().special.skillFamily.variants[0].skillDef.icon; mySkillDef.skillDescriptionToken = "Spray bullets in the direction of enemies"; mySkillDef.skillName = "PP_PLAYABLETC_PRIMARY"; mySkillDef.skillNameToken = "Supressive Fire"; LoadoutAPI.AddSkillDef(mySkillDef); skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } }
private void secondarySetup() { SkillLocator component = characterPrefab.GetComponent <SkillLocator>(); LanguageAPI.Add("EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME", "Crossbow"); LanguageAPI.Add("EXAMPLESURVIVOR_PRIMARY_CROSSBOW_DESCRIPTION", "Fire an arrow, dealing <style=cIsDamage>200% damage</style>."); var skillGutsSwordAttack = ScriptableObject.CreateInstance <SkillDef>(); skillGutsSwordAttack.activationState = new SerializableEntityStateType(typeof(GutsSwordAttack)); skillGutsSwordAttack.activationStateMachineName = "Weapon"; skillGutsSwordAttack.baseMaxStock = 1; skillGutsSwordAttack.baseRechargeInterval = 0f; skillGutsSwordAttack.beginSkillCooldownOnSkillEnd = false; skillGutsSwordAttack.canceledFromSprinting = false; skillGutsSwordAttack.fullRestockOnAssign = true; skillGutsSwordAttack.interruptPriority = InterruptPriority.Any; skillGutsSwordAttack.isBullets = false; skillGutsSwordAttack.isCombatSkill = true; skillGutsSwordAttack.mustKeyPress = false; skillGutsSwordAttack.noSprint = true; skillGutsSwordAttack.rechargeStock = 1; skillGutsSwordAttack.requiredStock = 1; skillGutsSwordAttack.shootDelay = 0f; skillGutsSwordAttack.stockToConsume = 1; skillGutsSwordAttack.icon = Assets.icon1; //skillGutsSwordAttack.skillDescriptionToken = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_DESCRIPTION"; //skillGutsSwordAttack.skillName = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME"; //skillGutsSwordAttack.skillNameToken = "EXAMPLESURVIVOR_PRIMARY_CROSSBOW_NAME"; LoadoutAPI.AddSkillDef(skillGutsSwordAttack); component.secondary = characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.secondary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.secondary.skillFamily; component.secondary.SetFieldValue("_skillFamily", newFamily); skillFamily = component.secondary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = skillGutsSwordAttack, unlockableName = "", viewableNode = new ViewablesCatalog.Node(skillGutsSwordAttack.skillNameToken, false, null) }; }
private void UtilitySetup() { SkillLocator component = myCharacter.GetComponent <SkillLocator>(); string desc = "<style=cIsUtility>Leap</style> a short distance."; LanguageAPI.Add("GROVETENDER_UTILITY_DODGE_NAME", "Sidestep"); LanguageAPI.Add("GROVETENDER_UTILITY_DODGE_DESCRIPTION", desc); SkillDef tempDef = Resources.Load <GameObject>("Prefabs/CharacterBodies/CrocoBody").GetComponentInChildren <SkillLocator>().utility.skillFamily.variants[1].skillDef; SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.Croco.ChainableLeap)); mySkillDef.activationStateMachineName = "Body"; mySkillDef.baseRechargeInterval = 8; mySkillDef.baseMaxStock = 1; mySkillDef.beginSkillCooldownOnSkillEnd = tempDef.beginSkillCooldownOnSkillEnd; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = tempDef.fullRestockOnAssign; mySkillDef.interruptPriority = tempDef.interruptPriority; mySkillDef.isBullets = tempDef.isBullets; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = tempDef.mustKeyPress; mySkillDef.noSprint = false; mySkillDef.rechargeStock = tempDef.rechargeStock; mySkillDef.requiredStock = tempDef.requiredStock; mySkillDef.shootDelay = tempDef.shootDelay; mySkillDef.stockToConsume = tempDef.stockToConsume; mySkillDef.icon = tempDef.icon; mySkillDef.skillDescriptionToken = "GROVETENDER_UTILITY_DODGE_DESCRIPTION"; mySkillDef.skillName = "GROVETENDER_UTILITY_DODGE_NAME"; mySkillDef.skillNameToken = "GROVETENDER_UTILITY_DODGE_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.utility = myCharacter.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.utility.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.utility.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = tempDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private void SpecialSetup() { SkillLocator component = myCharacter.GetComponent <SkillLocator>(); string desc = "Fire a burst of <style=cIsUtility>chains</style> that deal <style=cIsDamage>8x" + FireShotgun.projectileDamageCoefficient * 100f + "% damage</style> and <style=cIsUtility>pull</style> enemies hit."; LanguageAPI.Add("GROVETENDER_SPECIAL_CHAINS_NAME", "Scorched Shotgun"); LanguageAPI.Add("GROVETENDER_SPECIAL_CHAINS_DESCRIPTION", desc); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(PrepShotgun)); mySkillDef.activationStateMachineName = "Body"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 8; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.PrioritySkill; mySkillDef.isBullets = true; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon4; mySkillDef.skillDescriptionToken = "GROVETENDER_SPECIAL_CHAINS_DESCRIPTION"; mySkillDef.skillName = "GROVETENDER_SPECIAL_CHAINS_NAME"; mySkillDef.skillNameToken = "GROVETENDER_SPECIAL_CHAINS_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.special = myCharacter.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.special.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private void SecondarySetup() { SkillLocator component = myCharacter.GetComponent <SkillLocator>(); string desc = "Fire a <style=cIsUtility>piercing Wisp</style> that deals <style=cIsDamage>" + HealingWisp.damageCoefficient * 100f + "% damage</style>."; LanguageAPI.Add("GROVETENDER_SECONDARY_HEAL_NAME", "Piercing Wisp"); LanguageAPI.Add("GROVETENDER_SECONDARY_HEAL_DESCRIPTION", desc); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(HealingWisp)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 5f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Skill; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon2; mySkillDef.skillDescriptionToken = "GROVETENDER_SECONDARY_HEAL_DESCRIPTION"; mySkillDef.skillName = "GROVETENDER_SECONDARY_HEAL_NAME"; mySkillDef.skillNameToken = "GROVETENDER_SECONDARY_HEAL_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.secondary = myCharacter.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.secondary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.secondary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
static void UtilitySetup() { //KevinsAdditionsPlugin._logger.LogError("The Imp Overlord has " + component.skillSlotCount + " at his disposal."); LanguageAPI.Add("PLAYERIMPOVERLORD_UTILITY_BLINK_NAME", "Blink"); LanguageAPI.Add("PLAYERIMPOVERLORD_UTILITY_BLINK_DESCRIPTION", "Blink to the nearest enemy, landing on top of them and dealing damage."); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(BlinkState)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 9f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = false; mySkillDef.interruptPriority = InterruptPriority.Death; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon3; mySkillDef.skillDescriptionToken = "PLAYERIMPOVERLORD_UTILITY_BLINK_DESCRIPTION"; mySkillDef.skillName = "PLAYERIMPOVERLORD_UTILITY_BLINK_NAME"; mySkillDef.skillNameToken = "PLAYERIMPOVERLORD_UTILITY_BLINK_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.utility = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.utility.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.utility.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; component.utility.baseSkill = mySkillDef; component.utility.skillDef = mySkillDef; component.utility.defaultSkillDef = mySkillDef; }
static void PrimarySetup() { LanguageAPI.Add("PLAYERIMPOVERLORD_PRIMARY_VOIDSPIKES_NAME", "Void Spikes"); LanguageAPI.Add("PLAYERIMPOVERLORD_PRIMARY_VOIDSPIKES_DESCRIPTION", "Fire 6 \"Void Spikes\", dealing <style=cIsDamage>400% damage</style> and <style=cDeath>bleed</style> on hit."); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(FireVoidspikes)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 3; mySkillDef.baseRechargeInterval = 4f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = false; mySkillDef.interruptPriority = InterruptPriority.Death; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon1; mySkillDef.skillDescriptionToken = "PLAYERIMPOVERLORD_PRIMARY_VOIDSPIKES_DESCRIPTION"; mySkillDef.skillName = "PLAYERIMPOVERLORD_PRIMARY_VOIDSPIKES_NAME"; mySkillDef.skillNameToken = "PLAYERIMPOVERLORD_PRIMARY_VOIDSPIKES_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.primary = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.primary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.primary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; component.primary.baseSkill = mySkillDef; component.primary.skillDef = mySkillDef; component.primary.defaultSkillDef = mySkillDef; }
static void SpecialSetup() { LanguageAPI.Add("PLAYERIMPOVERLORD_SPECIAL_REVERTFORM_NAME", "Revert Form"); LanguageAPI.Add("PLAYERIMPOVERLORD_SPECIAL_REVERTFORM_DESCRIPTION", "Revert to your original form."); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(RevertFormState)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 0.5f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Death; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon4; mySkillDef.skillDescriptionToken = "PLAYERIMPOVERLORD_SPECIAL_REVERTFORM_DESCRIPTION"; mySkillDef.skillName = "PLAYERIMPOVERLORD_SPECIAL_REVERTFORM_NAME"; mySkillDef.skillNameToken = "PLAYERIMPOVERLORD_SPECIAL_REVERTFORM_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.special = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.special.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; component.special.baseSkill = mySkillDef; component.special.skillDef = mySkillDef; component.special.defaultSkillDef = mySkillDef; }
static void SecondarySetup() { LanguageAPI.Add("PLAYERIMPOVERLORD_SECONDARY_GROUNDPOUND_NAME", "Ground Pound"); LanguageAPI.Add("PLAYERIMPOVERLORD_SECONDARY_GROUNDPOUND_DESCRIPTION", "Furiously pound the ground below you six times, dealing <style=cIsDamage>400% damage</style> each hit."); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(GroundPound)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 1f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = false; mySkillDef.interruptPriority = InterruptPriority.Death; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Assets.icon2; mySkillDef.skillDescriptionToken = "PLAYERIMPOVERLORD_SECONDARY_GROUNDPOUND_DESCRIPTION"; mySkillDef.skillName = "PLAYERIMPOVERLORD_SECONDARY_GROUNDPOUND_NAME"; mySkillDef.skillNameToken = "PLAYERIMPOVERLORD_SECONDARY_GROUNDPOUND_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); component.secondary = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); component.secondary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = component.secondary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; component.secondary.baseSkill = mySkillDef; component.secondary.skillDef = mySkillDef; component.utility.defaultSkillDef = mySkillDef; }
private void SpecialSetup(SkillLocator skillLocator) { LanguageAPI.Add("EXECUTIONER_SPECIAL_SKILLNAME_NAME", "Execution"); LanguageAPI.Add("EXECUTIONER_SPECIAL_SKILLNAME_DESCRIPTION", "Slam your axe, dealing varying damage depending on how many targets you hit, single targets take more damage. Killing an enemy with Execution fears nearby enemies."); var mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ExampleState)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 5f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 0; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <Sprite>(""); mySkillDef.skillDescriptionToken = "EXECUTIONER_SPECIAL_SKILLNAME_DESCRIPTION"; mySkillDef.skillName = "EXECUTIONER_SPECIAL_SKILLNAME_NAME"; mySkillDef.skillNameToken = "EXECUTIONER_SPECIAL_SKILLNAME_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.special = characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.special.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamilyVariants = skillLocator.special.skillFamily; skillFamilyVariants.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private void UtilitySetup(SkillLocator skillLocator) { LanguageAPI.Add("EXECUTIONER_UTILITY_SKILLNAME_NAME", "Crowd Dispersion"); LanguageAPI.Add("EXECUTIONER_UTILITY_SKILLNAME_DESCRIPTION", "Boost forward and fear all enemies."); var mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ExampleState)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 5f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 0; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <Sprite>(""); mySkillDef.skillDescriptionToken = "EXECUTIONER_UTILITY_SKILLNAME_DESCRIPTION"; mySkillDef.skillName = "EXECUTIONER_UTILITY_SKILLNAME_NAME"; mySkillDef.skillNameToken = "EXECUTIONER_UTILITY_SKILLNAME_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.utility = characterPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.utility.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamilyVariants = skillLocator.utility.skillFamily; skillFamilyVariants.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private static void SpecialSetup(GameObject bodyPrefab) { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ROR2_SaxtonHale.States.Rage)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 300f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.PrioritySkill; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0.5f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <Sprite>("textures/itemicons/texMaskIcon"); mySkillDef.skillDescriptionToken = "SAXTONHALE_SPECIAL_CLASSIC_DESCRIPTION"; mySkillDef.skillName = "SAXTONHALE_SPECIAL_CLASSIC_NAME"; mySkillDef.skillNameToken = "SAXTONHALE_SPECIAL_CLASSIC_NAME"; mySkillDef.keywordTokens = new string[] { "KEYWORD_SCARED" }; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.special = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.special._skillFamily = newFamily; SkillFamily skillFamily = skillLocator.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private void ModifySkill() { LoadoutAPI.AddSkill(typeof(MirrorLaser)); LoadoutAPI.AddSkill(typeof(SearchLaser)); SkillDef newSkillDefRed = Object.Instantiate(drone1Skill); newSkillDefRed.activationState = new SerializableEntityStateType(typeof(MirrorLaser)); newSkillDefRed.baseRechargeInterval = 5f; newSkillDefRed.beginSkillCooldownOnSkillEnd = true; newSkillDefRed.baseMaxStock = 1; newSkillDefRed.fullRestockOnAssign = false; LoadoutAPI.AddSkillDef(newSkillDefRed); SkillLocator locator = droneBodyRed.GetComponent <SkillLocator>(); SkillFamily newSkillFamily = Object.Instantiate(locator.primary.skillFamily); newSkillFamily.variants = new SkillFamily.Variant[1]; newSkillFamily.variants[0] = new SkillFamily.Variant { skillDef = newSkillDefRed, unlockableDef = null, viewableNode = new ViewablesCatalog.Node("", false, null) }; locator.primary.SetFieldValue("_skillFamily", newSkillFamily); LoadoutAPI.AddSkillFamily(newSkillFamily); SkillDef newSkillDefGreen = Object.Instantiate(drone1Skill); newSkillDefGreen.activationState = new SerializableEntityStateType(typeof(SearchLaser)); newSkillDefGreen.baseRechargeInterval = newSkillDefRed.baseRechargeInterval; newSkillDefGreen.beginSkillCooldownOnSkillEnd = newSkillDefRed.beginSkillCooldownOnSkillEnd; newSkillDefGreen.baseMaxStock = newSkillDefRed.baseMaxStock; newSkillDefGreen.fullRestockOnAssign = newSkillDefRed.fullRestockOnAssign; LoadoutAPI.AddSkillDef(newSkillDefGreen); locator = droneBodyGreen.GetComponent <SkillLocator>(); newSkillFamily = Object.Instantiate(locator.primary.skillFamily); newSkillFamily.variants = new SkillFamily.Variant[1]; newSkillFamily.variants[0] = new SkillFamily.Variant { skillDef = newSkillDefGreen, unlockableDef = null, viewableNode = new ViewablesCatalog.Node("", false, null) }; locator.primary.SetFieldValue("_skillFamily", newSkillFamily); LoadoutAPI.AddSkillFamily(newSkillFamily); }
private static void SecondarySetup(GameObject bodyPrefab) { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ROR2_SaxtonHale.States.ChargeSuperJump)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 10f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Death; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = true; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0.5f; mySkillDef.stockToConsume = 1; mySkillDef.icon = Resources.Load <Sprite>("textures/bufficons/texWarcryBuffIcon"); mySkillDef.skillDescriptionToken = "SAXTONHALE_SECONDARY_SUPERJUMP_DESCRIPTION"; mySkillDef.skillName = "SAXTONHALE_SECONDARY_SUPERJUMP_NAME"; mySkillDef.skillNameToken = "SAXTONHALE_SECONDARY_SUPERJUMP_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.secondary = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.secondary._skillFamily = newFamily; SkillFamily skillFamily = skillLocator.secondary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private static void SpecialSetup(GameObject bodyPrefab) { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(ROR2_Scout.States.ActivateRage)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 60f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.isBullets = false; mySkillDef.isCombatSkill = false; mySkillDef.mustKeyPress = false; mySkillDef.noSprint = true; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.shootDelay = 0.5f; mySkillDef.stockToConsume = 1; //mySkillDef.icon = Modules.Assets.icon1; mySkillDef.skillDescriptionToken = "SCOUT_SPECIAL_FF2_DESCRIPTION"; mySkillDef.skillName = "SCOUT_SPECIAL_FF2_NAME"; mySkillDef.skillNameToken = "SCOUT_SPECIAL_FF2_NAME"; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.special = bodyPrefab.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.special._skillFamily = newFamily; SkillFamily skillFamily = skillLocator.special.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
private void RegisterSkillType(List <ICustomSkill> skills) { if (skills.Count > 0) { SkillFamily family = GetSkillFamily(skills); foreach (var skill in skills) { LoadoutAPI.AddSkill(skill.GetType()); } foreach (var variant in family.variants) { LoadoutAPI.AddSkillDef(variant.skillDef); } LoadoutAPI.AddSkillFamily(family); switch (skills.First().SkillType) { case SkillType.Primary: locator.primary.SetFieldValue <SkillFamily>("_skillFamily", family); break; case SkillType.Secondary: locator.secondary.SetFieldValue <SkillFamily>("_skillFamily", family); break; case SkillType.Special: locator.special.SetFieldValue <SkillFamily>("_skillFamily", family); break; case SkillType.Utility: locator.utility.SetFieldValue <SkillFamily>("_skillFamily", family); break; case SkillType.Passive: locator.passiveSkill.SetFieldValue <SkillFamily>("_skillFamily", family); break; } } }
internal static void CreateSkillFamilies(GameObject targetPrefab) { foreach (GenericSkill obj in targetPrefab.GetComponentsInChildren <GenericSkill>()) { HenryPlugin.DestroyImmediate(obj); } SkillLocator skillLocator = targetPrefab.GetComponent <SkillLocator>(); skillLocator.primary = targetPrefab.AddComponent <GenericSkill>(); SkillFamily primaryFamily = ScriptableObject.CreateInstance <SkillFamily>(); primaryFamily.variants = new SkillFamily.Variant[0]; skillLocator.primary._skillFamily = primaryFamily; LoadoutAPI.AddSkillFamily(primaryFamily); skillLocator.secondary = targetPrefab.AddComponent <GenericSkill>(); SkillFamily secondaryFamily = ScriptableObject.CreateInstance <SkillFamily>(); secondaryFamily.variants = new SkillFamily.Variant[0]; skillLocator.secondary._skillFamily = secondaryFamily; LoadoutAPI.AddSkillFamily(secondaryFamily); skillLocator.utility = targetPrefab.AddComponent <GenericSkill>(); SkillFamily utilityFamily = ScriptableObject.CreateInstance <SkillFamily>(); utilityFamily.variants = new SkillFamily.Variant[0]; skillLocator.utility._skillFamily = utilityFamily; LoadoutAPI.AddSkillFamily(utilityFamily); skillLocator.special = targetPrefab.AddComponent <GenericSkill>(); SkillFamily specialFamily = ScriptableObject.CreateInstance <SkillFamily>(); specialFamily.variants = new SkillFamily.Variant[0]; skillLocator.special._skillFamily = specialFamily; LoadoutAPI.AddSkillFamily(specialFamily); }
private void CreateNewFamilies() { var primaryFamily = ScriptableObject.CreateInstance <SkillFamily>(); var secondaryFamily = ScriptableObject.CreateInstance <SkillFamily>(); var utilityFamily = ScriptableObject.CreateInstance <SkillFamily>(); var specialFamily = ScriptableObject.CreateInstance <SkillFamily>(); LoadoutAPI.AddSkillFamily(primaryFamily); LoadoutAPI.AddSkillFamily(secondaryFamily); LoadoutAPI.AddSkillFamily(utilityFamily); LoadoutAPI.AddSkillFamily(specialFamily); var skillLoc = this.sniperBody.GetComponent <SkillLocator>(); skillLoc.primary.SetFieldValue <SkillFamily>("_skillFamily", primaryFamily); skillLoc.secondary.SetFieldValue <SkillFamily>("_skillFamily", secondaryFamily); skillLoc.utility.SetFieldValue <SkillFamily>("_skillFamily", utilityFamily); skillLoc.special.SetFieldValue <SkillFamily>("_skillFamily", specialFamily); primaryFamily.variants = Array.Empty <SkillFamily.Variant>(); secondaryFamily.variants = Array.Empty <SkillFamily.Variant>(); utilityFamily.variants = Array.Empty <SkillFamily.Variant>(); specialFamily.variants = Array.Empty <SkillFamily.Variant>(); }
private void SelectablePassive() { GenericSkill primary = this.artiSkillLocator.primary; GenericSkill secondary = this.artiSkillLocator.secondary; GenericSkill utility = this.artiSkillLocator.utility; GenericSkill special = this.artiSkillLocator.special; SkillFamily passiveFamily = ScriptableObject.CreateInstance <SkillFamily>(); SkillFamily primaryFamily = primary.skillFamily; SkillFamily secondaryFamily = secondary.skillFamily; SkillFamily utilityFamily = utility.skillFamily; SkillFamily specialFamily = special.skillFamily; GenericSkill passive = primary; primary = secondary; secondary = utility; utility = special; special = this.artiBody.AddComponent <GenericSkill>(); this.artiSkillLocator.primary = primary; this.artiSkillLocator.secondary = secondary; this.artiSkillLocator.utility = utility; this.artiSkillLocator.special = special; PassiveSkillDef envSuit = ScriptableObject.CreateInstance <PassiveSkillDef>(); PassiveSkillDef elementalIntensity = ScriptableObject.CreateInstance <PassiveSkillDef>(); envSuit.skillNameToken = this.artiSkillLocator.passiveSkill.skillNameToken; envSuit.skillDescriptionToken = this.artiSkillLocator.passiveSkill.skillDescriptionToken; envSuit.icon = this.artiSkillLocator.passiveSkill.icon; envSuit.stateMachineDefaults = new PassiveSkillDef.StateMachineDefaults[1] { new PassiveSkillDef.StateMachineDefaults { machineName = "Body", initalState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Mage.MageCharacterMain)), mainState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Mage.MageCharacterMain)), defaultInitalState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.GenericCharacterMain)), defaultMainState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.GenericCharacterMain)) } }; elementalIntensity.skillNameToken = "REIN_ALTARTI_PASSIVE_NAME"; elementalIntensity.skillDescriptionToken = "REIN_ALTARTI_PASSIVE_DESC"; Texture2D tex = Tools.LoadTexture2D(Rein.Properties.Resources.passive_2__1_); elementalIntensity.icon = Sprite.Create(tex, new Rect(0f, 0f, tex.width, tex.height), envSuit.icon.pivot); elementalIntensity.stateMachineDefaults = new PassiveSkillDef.StateMachineDefaults[1] { new PassiveSkillDef.StateMachineDefaults { machineName = "Jet", initalState = new EntityStates.SerializableEntityStateType(typeof(States.Main.AltArtiPassive)), mainState = new EntityStates.SerializableEntityStateType(typeof(States.Main.AltArtiPassive)), defaultInitalState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Idle)), defaultMainState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Idle)) } }; elementalIntensity.applyVisuals = (model) => { CharacterModel.RendererInfo[] renderInfos = model.baseRendererInfos; if (renderInfos.Length == 10) { ((SkinnedMeshRenderer)model.baseRendererInfos[9].renderer).sharedMesh = this.artiChangedMesh; model.baseRendererInfos[2].renderer.gameObject.SetActive(false); model.baseRendererInfos[3].renderer.gameObject.SetActive(false); model.baseRendererInfos[5].renderer.gameObject.SetActive(false); model.baseRendererInfos[6].renderer.gameObject.SetActive(false); } else { ((SkinnedMeshRenderer)model.baseRendererInfos[3].renderer).sharedMesh = this.artiChangedMesh; model.baseRendererInfos[0].renderer.gameObject.SetActive(false); model.baseRendererInfos[1].renderer.gameObject.SetActive(false); } }; elementalIntensity.removeVisuals = (model) => { CharacterModel.RendererInfo[] renderInfos = model.baseRendererInfos; if (renderInfos.Length == 10) { try { ((SkinnedMeshRenderer)model.baseRendererInfos[9].renderer).sharedMesh = this.artiDefaultMesh; } catch { } model.baseRendererInfos[2].renderer.gameObject.SetActive(true); model.baseRendererInfos[3].renderer.gameObject.SetActive(true); model.baseRendererInfos[5].renderer.gameObject.SetActive(true); model.baseRendererInfos[6].renderer.gameObject.SetActive(true); } else { ((SkinnedMeshRenderer)model.baseRendererInfos[3].renderer).sharedMesh = this.artiDefaultMesh; model.baseRendererInfos[0].renderer.gameObject.SetActive(true); model.baseRendererInfos[1].renderer.gameObject.SetActive(true); } }; passiveFamily.variants = new SkillFamily.Variant[2] { new SkillFamily.Variant { skillDef = envSuit, unlockableName = "", viewableNode = new ViewablesCatalog.Node("envSuit", false) }, new SkillFamily.Variant { skillDef = elementalIntensity, unlockableName = "", viewableNode = new ViewablesCatalog.Node("elementalIntensity", false) } }; _ = LoadoutAPI.AddSkillDef(envSuit); _ = LoadoutAPI.AddSkillDef(elementalIntensity); _ = LoadoutAPI.AddSkillFamily(passiveFamily); _ = this.addedSkills.Add(envSuit); _ = this.addedSkills.Add(elementalIntensity); _ = this.addedSkillFamilies.Add(passiveFamily); passive.SetFieldValue <SkillFamily>("_skillFamily", passiveFamily); primary.SetFieldValue <SkillFamily>("_skillFamily", primaryFamily); secondary.SetFieldValue <SkillFamily>("_skillFamily", secondaryFamily); utility.SetFieldValue <SkillFamily>("_skillFamily", utilityFamily); special.SetFieldValue <SkillFamily>("_skillFamily", specialFamily); }
private void passivesetup() { GenericSkill skill = myCharacter.AddComponent <GenericSkill>(); SkillFamily passiveFamily = ScriptableObject.CreateInstance <SkillFamily>(); skill.SetFieldValue <SkillFamily>("_skillFamily", passiveFamily); passiveFamily.variants = new SkillFamily.Variant[4]; LoadoutAPI.AddSkillFamily(passiveFamily); SkillLocator skillLocator = myCharacter.GetComponent <SkillLocator>(); { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.skillDescriptionToken = "Start off with some movement items"; mySkillDef.skillName = "VT_SCAVSTASHMOVEMENT_MISC"; mySkillDef.skillNameToken = "Scavenger's Stash - Movement"; mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.BaseState)); LoadoutAPI.AddSkillDef(mySkillDef); GameObject gameObject = myCharacter; passiveFamily.variants[1] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.skillDescriptionToken = "Start off with some attack speed items"; mySkillDef.skillName = "VT_SCAVSTASHATTACKSPEED_MISC"; mySkillDef.skillNameToken = "Scavenger's Stash - Attack speed"; mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.BaseState)); LoadoutAPI.AddSkillDef(mySkillDef); GameObject gameObject = myCharacter; passiveFamily.variants[2] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.skillDescriptionToken = "Start off with some healing items"; mySkillDef.skillName = "VT_SCAVSTASHHEALING_MISC"; mySkillDef.skillNameToken = "Scavenger's Stash - Healing"; mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.BaseState)); LoadoutAPI.AddSkillDef(mySkillDef); GameObject gameObject = myCharacter; passiveFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } { SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.skillDescriptionToken = "Start off with some lunar items"; mySkillDef.skillName = "VT_SCAVSTASHLUNAR_MISC"; mySkillDef.skillNameToken = "Scavenger's Stash - Devotee"; mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.BaseState)); LoadoutAPI.AddSkillDef(mySkillDef); GameObject gameObject = myCharacter; passiveFamily.variants[3] = new SkillFamily.Variant { skillDef = mySkillDef, unlockableName = "", viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; } PlayerCharacterMasterController.onPlayerAdded += PlayerCharacterMasterController_onPlayerAdded; //PlayerCharacterMasterController.onPlayerAdded += (master) => { master.master.onBodyDeath.AddListener(() => {}); }; }
public static void SkillSetup(GameObject sx) { foreach (GenericSkill obj in sx.GetComponentsInChildren <GenericSkill>()) { DiggerPlugin.DestroyImmediate(obj); } SkillLocator skillLocator = sx.GetComponentInChildren <SkillLocator>(); SkillDef mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.Direseeker.ChargeUltraFireball)); mySkillDef.activationStateMachineName = "Weapon"; mySkillDef.baseMaxStock = 2; mySkillDef.baseRechargeInterval = 8f; mySkillDef.beginSkillCooldownOnSkillEnd = true; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.resetCooldownTimerOnUse = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.cancelSprintingOnActivation = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.stockToConsume = 1; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.primary = sx.AddComponent <GenericSkill>(); SkillFamily newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.primary.SetFieldValue("_skillFamily", newFamily); SkillFamily skillFamily = skillLocator.primary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; mySkillDef = ScriptableObject.CreateInstance <SkillDef>(); mySkillDef.activationState = new SerializableEntityStateType(typeof(EntityStates.LemurianBruiserMonster.Flamebreath)); mySkillDef.activationStateMachineName = "Body"; mySkillDef.baseMaxStock = 1; mySkillDef.baseRechargeInterval = 0f; mySkillDef.beginSkillCooldownOnSkillEnd = false; mySkillDef.canceledFromSprinting = false; mySkillDef.fullRestockOnAssign = true; mySkillDef.interruptPriority = InterruptPriority.Any; mySkillDef.resetCooldownTimerOnUse = false; mySkillDef.isCombatSkill = true; mySkillDef.mustKeyPress = false; mySkillDef.cancelSprintingOnActivation = false; mySkillDef.rechargeStock = 1; mySkillDef.requiredStock = 1; mySkillDef.stockToConsume = 0; LoadoutAPI.AddSkillDef(mySkillDef); skillLocator.secondary = sx.AddComponent <GenericSkill>(); newFamily = ScriptableObject.CreateInstance <SkillFamily>(); newFamily.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily); skillLocator.secondary.SetFieldValue("_skillFamily", newFamily); skillFamily = skillLocator.secondary.skillFamily; skillFamily.variants[0] = new SkillFamily.Variant { skillDef = mySkillDef, viewableNode = new ViewablesCatalog.Node(mySkillDef.skillNameToken, false, null) }; }
public static void Initialize() { #region Weak Stan Fragment weakStanFragmentMaster = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/charactermasters/JellyfishMaster"), "WeakStanFragmentMaster", true); weakStanFragmentBody = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/characterbodies/JellyfishBody"), "WeakStanFragmentBody", true); if (!weakStanFragmentMaster.GetComponent <NetworkIdentity>()) { weakStanFragmentMaster.AddComponent <NetworkIdentity>(); } if (!weakStanFragmentBody.GetComponent <NetworkIdentity>()) { weakStanFragmentBody.AddComponent <NetworkIdentity>(); } CharacterBody weakStanBody = weakStanFragmentBody.GetComponent <CharacterBody>(); SkillLocator weakStanSkills = weakStanFragmentBody.GetComponent <SkillLocator>(); var weakStanStateMachine = weakStanFragmentBody.GetComponent <EntityStateMachine>(); weakStanBody.baseNameToken = "WEAKSTANFRAGMENT_NAME"; weakStanBody.portraitIcon = Assets.stanFace.texture; weakStanBody.baseMaxHealth = 200f; weakStanBody.levelMaxHealth = 30f; weakStanBody.baseMoveSpeed = 20f; weakStanBody.baseAcceleration = 30f; //Replaces default deathstate to prevent errors. LoadoutAPI.AddSkill(typeof(States.SummonStates.WeakStanDeathState)); weakStanFragmentBody.GetComponent <CharacterDeathBehavior>().deathState = new SerializableEntityStateType(typeof(States.SummonStates.WeakStanDeathState)); //Sets custom non-ability entitystates. LoadoutAPI.AddSkill(typeof(States.SummonStates.WeakStanSpawnState)); LoadoutAPI.AddSkill(typeof(States.SummonStates.WeakStanMain)); //StanWorshipperPlugin.entityStateTypes.Add(typeof(States.SummonStates.WeakStanSpawnState)); //StanWorshipperPlugin.entityStateTypes.Add(typeof(States.SummonStates.WeakStanMain)); weakStanStateMachine.initialStateType = new SerializableEntityStateType(typeof(States.SummonStates.WeakStanSpawnState)); weakStanStateMachine.mainStateType = new SerializableEntityStateType(typeof(States.SummonStates.WeakStanMain)); //Disable default renderer and replace with sprite renderer for Stan sprite. weakStanFragmentBody.GetComponentInChildren <SkinnedMeshRenderer>().gameObject.SetActive(false); SpriteRenderer weakStanSpriteRenderer = weakStanFragmentBody.AddComponent <SpriteRenderer>(); weakStanSpriteRenderer.sprite = Assets.stanFace; //Adds a red light to the body. Light weakStanLight = weakStanFragmentBody.AddComponent <Light>(); weakStanLight.type = LightType.Point; weakStanLight.range = 10f; weakStanLight.renderMode = LightRenderMode.Auto; weakStanLight.intensity = 100f; weakStanLight.color = Color.red; //Remove the default explode skill. foreach (GenericSkill i in weakStanBody.GetComponentsInChildren <GenericSkill>()) { DestroyImmediate(i); } var passive = weakStanSkills.passiveSkill; passive.enabled = true; passive.skillNameToken = ""; passive.skillDescriptionToken = ""; passive.icon = null; //Adds the body to the character master. weakStanFragmentMaster.GetComponent <CharacterMaster>().bodyPrefab = weakStanFragmentBody; BaseAI weakStanBaseAI = weakStanFragmentMaster.GetComponent <BaseAI>(); weakStanBaseAI.neverRetaliateFriendlies = true; #endregion #region Strong Stan Fragment strongStanFragmentMaster = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/charactermasters/RoboBallBossMaster"), "StrongStanFragmentMaster", true); strongStanFragmentBody = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("prefabs/characterbodies/RoboBallBossBody"), "StrongStanFragmentBody", true); if (!strongStanFragmentMaster.GetComponent <NetworkIdentity>()) { strongStanFragmentMaster.AddComponent <NetworkIdentity>(); } if (!strongStanFragmentBody.GetComponent <NetworkIdentity>()) { strongStanFragmentBody.AddComponent <NetworkIdentity>(); } CharacterBody strongStanBody = strongStanFragmentBody.GetComponent <CharacterBody>(); SkillLocator strongStanSkills = strongStanFragmentBody.GetComponent <SkillLocator>(); var strongStanStateMachine = strongStanFragmentBody.GetComponent <EntityStateMachine>(); strongStanBody.baseNameToken = "STRONGSTANFRAGMENT_NAME"; strongStanBody.portraitIcon = Assets.stanFace2.texture; strongStanBody.baseMoveSpeed = 1f; //Remove default DeathState to prevent weird errors/unwanted effects. LoadoutAPI.AddSkill(typeof(States.SummonStates.StrongStanDeathState)); //StanWorshipperPlugin.entityStateTypes.Add(typeof(States.SummonStates.StrongStanDeathState)); strongStanFragmentBody.GetComponent <CharacterDeathBehavior>().deathState = new SerializableEntityStateType(typeof(States.SummonStates.StrongStanDeathState)); //Sets custom non-ability entitystates. LoadoutAPI.AddSkill(typeof(States.SummonStates.StrongStanSpawnState)); LoadoutAPI.AddSkill(typeof(States.SummonStates.StrongStanMain)); //StanWorshipperPlugin.entityStateTypes.Add(typeof(States.SummonStates.StrongStanSpawnState)); //StanWorshipperPlugin.entityStateTypes.Add(typeof(States.SummonStates.StrongStanMain)); strongStanStateMachine.initialStateType = new SerializableEntityStateType(typeof(States.SummonStates.StrongStanSpawnState)); strongStanStateMachine.mainStateType = new SerializableEntityStateType(typeof(States.SummonStates.StrongStanMain)); //Remove default render meshes and replace with sprite mesh for strongstan. foreach (SkinnedMeshRenderer i in strongStanFragmentBody.GetComponentsInChildren <SkinnedMeshRenderer>()) { i.gameObject.SetActive(false); } SpriteRenderer strongStanSpriteRenderer = strongStanFragmentBody.AddComponent <SpriteRenderer>(); strongStanSpriteRenderer.sprite = Assets.stanFace2Large; //Add red light to strongstan. Light strongStanLight = strongStanFragmentBody.AddComponent <Light>(); strongStanLight.type = LightType.Point; strongStanLight.range = 8f; strongStanLight.renderMode = LightRenderMode.Auto; strongStanLight.intensity = 75f; strongStanLight.color = Color.red; //Remove the solus boss templates default utility(spawn probes) and ultimate(aoe slow rape). foreach (GenericSkill i in strongStanBody.GetComponentsInChildren <GenericSkill>()) { DestroyImmediate(i); } //Define the strong stan fragmen's skilldef and add it to him var chargePoopBlast = ScriptableObject.CreateInstance <SkillDef>(); chargePoopBlast.activationState = new SerializableEntityStateType(typeof(States.SummonStates.ChargePoopBlast)); chargePoopBlast.activationStateMachineName = "Weapon"; chargePoopBlast.baseMaxStock = 1; chargePoopBlast.baseRechargeInterval = 0f; chargePoopBlast.beginSkillCooldownOnSkillEnd = true; chargePoopBlast.canceledFromSprinting = false; chargePoopBlast.fullRestockOnAssign = true; chargePoopBlast.interruptPriority = InterruptPriority.Any; chargePoopBlast.isCombatSkill = true; chargePoopBlast.mustKeyPress = false; chargePoopBlast.cancelSprintingOnActivation = true; chargePoopBlast.rechargeStock = 1; chargePoopBlast.requiredStock = 1; chargePoopBlast.stockToConsume = 1; chargePoopBlast.icon = null; chargePoopBlast.skillDescriptionToken = ""; chargePoopBlast.skillName = ""; chargePoopBlast.skillNameToken = ""; LoadoutAPI.AddSkillDef(chargePoopBlast); StanWorshipperPlugin.skillDefs.Add(chargePoopBlast); strongStanSkills.primary = strongStanFragmentBody.AddComponent <GenericSkill>(); SkillFamily newFamily2 = ScriptableObject.CreateInstance <SkillFamily>(); newFamily2.variants = new SkillFamily.Variant[1]; LoadoutAPI.AddSkillFamily(newFamily2); strongStanSkills.primary.SetFieldValue("_skillFamily", newFamily2); SkillFamily skillFamily2 = strongStanSkills.primary.skillFamily; skillFamily2.variants[0] = new SkillFamily.Variant { skillDef = chargePoopBlast, }; //Actually adds the body defined above to the strongstan character master. strongStanFragmentMaster.GetComponent <CharacterMaster>().bodyPrefab = strongStanFragmentBody; BaseAI strongStanBaseAI = strongStanFragmentMaster.GetComponent <BaseAI>(); strongStanBaseAI.aimVectorMaxSpeed = 500f; strongStanBaseAI.aimVectorDampTime = 0.1f; strongStanBaseAI.enemyAttentionDuration = 0.25f; strongStanBaseAI.fullVision = true; strongStanBaseAI.neverRetaliateFriendlies = true; #endregion StanWorshipperPlugin.characterBodies.Add(strongStanFragmentBody); StanWorshipperPlugin.characterBodies.Add(weakStanFragmentBody); StanWorshipperPlugin.characterMasters.Add(strongStanFragmentMaster); StanWorshipperPlugin.characterMasters.Add(weakStanFragmentMaster); }
public static void Initialize() { //Primary var poopSlinger = ScriptableObject.CreateInstance <SkillDef>(); poopSlinger.activationState = new SerializableEntityStateType(typeof(States.Poopslinger)); poopSlinger.activationStateMachineName = "Weapon"; poopSlinger.baseMaxStock = 1; poopSlinger.baseRechargeInterval = 0f; poopSlinger.beginSkillCooldownOnSkillEnd = true; poopSlinger.canceledFromSprinting = false; poopSlinger.fullRestockOnAssign = true; poopSlinger.interruptPriority = InterruptPriority.Any; poopSlinger.isCombatSkill = true; poopSlinger.mustKeyPress = false; poopSlinger.rechargeStock = 1; poopSlinger.requiredStock = 1; poopSlinger.canceledFromSprinting = false; poopSlinger.stockToConsume = 1; poopSlinger.icon = Assets.icon1; poopSlinger.skillDescriptionToken = "STANWORSHIPPER_SLOT1_PRIMARY_DESCRIPTION"; poopSlinger.skillName = "STANWORSHIPPER_SLOT1_PRIMARY_NAME"; poopSlinger.skillNameToken = "STANWORSHIPPER_SLOT1_PRIMARY_NAME"; //Secondary var summonMinor = ScriptableObject.CreateInstance <SkillDef>(); summonMinor.activationState = new SerializableEntityStateType(typeof(States.SummonMinor)); summonMinor.activationStateMachineName = "Weapon"; summonMinor.baseMaxStock = 1; summonMinor.baseRechargeInterval = 25f; summonMinor.beginSkillCooldownOnSkillEnd = true; summonMinor.canceledFromSprinting = false; summonMinor.fullRestockOnAssign = true; summonMinor.interruptPriority = InterruptPriority.Skill; summonMinor.isCombatSkill = true; summonMinor.mustKeyPress = false; summonMinor.cancelSprintingOnActivation = false; summonMinor.rechargeStock = 1; summonMinor.requiredStock = 1; summonMinor.stockToConsume = 1; summonMinor.icon = Assets.icon2; summonMinor.skillDescriptionToken = "STANWORSHIPPER_SLOT2_SECONDARY_DESCRIPTION"; summonMinor.skillName = "STANWORSHIPPER_SLOT2_SECONDARY_NAME"; summonMinor.skillNameToken = "STANWORSHIPPER_SLOT2_SECONDARY_NAME"; //Utility var sacrifice = ScriptableObject.CreateInstance <SkillDef>(); sacrifice.activationState = new SerializableEntityStateType(typeof(States.Sacrifice)); sacrifice.activationStateMachineName = "Sacrifice"; sacrifice.baseMaxStock = 1; sacrifice.baseRechargeInterval = 16f; sacrifice.beginSkillCooldownOnSkillEnd = true; sacrifice.canceledFromSprinting = false; sacrifice.fullRestockOnAssign = true; sacrifice.interruptPriority = InterruptPriority.Skill; sacrifice.isCombatSkill = false; sacrifice.mustKeyPress = false; sacrifice.cancelSprintingOnActivation = false; sacrifice.rechargeStock = 1; sacrifice.requiredStock = 1; sacrifice.stockToConsume = 1; sacrifice.icon = Assets.icon3; sacrifice.skillDescriptionToken = "STANWORSHIPPER_SLOT3_UTILITY_DESCRIPTION"; sacrifice.skillName = "STANWORSHIPPER_SLOT3_UTILITY_NAME"; sacrifice.skillNameToken = "STANWORSHIPPER_SLOT3_UTILITY_NAME"; //Ultimate var summonMajor = ScriptableObject.CreateInstance <SkillDef>(); summonMajor.activationState = new SerializableEntityStateType(typeof(States.SummonMajor)); summonMajor.activationStateMachineName = "Weapon"; summonMajor.baseMaxStock = 1; summonMajor.baseRechargeInterval = 50f; summonMajor.beginSkillCooldownOnSkillEnd = true; summonMajor.canceledFromSprinting = false; summonMajor.fullRestockOnAssign = false; summonMajor.interruptPriority = InterruptPriority.Skill; summonMajor.isCombatSkill = true; summonMajor.mustKeyPress = false; summonMajor.cancelSprintingOnActivation = false; summonMajor.rechargeStock = 1; summonMajor.requiredStock = 1; summonMajor.stockToConsume = 1; summonMajor.icon = Assets.icon4; summonMajor.skillDescriptionToken = "STANWORSHIPPER_SLOT4_ULTIMATE_DESCRIPTION"; summonMajor.skillName = "STANWORSHIPPER_SLOT4_ULTIMATE_NAME"; summonMajor.skillNameToken = "STANWORSHIPPER_SLOT4_ULTIMATE_NAME"; LoadoutAPI.AddSkillDef(poopSlinger); LoadoutAPI.AddSkillDef(summonMinor); LoadoutAPI.AddSkillDef(sacrifice); LoadoutAPI.AddSkillDef(summonMajor); var skillLocator = Character.stanWorshipperBody.GetComponent <SkillLocator>(); //Passive skillLocator.passiveSkill.enabled = true; skillLocator.passiveSkill.skillNameToken = "STANWORSHIPPER_PASSIVE_NAME"; skillLocator.passiveSkill.skillDescriptionToken = "STANWORSHIPPER_PASSIVE_DESCRIPTION"; //This is f*****g retarded and doesn't even work but I'm too lazy to add to the asset bundle rn. Texture2D texture = Resources.Load <Texture2D>("textures/shrinesymbols/texShrineBloodSymbol"); Sprite sprite = Sprite.Create(texture, new Rect(new Vector2(0, 0), new Vector2(1, 1)), Vector2.zero, 100f); skillLocator.passiveSkill.icon = sprite; //Primary var skillFamily1 = skillLocator.primary.skillFamily; skillFamily1.variants = new SkillFamily.Variant[1]; // substitute 1 for the number of skill variants you are implementing skillFamily1.variants[0] = new SkillFamily.Variant { skillDef = poopSlinger, viewableNode = new ViewablesCatalog.Node(poopSlinger.skillNameToken, false, null) }; LoadoutAPI.AddSkillFamily(skillFamily1); //Secondary var skillFamily2 = skillLocator.secondary.skillFamily; skillFamily2.variants = new SkillFamily.Variant[1]; // substitute 1 for the number of skill variants you are implementing skillFamily2.variants[0] = new SkillFamily.Variant { skillDef = summonMinor, viewableNode = new ViewablesCatalog.Node(summonMinor.skillNameToken, false, null) }; LoadoutAPI.AddSkillFamily(skillFamily2); //Utility var skillFamily3 = skillLocator.utility.skillFamily; skillFamily3.variants = new SkillFamily.Variant[1]; // substitute 1 for the number of skill variants you are implementing skillFamily3.variants[0] = new SkillFamily.Variant { skillDef = sacrifice, viewableNode = new ViewablesCatalog.Node(sacrifice.skillNameToken, false, null) }; LoadoutAPI.AddSkillFamily(skillFamily3); //Ultimate var skillFamily4 = skillLocator.special.skillFamily; skillFamily4.variants = new SkillFamily.Variant[1]; // substitute 1 for the number of skill variants you are implementing skillFamily4.variants[0] = new SkillFamily.Variant { skillDef = summonMajor, viewableNode = new ViewablesCatalog.Node(summonMajor.skillNameToken, false, null) }; LoadoutAPI.AddSkillFamily(skillFamily4); }