diff --git a/GameServer/Controllers/Combat/CombatManager.cs b/GameServer/Controllers/Combat/CombatManager.cs index 0e65296..7d07ad4 100644 --- a/GameServer/Controllers/Combat/CombatManager.cs +++ b/GameServer/Controllers/Combat/CombatManager.cs @@ -33,6 +33,16 @@ internal class CombatManager _creatureController = creatureController; } + [CombatRequest(CombatRequestData.MessageOneofCase.CreateBulletRequest)] + public CombatResponseData OnCreateBulletRequest(CombatRequestContext context) + { + return new CombatResponseData + { + CombatCommon = context.Request.CombatCommon, + CreateBulletResponse = new() + }; + } + [CombatRequest(CombatRequestData.MessageOneofCase.DamageExecuteRequest)] public async Task OnDamageExecuteRequest(CombatRequestContext context) { diff --git a/GameServer/Controllers/CreatureController.cs b/GameServer/Controllers/CreatureController.cs index 66f182f..560e8fb 100644 --- a/GameServer/Controllers/CreatureController.cs +++ b/GameServer/Controllers/CreatureController.cs @@ -4,9 +4,11 @@ using GameServer.Extensions.Logic; using GameServer.Models; using GameServer.Network; using GameServer.Network.Messages; +using GameServer.Settings; using GameServer.Systems.Entity; using GameServer.Systems.Entity.Component; using GameServer.Systems.Event; +using Microsoft.Extensions.Options; using Protocol; namespace GameServer.Controllers; @@ -17,12 +19,15 @@ internal class CreatureController : Controller private readonly ModelManager _modelManager; private readonly ConfigManager _configManager; - public CreatureController(PlayerSession session, EntitySystem entitySystem, EntityFactory entityFactory, ModelManager modelManager, ConfigManager configManager) : base(session) + private readonly GameplayFeatureSettings _gameplayFeatures; + + public CreatureController(PlayerSession session, EntitySystem entitySystem, EntityFactory entityFactory, ModelManager modelManager, ConfigManager configManager, IOptions gameplayFeatures) : base(session) { _entitySystem = entitySystem; _entityFactory = entityFactory; _modelManager = modelManager; _configManager = configManager; + _gameplayFeatures = gameplayFeatures.Value; } public async Task JoinScene(int instanceId) @@ -257,6 +262,15 @@ internal class CreatureController : Controller entity.WeaponId = _modelManager.Inventory.GetEquippedWeapon(roleId)?.Id ?? 0; if (i == 0) _modelManager.Creature.PlayerEntityId = entity.Id; + + if (_gameplayFeatures.UnlimitedEnergy) + { + EntityAttributeComponent attr = entity.ComponentSystem.Get(); + attr.SetAttribute(EAttributeType.SpecialEnergy1Max, 0); + attr.SetAttribute(EAttributeType.SpecialEnergy2Max, 0); + attr.SetAttribute(EAttributeType.SpecialEnergy3Max, 0); + attr.SetAttribute(EAttributeType.SpecialEnergy4Max, 0); + } } } diff --git a/GameServer/Settings/GameplayFeatureSettings.cs b/GameServer/Settings/GameplayFeatureSettings.cs index 55a401a..3310c2d 100644 --- a/GameServer/Settings/GameplayFeatureSettings.cs +++ b/GameServer/Settings/GameplayFeatureSettings.cs @@ -2,4 +2,5 @@ internal class GameplayFeatureSettings { public bool TeleportByMapMark { get; set; } + public bool UnlimitedEnergy { get; set; } } diff --git a/GameServer/gameplay.json b/GameServer/gameplay.json index 4148415..4312214 100644 --- a/GameServer/gameplay.json +++ b/GameServer/gameplay.json @@ -12,6 +12,7 @@ } }, "Features": { - "TeleportByMapMark": true + "TeleportByMapMark": true, + "UnlimitedEnergy": true } } \ No newline at end of file