bool OnTextEvent(TextEvent e, Action continuation) { var eventManager = Resolve <IEventManager>(); var mapManager = Resolve <IMapManager>(); var(useEventText, textSourceId) = eventManager.Context?.Source switch { EventSource.Map map => (false, (int)map.MapId), EventSource.EventSet eventSet => (true, (int)eventSet.EventSetId), _ => (false, (int)mapManager.Current.MapId) }; var textEvent = useEventText ? (BaseTextEvent) new EventTextEvent( (EventSetId)textSourceId, e.TextId, e.Location, e.PortraitId) : new MapTextEvent( (MapDataId)textSourceId, e.TextId, e.Location, e.PortraitId); return(OnBaseTextEvent(textEvent, continuation)); }
bool Run(DoScriptEvent doScriptEvent, Action continuation) { var assets = Resolve <IAssetManager>(); var mapManager = Resolve <IMapManager>(); var events = assets.LoadScript(doScriptEvent.ScriptId); var nodes = new EventNode[events.Count]; var chain = new EventChain(0); // Create, link and add all the nodes. for (ushort i = 0; i < events.Count; i++) { nodes[i] = new EventNode(i, events[i]); } for (ushort i = 0; i < events.Count - 1; i++) { nodes[i].Next = nodes[i + 1]; } for (ushort i = 0; i < events.Count; i++) { chain.Events.Add(nodes[i]); } var source = new EventSource.Map(mapManager.Current.MapId, TriggerType.Default, 0, 0); // TODO: Is there a better trigger type for this? var trigger = new TriggerChainEvent(chain, chain.FirstEvent, source); return(RaiseAsync(trigger, continuation) > 0); }
bool OnPartyMemberTextEvent(PartyMemberTextEvent e, Action continuation) { var state = Resolve <IGameState>(); var party = Resolve <IParty>(); var sheet = state.GetPartyMember(e.MemberId ?? party.Leader); var eventManager = Resolve <IEventManager>(); var mapManager = Resolve <IMapManager>(); var(useEventText, textSourceId) = eventManager.Context?.Source switch { EventSource.Map map => (false, (int)map.MapId), EventSource.EventSet eventSet => (true, (int)eventSet.EventSetId), _ => (false, (int)mapManager.Current.MapId) }; var textEvent = useEventText ? (BaseTextEvent) new EventTextEvent( (EventSetId)textSourceId, e.TextId, TextLocation.TextInWindowWithPortrait, sheet.PortraitId) : new MapTextEvent( (MapDataId)textSourceId, e.TextId, TextLocation.TextInWindowWithPortrait, sheet.PortraitId); return(OnBaseTextEvent(textEvent, continuation)); }