All pastes #78781 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-07-04 15:35 UTC
rendered paste body
using System;
using System.Collections;
using System.Reflection;
using DOL.AI;
using DOL.AI.Brain;
using DOL.Events;
using DOL.Database;
using DOL.GS.PacketHandler;
using DOL.GS.Utils;

namespace DOL.GS.Scripts
{
	[Cmd("&ngg", //command to handle
		(uint) ePrivLevel.GM, //minimum privelege level
		"NPC Gear Generator", //command description
		"'/ngg random' Create a completely random equipment template",
		"'/ngg cloth' Create a random set of cloth",
		"'/ngg leather' Create a random set of leather",
		"'/ngg studded' Create a random set of studded",
		"'/ngg chain' Create a random set of chain",
		"'/ngg scale' Create a random set of scale",
		"'/ngg plate' Create a random set of plate",
		"'/ngg cloak' Add a random cloak to the NPC",
		"'/ngg save' Save the template and NPC to database"
		)]
	public class NGGCommandHandler : AbstractCommandHandler, ICommandHandler
	{
		/*
			armor[0][][] = cloth; 
			armor[1][][] = leather; 
			armor[2][][] = studded; 
			armor[3][][] = chain; 
			armor[4][][] = scale; 
			armor[5][][] = plate;
			
			armor[][0][] = head; 
			armor[][1][] = hands; 
			armor[][2][] = arms; 
			armor[][3][] = torso; 
			armor[][4][] = legs; 
			armor[][5][] = boots;
			
			armor[][][x] = Model IDs;
			cloak[x] = Model IDs;
		*/
		private static ushort[][][] armor = new ushort[6][][];
		private static ushort[] cloak;
		
		//private static String[] slots = {"head", "hands", "arms", "torso", "legs", "boots", "cloak"};
		private static byte[] slots = { 0x15, 0x16, 0x1C, 0x19, 0x1B, 0x17, 0x1A };

		[ScriptLoadedEvent]
		public static void OnScriptCompiled(DOLEvent e, object sender, EventArgs args)
		{
			DataObject[] temp;
			int[] ot = { 32, 33, 34, 35, 38, 36 };
			int x;

			for (int a = 0; a<6; a++)
			{
				armor[a] = new ushort[6][];
				for (int b = 0; b<6; b++)
				{
					x = 0;
					temp = GameServer.Database.SelectObjects(typeof(ItemTemplate), "Object_Type = " + ot[a] + " AND Item_Type = " + slots[b]);
					armor[a][b] = new ushort[temp.Length];
					foreach(DataObject item in temp)
					{
						armor[a][b][x++] = (ushort)(item as ItemTemplate).Model;
					}
				}
			}
			
			x = 0;
			temp = GameServer.Database.SelectObjects(typeof(ItemTemplate), "Item_Type = " + slots[6]);
			cloak = new ushort[temp.Length];
			foreach(DataObject item in temp)
			{
				cloak[x++] = (ushort)(item as ItemTemplate).Model;	
			}
		}
		
		public int OnCommand(GameClient client, string[] args)
		{
			bool getcloak;
			if(Util.Random(1) == 0) getcloak = false;
			else getcloak = true;
			
			if (args.Length != 2)
			{
				DisplaySyntax(client);
				return 1;
			}

			GameNPC npc = null;
			if (client.Player.TargetObject != null && client.Player.TargetObject is GameNPC)
				npc = (GameNPC) client.Player.TargetObject;
				
			GameNpcInventoryTemplate template = npc.Inventory as GameNpcInventoryTemplate;
			if(template == null) template = new GameNpcInventoryTemplate();
			
			switch(args[1])
			{
				case "random":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						for(int i = 0; i<6; i++)
						{
							switch(Util.Random(5))
							{
								case 0:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[0][i][Util.Random(armor[0][i].Length - 1)], Util.Random(86), 0);
									break;
								case 1:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[1][i][Util.Random(armor[1][i].Length - 1)], Util.Random(86), 0);
									break;
								case 2:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[2][i][Util.Random(armor[2][i].Length - 1)], Util.Random(86), 0);
									break;
								case 3:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[3][i][Util.Random(armor[3][i].Length - 1)], Util.Random(86), 0);
									break;
								case 4:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[4][i][Util.Random(armor[4][i].Length - 1)], Util.Random(86), 0);
									break;
								case 5:
									template.AddNPCEquipment((eInventorySlot)slots[i], armor[5][i][Util.Random(armor[5][i].Length - 1)], Util.Random(86), 0);
									break;
							}
						}
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "cloth":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[0][0][Util.Random(armor[0][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[0][1][Util.Random(armor[0][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[0][2][Util.Random(armor[0][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[0][3][Util.Random(armor[0][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[0][4][Util.Random(armor[0][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[0][5][Util.Random(armor[0][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "leather":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[1][0][Util.Random(armor[1][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[1][1][Util.Random(armor[1][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[1][2][Util.Random(armor[1][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[1][3][Util.Random(armor[1][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[1][4][Util.Random(armor[1][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[1][5][Util.Random(armor[1][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "studded":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[2][0][Util.Random(armor[2][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[2][1][Util.Random(armor[2][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[2][2][Util.Random(armor[2][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[2][3][Util.Random(armor[2][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[2][4][Util.Random(armor[2][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[2][5][Util.Random(armor[2][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "chain":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[3][0][Util.Random(armor[3][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[3][1][Util.Random(armor[3][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[3][2][Util.Random(armor[3][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[3][3][Util.Random(armor[3][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[3][4][Util.Random(armor[3][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[3][5][Util.Random(armor[3][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "scale":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[4][0][Util.Random(armor[4][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[4][1][Util.Random(armor[4][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[4][2][Util.Random(armor[4][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[4][3][Util.Random(armor[4][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[4][4][Util.Random(armor[4][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[4][5][Util.Random(armor[4][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "plate":
					{
						Clear(npc);
						template = new GameNpcInventoryTemplate();
						template.AddNPCEquipment((eInventorySlot)slots[0], armor[5][0][Util.Random(armor[5][0].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[1], armor[5][1][Util.Random(armor[5][1].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[2], armor[5][2][Util.Random(armor[5][2].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[3], armor[5][3][Util.Random(armor[5][3].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[4], armor[5][4][Util.Random(armor[5][4].Length - 1)], Util.Random(86), 0);
						template.AddNPCEquipment((eInventorySlot)slots[5], armor[5][5][Util.Random(armor[5][5].Length - 1)], Util.Random(86), 0);
						if(getcloak)
							goto case "cloak";
						else
							break;
					}
				case "cloak":
					{
						template.RemoveNPCEquipment((eInventorySlot)slots[6]);
						template.AddNPCEquipment((eInventorySlot)slots[6], cloak[Util.Random(cloak.Length - 1)], Util.Random(86), 0);
						break;
					}
				case "save":
					{
						Save(npc);
						break;
					}
				default: DisplaySyntax(client); break;
			}
			npc.Inventory = template;
			npc.UpdateNPCEquipmentAppearance();
			return 1;
		}
		
		private void Clear(GameNPC target)
		{
			target.Inventory = null;
			target.EquipmentTemplateID = null;
		}
		
		private void Save(GameNPC target)
		{
			String tn;
			do
			{
				tn = System.Guid.NewGuid().ToString();
			}while(!target.Inventory.SaveIntoDatabase(tn));
			target.EquipmentTemplateID = tn;
			target.SaveIntoDatabase();
		}
	}
}