rendered paste body//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 <taille (radius)> <intervalle>",
"/regen health <on/off> - Si l'objet regen la vie",
"/regen endu <on/off> - Si l'objet regen l'endu",
"/regen mana <on/off> - Si l'objet regen la mana",
"/regen intervalle <intervalle> - intervalle des regen en 100ms",
"/regen percent <pourcentage> - Pourcentarge ajouté par intervalle au joueur",
"/regen radius <taille (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 <taille (radius)> <intervalle>", 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;
}
}
}