2025-01-17 00:08:13 +03:00
|
|
|
using Content.Shared._CP14.Knowledge.Components;
|
2025-03-06 18:40:17 +10:00
|
|
|
using Content.Shared._CP14.Knowledge.Events;
|
2025-01-17 00:08:13 +03:00
|
|
|
using Content.Shared._CP14.Knowledge.Prototypes;
|
|
|
|
|
using Robust.Shared.Prototypes;
|
|
|
|
|
|
|
|
|
|
namespace Content.Shared._CP14.Knowledge;
|
|
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
public abstract class SharedCP14KnowledgeSystem : EntitySystem
|
2025-01-17 00:08:13 +03:00
|
|
|
{
|
2025-03-06 18:40:17 +10:00
|
|
|
public bool HasKnowledge(Entity<CP14KnowledgeStorageComponent?> entity, ProtoId<CP14KnowledgePrototype> knowledge)
|
2025-01-17 00:08:13 +03:00
|
|
|
{
|
2025-03-06 18:40:17 +10:00
|
|
|
if (HasComp<CP14AllKnowingComponent>(entity))
|
|
|
|
|
return true;
|
2025-01-17 00:08:13 +03:00
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
return Resolve(entity, ref entity.Comp, false) && entity.Comp.Knowledge.Contains(knowledge);
|
2025-01-17 00:08:13 +03:00
|
|
|
}
|
|
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
public bool TryUseKnowledge(Entity<CP14KnowledgeStorageComponent?> entity, ProtoId<CP14KnowledgePrototype> knowledge, float factor = 1f)
|
2025-01-17 00:08:13 +03:00
|
|
|
{
|
2025-03-06 18:40:17 +10:00
|
|
|
if (!Resolve(entity, ref entity.Comp, false))
|
2025-01-17 00:08:13 +03:00
|
|
|
return false;
|
|
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
if (!entity.Comp.Knowledge.Contains(knowledge))
|
2025-01-17 00:08:13 +03:00
|
|
|
return false;
|
|
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
var ev = new CP14KnowledgeUsedEvent(entity, knowledge, factor);
|
|
|
|
|
RaiseLocalEvent(entity, ev);
|
2025-01-17 00:08:13 +03:00
|
|
|
|
2025-03-06 18:40:17 +10:00
|
|
|
return true;
|
2025-01-18 14:43:11 +03:00
|
|
|
}
|
|
|
|
|
}
|