//regencommand.cs //author : dre using System; using System.Reflection; using System.Threading; using DOL.Events; using DOL.GS; using DOL.GS.Scripts; using DOL.Database; using DOL.GS.PacketHandler; using log4net; namespace DOL.GS.Scripts { [CmdAttribute( "®en", (uint)ePrivLevel.GM, "Commandes des objets regen.", "/regen create ", "/regen health - Si l'objet regen la vie", "/regen endu - Si l'objet regen l'endu", "/regen mana - Si l'objet regen la mana", "/regen intervalle - intervalle des regen en 100ms", "/regen percent - Pourcentarge ajouté par intervalle au joueur", "/regen radius - Changer le radius de regen")] public class RegenCommandHandler : ICommandHandler { private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); public int OnCommand(GameClient client, string[] args) { if(args.Length < 3) { client.Player.Out.SendMessage("Usage: /regen help", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } GameRegenItem regen = null; switch(args[1].ToLower()) { //Création d'un nouveau objet case "create": if(args.Length != 4) { client.Player.Out.SendMessage("Usage: /regen create ", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } ushort radius; uint intervalle; try { radius = ushort.Parse(args[2]); intervalle = uint.Parse(args[3]); } catch { client.Player.Out.SendMessage("Format de la taille ou intervalle incorrecte.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } regen = new GameRegenItem(); regen.Name = "Fontaine de vie"; regen.X = client.Player.X; regen.Y = client.Player.Y; regen.Z = client.Player.Z; regen.Heading = client.Player.Heading; regen.CurrentRegion = client.Player.CurrentRegion; regen.Model = 2585; regen.Radius = radius; regen.Intervalle = intervalle; regen.AddToWorld(); regen.RegenTimer = new RegionTimer(regen, new RegionTimerCallback(regen.RegenPlayers), 10); regen.RegenTimer.Start(10); break; //Regen health on/off case "health": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; if(args[2].ToLower() == "on") regen.RegenHealth = true; else if(args[2].ToLower() == "off") regen.RegenHealth = false; else client.Player.Out.SendMessage(args[2]+" est incorrecte comme paramètre.", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; //Regen endu on/off case "endu": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; if(args[2].ToLower() == "on") regen.RegenEndu = true; else if(args[2].ToLower() == "off") regen.RegenEndu = false; else client.Player.Out.SendMessage(args[2]+" est incorrecte comme paramètre.", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; //Regen mana on/off case "mana": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; if(args[2].ToLower() == "on") regen.RegenMana = true; else if(args[2].ToLower() == "off") regen.RegenMana = false; else client.Player.Out.SendMessage(args[2]+" est incorrecte comme paramètre.", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; //Pourcentage regen case "percent": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; int percent; try { percent = Convert.ToInt32(args[2]); } catch { client.Player.Out.SendMessage("Format du pourcentage incorrecte.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } regen.Percent= percent; break; //Intervalle du regen case "intervalle": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; uint Intervalle; try { Intervalle = Convert.ToUInt32(args[2]); } catch { client.Player.Out.SendMessage("Format de l'intervalle incorrecte.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } if(Intervalle == 0) { regen.Intervalle = 0; regen.RegenTimer.Stop(); break; } if(regen.Intervalle == 0) { regen.RegenTimer.Stop(); regen.Intervalle = Intervalle; regen.RegenTimer.Start(1); break; } regen.Intervalle = Intervalle; break; //Radius du regen case "radius": if(client.Player.TargetObject == null) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } if(!(client.Player.TargetObject is GameRegenItem)) { client.Player.Out.SendMessage("Vous devez sélectionner un objet de regen", eChatType.CT_System, eChatLoc.CL_SystemWindow); break; } regen = client.Player.TargetObject as GameRegenItem; ushort Radius; try { Radius = Convert.ToUInt16(args[2]); } catch { client.Player.Out.SendMessage("Format du radius incorrecte.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return 1; } regen.Radius = Radius; break; } if(regen != null) regen.SaveIntoDatabase(); return 1; } } }