// TMW2 Scripts // Evol functions. // Author: // 4144 // Jesusalva // Description: // Function checking the client version and reports if it is too old. // This also handles all updates, and usually have priority. function script clientupdater { // Skip any update for newcomers if (getmap() ~= "000-0*") { UPDATE=gettimetick(2); } .@dg=0; // Update handler (use `date +%s` for this) // Current UPDATE value: Qui Jun 7 08:10:55 -03 2018 if (Lang > 5 && UPDATE < 1528369855) { UPDATE=1528369855; Lang=0; mesn "Jesus Saves"; mesc l("Oh, noes! Due lack of translators, some languages were removed from this project."); mesc l("You might have been affected. Please, select your desired language."); asklanguage(LANG_IN_SHIP); } // Report client version for debugging purposes if (is_admin() && UPDATE < 1528369855) { UPDATE=1528369855; dispbottom l("Client Version: @@", ClientVersion); // This is to debug UPDATE system. } // New skills introduced if (UPDATE < 1531786864) { UPDATE=1531786864; skill TMW2_FAKESKILL, 1, 0; skill TMW2_FAKESKILL2, 1, 0; } // Update new quest exp, and make sure you have the extended basic skills with you if (UPDATE < 1545228412) { UPDATE=1545228412; adddefaultskills; if (getq(TulimsharQuests_Fishman) >= 2) getexp 12, 0; if (getq(MineQuest_Tycoon) >= 3) getexp 250, 0; if (getq(MineQuest_Tycoon) >= 6) getexp 642, 0; if (getq(MineQuest_Tycoon) >= 9) getexp 100, 0; if (getq(MineQuest_Tycoon) >= 12) getexp 2435, 0; if (getq(MineQuest_Tycoon) >= 15) Zeny=Zeny+1000; if (getq(TulimsharQuests_Sailors) >= 2) getexp 200, 0; if (getq(TulimsharQuests_Devoir) >= 1) getexp 500, 0; if (getq(TulimsharQuests_AnwarField) >= 11) getexp 650, 0; if (getq(TulimsharQuests_WoodenSword) >= 2) getexp 1100, 0; // Off value on purpose if (getq(MineQuest_Caelum) >= 2) getexp 2000, 40; if (getq(HalinarzoQuest_Foxhound) >= 6) getexp 1500, 0; if (getq(HalinarzoQuest_TraderKing) >= 2) getexp 5000, 0; if (getq(HurnscaldQuest_Bandits) >= 8) getexp 1000, 0; //getexp 5000, 0; dispbottom l("Your experience level has been updated."); } // Gallery Contest and 2019-12-29 no-drop incident // ter jan 8 03:52:20 -02 2019 if (UPDATE < 1546926740) { UPDATE=1546926740; .@u$=strtolower(strcharinfo(0)); setarray .@apology$, "jesusalva", "mrhedx", "ziah", "soren xd", "warblade", "yuxin", "xtreem", "monking", "demure gm", "se francisc"; setarray .@gallery$, "jesusalva", "mishana", "bobr", "demure", "lawncable"; // Users connected during nodrop incident (2018-12-29) // Jesusalva Mrhedx Ziah "Soren xd" WarBlade // yuxin Xtreem monking "demure GM" "Se Francisc" if (array_exists(.@apology$, .@u$)) { getitembound GoldenGift, 1, 1; Zeny=Zeny+570; .@dg=1; showavatar NPC_LOF_RICH; mesn ("TMW2 Staff"); mesc l("Hello, @@! We just looked up and found out you were active during 2018-12-29!", strcharinfo(0)), 3; mesc l("And during that time, item dropped was bugged! We wanted to deliver you a token of apology!"), 3; mesc l("Sorry, and enjoy the game! Your TMW2 Staff Team."), 3; mesc l("Token Of Apology: 1x @@, 570 GP", getitemlink(GoldenGift)); next; } // 1st Gallery Contest Participants // Mishana LawnCable bObr Jesusalva demure if (array_exists(.@gallery$, .@u$)) { getitem StrangeCoin, 30; .@dg=1; showavatar NPC_LOF_RICH; mesn ("TMW2 Staff"); mesc l("Hello, @@! We are proud to announce the @@ RESULTS!", strcharinfo(0) , b(l("1° Screenshooting Contest"))), 3; mesc l("Participants: Jesusalva * mishana * bObr * demure * LawnCable"), 3; next; mesc ("Mishana Entries: Happy"), 3; mesc ("LawnCable Entries: Login Screen, TMW2 Field"), 3; mesc ("Demure Entries: Buggy Map"), 3; mesc ("Jesusalva Entries: LoF Secret Island, GM Plotting Evil Scheme For Next Event, Crazyfefe Cave"), 3; mesc ("bObr Entries: My Very Own Tiny Orchard"), 3; next; mesc l("1st Place - Mishana, LawnCable, Jesusalva, bObr"); mesc l("5th Place - Demure"); mes ""; mesc l("Hey, look, a tie happened!"); mesc l("How's that even possible? Well, 30 @@ for all contestants!", getitemlink(StrangeCoin)); next; } } // Valentine Day Event Bug // sex fev 15 18:04:00 -02 2019 if (UPDATE < 1550261040) { UPDATE=1550261040; if (#VALENTINE_POINTS) { .@dg=1; showavatar NPC_LOF_RICH; mesn ("TMW2 Staff"); mesc l("Hello, @@! We just looked up and found out you that you were affected on a Valentine Event bug!", strcharinfo(0)), 3; mesc l("Due this bug, you didn't got a proper amount of points per sent. We wanted to deliver you a token of apology!"), 3; mesc l("Sorry, and enjoy the game! Your TMW2 Staff Team."), 3; mesc l("Token Of Apology: 1x @@, 1x @@", getitemlink(SilverGift), getitemlink(MercBoxB)); getitem SilverGift, 1; getitem MercBoxB, 1; #VALENTINE_POINTS=0; next; } } // Limited bots // sex fev 15 23:22:21 -02 2019 if (UPDATE < 1550280141) { UPDATE=1550280141; .@dg=1; mesc l("Game Rules were updated!"), 1; mesc l("Use @@ to read the new version.", "@rules"), 1; mes ""; //GameRules S_NO_NPC_NAME | S_LAST_NEXT; } // Msawis bug // ter fev 19 12:15:00 -03 2019 if (UPDATE < 1550589300) { UPDATE=1550589300; if (strcharinfo(0) == "msawis") { .@dg=1; showavatar NPC_LOF_RICH; mesn ("TMW2 Staff"); mesc l("Hello, @@! We just looked up and found out that you were affected by BotCheck Logout rules!", strcharinfo(0)), 3; mesc l("First of, you didn't logged in. Without you online, WE CANNOT UNJAIL YOU! We tried with SQL but it didn't budge."), 3; mesc l("Due this bug, when you logged off on the BotCheck Area, @@. We wanted to deliver you a token of apology!", b(l("the server jailed you"))), 3; mesc l("Sorry, and enjoy the game! Your TMW2 Staff Team."), 3; mesc l("Token Of Apology: 1x @@, 1x @@", getitemlink(SupremeGift), getitemlink(MercBoxC)); mes ""; mesc l("Please contact @@ to clear this misunderstanding.", b("Jesusalva")), 1; getitem SupremeGift, 1; getitem MercBoxC, 1; // Better safe than sorry atcommand "@unjail msawis"; // I dunno if my SQL query broke something so........... sc_end SC_JAILED; if (getmap() ~= "sec_pri") warp "Save", 0, 0; next; } if (strcharinfo(0) == "vilbou") { atcommand "@unjail vilbou"; sc_end SC_JAILED; if (getmap() ~= "sec_pri") warp "Save", 0, 0; getitem MercBoxC, 1; } // Unclaimed Rewards // 2000283 Msawis 10 points // 2000552 Mrhedx 4 points // 2000299 vilbou 1 point setarray .@apology, 2000552, 2000283, 2000299; if (array_exists(.@apology, getcharid(3)) && (#VALENTINE_SENT+#VALENTINE_OPENED) > 0) { if (getcharid(3) == 2000552) { getitem BronzeGift, 1; } else if (getcharid(3) == 2000283) { getitem GoldenGift, 1; } else if (getcharid(3) == 2000299) { getitem StrangeCoin, 1; } dispbottom l("Valentine Day Event Reward automatically claimed"); #VALENTINE_SENT=0; #VALENTINE_OPENED=0; #VALENTINE_RECEIVED=0; } } // Update Tycoon quest exp // dom mar 3 12:22:04 -03 2019 if (UPDATE < 1551626524) { UPDATE=1551626524; if (getq(MineQuest_Tycoon) >= 15) getexp 43000, 0; } // Update Karma for the flexibility I need // sex mar 15 18:10:00 -03 2019 if (UPDATE < 1552684200) { UPDATE=1552684200; if (Karma >= 250) Karma=98; else Karma=100+Karma; } // Update Tycoon quest Miner Knife + Hinnak & Oscar Scythe + @ucp // ter mar 26 10:00:22 -03 2019 if (UPDATE < 1553605222) { if (UPDATE <= 1551626524) { if (getq(MineQuest_Tycoon) >= 6) { getitem MinerKnife, 1; } } if (getq(HurnscaldQuest_Farmers) >= 2 && getq(HurnscaldQuest_Farmers) < 5) { getitem Scythe, 1; } else if (getq(HurnscaldQuest_Farmers) >= 5) { getitem CottonBoots, 1; } .@dg=1; mesc l("WARNING: Use @ucp to change @@.", b(l("GAME SETTINGS"))), 1; mesc l("New default game settings:"); mesc l(" - Soul Menhir auto-saving"); mesc l(" - Daily Login Screen"); mes ""; mesc b(l("These can be reverted to previous behavior on User Control Panel!")), 3; mes ""; if (countitem(LEGACY_MiereCleaver)) mesc l("Your @@ Knockback effect expired.", getitemlink(LEGACY_MiereCleaver)), 1; if (countitem(LEGACY_Broadsword)) mesc l("Your @@ Knockback effect expired.", getitemlink(LEGACY_Broadsword)), 1; UPDATE=1553605222; } // Shovel Auto-dig option // seg mai 27 21:22:55 -03 2019 if (UPDATE < 1559002975) { UPDATE=1559002975; if (countitem(IronShovel) + countitem(SteelShovel)) dispbottom l("Shovel have been changed, right-click it to bury items."); } // General Updates // sex jun 21 13:20:21 -03 2019 if (UPDATE < 1561134021) { UPDATE=1561134021; if (Karma >= 200) Karma=98; else if (Karma < 80) Karma=100+Karma; if (getq(General_Narrator) >= 3) getitem MercBoxAA, 1; // Well, you don't need this crap I hope... if (BaseLevel < 40) getitem TulimMap, 1; if (getq(TulimsharQuest_Sailors) == 4) getexp 1508, 15; .@cr=countitem(CroconutBox); if (.@cr) { getitem CroconutBox, .@cr; dispbottom l("Croconut Box magically became two in inventory. Storage unaffected."); // Too much hassle affecting storage/cart/etc. } } // General Updates // seg jul 15 16:41:35 -03 2019 if (UPDATE < 1563219695) { UPDATE=1563219695; // You got recipe book by BSS Quest - mark as complete and get Blueprint if (getq(NivalisQuest_BlueSageSlimes) == 2) { getitem any(AncientBlueprint, AlchemyBlueprintA, EquipmentBlueprintA), 1; CRAFTQUEST=1; } } // #ADD_LVL means the user have to right to get some levels. This is a sketch. The code might be deleted. if (#ADD_LVL) { .@dg=1; mesn "Jesus Saves"; mesc l("Oh - Welcome to TMW2: Moubootaur Legends!"), 3; next; mesn "Jesus Saves"; mesc l("Please, fell at home. You can use ##B#world##b channel to speak to everyone on Discord, IRC and ingame."), 3; next; mesn "Jesus Saves"; mesc l("Our mission statement is to bring fun to all players. You'll get some levels automatically. We advise you to join a guild."), 3; next; mesn "Jesus Saves"; mesc l("If you have any trouble or doubt, don't hesit to call us. There are some cooperative quests, and more of them are being added."), 3; next; mesn "Jesus Saves"; mesc l("Anyway, ##Bwelcome##b, and have fun! If you need anything, we are a keypress from distance!"), 3; //atcommand "@blvl "+#ADD_LVL; //getitem TimeFlask, 1; #ADD_LVL=(#ADD_LVL*9)/10; if ((readparam(BaseExp)+#ADD_LVL > readparam(NextBaseExp))) { do { .@v=readparam(NextBaseExp)-readparam(BaseExp); getexp .@v, 0; #ADD_LVL-=.@v; } while (readparam(BaseExp)+#ADD_LVL > readparam(NextBaseExp)); } getexp #ADD_LVL, 0; #ADD_LVL=0; // TODO: Use @super debug functions and force player to join a guild. We will need the guild ID, though. rodex_sendmail(getcharid(0), "TMW2 Team", "Welcome to Moubootaur Legends", "Hey, thanks for believing on us! We hope to have a great time togheter. Any problem, ask for help in #world - the Discord bridge! Enjoy our game!", 20); } if (.@dg) closeclientdialog; return; } // Just be sure your client version is OK function script checkclientversion { if (ClientVersion >= 25) return; mesn "Narrator"; mesc l("Warning."), 1; mesc l("Warning."), 1; mesc l("Warning: You are using an old client."), 1; next; mesc l("Please install the new client from [@@https://manaplus.org/|https://manaplus.org/@@]"); mesc l("Or use our awesome [@@https://tmw2.org/manalauncher/InstallManaLauncher.exe|Mana Launcher@@] if you're on Windows."); next; if (ClientVersion >= 22) mesc l("Compatibility Support mode enabled. Client may crash AT RANDOM, beware."); if (ClientVersion >= 22) mesc l("Crazy stuff can happen in overall. YOU HAVE BEEN WARNED TO UPDATE YOUR CLIENT."); if (ClientVersion >= 22) closeclientdialog; if (ClientVersion >= 22) return; mesc l("You won't be allowed to play this game until you have an updated client."); next; // Force user to disconnect atcommand "@kick "+strcharinfo(0); return; }