public static bool ReloadHook(Func <Gun, bool> orig, Gun self) { bool result = orig(self); if (result && self.GetComponent <MultiActiveReloadController>() != null) { self.GetComponent <MultiActiveReloadController>().canAttemptActiveReload = true; self.GetComponent <MultiActiveReloadController>().damageMult = 1f; } return(result); }
public static void OnActiveReloadPressedHook(Action <Gun, PlayerController, Gun, bool> orig, Gun self, PlayerController p, Gun g, bool actualPress) { orig(self, p, g, actualPress); if (self.IsReloading || self.reloadTime < 0f) { PlayerController playerController = self.CurrentOwner as PlayerController; if (playerController && (actualPress || true)) { MultiActiveReloadController controller = self.GetComponent <MultiActiveReloadController>(); if (controller != null && controller.activeReloadEnabled && controller.canAttemptActiveReload && !GameUIRoot.Instance.GetReloadBarForPlayer(self.CurrentOwner as PlayerController).IsActiveReloadGracePeriod()) { bool flag2 = GameUIRoot.Instance.AttemptActiveReloadOnlyMultireload(self.CurrentOwner as PlayerController); MultiActiveReload reload = GameUIRoot.Instance.GetReloadBarForPlayer(self.CurrentOwner as PlayerController).GetMultiActiveReloadForController(); if (flag2) { controller.OnActiveReloadSuccess(reload); GunFormeSynergyProcessor component = self.GetComponent <GunFormeSynergyProcessor>(); if (component) { component.JustActiveReloaded = true; } ChamberGunProcessor component2 = self.GetComponent <ChamberGunProcessor>(); if (component2) { component2.JustActiveReloaded = true; } } else { controller.OnActiveReloadFailure(reload); } if (reload == null || !reload.canAttemptActiveReloadAfterwards) { ETGModConsole.Log("yes"); controller.canAttemptActiveReload = false; Action <PlayerController, Gun, bool> act = (Action <PlayerController, Gun, bool>)info2.CreateDelegate <Action <PlayerController, Gun, bool> >(); self.OnReloadPressed -= act; } } } } }
public override void InheritData(Gun source) { base.InheritData(source); MultiActiveReloadController component = source.GetComponent <MultiActiveReloadController>(); if (component) { this.reloads = component.reloads; this.activeReloadEnabled = component.activeReloadEnabled; } }
public static void Add() { Gun gun = ETGMod.Databases.Items.NewGun("Sliver Beam", "sliver_beam"); Game.Items.Rename("outdated_gun_mods:sliver_beam", "cel:sliver_beam"); var behav = gun.gameObject.AddComponent <SliverBeam>(); behav.overrideNormalFireAudio = "Play_ENM_shelleton_beam_01"; behav.preventNormalFireAudio = true; gun.SetShortDescription("Like A Pike Through Butter"); gun.SetLongDescription("Can cut across rooms, assuming there is no walls in the way."); gun.SetupSprite(null, "sliver_beam_idle_001", 8); gun.SetAnimationFPS(gun.shootAnimation, 8); gun.isAudioLoop = true; gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(86) as Gun, true, false); gun.doesScreenShake = false; gun.DefaultModule.ammoCost = 10; gun.DefaultModule.angleVariance = 0; gun.DefaultModule.shootStyle = ProjectileModule.ShootStyle.Beam; gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random; gun.reloadTime = 1f; gun.muzzleFlashEffects.type = VFXPoolType.None; gun.DefaultModule.cooldownTime = 0.001f; gun.DefaultModule.numberOfShotsInClip = 3000; gun.DefaultModule.ammoType = GameUIAmmoType.AmmoType.BEAM; gun.barrelOffset.transform.localPosition = new Vector3(1.75f, 0.5f, 0f); gun.SetBaseMaxAmmo(3000); gun.ammo = 3000; gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).wrapMode = tk2dSpriteAnimationClip.WrapMode.LoopSection; gun.GetComponent <tk2dSpriteAnimator>().GetClipByName(gun.shootAnimation).loopStart = 1; List <string> BeamAnimPaths = new List <string>() { "Items/Resources/Beams/sliver_beam_mid_001", }; List <string> BeamEndPaths = new List <string>() { "Items/Resources/Beams/sliver_beam_end_001", }; //BULLET STATS Projectile projectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(86) as Gun).DefaultModule.projectiles[0]); BasicBeamController beamComp = projectile.GenerateBeamPrefab( "Items/Resources/Beams/sliver_beam_mid_001", new Vector2(10, 4), new Vector2(0, 1), BeamAnimPaths, 9, //Impact null, -1, null, null, //End BeamEndPaths, 9, new Vector2(10, 3), new Vector2(0, 1), //Beginning null, -1, null, null ); projectile.gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(projectile.gameObject); UnityEngine.Object.DontDestroyOnLoad(projectile); projectile.baseData.damage = 15f; projectile.baseData.force *= 0.1f; projectile.baseData.range = float.MaxValue; projectile.baseData.speed *= 5f; beamComp.penetration = 10000; beamComp.boneType = BasicBeamController.BeamBoneType.Straight; beamComp.interpolateStretchedBones = false; gun.DefaultModule.projectiles[0] = projectile; gun.encounterTrackable.EncounterGuid = "FWOZZOOOOOMMMMM"; gun.quality = PickupObject.ItemQuality.C; //D ETGMod.Databases.Items.Add(gun, null, "ANY"); }