sahisahi
Member
Hello im trying to mod ItemID skill so it let ''identify'' mounts. IF i undersand correctly it crash because the target is not an item?
I made 2 edits marked as
///EDITED BY ME////
This is what i have:
crash log:
Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Server.Items.ItemIdentification.InternalTimer.OnTick() in c:\Users\sahi\Desktop\server\Scripts\Skills\ItemIdentification.cs:line 183
at Server.Timer.Slice()
at Server.Core.Main(String[] args)
I made 2 edits marked as
///EDITED BY ME////
This is what i have:
Code:
using System;
using Server.Mobiles;
using Server.Targeting;
namespace Server.Items
{
public class ItemIdentification
{
public static void Initialize()
{
SkillInfo.Table[(int)SkillName.ItemID].Callback = OnUse;
}
public static TimeSpan OnUse( Mobile from )
{
if (from.BeginAction(typeof(IAction)))
{
from.SendLocalizedMessage(500343); // What do you wish to appraise and identify?
from.Target = new InternalTarget();
}
else
from.SendAsciiMessage("You must wait to perform another action.");
return TimeSpan.Zero;
}
[PlayerVendorTarget]
private class InternalTarget : Target, IAction
{
public InternalTarget() : base ( 8, false, TargetFlags.None )
{
AllowNonlocal = true;
}
protected override void OnTarget( Mobile from, object o )
{
bool releaseLock = true;
if (o is Item)
{
releaseLock = false;
new InternalTimer(from, o as Item).Start();
}
///EDITED BY ME number one///////
if (o is mustangid)
{
releaseLock = false;
new InternalTimer(from, o as Item).Start();
}
///END OF EDITED BY ME number one//////
else if (o is Mobile)
from.SendAsciiMessage("Eso no es un objeto!");
else
from.SendAsciiMessage("No estas muy seguro..."); // You are not certain...
//allows the identify skill to reveal attachments
// Server.Engines.XmlSpawner2.XmlAttach.RevealAttachments(from, o);
if (releaseLock && from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
}
#region TargetFailed
protected override void OnCantSeeTarget(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnCantSeeTarget(from, targeted);
}
protected override void OnTargetDeleted(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetDeleted(from, targeted);
}
protected override void OnTargetUntargetable(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetUntargetable(from, targeted);
}
protected override void OnNonlocalTarget(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnNonlocalTarget(from, targeted);
}
protected override void OnTargetInSecureTrade(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetInSecureTrade(from, targeted);
}
protected override void OnTargetNotAccessible(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetNotAccessible(from, targeted);
}
protected override void OnTargetOutOfLOS(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetOutOfLOS(from, targeted);
}
protected override void OnTargetOutOfRange(Mobile from, object targeted)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetOutOfRange(from, targeted);
}
protected override void OnTargetCancel(Mobile from, TargetCancelType cancelType)
{
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
else
from.EndAction(typeof(IAction));
base.OnTargetCancel(from, cancelType);
}
#endregion
#region IAction Members
public void AbortAction(Mobile from)
{
}
#endregion
}
private class InternalTimer : Timer, IAction
{
private readonly Mobile m_From;
private readonly Item m_Targeted;
private readonly Mobile Targeted;
public InternalTimer(Mobile from, Item targeted)
: base(TimeSpan.FromSeconds(1.0))
{
m_From = from;
m_Targeted = targeted;
if (from is PlayerMobile)
((PlayerMobile)from).ResetPlayerAction(this);
}
protected override void OnTick()
{
if (m_Targeted.Deleted)
return;
if (m_From.CheckTargetSkill(SkillName.ItemID, m_Targeted, 0, 100))
{
if (m_Targeted is BaseWeapon)
{
if (((BaseWeapon)m_Targeted).Identified)
m_From.SendAsciiMessage("Eso ya esta identificado.");
else
((BaseWeapon)m_Targeted).Identified = true;
}
else if (m_Targeted is BaseArmor)
{
if (((BaseArmor)m_Targeted).Identified)
m_From.SendAsciiMessage("Eso ya esta identificado.");
else
((BaseArmor)m_Targeted).Identified = true;
}
///EDITED BY ME number two///////
else if (!Targeted.Deleted && Targeted is BaseCreature && Targeted is mustangid)
{
Targeted.Name = "Mustang";
Targeted.Hue = Utility.RandomList( 1159, 1904, 2207, 1175, 2948, 1172, 2513, 1301, 1218, 1947, 1325, 2551, 2530, 2877, 1150, 2969, 1171, 1957, 1940, 1163, 2561, 2562, 2563, 2559, 2944, 2560, 2565,2564, 2589, 1158, 2545, 2514, 2535, 2580, 1173, 2546,2540,2529,2543,2544,2550,2549,2574,2578,2541,2577,1959,1960,2558,1965,2675,1932,2576, 2591,2573,1169,2516,2515,2526,2517,2974,2743,2746,2585,2574,1952,1961,1928,2571,2525,2518,2531,2524,1176,1153,1154,1157,1915,2496,1958,1954,1944,2527,1156,2579,2538,1160,2586,2532,2534,2523,2567,1962,1942,1943,1945,2533,2552,2569,1151,2583,2570,2557,1171,1170,1168,1167,1166,1164,1162,1161,1154,1153,1152 );
m_From.SendAsciiMessage(2548,"You identify the mount!.");
}
///END EDITED BY ME number two///////
else if (m_Targeted is CustomQuestItem)
{
CustomQuestItem cqi = m_Targeted as CustomQuestItem;
if (!string.IsNullOrEmpty(cqi.HiddenMessage))
cqi.LabelTo(m_From, cqi.HiddenMessage);
}
else
m_From.SendAsciiMessage("Ya conoces que clase de objeto es.");
if (m_Targeted.LootType == LootType.Blessed || m_Targeted.LootType == LootType.Newbied)
m_From.SendAsciiMessage("Tiene una especie de aura magica...");
}
else
m_From.SendMessage("No estas muy seguro..."); // You are not certain...
if (m_From is PlayerMobile)
((PlayerMobile)m_From).EndPlayerAction();
}
#region IAction Members
public void AbortAction(Mobile from)
{
from.SendMessage("No estas muy seguro..."); // You
if (from is PlayerMobile)
((PlayerMobile)from).EndPlayerAction();
Stop();
}
#endregion
}
}
}
crash log:
Exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Server.Items.ItemIdentification.InternalTimer.OnTick() in c:\Users\sahi\Desktop\server\Scripts\Skills\ItemIdentification.cs:line 183
at Server.Timer.Slice()
at Server.Core.Main(String[] args)