To add or remove effects, simply append to the StatusEffectRequests buffer. The request will be automatically evaluated, and the stacks and duration will be handled by a custom system.
Note that the equivalent of predicate and event based durations are stored by an event ID. If you are using Status Effects with custom predicate and events you will need to create your own systems that manage them. It will need to query all StatusEffects buffers, iterate through them, and decrement duration accordingly for specifically effects with event and predicate timing.
var entity =EntityManager.CreateEntityQuery(typeof(ExamplePlayer)).GetSingletonEntity();var requests =EntityManager.GetBuffer<StatusEffectRequests>(entity); // Addrequests.Add(newStatusEffectRequests(MyStatusEffectData.Id)); // Add with stack countrequests.Add(newStatusEffectRequests(MyStatusEffectData.Id, stacks:5)); // Add with durationrequests.Add(newStatusEffectRequests(MyStatusEffectData.Id, duration:3)); // Add with a predicaterequests.Add(newStatusEffectRequests(MyStatusEffectData.Id, eventId: MyEventId)); // Add with an eventrequests.Add(newStatusEffectRequests(MyStatusEffectData.Id, duration:3, eventId: MyEventId)); // Remove allrequests.Add(newStatusEffectRequests(StatusEffectRemovalType.Any)); // Remove with stack countrequests.Add(newStatusEffectRequests(StatusEffectRemovalType.Any, stacks:5)); // Remove specific datarequests.Add(newStatusEffectRequests(StatusEffectRemovalType.Data, id:MyStatusEffectData.Id)); // Remove specific namerequests.Add(newStatusEffectRequests(StatusEffectRemovalType.Name, id:MyComparableName.Id)); // Remove specific grouprequests.Add(newStatusEffectRequests(StatusEffectRemovalType.Group, group:MyStatusEffectData.Group));