All pastes #25748 Raw Edit

Someone

public text v1 · immutable
#25748 ·published 2005-10-17 15:44 UTC
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(
		 "&regen",
		 (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;
		}
	}
}