// TMW2 Script // Authors: // Jesusalva // Description: // Dungeon utilities - script #DungeonCore NPC_HIDDEN,{ end; // Main initialization OnInit: setarray .heatmap$, "007-2", "026-3"; setarray .cursemap$, "006-4", "006-4-1", "025-1", "026-2"; setarray .sickmap$, "029-5"; setarray .bleedmap$, "006-9", "026-6", "026-7"; setarray .clockmap$, "017-0", "032-2"; end; ///////////////////////////////////////// // Heartbeat for Heat effects OnHeat: // Did you left? .@i=array_find(.heatmap$, getmap()); if (.@i < 0) { @heat$=""; end; } // First time seeing this if (@heat$ != getmap()) { @heat$=getmap(); dispbottom l("This is a hot map, you're suffering damage over time."); } // You are in a HEATMAP$, so suffer damage from heat if (@coolio > gettimetick(2) || Class == Redy) percentheal -1, 0; else percentheal -5, 0; // New tick (dies in 140~180 seconds) addtimer2 rand2(7000, 9000), .name$+"::OnHeat"; end; ///////////////////////////////////////// // Heartbeat for Cursed Land map effects OnCurse: // Did you left? .@i=array_find(.cursemap$, getmap()); if (.@i < 0) { @curse$=""; end; } // First time seeing this if (@curse$ != getmap()) { @curse$=getmap(); dispbottom l("This is a Cursed Lands map, you'll lose mana over time and may also incurr in debuffs if mana is low (may cause death)."); } // You are in a CURSEMAP$, so suffer damage from the curse if (@purifio > gettimetick(2) || Class == Savior) heal 0, -1; else if (islegendary()) percentheal 0, -2; else percentheal 0, -4; // MP is below 20%, you'll get cursed if (Sp*100 < MaxSp*20) SC_Bonus(15, SC_CURSE, 1); // MP is below 1%, you'll get start losing HP rapidly if (Sp*100 < MaxSp) percentheal -9, 0; // New tick (cycles every 15 seconds in average) addtimer2 rand2(14000, 15000), .name$+"::OnCurse"; end; ///////////////////////////////////////// // Heartbeat for Disease effects OnSick: // Did you left? .@i=array_find(.sickmap$, getmap()); if (.@i < 0) { if (@forced_sick$ != getmap()) { @sick$=""; end; } } // First time seeing this if (@sick$ != getmap()) { @sick$=getmap(); dispbottom l("This map contains poisonous gas and may cause diseases."); } // The effect is based on HP if (Hp*10 > MaxHp*7) .@eff = SC_BLOODING; else if (Hp*10 > MaxHp*4) .@eff = SC_POISON; else .@eff = SC_DPOISON; // You are in a SICKMAP$, so suffer damage from disease if (@sickio > gettimetick(2) || Class == Raijin) { heal -50, 0; } else { heal -rand2(50, 200), 0; SC_Bonus(10, .@eff, 1); } // New tick (20 seconds fixed cycle) addtimer2 20000, .name$+"::OnSick"; end; ///////////////////////////////////////// // Heartbeat for Bleed effects OnBleed: // Did you left? .@i=array_find(.bleedmap$, getmap()); if (.@i < 0) { @bleed$=""; end; } // First time seeing this if (@bleed$ != getmap()) { @bleed$=getmap(); dispbottom l("This is a Blood Pact map, HP won't recover naturally, and bleeding may start."); } // You are in a BLEEDMAP$, HP regeneration is disabled if (@bleedio <= gettimetick(2)) SC_Bonus(15, SC_HALT_REGENERATION, 1); // You may bleed at 2% chance per 15 seconds (except heroes) if (rand2(50) == 25 && !islegendary()) SC_Bonus(15, SC_BLOODING, 1); // New tick (15 seconds fixed cycle) addtimer2 15000, .name$+"::OnBleed"; end; ///////////////////////////////////////// // Heartbeat for Clocked effects function syndroCheck { .@k = getarg(0); .@t = getarg(1, 2000); sleep2(.@t); if (!playerattached()) return false; if (BaseExp != .@k) return true; return false; } OnClocked: // Not Applicable if ($CAPTCHA & 4) end; // Did you left? .@i=array_find(.clockmap$, getmap()); if (.@i < 0) { @clocked$=""; end; } // First time seeing this if (@clocked$ != getmap()) { @clocked$=getmap(); dispbottom l("This is an OverClocked map, excessive combat will cause Botter's Syndrome Disease, which reduces EXP Gain and drops."); } // Prepare the variables we'll be studying .@mpk = MONSTERS_KILLED; .@k = BaseExp; // We'll now wait in some intervals. Killing in them cause // the K variables to be set, and contribute towards bot score. .@k1 = syndroCheck(.@k); .@k = BaseExp; .@k2 = syndroCheck(.@k); .@k = BaseExp; .@k3 = syndroCheck(.@k); .@k = BaseExp; .@k4 = syndroCheck(.@k); .@k = BaseExp; .@k5 = syndroCheck(.@k); .@k = BaseExp; .@k6 = syndroCheck(.@k); .@k = BaseExp; .@k7 = syndroCheck(.@k); .@k = BaseExp; .@k8 = syndroCheck(.@k); .@k = BaseExp; // Determine if you'll be afflicted, base chance is 100% .@chance = 100; // Every 2 seconds you spent without killing is -10% if (!.@k1) .@chance -= 10; if (!.@k2) .@chance -= 10; if (!.@k3) .@chance -= 10; if (!.@k4) .@chance -= 10; if (!.@k5) .@chance -= 10; if (!.@k6) .@chance -= 10; if (!.@k7) .@chance -= 10; if (!.@k8) .@chance -= 10; // You killed less than 7 monsters, so zero the chance if (.@mpk + 7 > MONSTERS_KILLED) .@chance -= 20; // (If you killed less than 12 monsters, potentially go to 10% else if (.@mpk + 12 > MONSTERS_KILLED) .@chance -= 10; // Determine whenever you'll be afflicted with the Syndrome // The syndrome duration is 30 seconds if (rand2(100) < .@chance) { // If you have a Homunculus active, the effect is smaller (5~10%) if (gethominfo(0)) .@homun = (homstatus() ? 10 : 20); else .@homun = 10; // Calculate the effect based on your score (5~15%) .@eff = 5 + (.@chance / .@homun); // If you already have one running (!!), increase the effect if (getstatus(SC_BOTTER_SYNDROME)) { .@eff += min(100, getstatus(SC_BOTTER_SYNDROME, 1)); } // Sanitize the effect (it cannot go past 30%) // (Note it reaches the cap if it fires at 100% rate twice w/o Homun) .@cap = (getmap() == "017-0" ? 30 : 40); .@eff = min(.@cap, .@eff); SC_Bonus(30, SC_BOTTER_SYNDROME, .@eff); } // New tick (14~30 seconds fixed cycle) addtimer2 rand(14000,30000), .name$+"::OnClocked"; end; } ////////////////////////////// 007-2 mapflag nosave 007-1,99,189 006-4 mapflag nosave 006-3,54,36 006-4-1 mapflag nosave 006-3,54,36 029-5 mapflag nosave 029-4,21,97 006-9 mapflag nosave 006-6,46,27