// TMW 2 Script // Author: // Jesusalva // Micksha // Description: // This NPC is a work on progress. It measures all players equal. // Controls the weekly guild dungeon feature. // Variable structure: // $@KAMELOT_ID [ guild_id ] = instance id // $@KAMELOT_WAVE [ guild_id ] = contains a temporary control value // $KAMELOT_MX [ guild_id ] = player average level - difficulty record // $KAMELOT_PC [ guild_id ] = total members in guild // $KAMELOT_QUEST [ guild_id ] = quest status (bitmask) // 0 - Not started // 1 - Quest Assigned by Arthur (new players cannot enter anymore) // 2 - Guinevere dialog clear // 4 - Weapon Room cutscene seen // 8 - Magic Seal 01 Broken // 16 - Magic Seal 02 Broken // 32 - Door opened // 64 - Boss defeated // $KAMELOT_KEYMASK [ guild_id ] = (bitmask) Keys and Lockpicks // 1 - Treasure A (Boss Room key) // 2 - Treasure B // 4 - Treasure C // 8 - Treasure D // 16 - Weapon Room Key // $KAMELOT_PASSMASK [ guild_id ] = (bitmask) Switches in 042-10 // $KAMELOT_KEY [ guild_id ] = Which bit was assigned as the key // $KAMELOT_PASSCODE [ guild_id ] = A bitmask of passcode to use the key // $KAMELOT_COOLDOWN [ guild_id ] = Last attempt (weekly attempts) // KamelotCleanup(guildid) function script KamelotCleanup { .@g=getarg(0); //$@KAMELOT_ID[.@g]=0; $@KAMELOT_WAVE[.@g]=0; $KAMELOT_MX[.@g]=0; $KAMELOT_PC[.@g]=0; $KAMELOT_KEY[.@g]=0; $KAMELOT_QUEST[.@g]=0; $KAMELOT_KEYMASK[.@g]=0; $KAMELOT_PASSCODE[.@g]=0; $KAMELOT_PASSMASK[.@g]=0; return; } 014-4,67,26,0 script #KamelotEnter NPC_HIDDEN,0,0,{ end; OnTouch: // XXX STATUS: STAGING XXX if (!is_staff()) end; // Not in a guild: Gate is sealed (MK might be excluded as well) if (getcharid(2) < 1) { dispbottom l("The gates are firmly shut. A warning is on the door, \"DO NOT ENTER. Guild Only.\""); end; } // Save your GID for reference .@g=getcharid(2); // Quest already started if ($KAMELOT_QUEST[.@g] & 1) { // Quest started but Cooldown expired // Needs to cleanup - wipe all variables if ($KAMELOT_COOLDOWN[.@g] < gettimeparam(GETTIME_WEEKDAY)) { KamelotCleanup(.@g); } else { dispbottom l("The gates are firmly shut by some weird magical power."); end; } } // Build instance if it doesn't exists or has been reallocated if (instanceowner($@KAMELOT_ID[.@g]) != .@g) { debugmes "Creating Instance for guild %d", .@g; .@inst=instance_create("Kamelot@"+.@g, .@g, IOT_GUILD); if (.@inst < 0) Exception("Kamelot Instance Error", RB_DEFAULT|RB_ISFATAL); instance_attachmap("042-0", .@inst, .@g, "042-0@"+.@g); instance_attachmap("042-1", .@inst, .@g, "042-1@"+.@g); instance_attachmap("042-2", .@inst, .@g, "042-2@"+.@g); instance_attachmap("042-3", .@inst, .@g, "042-3@"+.@g); instance_attachmap("042-4", .@inst, .@g, "042-4@"+.@g); instance_attachmap("042-5", .@inst, .@g, "042-5@"+.@g); instance_attachmap("042-6", .@inst, .@g, "042-6@"+.@g); instance_attachmap("042-7", .@inst, .@g, "042-7@"+.@g); instance_attachmap("042-8", .@inst, .@g, "042-8@"+.@g); instance_attachmap("042-9", .@inst, .@g, "042-9@"+.@g); instance_attachmap("042-10", .@inst, .@g, "042-10@"+.@g); instance_attachmap("042-11", .@inst, .@g, "042-11@"+.@g); instance_set_timeout(0, 0, .@inst); instance_init(.@inst); $@KAMELOT_ID[.@g] = .@inst; } // You can enter in every other state if (is_admin()) warp "042-0@"+.@g, any(59, 60), 80; end; // Debug is only allowed if server is in override mode OnDebug: if (!$@GM_OVERRIDE) end; .@g=getcharid(2); if (.@g < 1) end; mes "Kamelot Debug"; mesf "Guild: %d", .@g; mesf "Keys: %d", $KAMELOT_KEYMASK[.@g]; mesf "Quest: %d", $KAMELOT_QUEST[.@g]; select l("Abort"), l("Reset"), l("Reset & Destroy"), l("Quest - Skip Weapons Room"), l("Quest - Skip Krukan fight"), l("Quest - Find all Keys"), l("Quest - Unlock Boss Room"), "", "", l("Warp - Jump to Entrance"), // 10 l("Warp - Jump to Weapon Room"), l("Warp - Jump to Basement"), l("Warp - Jump to Jail"), l("Warp - Jump to Sewer Entrance"), l("Warp - Jump to Cave Exit"); mes ""; switch (@menu) { case 2: KamelotCleanup(.@g); break; case 3: instance_destroy($@KAMELOT_ID[.@g]); KamelotCleanup(.@g); break; // We now order from bottom-up case 7: $KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|8; $KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|16; $KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|32; mes "WARNING: Boss Room was unlocked"; case 6: $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|1; $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|2; $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|4; $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|8; mes "WARNING: Kamelot Basement Chests skipped (not lootable)."; case 5: $KAMELOT_QUEST[.@g]=$KAMELOT_QUEST[.@g]|4; mes "WARNING: Krukan Fight and jail skipped."; case 4: $KAMELOT_KEYMASK[.@g]=$KAMELOT_KEYMASK[.@g]|16; mes "WARNING: Weapons Room skipped."; break; // 10+ are the warp triggers case 10: warp "042-0@"+.@g, 60, 40; break; case 11: warp "042-1@"+.@g, 40, 65; break; case 12: warp "042-2@"+.@g, 44, 45; break; case 13: warp "042-3@"+.@g, 60, 130; break; case 14: warp "042-4@"+.@g, 60, 67; break; case 15: warp "042-10@"+.@g, 95, 52; break; } close; OnInit: bindatcmd "kdebug", "#KamelotEnter::OnDebug", 99, 100, 1; end; }