public override void ExecuteRemove(TriggerBase trigger) { var gameTrigger = trigger as GameTrigger; var character = gameTrigger != null ? gameTrigger.Character : null; if (character == null) { return; } var elementId = trigger.Get <int>("elementId"); var mapSrc = character.Map; var interactive = InteractiveManager.Instance.GetOneSpawn(x => x.MapId == mapSrc.Id && x.Id == elementId); WorldServer.Instance.IOTaskPool.AddMessage(() => { InteractiveManager.Instance.RemoveInteractiveSpawn(interactive); ContextRoleplayHandler.SendMapComplementaryInformationsDataMessage(character.Client); }); trigger.ReplyBold("Delete Interactive {0} on map {1}", elementId, mapSrc.Id); }
public override void ExecuteAdd(TriggerBase trigger) { var character = trigger is GameTrigger ? (trigger as GameTrigger).Character : null; if (character == null) { return; } var map = trigger.Get <Map>("mapDst"); if (map == null) { trigger.ReplyError("Map '{0}' doesn't exist", trigger.Get <int>("mapid")); } else { var mapSrc = character.Map; var cellIdDst = map.Cells[trigger.Get <short>("cellidDst")]; var elementId = trigger.Get <int>("elementId"); var template = trigger.Get <InteractiveTemplate>("templateId"); var templateId = template == null ? 0 : template.Id; var direction = trigger.Get <DirectionsEnum>("orientationId"); if (mapSrc.GetInteractiveObject(elementId) != null) { trigger.ReplyError("Interactive object {0} already exists on map {1}", elementId, mapSrc.Id); return; } var spawnId = InteractiveManager.Instance.PopSpawnId(); var skillId = InteractiveManager.Instance.PopSkillId(); var skill = new InteractiveCustomSkillRecord { Id = skillId, Type = "Teleport", Duration = 0, Parameter0 = map.Id.ToString(), Parameter1 = cellIdDst.Id.ToString(), Parameter2 = direction.ToString("D") }; var spawn = new InteractiveSpawn { Id = spawnId, MapId = mapSrc.Id, CustomSkills = { skill }, TemplateId = templateId }; var spawnSkill = new InteractiveSpawnSkills { InteractiveSpawnId = spawnId, SkillId = skillId }; WorldServer.Instance.IOTaskPool.AddMessage(() => { InteractiveManager.Instance.AddInteractiveSpawn(spawn, skill, spawnSkill); ContextRoleplayHandler.SendMapComplementaryInformationsDataMessage(character.Client); }); trigger.ReplyBold("Add Interactive {0} on map {1}", spawn.Template?.Name ?? "(no name)", spawn.MapId); } }