Dear ServUO community,
Good morning/afternoon/evening! I would like to seek support on where to look to fix the crash.
I am getting a crash everyday with the exact same log. However, I am not sure what is the issue.
From the server files, I am using SVN. Regarding the bountyquest spawner, I am using also SVN and not modified. My baseCreature is modified though. Please have a look below the crash log for my basecreature's onbeforedeath.
Thank you very much for your time and kind attention.
BaseCreature
Best regards
Good morning/afternoon/evening! I would like to seek support on where to look to fix the crash.
I am getting a crash everyday with the exact same log. However, I am not sure what is the issue.
From the server files, I am using SVN. Regarding the bountyquest spawner, I am using also SVN and not modified. My baseCreature is modified though. Please have a look below the crash log for my basecreature's onbeforedeath.
Thank you very much for your time and kind attention.
Code:
Server Crash Report
===================
ServUO Version 0.5, Build 6738.3168
Operating System: Microsoft Windows NT 6.1.7601 Service Pack 1
.NET Framework: 4.0.30319.42000
Time: 6/20/2018 11:43:32 PM
Mobiles: 2324
Items: 71001
Exception:
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at Server.Items.TreasureMap.ValidateLocation(Int32 x, Int32 y, Map map)
at Server.Items.TreasureMap.GetRandomLocation(Map map)
at Server.Items.TreasureMap..ctor(Int32 level, Map map)
at Server.Mobiles.BaseCreature.OnBeforeDeath()
at Server.Mobile.Kill() in c:\ServUO\Server\Mobile.cs:line 4000
at Server.Mobiles.BaseShipCaptain.OnShipDelete()
at Server.Multis.BaseBoat.OnAfterDelete()
at Server.Item.Delete() in c:\ServUO\Server\Item.cs:line 4374
at Server.Engines.Quests.BountyQuestSpawner.SpawnPirateAndGalleon(SpawnZone zone, Map map)
at Server.Engines.Quests.BountyQuestSpawner.SpawnRandom()
at Server.Engines.Quests.BountyQuestSpawner.OnTick()
at Server.Timer.DelayCallTimer.OnTick() in c:\ServUO\Server\Timer.cs:line 614
at Server.Timer.Slice() in c:\ServUO\Server\Timer.cs:line 409
at Server.Core.Main(String[] args) in c:\ServUO\Server\Main.cs:line 663
Clients:
- Count: 1
+ 127.0.0.1: (account = TestPlay) (mobile = 0x16 'Ezcap')
BaseCreature
Code:
public virtual double TreasureMapChance { get { return TreasureMap.LootChance; } }
public virtual int TreasureMapLevel { get { return -1; } }
public virtual bool IgnoreYoungProtection { get { return false; } }
//daat99 OWLTR start - On Before (Re) Tame methods
public virtual void OnBeforeTame()
{
}
public virtual void OnBeforeReTame()
{
}
//daat99 OWLTR start - On Before (Re) Tame methods
public override bool OnBeforeDeath()
{
int treasureLevel = TreasureMapLevel;
GetLootingRights();
if (treasureLevel == 1 && Map == Map.Trammel && TreasureMap.IsInHavenIsland(this))
{
Mobile killer = LastKiller;
if (killer is BaseCreature)
{
killer = ((BaseCreature)killer).GetMaster();
}
if (killer is PlayerMobile && ((PlayerMobile)killer).Young)
{
treasureLevel = 0;
}
}
if (!Summoned && !NoKillAwards && !IsBonded && !NoLootOnDeath)
{
if (treasureLevel >= 0)
{
if (m_Paragon && XmlParagon.GetChestChance(this) > Utility.RandomDouble())
{
XmlParagon.AddChest(this, treasureLevel);
}
else if (/*(Map == Map.Felucca || Map == Map.Trammel) &&*/TreasureMapChance >= Utility.RandomDouble())
{
Map map = Map;
if (map == Map.Trammel && Siege.SiegeShard)
map = Map.Felucca;
PackItem(new TreasureMap(treasureLevel, map));
}
}
if (m_Paragon && Paragon.ChocolateIngredientChance > Utility.RandomDouble())
{
switch (Utility.Random(4))
{
case 0:
PackItem(new CocoaButter());
break;
case 1:
PackItem(new CocoaLiquor());
break;
case 2:
PackItem(new SackOfSugar());
break;
case 3:
PackItem(new Vanilla());
break;
}
}
}
if (!Summoned && !NoKillAwards && !m_HasGeneratedLoot && !m_NoLootOnDeath)
{
m_HasGeneratedLoot = true;
GenerateLoot(false);
}
if (!NoKillAwards && Region.IsPartOf("Doom"))
{
int bones = TheSummoningQuest.GetDaemonBonesFor(this);
if (bones > 0)
{
PackItem(new DaemonBone(bones));
}
}
if (IsAnimatedDead)
{
Effects.SendLocationEffect(Location, Map, 0x3728, 13, 1, 0x461, 4);
}
InhumanSpeech speechType = SpeechType;
if (speechType != null)
{
speechType.OnDeath(this);
}
if (m_ReceivedHonorContext != null)
{
m_ReceivedHonorContext.OnTargetKilled();
}
return base.OnBeforeDeath();
}
Best regards