public override void OnGameTick(float deltaTime) { keyTick++; Helper.IncreasePewterFatigue(-(Helper.GetPewterFatigue() / 120) * deltaTime); float speedBoost = Helper.GetEffectiveBurnStatus("pewter") * (1.0f / 5.0f); if (Helper.GetEffectiveBurnStatus("pewter") == 0 && Helper.GetPewterFatigue() != 0) { float damage = Helper.GetPewterFatigue(); Helper.SetPewterFatigue(0); entity.ReceiveDamage(new DamageSource() { Source = EnumDamageSource.Internal, Type = EnumDamageType.Suffocation }, damage); } entity.Stats.Set("walkspeed", "allomancy", speedBoost, false); if (prevPos == null) { prevPos = entity.Pos.XYZ.Clone(); } float distance = prevPos.HorizontalSquareDistanceTo(entity.Pos.XYZ); prevPos = entity.Pos.XYZ.Clone(); if (Helper.GetEffectiveBurnStatus("pewter") > 0) { Helper.IncreasePewterFatigue(distance / 80); } if (Helper.BurnToggle != null) { foreach (var pair in Helper.BurnToggle) { if (Helper.GetBurnToggle(pair.Key)) { TryExecuteActiveAllomanticEffect(pair.Key, Helper.GetBurnStatus(pair.Key), false); } } } if (keyTick >= 1000) { keyTick = 0; } }
/// <summary> Initialize the client handler. </summary> public void Initialize() { // Register the networking channel. Channel = Capi.Network.RegisterChannel(MistModSystem.MOD_ID) .RegisterMessageType(typeof(BurnMessage)) .RegisterMessageType(typeof(SelectedMetalMessage)) .RegisterMessageType(typeof(ReplaceAlloHelperEntity)); Channel.SetMessageHandler <SelectedMetalMessage>(OnSelectedMetalMessage); Channel.SetMessageHandler <ReplaceAlloHelperEntity>(OnUpdateAlloHelper); // Hotkeys for burning metals. Capi.Input.RegisterHotKey("burn-metal-toggle", "Toggle allomantic metal burn", GlKeys.Z, HotkeyType.CharacterControls, false, true, true); Capi.Input.RegisterHotKey( "burn-metal-inc", "Increase allomantic metal burn", GlKeys.Z, HotkeyType.CharacterControls, false, false, true); Capi.Input.RegisterHotKey( "burn-metal-dec", "Decrease allomantic metal burn", GlKeys.Z, HotkeyType.CharacterControls, false, true, false); Capi.Input.RegisterHotKey( "burn-metal-flare", "Flare allomantic metal", GlKeys.Z, HotkeyType.CharacterControls); Capi.Input.SetHotKeyHandler("burn-metal-toggle", a => { Channel.SendPacket(new BurnMessage(metalSelector.SelectedMetal, 4)); return(true); }); Capi.Input.SetHotKeyHandler("burn-metal-inc", a => { Channel.SendPacket(new BurnMessage(metalSelector.SelectedMetal, 3)); return(true); }); Capi.Input.SetHotKeyHandler("burn-metal-dec", a => { Channel.SendPacket(new BurnMessage(metalSelector.SelectedMetal, 2)); return(true); }); Capi.Input.SetHotKeyHandler("burn-metal-flare", a => { Channel.SendPacket(new BurnMessage(metalSelector.SelectedMetal, 1)); return(true); }); // Hotkeys for GUI Capi.Input.RegisterHotKey( "guimetalselect", "Select allomantic metal", GlKeys.K, HotkeyType.GUIOrOtherControls); Capi.Input.SetHotKeyHandler("guimetalselect", ToggleMetalSelectGui); // Add event to know when the game has loaded. Capi.Event.BlockTexturesLoaded += OnLoad; // Create an allomancy helper for the entity. Capi.Event.LevelFinalize += () => { AllomancyHelper = new AllomancyPropertyHelper(Capi.World.Player.Entity); }; // Register UI updates Capi.Event.RegisterGameTickListener((float dt) => { AllomancyHelper.Entity = Capi.World.Player.Entity; AllomancyHelper.UpdateTree(); if (AllomancyHelper != null) { metalSelector.UpdateUI(dt); } }, 10); motionParticles.gravityEffect = 0; // Visual effects updates Capi.Event.RegisterGameTickListener((float dt) => { if (AllomancyHelper != null) { float maxhealth = ((ITreeAttribute)Capi.World.Player.Entity.WatchedAttributes["health"]).GetFloat("maxhealth"); float fatigue = AllomancyHelper.GetPewterFatigue(); targetVignete = fatigue / maxhealth; if (targetVignete > 1) { targetVignete = 1; } ShaderLoader.VigneteStrength += (targetVignete - ShaderLoader.VigneteStrength) / 5; int tinstatus = AllomancyHelper.GetEffectiveBurnStatus("tin"); targetNightvision = tinstatus * (1.0f / 5.0f); ShaderLoader.NightvisionStrength += (targetNightvision - ShaderLoader.NightvisionStrength) / 5; } }, 0); Capi.Event.RegisterGameTickListener((float dt) => { int tinstatus = AllomancyHelper.GetEffectiveBurnStatus("tin"); if (previousTinStatus == 0 && tinstatus != 0) { Capi.Settings.Int["cachedfov"] = Capi.Settings.Int["fieldOfView"]; } if (tinstatus == 0 && previousTinStatus != 0) { if (Capi.Settings.Int["cachedfov"] != 0) { Capi.Settings.Int["fieldOfView"] = Capi.Settings.Int["cachedfov"]; } } if (tinstatus > 0) { Capi.Settings.Int["fieldOfView"] = 100 - tinstatus * 18; motionParticles.glowLevel = (byte)(255.0f * tinstatus * (1.0f / 5.0f)); float vspeed = 3.0f * tinstatus * (1.0f / 5.0f) + 0.1f; motionParticles.minSize = 3.0f * tinstatus * (1.0f / 5.0f) + 1f; motionParticles.maxSize = 3.0f * tinstatus * (1.0f / 5.0f) + 1f; motionParticles.minVelocity.Y = vspeed; Entity[] nearbyEnts = Capi.World.GetEntitiesAround(Capi.World.Player.Entity.Pos.XYZ, 100, 100); foreach (Entity ent in nearbyEnts) { if (ent == Capi.World.Player.Entity) { continue; } motionParticles.minPos = ent.Pos.XYZ; Capi.World.SpawnParticles(motionParticles); } } previousTinStatus = tinstatus; }, 100); }