summaryrefslogblamecommitdiff
path: root/npc/commands/motd.txt
blob: 5e4778b2d61554fb9b410ffebbdc4ad803776aca (plain) (tree)
1
2
3
4
5
6
7
8
              




                                                

                                             







                                                                                           
                                        









                                           
                                                                              






                                            
                         


                                                                                
                                                                 









                                                                                
                                                                   



























                                                            
                             
                                            
                                                                      









                                        
                                             










                                                                                           
                                


















                                                                                                              
                                            

                                                            
                          











                                                                                          

                                                                                   
 
                        



                                             
                                 










                               
                      







                
                             

                    
                

                                                                                                                                          

                               










                                                                            
                                   

                                         
                                          
                
                            

                                    

                                                  
                                
 
                                                                                               

                                   

                                                                                                                                           
                                         



                                            
                                                



















                                                                                                   
                                         

                                                                                           
                                         

                                                                                           
                                        


                                                                                          
                                   





                                                                                          
                                         
                                                        
                                          
                              
                                                                       
                
                                                       
                                   

                                                                             






                                         


        

                          


                                             
                                                 
 
// TMW2 Script
function	script	displayMOTD	{
    .@size = getvariableofnpc(.size, "@motd");
    .@dsize = getvariableofnpc(.dsize, "@motd");

    // git stuff and such
    if (debug) {
        for (.@i = 0; .@i < .@dsize; ++.@i) {
            dispbottom $@Debug_Messages$[.@i]; // FIXME: send this to the Debug tab instead
        }

        if (.@dsize > 0)
            dispbottom "---";
    }

    // generic MOTD
    for (.@i = 0; .@i < .@size; ++.@i) {
        dispbottom $MOTD_Messages$[.@i];
    }

    return;
}

function	script	MOTDConfig	{

    function toggleMOTD {
        $MOTD_Disabled = !($MOTD_Disabled);
            logmes "MOTD modified: toogled: enable/disable", LOGMES_ATCOMMAND;
    }

    function addNewLine {
        clear;
        mes l("Please enter the new line.");
        input .@s$;
        .@s$ = strip(.@s$);
        if (.@s$ != "") {
            .@size = getvariableofnpc(.size, "@motd");
            $MOTD_Messages$[.@size] = .@s$;
            set getvariableofnpc(.size, "@motd"), getarraysize($MOTD_Messages$);
            logmes "MOTD modified: line added", LOGMES_ATCOMMAND;
        }
    }

    function modifyLine {

        function removeLine {
            .@l = getarg(0);
            deletearray $MOTD_Messages$[.@l], 1; // remove and shift
            mes l("Line @@ has been removed.", .@l);
            set getvariableofnpc(.size, "@motd"), getarraysize($MOTD_Messages$);
            logmes "MOTD modified: line removed", LOGMES_ATCOMMAND;
        }

        function moveUp {
            .@l = getarg(0);
            .@top$ = $MOTD_Messages$[.@l - 1];
            $MOTD_Messages$[.@l - 1] = $MOTD_Messages$[.@l];
            $MOTD_Messages$[.@l] = .@top$;
        }

        function moveDown {
            .@l = getarg(0);
            .@bottom$ = $MOTD_Messages$[.@l + 1];
            $MOTD_Messages$[.@l + 1] = $MOTD_Messages$[.@l];
            $MOTD_Messages$[.@l] = .@bottom$;
        }

        function editLine {
            .@l = getarg(0);
            clear;
            mes l("Old line:");
            mes "---";
            mes $MOTD_Messages$[.@l];
            mes "---";
            mes "";
            mes l("Enter new line:");
            next;
            input .@s$;
            .@s$ = strip(.@s$);
            if (.@s$ != "") {
                $MOTD_Messages$[.@l] = .@s$;
                logmes "MOTD modified: line edited", LOGMES_ATCOMMAND;
            }
        }

        .@max = (getarg(0) - 1);

        do
        {
            mes l("Enter line number:");
            next;
            input .@n;
            if ($MOTD_Messages$[.@n] != "") {
                clear;
                mes l("line @@: @@", .@n, $MOTD_Messages$[.@n]);
                next;
                select
                    menuimage("actions/back", l("Modify another line")),
                    menuimage("actions/remove", l("Remove this line")),
                    menuimage("actions/edit", l("Modify this line")),
                    rif(.@n > 0, menuimage("actions/raise", l("Move this line up"))),
                    rif(.@n < .@max, menuimage("actions/lower", l("Move this line down"))),
                    menuimage("actions/home", l("Return to main menu"));

                switch (@menu) {
                    case 2: removeLine .@n; return;
                    case 3: editLine .@n; return;
                    case 4: moveUp .@n; return;
                    case 5: moveDown .@n; return;
                    case 6: return;
                }
            }
        } while (1);
    }

    do
    {
        clear;
        setnpcdialogtitle l("MOTD Config");
        mes l("This menu allows you to modify the generic message that is sent to players when they log in.");
        mes "";

        mes "---";
        .@size = getvariableofnpc(.size, "@motd");
        for (.@i = 0; .@i < .@size; ++.@i) {
            mes l("line @@: @@", .@i, $MOTD_Messages$[.@i]);
        }
        if (.@size == 0) {
            mes "(" + l("no active MOTD") + ")";
        }
        mes "---";
        .@d = $MOTD_Disabled;
        mes l("Enabled: @@", (.@d ? l("no") : l("yes")));
        next;

        select
            menuimage("actions/toggle", (.@d ? l("Enable") : l("Disable"))),
            menuimage("actions/add", l("Add a new line")),
            rif(.@size, menuimage("actions/manage", l("Modify, move, or remove a line"))),
            rif(.@size, menuimage("actions/test", l("Test MOTD"))),
            rif(getarg(0,0), menuimage("actions/home", l("Return to Super Menu"))),
            rif(!getarg(0,0), menuimage("actions/home", l("Close")));

        switch (@menu) {
            case 1: toggleMOTD; break;
            case 2: addNewLine; break;
            case 3: modifyLine .@size; break;
            case 4: displayMOTD; break;
            case 6: close; break;
            default: return;
        }
    } while (1);
}



-	script	@motd	32767,{
    end;

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

    MOTDConfig;
    closedialog;
    end;

OnPCLoginEvent:
    if ($MOTD_Disabled < 1) {
        displayMOTD;
    }
    if (debug) {
        dispbottom "##7<<##B @@help://test-server|" + col(l("Click here for instructions on how to use the test server."),6) + "@@ ##7>>";
    }

    // Handle daily login bonus
    // The Strange Coin output wasn't changed, but now it relies on streaks.
    // Variables:
    //  #LOGIN_DAY
    //      Current day
    //  #LOGIN_TABLE
    //      Current month
    //  #LOGIN_STREAK
    //      Number of monthly connections
    //  #LOGIN_ALLTIME
    //      Number of times you claimed the top prize (27 days streak)

    if (#LOGIN_DAY != .login_ref) {
        // Is it a new month?
        if (#LOGIN_TABLE == gettime(6)) {
            #LOGIN_STREAK=#LOGIN_STREAK+1;
        } else {
            #LOGIN_STREAK=1;
            #LOGIN_TABLE=gettime(6);
        }

        // Update last day you've claimed a reward
        #LOGIN_DAY = .login_ref;

        // Handle rewards: Streaks first, daily later. Streak reward prevail over daily reward.
        if (#LOGIN_STREAK > 27) {
            getitem StrangeCoin, 2;
            getitem CasinoCoins, 1;
            dispbottom l("##2 @@ Days login bonus: ##B2x @@, 1x @@##b", #LOGIN_STREAK, getitemlink(StrangeCoin), getitemlink(CasinoCoins));
        } else if (#LOGIN_STREAK == 27) {
            #LOGIN_ALLTIME+=1;
            // Your prize is based on season
            switch (season()) {
                case AUTUMN:
                    .@prize=ElixirOfLife; break;
                case WINTER:
                    .@prize=SilverGift; break;
                case SPRING:
                    .@prize=Toothbrush; break;
                case SUMMER:
                    .@prize=RightEyePatch; break;
            }
            // Some special cases
            if (#LOGIN_ALLTIME == 3)
                .@prize=GoldenGift;
            if (#LOGIN_ALLTIME == 8)
                .@prize=PrismGift;

            if (#LOGIN_ALLTIME == 12) {
                dispbottom l("CONGRATULATIONS! For a year worth of logins, you're getting a pet!");
                makepet Piou; // we must replace this before August 2019. (r18 probably)
            }

            getitem .@prize, 1;
            dispbottom l("##2 27 Days login bonus: ##B1x @@##b", getitemlink(.@prize));
        } else if (#LOGIN_STREAK == 21) {
            getitem StrangeCoin, 7;
            dispbottom l("##2 21 Days login bonus: ##B7x @@##b", getitemlink(StrangeCoin));
        } else if (#LOGIN_STREAK == 14) {
            getitem StrangeCoin, 5;
            dispbottom l("##2 14 Days login bonus: ##B5x @@##b", getitemlink(StrangeCoin));
        } else if (#LOGIN_STREAK == 7) {
            getitem StrangeCoin, 2;
            dispbottom l("##2 7 Days login bonus: ##B2x @@##b", getitemlink(StrangeCoin));
        } else if (#LOGIN_STREAK == 3) {
            getitem StrangeCoin, 1;
            dispbottom l("##2 3 Days login bonus: ##B1x @@##b", getitemlink(StrangeCoin));
        } else if (.login_ref % 3 == 0) {
            .@value=max(5, rand(0, (#LOGIN_STREAK/4)));
            .@value+=(BaseLevel**2);
            getexp .@value, 0;
            dispbottom l("##2Daily login bonus: ##B@@ EXP##b", .@value);
        } else if (.login_ref % 3 == 1) {
            .@value=max(20, rand(0, (#LOGIN_STREAK*2)));
            .@value+=(BaseLevel+JobLevel);
            Zeny=Zeny+.@value;
            dispbottom l("##2Daily login bonus: ##B@@ GP##b", .@value);
        } else {
            .@value=max(5, rand(0, (#LOGIN_STREAK/4)));
            .@value+=(JobLevel**2);
            getexp 0, .@value;
            dispbottom l("##2Daily login bonus: ##B@@ Job Exp.##b", .@value);
        }
    }

    end;

OnClock0000:
    .login_ref=gettime(5); // Day of moth
    end;

OnInit:
    .login_ref=gettime(5);
    .daylength=(60*60*24);
    MOTD_debug_text;
    .size = getarraysize($MOTD_Messages$);
    .dsize = getarraysize($@Debug_Messages$);
    bindatcmd "motd", "@motd::OnCall", 99, 99, 1;
}