I haven't had a lot of time to play with this, but it looks like the group and raid types crash the zone when used. This happens whether you are in a group/raid or not. Here is the output:
Code:
#0 0x08155ec3 in Database::setGroupInstFlagNum (this=0x836ac24, charID=22,
orgZoneID=223) at /usr/include/stdlib.h:336
#1 0x08248eee in QuestManager::setinstflag (this=0x836a920, charID=1,
orgZoneID=0, type=1) at questmgr.cpp:1572
#2 0x08250883 in XS__setinstflag (my_perl=0x83c6f20, cv=0x8430954)
at perlparser.cpp:2174
#3 0xb79d22dd in Perl_pp_entersub () from /usr/lib/libperl.so.5.8
#4 0xb79d0a8f in Perl_runops_standard () from /usr/lib/libperl.so.5.8
#5 0xb797108e in ?? () from /usr/lib/libperl.so.5.8
#6 0x083c6f20 in ?? ()
#7 0xb7a4f14e in ?? () from /usr/lib/libperl.so.5.8
#8 0x00000000 in ?? ()
Your line numbers will probably differ from mine, so if something doesn't line up, just ask. I can tell you though that questmgr.cpp:1572 is database.setGroupInstFlagNum(charID, orgZoneID);
in my source. The raid dump is the same, just with the raid code. If you want that, just let me know.
Another small problem, /goto doesn't seem to work in instances. The red text pops telling you who you're going to, but you don't actually move. This may be unrelated to your code, but /goto does indeed work in normal zones.
The single player function works perfectly, and the instances themselves from what I can tell work great as well. I had a couple of toons in two instances of the same zone, and the spawns and quests worked great in each instance. No overlapping at all. Very impressive.
Now some suggestions, since your system forces instances to be dynamic (static versions of the zone are ignored, and can only be accessed by players without an instance flag) is there anyway that you can add a rule that will allow server ops to keep the instances open for a certain amount of time after the last player left it? If the op sets the rule to 10 minutes, then the zone stays open for 10 minutes after it became empty of players.
Also, could raid type 2 be changed to flag group members as well? The idea behind this is so we could just set everything to type 2. If a group comes along that aren't in a raid, they can get flagged with this single function instead of having an extra elsif in the script to check for non-raid groups.
Can a variable be added to enable Perl to check if a player is already flagged for an instance? Also, can a new Perl function be added that will delete the flags from a player/group/raid (set both columns to 0?)
Finally, I'm not sure how your system handles this, but what happens to players that join a raid/group after they've been flagged? Can it be made so that they inherit those flags?