public bool MoveToInventory(IEntity item, Inventory inventory) { var hasRemovedItemFromSomewhere = false; hasRemovedItemFromSomewhere |= TryRemoveItemFromMap(item); hasRemovedItemFromSomewhere |= TryRemoveItemFromCurrentInventory(item); var hasSpace = inventory.Capacity > inventory.Contents.Count(); if (hasRemovedItemFromSomewhere && hasSpace) { AddItemDirectlyToInventory(item, inventory); } else { if (!hasSpace) { messageSystem.Write("Couldn't add the item to the inventory because the inventory is full."); } return(false); } return(true); }
public override ActionEventData ChooseAction(IEntity entity) { if (!Resting) { return(null); } if (EventSystem.GetStat(entity, "Tension") > 0) { MessageSystem.Write("Your rest is interrupted!"); Resting = false; return(null); } var tilt = entity.Get <TiltFighter>(); var aura = entity.Get <AuraFighter>(); var currentAegis = EventSystem.GetStat(entity, "CurrentAegisLevel"); var maxAegis = EventSystem.GetStat(entity, "Aegis"); if (tilt.Tilt.Current == 0 && aura.Aura.Current == aura.BaseAura && tilt.BrokenTicks == 0 && currentAegis == maxAegis) { MessageSystem.Write("You finish resting."); Resting = false; return(null); } return(new ActionEventData { Action = ActionType.Wait, Speed = 1000 }); }
public bool Apply(EventType type, IEntity sender, object eventData) { if (sender.Has<GodMode>()) { var data = eventData as DamageEventData; _messageSystem.Write($"GodMode prevents {data.Damage} damage."); return false; } return true; }
public bool Apply(EventType type, IEntity sender, object eventData) { var data = (ActivateSkillEventData)eventData; var skillDefinition = prototypeSystem.Get(data.SkillName).Get <Skill>(); var userAura = sender.Get <AuraFighter>().Aura; if (userAura.Current < skillDefinition.Cost) { if (sender.IsPlayer) { messageSystem.Write("You don't have enough Aura!"); } return(false); } return(true); }
public override ActionEventData ChooseAction(IEntity entity) { var currentCoordinate = _positionSystem.CoordinateOf(entity); if (Path.FirstOrDefault() == currentCoordinate) { Path.Remove(currentCoordinate); } if (Path.Any()) { SetWaitingForInputIfPlayer(entity, false); if (_playerSystem.Player == entity && _eventRuleSystem.GetStat(entity, "Tension") > 0) { _messageSystem.Write("You can't auto-walk when tension is this high."); EndPath(entity); return(null); } var coordinate = Path.First(); var vector = currentCoordinate - coordinate; if (CantReach(vector)) { EndPath(entity); } return(new ActionEventData { Action = ActionType.Move, Parameters = vector.ToString(), Speed = entity.Get <Actor>().Speed }); } else { EndPath(entity); return(null); } }