Jump to content
  • 0

Need Modification Daily Rewards Script by Stolao to NPC


Question

Posted (edited)
Quote

 

//===== EinherjarRO Scripts ================================== 
//= Daily Rewards
//===== By: ================================================== 
//= Stolao
//===== Current Version: ===================================== 
//= 1.84
//===== Compatible With: ===================================== 
//= rAthena SVN
//===== Description: ========================================= 
//= A reward system for players who play more frequently
//===== Todo: ================================================
//= Maybe make .MinWait an array mins,days,weeks,months,years;
//= Make Logging out then it continue count
//= Make a Overweight easy collect
//= Remove use of sleep2
//= Suggestions?
//===== Additional Comments: =================================
//= For Older See Old Versions
//= 1.7A No Rewards for Autotraders option added
//= 1.7B Tabulation Cleanup
//= 1.7C Added custom item binding mode [Secretdataz]
//= 1.7D Added cutin for next day option + command
//= 1.7E Added IP Check
//= 1.7F Moved .Rest Message to after .MinWait Check
//= 1.80 Added MacAddress check for those using Gepard Shield (disabled by default)
//= 1.81 Fixed Typo in .MacCheck
//= 1.82 Moved .Rest Check before rewards check to prevent bug
//= 1.83 Added strnpcinfo(3) for bindatcomands
//= 1.84 Rephrased some conf settings
//= 1.85 Fixed Capilazation
//= 1.86 Small Tabulation Tweaks
//===== Contact Info: ========================================
//= [Stolao] 
//= Email: [email protected]
//============================================================
prontera,147,190,5    script    LOGIN    911,{
OnWhisperGlobal:
OnLoginCmnd:
OnPCLoginEvent:
    if(.IPCheck){
        query_sql("SELECT last_ip FROM `login` WHERE account_id = "+getcharid(3)+"", .@LastIp$);
        query_sql("SELECT account_id FROM `login` WHERE last_ip = '"+.@LastIp$+"'", .@AccountId);
        if(getarraysize(.@AccountId) > .IPCheck){
            message strcharinfo(0),"[Daily Rewards]: Rewards are limited to "+.IPCheck+" per IP sorry.";
            end;
        }
    }
    if(.MacCheck){
        query_sql("SELECT last_unique_id FROM `login` WHERE account_id = "+getcharid(3)+"", .@last_unique_id$);
        query_sql("SELECT account_id FROM `login` WHERE last_unique_id = '"+.@last_unique_id$+"'", .@AccountId2);
        if(getarraysize(.@AccountId2) > .MacCheck){
            message strcharinfo(0),"[Daily Rewards]: Rewards are limited to "+.MacCheck+" per computer sorry.";
            end;
        }
    }
    .@i = (gettime(7) * 365 * 24 * 60) + (gettime(8) * 24 * 60) + (gettime(3) * 60) + gettime(2);
    if(.@i >= (#LastDailyReward + .MinWait) && .Rest){
        message strcharinfo(0),"[Daily Rewards]: To collect reward you must remain logged in for "+ .Rest +" minutes";
        sleep2 1000 + .Rest * 60000;
    }
    if(.@i >= (#LastDailyReward + .MinWait)){
        if(checkvending() & 2 && .Mode & 64){
            message strcharinfo(0),"[Daily Rewards]: Venders cannot recive rewards.";
            end;
        }
        if(.@i < #LastDailyReward + .MaxWait)
            #DRewardCon += 1;
        else    #DRewardCon = 1;
        if(#DRewardCon >= getarraysize(.Rewards$)){
            if(.Reset)
                #DRewardCon = 1;
            else    .@g = getarraysize(.Rewards$)-1;
        } else    .@g = #DRewardCon;
        explode(.@XT$,.Rewards$[.@g],",");
        for(.@x = 0; .@x < getarraysize(.@XT$); .@x++)
            .@TT[.@x] = atoi(.@XT$[.@x]);
        if(.Mode & 1 && .@TT[4] > 0){
            for(.@x = 4; .@x <= getarraysize(.@TT) - 1 ; .@x += 2){
                .@itms[getarraysize(.@itms)] = .@TT[.@x];
                .@qnts[getarraysize(.@qnts)] = .@TT[.@x + 1];
            }
            if(checkweight2(.@itms,.@qnts)){
                for(.@x = 0; .@x < getarraysize(.@itms) && .@x < getarraysize(.@qnts); .@x++){
                    if(.Mode & 32)
                        getitembound  .@itms[.@x], .@qnts[.@x], .Bound_Mode;
                    else    getitem  .@itms[.@x], .@qnts[.@x];
                }
            } else {
                message strcharinfo(0),"[Daily Rewards]: You can not carry the prizes, please use storage and relog.";
                if(#DRewardCon) #DRewardCon -= 1;
                end;
            }
        }
        if(.Mode & 16)
            cutin .Cutins$[#DRewardCon],4;
        if(.Mode & 2){
            if(.@TT[0]){
                zeny += .@TT[0];
                message strcharinfo(0),"[Daily Rewards]: Recieved "+ .@TT[0] +"z";
            }
            if(.@TT[1]){
                setd getd(.Points$[0]),getd(.Points$[0]) + .@TT[1];
                message strcharinfo(0),"[Daily Rewards]: Recieved "+ .@TT[1] +" "+.Points$[1];
            }
        }
        if(.Mode & 4 && (.@TT[3] || .@TT[4]))
            getexp .@TT[3], .@TT[4];
        if(.Mode & 8){
            for(.@x = 0; .@x < getarraysize(.BuffInfo); .@x += 4){
                if(#DRewardCon % .BuffInfo[.@x + 1] == 0)
                    sc_start .BuffInfo[.@x], .BuffInfo[.@x + 2] * 60000, .BuffInfo[.@x + 3];
            }
        }
        message strcharinfo(0),"[Daily Rewards]: You have collected your daily reward, for "+callfunc("F_InsertPlural",#DRewardCon,"day")+" in a row.";
        #LastDailyReward = (gettime(7) * 365 * 24 * 60) + (gettime(8) * 24 * 60) + (gettime(3) * 60) + gettime(2) - .Rest;
        end;
    }
OnNextCmnd:
    if(!.@i) .@i = (gettime(7) * 365 * 24 * 60) + (gettime(8) * 24 * 60) + (gettime(3) * 60) + gettime(2) - .Rest;
    .@days = (#LastDailyReward + .MinWait - .@i)/60/24;
    .@hours = ((#LastDailyReward + .MinWait - .@i)/60)%24;
    .@mins = (#LastDailyReward + .MinWait - .@i)%60;
    message strcharinfo(0),"[Daily Rewards]: You have "+ ((.@days) ? .@days +" Days " : "") +""+ ((.@hours) ? .@hours +" Hours " : "") +""+ ((.@mins) ? .@mins +" Minutes " : "") +"till your next reward.";
    if(.Mode & 128){
        if(#DRewardCon + 1 >= getarraysize(.Rewards$)){
            if(.Reset)    .@DRewardCon = 1;
            else    .@g = getarraysize(.Rewards$)-1;
        } else    .@g = #DRewardCon + 1;
        cutin .Cutins$[.@g],4;
    }
    end;
OnInit:
    // Basic Settings
    //   1: Item | 2: Points | 4: Exp  
    //   8: Gain Buffs Every X Consecutive Days logged in
    //   16: Show Cutins | 32: Bound Items
    //   64: No Rewards ffor Autotraders
    //   128: Show Next Day Cutin
    //     (a bit value, e.g. 3 = Items & Points from Multi)
    .Mode = 1|2|4|8|16|64;

    // Number of times same IP can recive rewards
    //   0 = unlimited
    .IPCheck = 0;

    // Number of times same Computer (MacAdress) can recive rewards
    //   0 = unlimited
    .MacCheck = 0;

    // Item Binding Mode
    //     Bound_Account : Account Bound item
    //     Bound_Guild   : Guild Bound item
    //     Bound_Party   : Party Bound item
    //     Bound_Char    : Character Bound item
    .Bound_Mode = Bound_Account;
    
    // To disable the command '@loginreward' comment the next lines
    // * Needs extra commands for typos
    bindatcmd("relog",strnpcinfo(3)+"::OnLoginCmnd",0,99);
    bindatcmd("nextreward",strnpcinfo(3)+"::OnNextCmnd",0,99);

    // Minimum minutes between collecting daily reward
    //   Day: 22*60 - 24*60
    //   Week: 10080
    .MinWait = 1320;

    // Minutes before losing the consecutive reward
    //   Day: 48*60 - 50*60
    //   Week: 20160
    .MaxWait = 3000;

    // What to do upon reaching last day defined
    //   [0] Repeat last day
    //   [1] Restart at 1
    .Reset = 1;

    // Number of mins after logging before collecting prize
    .Rest = 2;

    // Point Type
    //   [0] Points earned
    //   [1] Point name in mes
    setarray .Points$,"#KAFRAPOINTS","K-Points";

    // Consecutive Days Buff
    // Each buff contains 4 variables (32 Total Max)
    // <Type>,<Days>,<Duration>,<Rate>, // Buff 1
    // <Type>,<Days>,<Duration>,<Rate>, // Buff 2
    //   ...;
    //
    //  Example: 188,7,45,3
    //    -Every 7th consecutive day logged in Player gains +3 Str for 45 mins
    //
    //  Type is 188, which references which SC_ to use, SC_INCSTR in this example
    //     -For a full list of SC_ visit the db/const.txt
    //  Days is days buff is applied, in this example 7, so every 7th day, 14,21,28....
    //  Duration is buff duration is Minuits, in this example 45 mins
    //  Rate is buff strength, in this example player gains 3 Str
    setarray .BuffInfo    ,260,2,360,1    // Life Insurance for 360 Mins Every 2nd Day
                ,198,3,120,10    // +10% Hp for 120 Mins Every 3th Day
                ,196,5,120,25    // +25 Flee for 120 Mins Every 5th Day
                ,257,7,240,50;    // +50% Exp for 240 Mins Every 7th Day

    // Daily Prize items (max 128 days):
    //   "<Zeny>|<Points>|<BaseExp>|<JobExp>|<itemID-1>|<amount-1>|<itemID-2>|<amount-2>...etc", // Day 1
    //   "<Zeny>|<Points>|<BaseExp>|<JobExp>|<itemID-1>|<amount-1>|<itemID-2>|<amount-2>...etc"  // Day 2
    //   ...;
    // Total length of any days string must be 255 or shorter
    // * If players login longer than the last set
    //   day, they will keep getting the last prize.
    setarray .Rewards$[1],
        "0,0,0,0,503,5,506,5",            // Day 1: 5 White Potion + 5 Green Potion
        "100",                    // Day 2: 100 Zeny
        "0,0,0,0,501,5",            // Day 3: 5 Red Potion
        "0,0,0,0,503,5,506,5",            // Day 4: 5 White Potion + 5 Green Potion
        "100",                    // Day 5: 100 Zeny
        "0,0,0,0,501,5",            // Day 6: 5 Red Potion
        "1000",                    // Day 7: 100 Zeny
        "1000",                    // Day 8: 100 Zeny
        "0,0,0,0,503,5,506,5";            // Day 9: 5 White Potion + 5 Green Potion

    // Cutin Array
    //    Shows a cuting for each date
    //    
    setarray .Cutins$[1],
            "kafra_01",
            "kafra_02",
            "kafra_03",
            "kafra_04",
            "kafra_05",
            "kafra_06",
            "kafra_07",
            "kafra_08",
            "kafra_09";
end;
}

Hallo guys, i have Daily Rewards Script by Stolao,
can someone modification this script become proper NPC? so player must talk to npc to get their rewards.
Thanks all...

Edited by arokken

4 answers to this question

Recommended Posts

  • 0
Posted (edited)

It already has an npc

Quote

prontera,147,190,5    script    LOGIN    911,{

 

If you want it to only be accessible via npc when claiming rewards.

Replace

OnWhisperGlobal:
OnLoginCmnd:
OnPCLoginEvent:

with

//OnWhisperGlobal:
//OnLoginCmnd:
//OnPCLoginEvent:

 

Edited by Technoken
  • 0
Posted
8 minutes ago, Technoken said:

It already has an npc

 

If you want it to only be accessible via npc when claiming rewards.

Replace


OnWhisperGlobal:
OnLoginCmnd:
OnPCLoginEvent:

with


//OnWhisperGlobal:
//OnLoginCmnd:
//OnPCLoginEvent:

 

Thanks for reply Technoken,
But it's not working. i try that, and script automatic give player rewards.

  • 0
Posted

Are you sure that u have correct commented these lines?

//OnWhisperGlobal:
//OnLoginCmnd:
//OnPCLoginEvent:

This means that the server checks when some player login or whisp the npc, so if they are commented, the script shouldn't check those things.

  • 0
Posted
6 hours ago, arokken said:

Thanks for reply Technoken,
But it's not working. i try that, and script automatic give player rewards.

Make sure you commented those lines and and reload the npc or use @reloadscript. 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...