// Evol script // Year: 2022 // //////////////////////////////////////////////// // Red Corsair Day -|script|#CRC2022|32767 { end; OnFirst: if (strcharinfo(0) != "Blanc" && GM < G_SYSOP) end; wgm "==> CRC Day Phase 1 Started by "+strcharinfo(0); set $@CRC22, 1; enablenpc "Red Bearer"; initnpctimer; goto OnTimer30000; OnSecond: if (strcharinfo(0) != "Cerise" && GM < G_SYSOP) end; wgm "==> CRC Day Phase 2 Started by "+strcharinfo(0); set $@CRC22, 2; disablenpc "Red Bearer"; //enablenpc "Zax De'Kagen#CRC"; // set the sprite (implies enablenpc) fakenpcname "Zax De'Kagen#CRC", "Zax De'Kagen#CRC", 1142; initnpctimer; goto L_Extra; OnThird: if (strcharinfo(0) != "Cerise" && GM < G_SYSOP) end; wgm "==> CRC Day Phase 3 Started by "+strcharinfo(0); set $@CRC22, 3; disablenpc "Halifax"; stopnpctimer; end; OnStatus: if (!$@CRC22) end; set $@CRC22Mc, mobcount("007-1", "#CRC2022::OnDie")+ mobcount("008-1", "#CRC2022::OnDie")+ mobcount("009-1", "#CRC2022::OnDie")+ mobcount("011-1", "#CRC2022::OnDie")+ mobcount("031-1", "#CRC2022::OnDie")+ mobcount("018-1", "#CRC2022::OnDie")+ mobcount("018-3", "#CRC2022::OnDie")+ 7; message strcharinfo(0), "Monsters remaining: "+$@CRC22Mc; if ($@CRC22Mc <= 0) set $@CRC22, 0; // TODO: Announce? set $@CRC22Mc, 0; end; OnTimer30000: // Outskirts set $@CRC22Mc, mobcount("008-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 32; set $@CRC22M$, "008-1"; set $@CRC22Xm, 140; set $@CRC22Ym, 100; if ($@CRC22Mc >= $@CRC22Gl) goto L_End; callsub S_Spawn; end; L_End: end; // Redundant OnTimer15000: goto OnTimer30000; // Redundant OnTimer45000: goto OnTimer30000; // Redundant OnTimer60000: goto OnTimer30000; OnTimer70000: // Hurnscald [LOCKED DOWN] set $@CRC22Mc, mobcount("009-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 100; set $@CRC22M$, "009-1"; set $@CRC22Xm, 100; set $@CRC22Ym, 60; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer72000: // Outskirts set $@CRC22Mc, mobcount("008-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 40; set $@CRC22M$, "008-1"; set $@CRC22Xm, 140; set $@CRC22Ym, 100; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; // Duplicate for infinity loop bug OnTimer74000: // South Forest (LOCKED DOWN) set $@CRC22Mc, mobcount("007-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 110; set $@CRC22M$, "007-1"; set $@CRC22Xm, 130; set $@CRC22Ym, 90; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer75000: // South Forest (LOCKED DOWN) set $@CRC22Mc, mobcount("007-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 220; set $@CRC22M$, "007-1"; set $@CRC22Xm, 130; set $@CRC22Ym, 90; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; // Duplicate for infinity loop bug OnTimer76000: // West Forest (LOCKED DOWN) set $@CRC22Mc, mobcount("011-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 120; set $@CRC22M$, "011-1"; set $@CRC22Xm, 130; set $@CRC22Ym, 110; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer77000: // West Forest (LOCKED DOWN) set $@CRC22Mc, mobcount("011-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 240; set $@CRC22M$, "011-1"; set $@CRC22Xm, 130; set $@CRC22Ym, 110; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer78000: // Nivalis Port (LOCKED DOWN) set $@CRC22Mc, mobcount("031-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 100; set $@CRC22M$, "031-1"; set $@CRC22Xm, 110; set $@CRC22Ym, 130; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer80000: if ($@CRC22 > 1) goto L_Extra; // Nothing at mines yet initnpctimer; end; L_Extra: // Outskirts [LOCKDOWN] set $@CRC22Mc, mobcount("008-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 80; set $@CRC22M$, "008-1"; set $@CRC22Xm, 140; set $@CRC22Ym, 100; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; OnTimer84000: // Hurnscald Mines (Outskirt) set $@CRC22Mc, mobcount("018-1", "#CRC2022::OnDie")+1; set $@CRC22Gl, 40; set $@CRC22M$, "018-1"; set $@CRC22Xm, 140; set $@CRC22Ym, 100; if ($@CRC22Mc >= $@CRC22Gl) end; callsub S_Spawn; end; // Duplicate for infinity loop bug OnTimer86000: // Obelisk Cave & Mines [LOCKED DOWN] set $@CRC22Mc, mobcount("018-3", "#CRC2022::OnDie")+1; set $@CRC22Gl, 100; set $@CRC22M$, "018-3"; set $@CRC22Xm, 180; set $@CRC22Ym, 180; if ($@CRC22Mc < $@CRC22Gl) end; callsub S_Spawn; end; // Duplicate for infinity loop bug OnTimer88000: // Obelisk Cave & Mines [LOCKED DOWN] set $@CRC22Mc, mobcount("018-3", "#CRC2022::OnDie")+1; set $@CRC22Gl, 200; set $@CRC22M$, "018-3"; set $@CRC22Xm, 180; set $@CRC22Ym, 180; if ($@CRC22Mc < $@CRC22Gl) end; callsub S_Spawn; end; OnTimer89000: // Obelisk Cave & Mines [LOCKED DOWN] set $@CRC22Mc, mobcount("018-3", "#CRC2022::OnDie")+1; set $@CRC22Gl, 300; set $@CRC22M$, "018-3"; set $@CRC22Xm, 180; set $@CRC22Ym, 180; if ($@CRC22Mc < $@CRC22Gl) end; callsub S_Spawn; end; OnTimer90000: initnpctimer; end; // Extra wave control system [0] S_Spawn: set $@CRC_IDX, rand(getarraysize($@crc_mobs)); areamonster $@CRC22M$, 20, 20, $@CRC22Xm, $@CRC22Ym, "", $@crc_mobs[$@CRC_IDX], 1, "#CRC2022::OnDie"; set $@CRC22Mc, $@CRC22Mc + 1; if($@CRC22Mc < $@CRC22Gl) goto S_Spawn; return; OnDie: end; OnInit: setarray $@crc_mobs, 1119, 1120, 1121, 1119, 1120, 1121, 1157, 1155, 1163, 1090, 1064, 1119, 1120, 1121, 1119, 1120; // Register commands registercmd "#crcstart", strnpcinfo(0)+"::OnFirst"; registercmd "#crcnext", strnpcinfo(0)+"::OnSecond"; registercmd "#crclast", strnpcinfo(0)+"::OnThird"; registercmd "#crcstatus", strnpcinfo(0)+"::OnStatus"; end; } // Puppets 008-1,140,74,0|script|Halifax|395 { end; OnInit: disablenpc strnpcinfo(0); end; } // Puppets 018-1,142,75,0|script|Red Bearer|395 { end; OnInit: disablenpc strnpcinfo(0); end; } // Puppets 008-1,140,70,0|script|Tal#CRC|427 { end; OnInit: disablenpc strnpcinfo(0); end; } // Puppets 020-1,76,85,0|script|Zax De'Kagen#CRC|400 { //mes "[Zax De'Kagen]"; //mes "\"I will not tolerate people trying to defile my world. I'm sealing the lake, and that's final.\""; //close; end; OnInit: disablenpc strnpcinfo(0); end; } 020-1,78,85,0|script|Santa#X2022|200 { mesn l("Santa Claus"); mesq l("Hey folks! I was using [@@5288|@@] to foil Baltashar attempts to ruin Christmas for the poor kids, but the plan turned against me this time! Hohoho!"); next; mesn l("Santa Claus"); mesq l("That's because I forgot Jack Frost existed, hohoho! So, if you could collect the [@@5288|@@] back to me... Well, you would get a Christmas gift, that's for sure, hohoho!"); next; mesn l("Santa Claus"); mesq l("I recovered "+$XMAS2022+" [@@5288|@@]. From these, you gave me "+XMAS2022+" [@@5288|@@]. Grinchboos have them but they only appear every hour in four maps, and the others were lost to time, so... Do you want to give me some more?"); next; menu "Deliver", L_Deliver, "Scoreboards", L_Scores, "I'll get to it.", L_Close; L_Deliver: set XMAS2022, XMAS2022 + countitem(Naftalin); set $XMAS2022, $XMAS2022 + countitem(Naftalin); delitem Naftalin, countitem(Naftalin); set @loop, 0; set @rank, 0; goto L_MaybeInsertNext; L_MaybeInsertNext: if (XMAS2022 > $Record_XXXmas_Kills[@rank]) goto L_InsertScore; // you already had a better score if (strcharinfo(0) == $Record_XXXmas_Name$[@rank]) goto L_Scores; set @rank, @rank + 1; if (@rank == MAX_HIGH_SCORES) goto L_Scores; goto L_MaybeInsertNext; L_InsertScore: set @loop, @rank; goto L_FindLastScore; L_FindLastScore: // comment this out to allow the player to be in the list more than once // though actually, it might be better just to assume the list is full if (strcharinfo(0) == $Record_XXXmas_Name$[@loop]) goto L_MoveStuff; set @loop, @loop + 1; if (@loop == MAX_HIGH_SCORES) goto L_MoveStuff; goto L_FindLastScore; L_MoveStuff: if (@loop == @rank) goto L_FinallyInsertMe; set $Record_XXXmas_Kills[@loop], $Record_XXXmas_Kills[@loop - 1]; set $Record_XXXmas_Name$[@loop], $Record_XXXmas_Name$[@loop - 1]; set $Record_XXXmas_Date$[@loop], $Record_XXXmas_Date$[@loop - 1]; set @loop, @loop - 1; goto L_MoveStuff; L_FinallyInsertMe: set $Record_XXXmas_Kills[@rank], XMAS2022; set $Record_XXXmas_Name$[@rank], strcharinfo(0); callfunc "time_stamp"; set $Record_XXXmas_Date$[@rank], @ts_date$ + " " + @ts_time$; set @ts_date$, ""; set @ts_time$, ""; goto L_Scores; L_Scores: set @rank, 0; set @loop, 0; goto L_ShowNextRecord; L_ShowNextRecord: if ($Record_XXXmas_Kills[@loop] == 0) goto L_Close; mes (@loop + 1) + " - " + $Record_XXXmas_Name$[@loop] + " - " + $Record_XXXmas_Kills[@loop] + " [@@5288|@@] delivered at " + $Record_XXXmas_Date$[@loop]; set @loop, @loop + 1; if (MAX_HIGH_SCORES > 4 && (@loop % 5) == 0 && $Record_XXXmas_Kills[@loop] > 0) goto L_NextShowNextRecord; goto L_ShowNextRecord; L_NextShowNextRecord: next; goto L_ShowNextRecord; L_Close: close; } // Override mapflags for Christmas 2022 033-1|mapflag|town 034-1|mapflag|town 046-1|mapflag|town 047-1|mapflag|town