Comment 10 for bug 1226558

Revision history for this message
Stephen Lyons (slysven) wrote : Re: [Mudlet-makers] [Bug 1226558] [NEW] getRoom in TArea causes seg fault on map creation

Ah, one of those patches I sent you Heiko overhauls the room exit
dialogue though I don't think it'll be hit by anything that revises the
TArea code.

I notice from the recent git master branch that setting a normal room's
area to 0 seems to be permitted by the lua code but it really messes
things up for that room - the mapper can't seem to decide which area the
room is in and I think the mapper code draws both "in area" and "out of
area" exits to (or from?) that room. Using the lua command to then move
the room to another area (or possibly back to the original one) fails
with a "room already exists" sort of message (sorry can't be precise as
don't have development pc booted as I write). I think that trying to
move the room (original area)->"0"->(different area) ends up with it
being duplicated and that does "not work well" 8-/ in the current code...!

Inspecting the code - I'm not clear how TRoom::setArea( int _areaID )
called from TMap::setRoomArea( int _areaID ) called from either
TLuaInterpreter::setRoomArea() or from somewhere in T2DMap.cpp behaves
if the room concerned has already been allocated to an area. I can't
see where the room is removed from the TArea(*)->rooms for the *old*
area (or its limits recalculated). I may be missing something of course
but I'm suspicious!

On 23/09/13 07:22, Heiko wrote:
> No, I don't think so.
>
> Am 20.09.2013 16:24, schrieb Chris:
>> Heiko,
>>
>> Do you have any uncommitted work to the mapper that would make this a waste
>> of time to pursue at the moment?
>>
>>
>> On Thu, Sep 19, 2013 at 5:45 PM, Vadim Peretokin <email address hidden>wrote:
>>
>>> Yeah, I am in agreement there - I wouldn't go down the path of all in one.
>>> We could add it for conveniences sake - for example we have the all in one
>>> function to creating miniconsoles, but we also have the option of doing it
>>> step by step. However with Lua's ordered arguments (unless you're using
>>> tables, which does not make for an efficient API) then tacking everything
>>> to the end of a function becomes unwieldy.
>>>
>>> I've never used area 0 really. It's mostly annoying in the fact that it
>>> shows up in the list of areas the map has and in the mapper widget as a
>>> blank entry. I'd support hiding it from the API (partially - so we don't
>>> see it, but can use it) and the user (not showing in the mapper widget) and
>>> making use of it as the temporary void storage.
>>>
>>> --
>>> You received this bug notification because you are subscribed to the bug
>>> report.
>>> https://bugs.launchpad.net/bugs/1226558
>>>
>>> Title:
>>> getRoom in TArea causes seg fault on map creation
>>>
>>> Status in Mudlet the MUD client:
>>> New
>>>
>>> Bug description:
>>> Creating a new map with this code on the latest development branch
>>> causes this backtrace:
>>>
>>> 0 TArea::fast_ausgaengeBestimmen TArea.cpp 168 0x5128bb
>>> 1 TMap::setExit TMap.cpp 304 0x5281ca
>>> 2 TLuaInterpreter::setExit TLuaInterpreter.cpp 6650
>>> 0x492075
>>> 3 ?? C:\mingw32\lib\lua51.dll 0x66d862e0
>>> 4 ?? C:\mingw32\lib\lua51.dll 0x66d8ffa6
>>> 5 ?? C:\mingw32\lib\lua51.dll 0x66d866e0
>>> 6 ?? C:\mingw32\lib\lua51.dll 0x66d81590
>>> 7 ?? C:\mingw32\lib\lua51.dll 0x66d85ad6
>>> 8 ?? C:\mingw32\lib\lua51.dll 0x66d86843
>>> 9 ?? C:\mingw32\lib\lua51.dll 0x66d82870
>>> 10 TLuaInterpreter::compile TLuaInterpreter.cpp 9649
>>> 0x49ce7a
>>> 11 TScript::compileScript TScript.cpp 150 0x4b04d7
>>> 12 TScript::setScript TScript.cpp 143 0x4b048e
>>> 13 dlgTriggerEditor::saveScript dlgTriggerEditor.cpp 4282
>>> 0x456ad9
>>> 14 dlgTriggerEditor::slot_saveScriptAfterEdit
>>> dlgTriggerEditor.cpp 4178 0x456799
>>> 15 dlgTriggerEditor::slot_save_edit dlgTriggerEditor.cpp
>>> 6932 0x46a642
>>> 16 dlgTriggerEditor::qt_static_metacall moc_dlgTriggerEditor.cpp
>>> 509 0x57ecd9
>>> 17 QMetaObject::activate qobject.cpp 3479 0x4c94cd0
>>> 18 QMetaObject::activate qobject.cpp 3354 0x4c94672
>>> 19 QAction::triggered moc_qaction.cpp 356 0x11674669
>>> 20 QAction::activate qaction.cpp 1175 0x11673c1e
>>> ... <More>
>>>
>>>
>>> code:
>>>
>>> -------------------------------------------------
>>> -- Put your Lua functions here. --
>>> -- --
>>> -- Note that you can also use external Scripts --
>>> -------------------------------------------------
>>> function makeMap()
>>> id = 0
>>> for i=0,100 do
>>> for j=0, 100 do
>>> addRoom(id)
>>> --setRoomArea(id,0) --uncomment this and remove below call
>>> to avoid seg faults
>>> setRoomName(id, tostring(id))
>>> setRoomCoordinates(id, i, j, 0)
>>> setExit(id-1,id,1)
>>> setExit(id,id-1,2)
>>> setRoomArea(id,0)
>>> id = id+1
>>> end
>>> end
>>> end
>>>
>>> function makeLabels()
>>> id=1
>>> for i=0,100 do
>>> for j=0, 100 do
>>> --display(id)
>>> x,y,z = getRoomCoordinates(id)
>>> createMapLabel(0,tostring(id),x,y,z,0,255,0,0,0,0)
>>> id = id+1
>>> end
>>> end
>>> end
>>>
>>> --makeMap()
>>> --makeLabels()
>>> centerview(1)
>>>
>>> uncomment makeMap and it crashes. It fails when id is 1 as well, so it
>>> isn't because of the i-1 setExit bit. It's caused by mpRoomDB not
>>> being initialized because there is no area created. Even post
>>> creation, the room needs to be assigned to an area first before any
>>> calls to mpRoomDB are called, else it will seg fault. It seems like we
>>> need some 'void' area that has no name and is just an abyss for rooms
>>> waiting to be allocated to avoid breaking scripts.
>>>
>>> To manage notifications about this bug go to:
>>> https://bugs.launchpad.net/mudlet/+bug/1226558/+subscriptions
>>>
>