summaryrefslogblamecommitdiff
path: root/npc/commands/event.txt
blob: 4e1fef6ee5bfca5875bd0a439390f0e8bd9fb475 (plain) (tree)
1
2
3
4
5
6
7
8
9
10






                                                                            
 

                                 







                                                       
                                                                                                                                                                                                          

                                     
 
                                     


                                      









                                                         
         
 

                                         




                                                              




                                                    
                                            
                                            
                                     
                                     
                                              

         


                           


                                                     
 


                                        
               
     
 
















































                                                                                                                                         


















 




                                            
                                         
                                           
                                  
                                        
                                     
                                             
                                                     
 
                        
                                                                                           
                      
                   
                                                                                                                                                                      
                      










                                                                                     






                                                                      
                   


                                                                                               
                   



                                                                                                       
                                                                 




               








                                                                                                

                                            
                                       
                                     

                                                                                   


                                                                                      
                        
                                          
                                          


                                            











                               
                   





                    
 
 



                                       






                                                                                                                                                                                                                                
            

     







                                                                        
                                     
                                                                        
                                                                                                                                                  
                                                                  











                                              

        
       
                                                   
                                                      
 
// TMW2 Script
// Author:
//    Evol Team
//    Saulc
//    Jesusalva
// Description:
//    Handles all major events on TMW2 (Christmas, Easter, Worker Day, etc.)

// WARNING, possibly dangerous.
function	script	sClear	{
        // Delete all Easter Stuff
        if ($EVENT$ != "Easter") {
            DelItemFromEveryPlayer(GoldenEasteregg);
            DelItemFromEveryPlayer(GoldenEasteregg);
            DelItemFromEveryPlayer(ClosedChristmasBox);
            DelItemFromEveryPlayer(OpenedChristmasBox);
            disablenpc "Lilica#final";
        } else {
        	.@nb = query_sql("SELECT c.name, i.amount FROM `inventory` AS i, `char` AS c WHERE i.nameid=834 AND i.char_id=c.char_id ORDER BY i.amount DESC LIMIT 10", $@easter_name$, $@easter_value);
            enablenpc "Lilica#final";
        }

        // Delete all Christmas stuff
        if ($EVENT$ != "Christmas") {
            $XMAS_MONEY=0; // Golbarez
            $XMAS_GIFTS=0; // Chief
        } else if ($EVENT$ == "Christmas") {
            DelAccRegFromEveryPlayer("#XMAS_LOGINBONUS");
            removemapmask "003-1", MASK_CHRISTMAS;
            removemapmask "005-1", MASK_CHRISTMAS;
            removemapmask "009-1", MASK_CHRISTMAS;
            removemapmask "012-1", MASK_CHRISTMAS;
            removemapmask "017-2", MASK_CHRISTMAS;
            removemapmask "017-2-1", MASK_CHRISTMAS;
            removemapmask "017-3", MASK_CHRISTMAS;
            removemapmask "020-2", MASK_CHRISTMAS;
        }

        // Delete all Valentine Day stuff
        if ($EVENT$ != "Valentine") {
            // ItemDB prefers account variables than quest log
            DelAccRegFromEveryPlayer("#VALENTINE_POINTS");
            DelAccRegFromEveryPlayer("#VALENTINE_RECEIVED");
            DelAccRegFromEveryPlayer("#VALENTINE_OPENED");
            DelAccRegFromEveryPlayer("#VALENTINE_SENT");
            // Remove event items
            DelItemFromEveryPlayer(LoveLetter);
            DelItemFromEveryPlayer(BoxOfChocolates);
            disablenpc "Demure#ValentineFinal";
        } else if ($EVENT$ == "Valentine") {
            htdelete $@VALENTINE_GIFTSTACKS;
            htdelete $@VALENTINE_LOVELETTER;
            $@VALENTINE_GIFTSTACKS=0;
            $@VALENTINE_LOVELETTER=0;
            enablenpc "Demure#ValentineFinal";
        }

        // Simpler events
        $PATRICK_DAYCTRL=0;
        $PATRICK_DAYMAX=0;
        DelAccRegFromEveryPlayer("#PATRICK_DAY");
        DelAccRegFromEveryPlayer("#PATRICK_CTRL");
        DelAccRegFromEveryPlayer("#TMW2_LOGINBONUS");

        // We must remove any event drop
        charcommand("@reloadmobdb");
        SeasonReload(1);
        return;
    }

function	script	GlobalEventMenu	{

    function resetCandor {
        $@FEFE_CAVE_LEVEL=0;
        $@FEFE_DELAY=0;
        $@FEFE_DIFFICULTY=0;
        $@FEFE_CAVE_HERO$="";
        mesc "Candor Fight Reset!";
        return;
    }

    function rateManagement {
        clear;
        mes l("To get the current rate:");
        mes col("    @exprate", 7);
        next;
        mes l("To set the exp rate:");
        mes col("    @exprate ##Brate##b hours", 7);
        next;
        mes l("To reset back to normal:");
        mes col("    @exprate default", 7); // note to translators: any non-numerical value will reset so "default" is safe to translate
        next;
        return;
    }

    function dropManagement {
        clear;
        mes l("To get the current rate:");
        mes col("    @rates", 7);
        next;
        mes l("To set the drop rate:");
        mes col("    @droprate ##Brate##b hours", 7);
        next;
        mes l("To reset back to normal:");
        mes col("    @droprate default", 7); // note to translators: any non-numerical value will reset so "default" is safe to translate
        next;
        return;
    }

    // Easter is map-only, so it can be handled here instead of seasons.txt
    function sEaster {

        // Enable event
        set $EVENT$, "Easter";
        logmes "Enabled EASTER event.", LOGMES_ATCOMMAND;
        return;
    }





















    function seasonManagement {
        clear;
        mes l("Current event: @@", $EVENT$);
        menu
            l("Disable event"), -,
            l("Enable Valentine Day"), -,
            l("Enable St. Patrick Day"), -,
            l("Enable Easter"), -,
            l("Enable Worker's Day"), -,
            l("Enable Christmas"), -,
            l("Enable Demure's Birthday"), -,
            l("Reset Kill Saulc Event (Monthly)"), -;

        switch (@menu) {
            case 1: sClear(); set $EVENT$, ""; logmes "Disabled events.", LOGMES_ATCOMMAND;
                break;
            case 2:
                set $EVENT$, "Valentine"; $@VALENTINE_LOVELETTER = htnew(); $@VALENTINE_GIFTSTACKS = htnew(); logmes "Enabled VALENTINE DAY event.", LOGMES_ATCOMMAND;
                break;
            case 3:
            $EVENT$="St. Patrick";
            $@PATRICK_DAYMAX=31;
            enablenpc "sPatrick";
            enablenpc "Patrick Saulc";
            enablenpc "St. Patrick Gold Pot";
            donpcevent "St. Patrick Gold Pot::OnForcedMove";
            logmes "Enabled ST. PATRICK DAY event (until day 31).", LOGMES_ATCOMMAND;
                break;
            case 4: sEaster(); break;
            case 5:
                set $EVENT$, "Worker Day";
                logmes "Enabled WORKERS DAY event.", LOGMES_ATCOMMAND;
                /*
                addmonsterdrop(Snake, Pearl, 10);
                debugmes "Snakes are now dropping Pearls.";
               */
                break;
            case 6:
                    logmes "Enabled CHRISTMAS event.", LOGMES_ATCOMMAND;
                    query_sql("DELETE FROM `quest` WHERE `quest_id` = '"+SQuest_Christmas+"'");
                    sChristmas(); break;
            case 7:
                    $EVENT$=any("Demure Birthday", "Blame Saulc");
                    dispbottom("Maybe in future this increases everyone attack speed? Well, for now,");
                    dispbottom("This is not actually an event, it just lower prices at Lua GM shop.");
                    break;
            case 8: DelItemFromEveryPlayer(MurdererCrown); break;
        }

        return;
    }

    do
    {
        clear;
        setnpcdialogtitle l("Event Management");
        mes l("This menu allows you to manage events and gives access to event-related tools.");
        mes "";
        mes l("What do you want to access?");

        select
            l("Experience Rate management"),
            l("Drop Rate management"),
            l("Reset Crazyfefe Fight"),
            l("Change Season Event"),
            rif(getarg(0,0), menuimage("actions/home", l("Return to Super Menu"))),
            l("Close");

        //.@c = getarg(0,0) ? 2 : 1; // 1 = back to event menu, 2 = back to super menu

        switch (@menu) {
            case 1: rateManagement; break;
            case 2: dropManagement; break;
            case 3: resetCandor(); break;
            case 4: seasonManagement; break;
            case 6: close; break;
            default: return;
        }

    } while (true);
}



-	script	@event	32767,{
    end;

OnCall:
    if (!is_gm()) {
        end;
    }

    GlobalEventMenu;
    closedialog;
    end;
}

-	script	@toevent	32767,{
    end;

OnCall:
    if (!$@GM_EVENT && $EVENT$ == "Valentine") {
        if (readparam(Hp) == readparam(MaxHp) && readparam(Sp) == readparam(MaxSp) && !(getmapname() == "boss" || getmapname() == "sec_pri" || getmapname() ~= "000-*" || getmapname() ~= "008-*" || getmapname() ~= "sore*")) {
            warp "001-11", 38, 32;
            message strcharinfo(0), l("You are now at the Valentine Highlands.");
        } else {
            dispbottom l("You cannot be hurt, must have full mana, and must be in a area where the Mana Plane is connected so @toevent work.");
        }
        end;
    }

    if (!$@GM_EVENT)
        dispbottom l("The mana bridge is closed at the moment.");
    else if (BaseLevel < 10)
        dispbottom l("You are not strong enough to survive this trip.");
    else if (readparam(Sp) != readparam(MaxSp))
        dispbottom l("You need all your mana to do this trip.");
    else if (readparam(Hp) != readparam(MaxHp))
        dispbottom l("You cannot be hurt to do this trip.");
    else if (getmapname() ~= "001-*")
        dispbottom l("You are already at the Mana Plane of Existence.");
    else if (getmapname() == "boss" || getmapname() == "sec_pri" || getmapname() ~= "000-*" || getmapname() ~= "008-*" || getmapname() ~= "sore*")
        dispbottom l("The Mana Plane is currently out of reach.");
    else {
        .@gt=$@AEROS_SPWN;
        if (.@gt == 2)
            .@gt=rand(0,1);
        switch (.@gt) {
        case 0:
            warp "001-1", 235, 26; break;
        case 1:
            warp "001-1", 23, 108; break;
        }
        specialeffect(63, AREA, getcharid(3));
    }
    end;

OnInit:
    bindatcmd "event", "@event::OnCall", 99, 99, 0;
    bindatcmd "toevent", "@toevent::OnCall", 0, 99, 0;
}