  | 
	
	
	
		Hennes Newbie
 
  Joined: 25 Mar 2012 Posts: 5
 
  | 
		
		  
			
			   Posted: Sun Mar 25, 2012 5:06 pm   
  Fix Cmud map (with ReedN's cmud_map_doctor? )   | 
			 
			
				Brief version: 
 
 
Cmud seems to crash every dozen rooms when I used the mapper.
 
Old forum posts seems to indicate I need ReedN's cmud_map_doctor.
 
 
I googled for it but somehow I can't find it.
 
Can somebody point me at the download link or tell me how to fix this without deleting the map and restarting?
 
 
 
 
 
Long version:
 
 
I have an old map created in zmud. It worked more or less. Every time I started zmud a few random rooms got one way exits, but that was easy to fix. It got boring though to do this every time zmud got restarted. Now and then zmud would crash with a read from 0x0....4, but as long as I only used zmud for mapping and not for combat area's that was manageable.
 
 
 
When I got a new computer I decided to upgrade. I bought cmud v2.37 and imported the old map. 
 
 Occasionally there was still a random room with a one way exit.
 
 Occasionally the program would crash with an illegal read from address 0x00000004
 
 I made screenshots of the maps and went back to tinyfugue as main client.
 
 
Last Thursday I installed cmud 3.34 with the old map. 
 
The new cmud seems to work a lot better. Auto configuration of the mapper worked.
 
Importing the old map was easy. (I struggled with the import from zmud to cmud2).
 
 
I spent a hours creating a map of Velana. (This is a 300x300 realm on elephant mud),
 
All day long cmud did NOT crash. It mapped neautifully.
 
 
Today I continued mapping but cmud crashed with 'SQL Error: PRIMARY KEY must be unique.' 
 
 
  Restarting cmud did not help.
 
 
  Deleting recently mapped rooms did not help.
 
 
  Deleting all rooms with mysterious one way exits did not help.
 
 
  I downloaed the MapConvert program and tried the repair option.
 
  This resulted in a map file which is slightly smaller (42Mb rather than 43MB), but does not solve the problem.
 
 
  I tried converting the map to the old zmud format and back. 
 
  This did not solve the problem either.
 
 
 
A quick google search yielded a post with almost the same problem:
 
(http://forums.zuggsoft.com/forums/viewtopic.php?t=35216 ) which suggest to use ReedN's cmud_map_doctor utility on it.
 
 
It seems I got a brainfart though. I can't seem to locate that utility. 
 
If someone can point me to a still valid download location, or mail it to me, or tell me how I can fix this I would be very happy.
 
 
 
 
 
 
 
date/time         : 2012-03-25, 18:08:04, 10ms
 
computer name     : CORE
 
user name         : hennes
 
registered owner  : hennes
 
operating system  : Windows 7 x64 Service Pack 1 build 7601
 
system language   : English
 
system up time    : 6 hours 52 minutes
 
program up time   : 55 minutes 8 seconds
 
processors        : 8x Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
 
physical memory   : 15956/18429 MB (free/total)
 
free disk space   : (C:) 52.88 GB
 
display mode      : 1920x1200, 32 bit
 
process id        : $430
 
allocated memory  : 138.19 MB
 
executable        : cMUD.exe
 
exec. date/time   : 2011-04-20 21:20
 
version           : 3.34.0.0
 
compiled with     : BCB 2006/07
 
madExcept version : 3.0k
 
data dir          : d:\games\cmud\
 
contact name      : Hennes Passmann
 
contact email     : Hennes@stack.nl
 
callstack crc     : $06a99d80, $b81a0810, $b81a0810
 
exception number  : 17
 
exception class   : EZDatabaseError
 
exception message : SQL Error: PRIMARY KEY must be unique.
 
 
Main ($ed8):
 
009003cd +00e9 cMUD.exe     ZAbstractDataset     417  +14 TZAbstractDataset.InternalAddRecord
 
76f4012e +000a ntdll.dll                                  KiUserExceptionDispatcher
 
0089a202 +002a cMUD.exe     ZDbcStatement       2000   +1 TZEmulatedPreparedStatement.ExecuteUpdate
 
0089a302 +002a cMUD.exe     ZDbcStatement       2040   +1 TZEmulatedPreparedStatement.ExecuteUpdatePrepared
 
00882364 +014c cMUD.exe     ZDbcGenericResolver  776  +26 TZGenericCachedResolver.PostUpdates
 
008a7fe8 +0038 cMUD.exe     ZDbcSqLiteResultSet  853   +1 TZSQLiteCachedResolver.PostUpdates
 
00883a9c +0018 cMUD.exe     ZDbcCachedResultSet  439   +5 TZAbstractCachedResultSet.PostRowUpdates
 
00883c14 +005c cMUD.exe     ZDbcCachedResultSet  545  +14 TZAbstractCachedResultSet.PostUpdates
 
0088458c +0080 cMUD.exe     ZDbcCachedResultSet 1526  +16 TZAbstractCachedResultSet.InsertRow
 
0090039c +00b8 cMUD.exe     ZAbstractDataset     415  +12 TZAbstractDataset.InternalAddRecord
 
00900574 +010c cMUD.exe     ZAbstractDataset     465  +19 TZAbstractDataset.InternalPost
 
0060d349 +0029 cMUD.exe     DB                            TDataSet.CheckOperation
 
0060cfe4 +0048 cMUD.exe     DB                            TDataSet.Post
 
00dc17a8 +0284 cMUD.exe     MapList3            3484  +32 TMapNode.MakeRoom
 
00dabf03 +0453 cMUD.exe     MapLoc3             2005  +99 TMapLoc.NewRoom
 
00daf472 +0212 cMUD.exe     MapLoc3             2970  +34 FollowLink
 
00db1b5c +229c cMUD.exe     MapLoc3             3493 +373 CheckForRoom
 
00db20c2 +016a cMUD.exe     MapLoc3             3548  +17 TMapLoc.MapLine
 
00dadaf0 +0330 cMUD.exe     MapLoc3             2517  +52 TMapLoc.AddLine
 
00d22975 +191d cMUD.exe     MAIN                9032 +462 TMUDForm.HandleTrigger
 
00d20b23 +000f cMUD.exe     MAIN                8392   +1 TMUDForm.UserOutNewLine
 
00a7480f +0067 cMUD.exe     term                9863   +6 TTerm.DoTriggerLine
 
00a7314e +020e cMUD.exe     term                9421  +34 HandleNewLine
 
00a739ad +06e1 cMUD.exe     term                9549 +104 TTerm.PutText
 
00a73f7f +0053 cMUD.exe     term                9656   +2 TTerm.Add
 
00d0a0de +00b6 cMUD.exe     MAIN                1897   +8 TMUDForm.OutputStr
 
00d0a493 +01ab cMUD.exe     MAIN                1996  +39 TMUDForm.NextMUDLine
 
00d0a966 +0022 cMUD.exe     MAIN                2078   +4 TMUDForm.DoNextLine
 
004bc0b7 +02bb cMUD.exe     Controls                      TControl.WndProc
 
004c00bb +04fb cMUD.exe     Controls                      TWinControl.WndProc
 
004a261b +0553 cMUD.exe     Forms                         TCustomForm.WndProc
 
004bf7e4 +002c cMUD.exe     Controls                      TWinControl.MainWndProc
 
0047d448 +0014 cMUD.exe     Classes                       StdWndProc
 
747c7bc5 +000a USER32.dll                                 DispatchMessageA
 
004aa790 +00fc cMUD.exe     Forms                         TApplication.ProcessMessage
 
004aa7ca +000a cMUD.exe     Forms                         TApplication.HandleMessage
 
004aaabf +00b3 cMUD.exe     Forms                         TApplication.Run
 
00e8cdec +0088 cMUD.exe     CMUD                 371  +20 initialization
 
0046001e +0022 cMUD.exe     Variants                      DateToWStrViaOS
 
74683398 +0010 kernel32.dll                               BaseThreadInitThunk | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Daern Sorcerer
 
  Joined: 15 Apr 2011 Posts: 809
 
  | 
		
		  
			
			   Posted: Sun Mar 25, 2012 5:16 pm      | 
			 
			
				Is that happening often? I have gotten that error, but very rarely, and just clicking continue and trying to make the room again has always fixed it for me...
  | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Hennes Newbie
 
  Joined: 25 Mar 2012 Posts: 5
 
  | 
		
		  
			
			   Posted: Sun Mar 25, 2012 5:37 pm      | 
			 
			
				Yes, it happens often.
 
 
Sometimes I can map 20 to 30 rooms without the error.  Sometimes I have to try a few times just to map a single room. | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Mixsel Wanderer
 
  Joined: 02 Feb 2003 Posts: 99 Location: Seattle, Wa
  | 
		
		  
			
			   Posted: Sun Mar 25, 2012 10:54 pm      | 
			 
			
				Damn, Wish i could remember what I did when i had that problem, but i didn't need to use any special map doctor....sorry i just can't remember what I did to fix it.
 
but it was a simple fix, cause i did it hehe | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ Spin | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		Hennes Newbie
 
  Joined: 25 Mar 2012 Posts: 5
 
  | 
		
		  
			
			   Posted: Sun Mar 25, 2012 11:23 pm      | 
			 
			
				I kept a log to see how often it happened. It started with 109 good working rooms. A lot better than the 'about on in 10-20 rooms' which I guessed at earlier.  :-)
 
 
 
Tomorrow I will install cmud and my map on two other computers  to verify that it is indeed the fault of my old map.
 
I really should have done that before, but somehow I forgot to test that.
 
Hopefully it will suddenly work and point a problem on my desktop.
 
 
 
 
== Log of mapping === 
 
Exploring Valena forests as a druid. Mapping roads, rivers, forest rooms and mistletoe.
 
--------------
 
Mapped 109 forest rooms.  109th room was special (it had mistletoe)
 
Selected all 109 rooms, colour them green (forest). Save changes.
 
Select mistletoe room. Colour it dark green. Save changes.
 
South to continue mapping. SQL error: PRIMARY KEY most be unique.
 
[Continue application]
 
--
 
Mapper off. 
 
Backtracked one room (moved in mud but not moved on the map).
 
Mapper on. "south"
 
Room succesfully mapped..
 
Mapped 16 more rooms until the next room with mistletoe.
 
Updated 1+10+5 rooms to green (regular forest)
 
Updated 1 room to dark green (mtoe forest)
 
South to continue mapping. SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
Mapper off since the location on the map is now wrong. North. Select room and [set] position.
 
Mapper on, south to continue mapping. SQL error: PRIMARY KEY most be unique. 
 
---
 
[Continue application]
 
Mapper off since the location on the map is now wrong. North. Select room and [set] position.
 
Mapper on, south to continue mapping. (succesful)
 
Map 53 more rooms (end of local bit of forest, time to colour)
 
Updated 55 rooms to green.
 
Updated  4 rooms to green.
 
 
Swap to water gear, movemode to wade, lets explore the river.
 
ne
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
sw 
 
SQL error: PRIMARY KEY most be unique.
 
[Continue application]
 
ne (river room now succesfully mapped).
 
Colour river room blue
 
Map 42 more rooms
 
(map off, AFK for tea)
 
 
Return.  map on.
 
Fixed three rooms (not recently mapped ones) which showed arrows indicating one way exits.
 
Two were in error, one had a double sw exit.
 
Selected 40 rooms and coloured them green.
 
Selected  2 rooms and coloured them green.
 
Noticed a fourth room with a wrong one way arrow. Double SE exit. Deleted erronous exit.
 
east  SQL error: PRIMARY KEY most be unique.   [Continue application]
 
west  SQL error: PRIMARY KEY most be unique.   [Continue application]
 
Mapper off and back on. Retried. Room now mapped succesful.
 
Walked around for more food. Returned to mapping area.
 
Coloured 5 rooms blue (river)
 
Coloured 3 rooms blue (river)
 
Two more rooms on the map had scrolled into vision with erronous one way exits. Fixed those.
 
Coloured 4 rooms green (forest)
 
NE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
Walk around since I lost my bearings. No errors here.
 
Walk back to the place I was mapping. mapper on.
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
The usual (mapper off, walk back, SET position, mapper back on)
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
The usual (mapper off, walk back, SET position, mapper back on)
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
The usual (mapper off, walk back, SET position, mapper back on)
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
The usual (mapper off, walk back, SET position, mapper back on)
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
The usual (mapper off, walk back, SET position, mapper back on)
 
SE (worked!), S
 
Coloured two rooms green
 
S
 
SQL error: PRIMARY KEY most be unique.  [Continue application]
 
S (worked)
 
Explored 5 more river room and coloured them blue.
 
Mapper off.
 
move 3 already explored rooms to the edge of a new area.
 
Peer around to see which are safe forest rooms.
 
Mapper back on. 
 
SE
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
---
 
Short break. Walked to a different part of the forest.
 
Mapped 63 more rooms and coloured them.
 
Walked one room, then SW into a new room.
 
SQL error: PRIMARY KEY most be unique. 
 
[Continue application]
 
Mapped 39 rooms
 
Found an erronous 1 way marked exit and fixed it (in recently mapped rooms)
 
Mapped an coloured one mising room (deleted earlier when I deleted rooms with erronous exit markers)
 
Explored more rooms
 
Coloured 161 forest rooms green.
 
Walked back to the east side of the forest to continue work on the river map.
 
First room to map :SQL error: PRIMARY KEY most be unique.  [Continue application]
 
Std location fix.
 
Reenter room. SQL error: PRIMARY KEY most be unique.  [Continue application]
 
Std location fix.
 
Reenter room (works) | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Rahab Wizard
 
  Joined: 22 Mar 2007 Posts: 2320
 
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 1:15 am      | 
			 
			
				If I recall correctly, this error is usually caused by a bad room in your map.  In the mapper, go to the zone you have the error in, and open the spreadsheet view.  Scroll to the bottom.  Look for a room with bad values--usually something like a 0 for Room ID and lots of blank fields, if I recall correctly.  Delete that room.
  | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		MattLofton GURU
 
  Joined: 23 Dec 2000 Posts: 4834 Location: USA
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 1:58 am      | 
			 
			
				the map doctor is an old utility from before the MapConvert utility was offered.  It has since been incorporated into the MapConvert utility and should not be used (aside from this, the mapdoctor would reverse all the object/exit/etc ids and cause roomscripts to break since they no longer pointed to the same rooms anymore).
  | 
			 
		  | 
	
	
	  
		  
		    
			  _________________ EDIT: I didn't like my old signature | 
			       | 
			 
		   
		 | 
	
	
		  | 
	
	
		bothkill Apprentice
  
  Joined: 13 Mar 2005 Posts: 125 Location: Bucharest
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 6:36 am      | 
			 
			
				I am not an IT specialist but I got some experience on working with the map database file. I designed my own solution to recycling the numbers of deleted rooms (with some hints from and collaboration with ReedN).
 
So, Hennes, I could have a few ideas where to check for that error of yours (SQL error: PRIMARY KEY most be unique.), but it would be somewhat difficult to think of possible areas to search, then tell you how to search for it, then get back to me with the result test, then again thinking for ohter solutions, then... and so on.
 
 
The idea is, IF you feel comfortable, you could send me the map database file and I will try to see if my little SQLite knowledge can identify the issue.
 
 
Needless to say that I won't use your map for either my own purpose (except for logging to your MUD and test the mapping on your flle) or for others'. | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		bothkill Apprentice
  
  Joined: 13 Mar 2005 Posts: 125 Location: Bucharest
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 7:17 am      | 
			 
			
				An example of testing:
 
 
From your log it looks like the mapper tries to make a room whose number (next-to-create-room number) is already in the database.
 
 
Do the following:
 
 
1.Download this executable file from the SQLite development website.
 
2.Drag-and-drop your map .dbm file on the 'sqlite3.exe' file.
 
3.Enter these commands:
 
 
	  | Code: | 
	 
	
	  SELECT MAX(ObjID) FROM ObjectTbl;
 
SELECT VersId, ObjID FROM VersTbl;
 
.quit | 
	 
 
 
 
On the first command you'll get:
 
<a_number>
 
On the second command you'll get one line(hopefully):
 
1|<another_number>
 
 
Ideally, <a_number> should be less than <another_number>. | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Rahab Wizard
 
  Joined: 22 Mar 2007 Posts: 2320
 
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 12:23 pm      | 
			 
			
				Actually, Matt is right--running the map through the MapConvert utility should fix it.
  | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		bothkill Apprentice
  
  Joined: 13 Mar 2005 Posts: 125 Location: Bucharest
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 12:30 pm      | 
			 
			
				It seems that was tried with no success.
 
 
 
	  | Hennes wrote: | 
	 
	
	  I downloaed the MapConvert program and tried the repair option.
 
  This resulted in a map file which is slightly smaller (42Mb rather than 43MB), but does not solve the problem.
 
 
  I tried converting the map to the old zmud format and back. 
 
  This did not solve the problem either. | 
	 
 
 | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Hennes Newbie
 
  Joined: 25 Mar 2012 Posts: 5
 
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 1:38 pm      | 
			 
			
				Matt: I do not yet use any room scripts, so I am not worried about reversing them. But it is very good to know that those features are alreay in MapConvert and that there is no reason for me to keep looking for the old program.
 
 
 
BothKill:  
 
 
	  | Quote: | 
	 
	
	  | Ideally, <a_number> should be less than <another_number>. | 
	 
 
 
 
I downloaded the SQLlite3 file you mentioned and I got this:
 
 
sqlite> SELECT MAX(ObjID) from ObjectTbl;
 
30756
 
sqlite> SELECT VersId, ObjID FROM VersTbl;
 
1|30757
 
sqlite>
 
 
If I understand it correctly the room with the largest room number is room 30756 and the next room number to be used it 30757?
 
 
 
 
I also browsed though the database using 'SQLite Database Browser 2.0 b1'. I shows a lot of information.  Some of it quite understandable (e.g. ZoneTbl), some of it confusing.  (E.g 'VersTbl' version table? why have a max room ID in it? Doesn't the database auto numbering insist on a unique value?).
 
 
Then again my school lessons in SQL are 25 years ago and I hated every day of it. Mainly due to the client we used back then. Entering multi line queries without any editing and with my typing skills is very frustrating.  Other stuff such as designing a DB so it is in the third normal form stuck a bit better. 
 
 
 
A tried manual inspection of a few tables, but there are quite a few entries. (23734 in ObjectTbl and 157265 in ExitTbl).
 
 
I have upload the map to a website and I will PM you the URL.
 
Sadly enough elephant mud is down atm  since 10:00 Brittish summer time. First downtime in about half a year, but the timing is unfortunate. | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		bothkill Apprentice
  
  Joined: 13 Mar 2005 Posts: 125 Location: Bucharest
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 8:06 pm      | 
			 
			
				I can confirm the issue reported by Hennes is a CMUD bug.
 
It also happens to me.
 
 
The error arises WHEN mapping new rooms AFTER coloring rooms (by selecting them with a rectangle).
 
 
Here are the steps:
 
(make sure your next move would create a new room)
 
 
1. Turn on Map mode
 
2. Click Properties icon (on the Mapper) and activate the 'Appearance' tab
 
3. Select one or more rooms BY USING A RECTANGLE
 
4. In the Room Properties mini-window, choose a Fill color (try with red), click Save changes and then click Yes when asked.
 
5. Move so as to create a new room
 
6. You should get the error message (if NOT, repeat the process 2-3 times; if still NOT .. I don't know then..) | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Rahab Wizard
 
  Joined: 22 Mar 2007 Posts: 2320
 
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 8:34 pm      | 
			 
			
				I vaguely recall reporting a similar bug several years ago, which involved setting a room border rather than a room color.  I can't find the thread now, if I did.  I think I determined that after doing this, it would try to create a room with an ID of 0.  Doing it a second time, naturally, produces an error as it tries to create another room with an ID of 0.  I went through the spreadsheet display of rooms to get rid of these spurious rooms.  But I seem to recall that the mapconvert could fix the map, too.
  | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		Hennes Newbie
 
  Joined: 25 Mar 2012 Posts: 5
 
  | 
		
		  
			
			   Posted: Mon Mar 26, 2012 10:08 pm      | 
			 
			
				Mapconvert  might have fixed the map. But after mapconvert I went on mapping, basically repeating the steps Bothkill just described.
  | 
			 
		  | 
	
	
	  | 
		  
		 | 
	
	
		  | 
	
	
		| 
		
		 | 
	
	
		 |