Page 4 of 24
Posted: Fri Nov 28, 2008 2:05 pm
by John Adams
Last one for today. These might all have the same root cause, so let me know if you need me to continue posting call stacks.
Code: Select all
ntdll.dll!7c81a379()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll]
> EQ2World.exe!Mutex::lock() Line 116 C++
EQ2World.exe!ZoneServer::RemovePlayerProximity(Spawn * spawn=0x06df6eb0, bool all=false) Line 2309 C++
EQ2World.exe!ZoneServer::AddPlayerProximity(Spawn * spawn=0x06df6eb0, float distance=20.000000, std::basic_string<char,std::char_traits<char>,std::allocator<char> > in_range_function="InRange", std::basic_string<char,std::char_traits<char>,std::allocator<char> > leaving_range_function="") Line 2285 C++
EQ2World.exe!EQ2Emu_lua_SetPlayerProximityFunction(lua_State * state=0x06df9670) Line 258 C++
EQ2World.exe!_luaD_precall() + 0x19d bytes C
EQ2World.exe!_luaV_execute() + 0xad8 bytes C
EQ2World.exe!_luaD_call() + 0x43 bytes C
EQ2World.exe!_lua_call() + 0x65 bytes C
EQ2World.exe!_luaD_rawrunprotected() + 0x3a bytes C
EQ2World.exe!_luaD_pcall() + 0x3e bytes C
EQ2World.exe!_lua_pcall() + 0x53 bytes C
EQ2World.exe!LuaInterface::CallSpawnScript(lua_State * state=0x06df9670, unsigned char num_parameters='') Line 330 + 0x18 bytes C++
EQ2World.exe!LuaInterface::RunSpawnScript(char * script_name=0x06e03560, char * function_name=0x00af8964, Spawn * npc=0x06df6eb0, Spawn * spawn=0x00000000, char * message=0x00000000) Line 678 + 0x13 bytes C++
EQ2World.exe!ZoneServer::CallSpawnScript(Spawn * npc=0x06df6eb0, unsigned char type=0, Spawn * spawn=0x00000000, char * message=0x00000000) Line 962 C++
EQ2World.exe!Commands::Process(unsigned int index=1, EQ2_16BitString * command_parms=0x0969fb94, Client * client=0x06d63410) Line 1818 C++
EQ2World.exe!Client::HandlePacket(EQApplicationPacket * app=0x06e33f88) Line 893 C++
EQ2World.exe!Client::Process(bool zone_process=true) Line 1245 + 0xc bytes C++
EQ2World.exe!ZoneServer::ClientProcess() Line 1121 + 0xa bytes C++
EQ2World.exe!ZoneServer::Process() Line 653 C++
EQ2World.exe!ZoneLoop(void * tmp=0x06d72640) Line 2439 + 0x8 bytes C++
EQ2World.exe!_callthreadstart() Line 293 + 0xf bytes C
EQ2World.exe!_threadstart(void * ptd=0x06d731b8) Line 277 C
kernel32.dll!77e64829()
This one may be the old bug I posted about SetPlayerProximityFunction, when a player disconnects/camps next to a spawn with a proximity function, you log back in and it immediately crashes the server.
Edit: After checking the /loc of the player who was online during the crash, they were in Neriak with no spawns - so I am not sure how this lua SetPlayerProximityFunction() was being called. Maybe there was a second player I missed.
Posted: Sat Nov 29, 2008 2:54 pm
by LethalEncounter
John Adams wrote: What was going on here was me doing the Presence of Evil quest and all was going along great, until player #2 signs into the server - in a different zone. This is the third time today I have crashed of "froze up" when another player is created or signs in. I haven't seen it with logoffs or disconnects.
You sure you didn't /reload luasystem? Either this was crashed by a 0 pointer or a deadlock situation with the MQuest Mutex. Please let me know if you didnt issue that command and I'll take a look at the latter.
Posted: Sat Nov 29, 2008 3:00 pm
by LethalEncounter
John Adams wrote:
Edit: After checking the /loc of the player who was online during the crash, they were in Neriak with no spawns - so I am not sure how this lua SetPlayerProximityFunction() was being called. Maybe there was a second player I missed.
This bug was actually caused by the player killing an NPC and then being near the NPC when it respawned. It was trying to use a variable to determine player proximity that wasn't set until later on.
Posted: Sat Nov 29, 2008 3:01 pm
by John Adams
It is very likely that I was using the /reload spawnscripts, /repop and/or /reload luasystem since that day I was fixing all our PlayFlavors lacking the Spawn param at the end at the Queen's Colony.
Posted: Thu Dec 04, 2008 1:05 am
by John Adams
Catching another crash here;
Code: Select all
> EQ2WorldDebug.exe!operator delete(void * pUserData=0xdddddddd) Line 52 + 0x3 bytes C++
EQ2WorldDebug.exe!std::allocator<char>::deallocate(char * _Ptr=0xdddddddd, unsigned int __formal=3722304990) Line 141 + 0x9 bytes C++
EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(bool _Built=true, unsigned int _Newsize=0) Line 2038 C++
EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() Line 868 C++
EQ2WorldDebug.exe!LuaSpell::~LuaSpell() + 0x4f bytes C++
EQ2WorldDebug.exe!LuaSpell::`scalar deleting destructor'() + 0x14 bytes C++
EQ2WorldDebug.exe!SpellProcess::Process() Line 73 + 0x31 bytes C++
EQ2WorldDebug.exe!main(int argc=1, char * * argv=0x00352ca8) Line 264 C++
EQ2WorldDebug.exe!__tmainCRTStartup() Line 318 + 0x19 bytes C
EQ2WorldDebug.exe!mainCRTStartup() Line 187 C
kernel32.dll!77e6f23b()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
This was me online (with Scatman) casting a spell I named "Beta Heal", which heals the target (Self) for 50-150 HP. Nothing fancy in the script, just this:
Code: Select all
function cast(Caster, Target, HealType, HealMinVal, HealMaxVal)
if HealMinVal < HealMaxVal then
ModifyHP(Target, math.random(HealMinVal, HealMaxVal))
else
ModifyHP(Target, HealMinVal)
end
end
The params passed are String "beta", 50, 150 ("beta" not used)
Posted: Thu Dec 04, 2008 1:17 am
by John Adams
Not sure what happened here, it looked like maybe EQ2Emu_lua_PlayFlavor?
Code: Select all
> EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::_Root() Line 1231 + 0x3 bytes C++
EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::_Lbound(Spawn * const & _Keyval=0x08f67048) Line 1170 + 0x8 bytes C++
EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::lower_bound(Spawn * const & _Keyval=0x08f67048) Line 987 + 0x10 bytes C++
EQ2WorldDebug.exe!std::map<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> > >::operator[](Spawn * const & _Keyval=0x08f67048) Line 168 + 0x10 bytes C++
EQ2WorldDebug.exe!ZoneServer::GetClientBySpawn(Spawn * spawn=0x08f67048) Line 1392 + 0x12 bytes C++
EQ2WorldDebug.exe!EQ2Emu_lua_PlayFlavor(lua_State * state=0x081b56a0) Line 54 + 0x13 bytes C++
EQ2WorldDebug.exe!_luaD_precall() + 0x19d bytes C
EQ2WorldDebug.exe!_luaV_execute() + 0xad8 bytes C
EQ2WorldDebug.exe!_luaD_call() + 0x43 bytes C
EQ2WorldDebug.exe!_lua_call() + 0x65 bytes C
EQ2WorldDebug.exe!_luaD_rawrunprotected() + 0x3a bytes C
EQ2WorldDebug.exe!_luaD_pcall() + 0x3e bytes C
EQ2WorldDebug.exe!_lua_pcall() + 0x53 bytes C
EQ2WorldDebug.exe!LuaInterface::CallSpawnScript(lua_State * state=0x081b56a0, unsigned char num_parameters='') Line 330 + 0x18 bytes C++
EQ2WorldDebug.exe!LuaInterface::RunSpawnScript(char * script_name=0x081ce1b0, char * function_name=0x081ce22c, Spawn * npc=0x081cc900, Spawn * spawn=0x08f67048, char * message=0x00000000) Line 678 + 0x13 bytes C++
EQ2WorldDebug.exe!ZoneServer::CallSpawnScript(Spawn * npc=0x081cc900, unsigned char type='', Spawn * spawn=0x08f67048, char * message=0x081ce22c) Line 1012 C++
EQ2WorldDebug.exe!ZoneServer::CheckPlayerProximity(Spawn * spawn=0x081cc900, Client * client=0x0a3d1f80) Line 2272 + 0x23 bytes C++
EQ2WorldDebug.exe!ZoneServer::CheckSpawnRange() Line 490 C++
EQ2WorldDebug.exe!ZoneServer::Process() Line 648 C++
EQ2WorldDebug.exe!ZoneLoop(void * tmp=0x0673cbb0) Line 2439 + 0x8 bytes C++
EQ2WorldDebug.exe!_callthreadstart() Line 293 + 0xf bytes C
EQ2WorldDebug.exe!_threadstart(void * ptd=0x06da1368) Line 277 C
kernel32.dll!77e64829()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
Posted: Thu Dec 04, 2008 3:18 pm
by LethalEncounter
John Adams wrote:Catching another crash here;
Code: Select all
> EQ2WorldDebug.exe!operator delete(void * pUserData=0xdddddddd) Line 52 + 0x3 bytes C++
EQ2WorldDebug.exe!std::allocator<char>::deallocate(char * _Ptr=0xdddddddd, unsigned int __formal=3722304990) Line 141 + 0x9 bytes C++
EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Tidy(bool _Built=true, unsigned int _Newsize=0) Line 2038 C++
EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::~basic_string<char,std::char_traits<char>,std::allocator<char> >() Line 868 C++
EQ2WorldDebug.exe!LuaSpell::~LuaSpell() + 0x4f bytes C++
EQ2WorldDebug.exe!LuaSpell::`scalar deleting destructor'() + 0x14 bytes C++
EQ2WorldDebug.exe!SpellProcess::Process() Line 73 + 0x31 bytes C++
EQ2WorldDebug.exe!main(int argc=1, char * * argv=0x00352ca8) Line 264 C++
EQ2WorldDebug.exe!__tmainCRTStartup() Line 318 + 0x19 bytes C
EQ2WorldDebug.exe!mainCRTStartup() Line 187 C
kernel32.dll!77e6f23b()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
This was me online (with Scatman) casting a spell I named "Beta Heal", which heals the target (Self) for 50-150 HP. Nothing fancy in the script, just this:
Code: Select all
function cast(Caster, Target, HealType, HealMinVal, HealMaxVal)
if HealMinVal < HealMaxVal then
ModifyHP(Target, math.random(HealMinVal, HealMaxVal))
else
ModifyHP(Target, HealMinVal)
end
end
The params passed are String "beta", 50, 150 ("beta" not used)
Check the parameters for this spell. I bet you had an extra parameter thrown in, or the spell was changed after it was read once. I have fixed the error, but that's what would have triggered it.
Posted: Thu Dec 04, 2008 3:25 pm
by John Adams
If you mean the spell_tiers or spell_data params, no sir. They hadn't changed since the spell was originally created months ago.
spell_tiers:
betaheal1.jpg
spell_data:
betaheal.jpg
Previously, this spell wouldn't even work (using the old script) but I have since re-written the script itself. So maybe this data was buggy long ago and I never caught it?
Not sure what could be off. 3 params here, 3 params expected in the script. If you found something that needed correcting anyway, then great.

Posted: Thu Dec 04, 2008 3:41 pm
by LethalEncounter
John Adams wrote:Not sure what happened here, it looked like maybe EQ2Emu_lua_PlayFlavor?
Code: Select all
> EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::_Root() Line 1231 + 0x3 bytes C++
EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::_Lbound(Spawn * const & _Keyval=0x08f67048) Line 1170 + 0x8 bytes C++
EQ2WorldDebug.exe!std::_Tree<std::_Tmap_traits<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> >,0> >::lower_bound(Spawn * const & _Keyval=0x08f67048) Line 987 + 0x10 bytes C++
EQ2WorldDebug.exe!std::map<Spawn *,Client *,std::less<Spawn *>,std::allocator<std::pair<Spawn * const,Client *> > >::operator[](Spawn * const & _Keyval=0x08f67048) Line 168 + 0x10 bytes C++
EQ2WorldDebug.exe!ZoneServer::GetClientBySpawn(Spawn * spawn=0x08f67048) Line 1392 + 0x12 bytes C++
EQ2WorldDebug.exe!EQ2Emu_lua_PlayFlavor(lua_State * state=0x081b56a0) Line 54 + 0x13 bytes C++
EQ2WorldDebug.exe!_luaD_precall() + 0x19d bytes C
EQ2WorldDebug.exe!_luaV_execute() + 0xad8 bytes C
EQ2WorldDebug.exe!_luaD_call() + 0x43 bytes C
EQ2WorldDebug.exe!_lua_call() + 0x65 bytes C
EQ2WorldDebug.exe!_luaD_rawrunprotected() + 0x3a bytes C
EQ2WorldDebug.exe!_luaD_pcall() + 0x3e bytes C
EQ2WorldDebug.exe!_lua_pcall() + 0x53 bytes C
EQ2WorldDebug.exe!LuaInterface::CallSpawnScript(lua_State * state=0x081b56a0, unsigned char num_parameters='') Line 330 + 0x18 bytes C++
EQ2WorldDebug.exe!LuaInterface::RunSpawnScript(char * script_name=0x081ce1b0, char * function_name=0x081ce22c, Spawn * npc=0x081cc900, Spawn * spawn=0x08f67048, char * message=0x00000000) Line 678 + 0x13 bytes C++
EQ2WorldDebug.exe!ZoneServer::CallSpawnScript(Spawn * npc=0x081cc900, unsigned char type='', Spawn * spawn=0x08f67048, char * message=0x081ce22c) Line 1012 C++
EQ2WorldDebug.exe!ZoneServer::CheckPlayerProximity(Spawn * spawn=0x081cc900, Client * client=0x0a3d1f80) Line 2272 + 0x23 bytes C++
EQ2WorldDebug.exe!ZoneServer::CheckSpawnRange() Line 490 C++
EQ2WorldDebug.exe!ZoneServer::Process() Line 648 C++
EQ2WorldDebug.exe!ZoneLoop(void * tmp=0x0673cbb0) Line 2439 + 0x8 bytes C++
EQ2WorldDebug.exe!_callthreadstart() Line 293 + 0xf bytes C
EQ2WorldDebug.exe!_threadstart(void * ptd=0x06da1368) Line 277 C
kernel32.dll!77e64829()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
This was caused by the LUA script trying to call a function that couldnt be called until the player was fully connected.
Posted: Thu Dec 04, 2008 4:01 pm
by John Adams
I may need your debugging prowess on this healing thing. I just made a new heal/buff script from scratch (Mystic: Minor Aid) and crashed the world after 3 casts. May be a coincidence caused by someone else online, but I am hookin up the ol debugger to see if it looks the same as above.
Posted: Thu Dec 04, 2008 4:09 pm
by John Adams
Hmm, scratch that. I just logged into debug server and cast that sucker 12 times in a row, no crashes. So it has to be something other connections are doing - which is why players crash me constantly and I cannot crash myself

I even tried logging in 3 different accounts, so it can't just be the connections.
Posted: Thu Dec 04, 2008 8:19 pm
by John Adams
My goal is to make this the longest thread on the forum.

Here's a Buy From Merchant when you have no cash. Crashes the world.
Code: Select all
> EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Myptr() Line 2055 + 0x3 bytes C++
EQ2WorldDebug.exe!std::basic_string<char,std::char_traits<char>,std::allocator<char> >::c_str() Line 1585 C++
EQ2WorldDebug.exe!Client::BuyItem(unsigned int item_id=463, unsigned char quantity='') Line 2811 + 0x8 bytes C++
EQ2WorldDebug.exe!Commands::Process(unsigned int index=87, EQ2_16BitString * command_parms=0x0969fb94, Client * client=0x0914ff58) Line 1393 C++
EQ2WorldDebug.exe!Client::HandlePacket(EQApplicationPacket * app=0x09bace60) Line 895 C++
EQ2WorldDebug.exe!Client::Process(bool zone_process=true) Line 1247 + 0xc bytes C++
EQ2WorldDebug.exe!ZoneServer::ClientProcess() Line 1121 + 0xa bytes C++
EQ2WorldDebug.exe!ZoneServer::Process() Line 653 C++
EQ2WorldDebug.exe!ZoneLoop(void * tmp=0x08fc2860) Line 2439 + 0x8 bytes C++
EQ2WorldDebug.exe!_callthreadstart() Line 293 + 0xf bytes C
EQ2WorldDebug.exe!_threadstart(void * ptd=0x082cbd08) Line 277 C
kernel32.dll!77e64829()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
Hanna Deeppockets (2530078) Merchant_ID: 4 in the TessDB
Posted: Thu Dec 04, 2008 8:53 pm
by John Adams
This may have been caused by what you mentioned earlier - I had the server up and running, and changed the spell_tiers data for 2 templar spells (the cast time was 200 instead of 20) and when I /reload spells, the server crashed.
Should I not be able to change the data and reload the spells? I have been doing that all day, with no crashes. Only just now /reload spells crashed. :/
Code: Select all
> EQ2WorldDebug.exe!Player::ModifySpellStatus(Spell * spell=0x065193d8, short value=66, bool all_spells=false, unsigned short recast=0) Line 811 + 0x15 bytes C++
EQ2WorldDebug.exe!SpellProcess::UnlockSpell(Client * client=0x0894dd08, Spell * spell=0x065193d8) Line 315 C++
EQ2WorldDebug.exe!SpellProcess::Process() Line 133 C++
EQ2WorldDebug.exe!main(int argc=1, char * * argv=0x00352ca8) Line 264 C++
EQ2WorldDebug.exe!__tmainCRTStartup() Line 318 + 0x19 bytes C
EQ2WorldDebug.exe!mainCRTStartup() Line 187 C
kernel32.dll!77e6f23b()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
Edit: Hrmm... wasn't cast_time 10ths of a second? It's 100ths of a second now, so 200 was right for 2.0 second cast heh. Oop...
Posted: Fri Dec 05, 2008 12:29 pm
by John Adams
This crash (I think!) is caused by having a fade_message set on a DOT, but the mob had already died to melee, so when the duration wore off, the fade message fires? It's the only change I made to this spell, which worked before adding the messaging.
Code: Select all
> EQ2WorldDebug.exe!SpellProcess::DeleteCasterSpell(Entity * caster=0x09207080, Spawn * target=0x08d4e010, Spell * spell=0x08dbc6c8, bool lock=false) Line 217 + 0x19 bytes C++
EQ2WorldDebug.exe!SpellProcess::Process() Line 78 C++
EQ2WorldDebug.exe!main(int argc=1, char * * argv=0x00352ca8) Line 264 C++
EQ2WorldDebug.exe!__tmainCRTStartup() Line 318 + 0x19 bytes C
EQ2WorldDebug.exe!mainCRTStartup() Line 187 C
kernel32.dll!77e6f23b()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
Reproduce it by creating a 24s DOT spell, and killing the mob before 24s timer expires.
Wizard: Cold Whorl (230000) in TessDB
(I am removing messaging for now)
Posted: Fri Dec 05, 2008 3:19 pm
by LethalEncounter
Keep them coming

I think I have all of these fixed now.