Full Version : Another Crash
xmlspawner >>Scripting Support >>Another Crash
<< Prev | Next >>
Erica- 05-03-2007
Hi got a new crash any idea how to get this fix here is crash report

CODE
Exception: System.NullReferenceException: Object reference not set to an instance of an object. at Server.Engines.Help.HelpGump.EventSink_HelpRequest(HelpRequestEventArgs e) in c:\Program Files\RunUO 2.0 SVN 173\Scripts\Engines\Help\HelpGump.cs:line 62
at Server.EventSink.InvokeHelpRequest(HelpRequestEventArgs e)
at Server.Network.PacketHandlers.HelpRequest(NetState state, PacketReader pvSrc)
at Server.Network.MessagePump.HandleReceive(NetState ns)
at Server.Network.MessagePump.Slice()
at Server.Core.Main(String[] args)

and here is my help gump

CODE
using System; using Server; using Server.Items; using Server.Gumps; using Server.Network;
using Server.Menus;
using Server.Menus.Questions;
using Server.Targeting;
using Server.Accounting;
using System.Collections;
using Server.Multis;
using Server.Mobiles;
namespace Server.Engines.Help
{
public class ContainedMenu : QuestionMenu
{
private Mobile m_From;
public ContainedMenu( Mobile from ) : base( "You already have an open help request. We will have someone assist you as soon as possible. What would you like to do?", new string[]{ "Leave my old help request like it is.", "Remove my help request from the queue." } )
{
m_From = from;
}
public override void OnCancel( NetState state )
{
m_From.SendLocalizedMessage( 1005306, "", 0x35 ); // Help request unchanged.
}
public override void OnResponse( NetState state, int index )
{
if ( index == 0 )
{
m_From.SendLocalizedMessage( 1005306, "", 0x35 ); // Help request unchanged.
}
else if ( index == 1 )
{
PageEntry entry = PageQueue.GetEntry( m_From );
if ( entry != null && entry.Handler == null )
{
m_From.SendLocalizedMessage( 1005307, "", 0x35 ); // Removed help request.
PageQueue.Remove( entry );
}
else
{
m_From.SendLocalizedMessage( 1005306, "", 0x35 ); // Help request unchanged.
}
}
}
}
public class HelpGump : Gump
{
public static void Initialize()
{
EventSink.HelpRequest += new HelpRequestEventHandler( EventSink_HelpRequest );
}
private static void EventSink_HelpRequest( HelpRequestEventArgs e )
{
foreach ( Gump g in e.Mobile.NetState.Gumps )
{
if ( g is HelpGump )
return;
}
if ( !PageQueue.CheckAllowedToPage( e.Mobile ) )
return;
if ( PageQueue.Contains( e.Mobile ) )
e.Mobile.SendMenu( new ContainedMenu( e.Mobile ) );
else
e.Mobile.SendGump( new HelpGump( e.Mobile ) );
}
private class PetResTarget : Target
{
public PetResTarget( ) : base( 1, false, TargetFlags.Beneficial )
{
}
protected override void OnTarget( Mobile m, object obj )
{
if(obj is Mobile)
{
Mobile mob = (Mobile)obj;
if ( mob.IsDeadBondedPet )
{
BaseCreature bc = mob as BaseCreature;
{
bc.PlaySound( 0x214 );
bc.FixedEffect( 0x376A, 10, 16 );
bc.ResurrectPet();
m.SendMessage( "Your pet has been resurrected." );
}
}
}
}
}
private static bool IsYoung( Mobile m )
{
if ( m is PlayerMobile )
return ((PlayerMobile)m).Young;
return false;
}
public static bool CheckCombat( Mobile m )
{
for ( int i = 0; i < m.Aggressed.Count; ++i )
{
AggressorInfo info = (AggressorInfo)m.Aggressed[i];
if ( DateTime.Now - info.LastCombatTime < TimeSpan.FromSeconds( 30.0 ) )
return true;
}
return false;
}
public HelpGump( Mobile from ) : base( 0, 0 )
{
from.CloseGump( typeof( HelpGump ) );
bool isYoung = IsYoung( from );
AddBackground( 50, 25, 540, 430, 2600 );
AddPage( 0 );
AddHtmlLocalized( 150, 50, 360, 40, 1001002, false, false ); // <CENTER><U>Ultima Online Help Menu</U></CENTER>
AddButton( 425, 415, 2073, 2072, 0, GumpButtonType.Reply, 0 ); // Close
AddPage( 1 );
if ( isYoung )
{
AddButton( 80, 75, 5540, 5541, 9, GumpButtonType.Reply, 2 );
AddHtml( 110, 75, 450, 58, @"<BODY><BASEFONT COLOR=BLACK><u>Young Player Haven Transport.</u> Select this option if you want to be transported to Haven.</BODY>", true, true );
AddButton( 80, 140, 5540, 5541, 1, GumpButtonType.Reply, 2 );
AddHtml( 110, 140, 450, 58, @"<u>General question about Ultima Online.</u> Select this option if you have a general gameplay question, need help learning to use a skill, or if you would like to search the UO Knowledge Base.", true, true );
AddButton( 80, 205, 5540, 5541, 2, GumpButtonType.Reply, 0 );
AddHtml( 110, 205, 450, 58, @"<u>My character is physically stuck in the game.</u> This choice only covers cases where your character is physically stuck in a location they cannot move out of. This option will only work two times in 24 hours.", true, true );
AddButton( 80, 270, 5540, 5541, 0, GumpButtonType.Page, 3 );
AddHtml( 110, 270, 450, 58, @"<u>Resurrection.</u> This feature will take you to a page where you can resurrect either you or your pet.", true, true );
AddButton( 80, 335, 5540, 5541, 0, GumpButtonType.Page, 2 );
AddHtml( 110, 335, 450, 58, @"<u>Other.</u> If you are experiencing a problem in the game that does not fall into one of the other categories or need a Res, use this buttom for more options.", true, true );
}
else
{
AddButton( 80, 90, 5540, 5541, 1, GumpButtonType.Reply, 2 );
AddHtml( 110, 90, 450, 74, @"<u>General question about Ultima Online.</u> Select this option if you have a general gameplay question, need help learning to use a skill, or if you would like to search the UO Knowledge Base.", true, true );
AddButton( 80, 170, 5540, 5541, 2, GumpButtonType.Reply, 0 );
AddHtml( 110, 170, 450, 74, @"<u>My character is physically stuck in the game.</u> This choice only covers cases where your character is physically stuck in a location they cannot move out of. This option will only work two times in 24 hours.", true, true );
AddButton( 80, 250, 5540, 5541, 0, GumpButtonType.Page, 3 );
AddHtml( 110, 250, 450, 74, @"<u>Resurrect Options.</u>This feature will take you to another page where you can resurrect either you or your pet.", true, true );
AddButton( 80, 330, 5540, 5541, 0, GumpButtonType.Page, 2 );
AddHtml( 110, 330, 450, 74, @"<u>Other.</u> If you are experiencing a problem in the game that does not fall into one of the other categories or need a Res, use this buttom for more options.", true, true );
}
AddPage( 2 );
AddButton( 80, 90, 5540, 5541, 3, GumpButtonType.Reply, 0 );
AddHtml( 110, 90, 450, 74, @"<u>Report a bug or contact Origin.</u> Use this option to launch your web browser and mail in a bug report. Your report will be read by our Quality Assurance Staff. We apologize for not being able to reply to individual reports. ", true, true );
AddButton( 80, 170, 5540, 5541, 4, GumpButtonType.Reply, 0 );
AddHtml( 110, 170, 450, 74, @"<u>Suggestion for the Game.</u> If you'd like to make a suggestion for the game, it should be directed to the Development Team Members who participate in the discussion forums on the UO.Com web site. Choosing this option will take you to the Discussion Forums. ", true, true );
AddButton( 80, 250, 5540, 5541, 5, GumpButtonType.Reply, 0 );
AddHtml( 110, 250, 450, 74, @"<u>Account Management</u> For questions regarding your account such as forgotten passwords, payment options, account activation, and account transfer, please choose this option.", true, true );
AddButton( 80, 330, 5540, 5541, 6, GumpButtonType.Reply, 0 );
AddHtml( 110, 330, 450, 74, @"<u>Other.</u> If you are experiencing a problem in the game that does not fall into one of the other categories or is not addressed on the Support web page (located at [URL=http://support.uo.com)]http://support.uo.com)[/URL], and requires in-game assistance, use this option. ", true, true );
AddPage( 3 );
AddButton( 80, 90, 5540, 5541, 7, GumpButtonType.Reply, 0 );
AddHtml( 110, 90, 450, 145, @"<U><CENTER>Resurrect!</CENTER></U>Use this option to resurrect yourself. Please make sure your in a safe place.", true, true );
AddButton( 80, 240, 5540, 5541, 8, GumpButtonType.Reply, 0 );
AddHtml( 110, 240, 450, 145, @"<U><CENTER>Resurrect Pet!</CENTER></U>Use this option to resurrect your bonded pet.", true, true );
AddButton( 150, 390, 5540, 5541, 0, GumpButtonType.Page, 1 );
AddHtmlLocalized( 180, 390, 335, 40, 1001015, false, false ); // NO - I meant to ask for help with another matter.
}
public override void OnResponse( NetState state, RelayInfo info )
{
Mobile from = state.Mobile;
PageType type = (PageType)(-1);
switch ( info.ButtonID )
{
case 0: // Close/Cancel
{
from.SendLocalizedMessage( 501235, "", 0x35 ); // Help request aborted.
break;
}
case 1: // General question
{
type = PageType.Question;
break;
}
case 2: // Stuck
{
BaseHouse house = BaseHouse.FindHouseAt( from );
if ( house != null && house.IsAosRules )
{
from.Location = house.BanLocation;
}
else if ( from.Region is Server.Regions.Jail )
{
from.SendLocalizedMessage( 1041530, "", 0x35 ); // You'll need a better jailbreak plan then that!
}
else if ( Factions.Sigil.ExistsOn( from ) )
{
from.SendLocalizedMessage( 1061632 ); // You can't do that while carrying the sigil.
}
else if ( from.CanUseStuckMenu() && from.Region.CanUseStuckMenu( from ) && !CheckCombat( from ) && !from.Frozen && !from.Criminal && (Core.AOS || from.Kills < 5) )
{
StuckMenu menu = new StuckMenu( from, from, true );
menu.BeginClose();
from.SendGump( menu );
}
else
{
type = PageType.Stuck;
}
break;
}
case 3: // Report bug or contact Origin
{
type = PageType.Bug;
break;
}
case 4: // Game suggestion
{
type = PageType.Suggestion;
break;
}
case 5: // Account management
{
type = PageType.Account;
break;
}
case 6: // Other
{
type = PageType.Other;
break;
}
case 7: // Resurrect: Mobile
{
if (from.Alive)
{
from.SendMessage( "Your already alive Stupid!!!" );
break;
}
else
from.SendGump( new ResurrectGump( state.Mobile ) );
break;
}
case 8: // Resurrect: Pet
{
from.SendMessage( "What pet would you like to resurrect?" );
from.Target = new PetResTarget();
break;
}
case 9: // Young player transport
{
if ( IsYoung( from ) )
{
if ( from.Region is Regions.Jail )
{
from.SendLocalizedMessage( 1041530, "", 0x35 ); // You'll need a better jailbreak plan then that!
}
else if ( from.Region.Name == "Haven" )
{
from.SendLocalizedMessage( 1041529 ); // You're already in Haven
}
else
{
from.MoveToWorld( new Point3D( 3618, 2587, 0 ), Map.Trammel );
}
}
break;
}
}
if ( type != (PageType)(-1) && PageQueue.CheckAllowedToPage( from ) )
from.SendGump( new PagePromptGump( from, type ) );
}
}
}

ArteGordon- 05-03-2007
I would add some null checks here

QUOTE
private static void EventSink_HelpRequest( HelpRequestEventArgs e ) { if(e == null || e.Mobile == null || e.Mobile.NetState == null || e.Mobile.NetState.Gumps == null) return; foreach ( Gump g in e.Mobile.NetState.Gumps ) {
if ( g is HelpGump )
return;
}