summaryrefslogblamecommitdiff
path: root/npc/functions/clientversion.txt
blob: d79a58aaf6314b9bfad0c5379ac043610b9c3384 (plain) (tree)
1
2
3
4
5
6
7
8
9
               


                  
               

                                                                        
                                                               
 
                                         
                                    
                               
                              
     
 
           

                                                         
                                          
                          

                           

                                                                                                    
                                  
     
                                                   



                                                                                             
                            




                                    



                                                                                      
                                               
                         









                                         









                                                   



                                                 

                                              
 
                                                                
     



                                                      



                                                                                                                                             


                                                              
                                             
                                              



                                        
                                                                                                                           



                                                                                                                         
         
 

                                                  
                                             



                                        
                                                                                                                                      













                                                                                                                         
         
     




                                   
                   







                                                                                                                                         
                                
                 

         
                   





                                              
                                                               
               
                                                
     







                                         
                                                                                                                                     

                                                                                                                                                                 
                                                                          
                                                                                                      

                                                                                           
                                   
                                



                                                                    
                             

                                      

                 




                                         
                                
         

















                                                                                               
     


                                   
                          


                                         








                                              
                                                                     






                                              




                                                                                    








                                                                                          
                                                                                             
                                         
                                                                                           

                          



                                   

                                                                                    
     







                                   

                                        




                                                   




                                                                                                                                               
     








                                                                                     

                                         

                                          
 
     

 

                                                                                                             
               
                           
                                                               

                           
                                                                                                                             

                           
                                                                                                                                                

                           
                                                                                                                                                    

                           
                                                                                                                 
                                      
                               
                                 






                                                                           
                           
                   
                                                                                                                
                                                                                                                                                                                                                                            
     

 


                          
 
 
 


                                                 
               

                    


                                                       
         
                                                                                                   
                                                                                                                                 
         

                                                                                                                      
                                               
                                    
                                                                                       
         

                                      

           
// 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;
        }
        // Bounty Hunter Helmet
        if (MERCENARY_DAILYQUEST > 100) {
            getitem BountyHunterHelmet, 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;
}