public static void ProcessCancelSkill(this World world, ClientConnection client, CancelSkill message) { var avatar = client.Avatar as CombatantModel; if (avatar == null) { client.LogMessage("Canceled a skill invocation, but don't have an avatar."); return; } // If already performing invocation, just cancel it bool found = false; if (avatar.ActivatingSkill != EnumSkill.None) // TODO: //&& avatar.ActivatingSkill.InvokationId == message.InvokationId) { world.Apply(new EntityUpdateEvent(avatar.StartSkill(EnumSkill.None, null, Global.Now, TimeSpan.FromSeconds(0)), "Started using skill")); found = true; } else { // TODO: search for it in queued skill invocations // just generate a new queue with the invocation missing /* var newQueue = new Queue<UseSkill>(); foreach (UseSkill m in avatar.SkillQueue) { if (m.InvokationId == message.InvokationId) { // don't add it found = true; } else newQueue.Enqueue(m); } avatar.SkillQueue = newQueue; */ avatar.EmptyQueue(); } if (found) client.LogMessage("Successfully canceled invocation " + message.InvokationId); else client.LogMessage("Failed to cancel invocation " + message.InvokationId); }
public static void ProcessCancelSkill(ClientConnection client, CancelSkill message) { var avatar = client.Avatar as MobileAvatar; if (avatar == null) { client.LogMessage("Canceled a skill invocation, but don't have an avatar."); return; } // If already performing invocation, just cancel it bool found = false; if (avatar.ActivatingSkill != null && avatar.ActivatingSkill.InvokationId == message.InvokationId) { avatar.ActivatingSkill = null; found = true; } else { // search for it in queued skill invocations // just generate a new queue with the invocation missing var newQueue = new Queue<UseSkill>(); foreach (UseSkill m in avatar.SkillQueue) { if (m.InvokationId == message.InvokationId) { // don't add it found = true; } else newQueue.Enqueue(m); } avatar.SkillQueue = newQueue; } if (found) client.LogMessage("Successfully canceled invocation " + message.InvokationId); else client.LogMessage("Failed to cancel invocation " + message.InvokationId); }
void ProcessMessage(ClientConnection client, CancelSkill message) { World.ProcessCancelSkill(client, message); }