· 7 years ago · Sep 27, 2018, 06:10 AM
1
2
3/*
4
5CREATE TABLE IF NOT EXISTS `ero_daily_rewards` (
6 `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
7 `aid` INT(11) UNSIGNED NOT NULL,
8 `status` TINYINT(11) UNSIGNED NOT NULL DEFAULT '1',
9 `time` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
10 PRIMARY KEY (`id`),
11 KEY (`aid`)
12) ENGINE=MyISAM;
13
14*/
15
16prontera,155,168,5 script Daily Reward#npc 620,{
17 doevent "daily_login_reward::OnTalk";
18}
19
20
21- script daily_login_reward -1,{
22 function reward_list;
23
24 function reward_list {
25 .@give_reward = getarg( 0,0 );
26 .@argcount = getargcount() - 2;
27
28 mes "Today rewards:";
29 if ( .@argcount >= 1 ) {
30 for ( .@i = 1; .@i <= .@argcount; .@i += 2 ) {
31 .@item_id = getarg( .@i,0 );
32 .@amount = getarg( .@i+1,0 );
33
34 mes .@amount +"x "+getitemname( .@item_id );
35 if ( .@give_reward )
36 getitem getarg( .@i ),getarg( .@i + 1 );
37 }
38 if ( .@give_reward )
39 #online_reward_dayofyear = .dayofyear;
40
41
42 .@give_reward = ( #online_reward_dayofyear != .dayofyear && .dayofyear > 0 && #online_minute >= .minute );
43
44 if ( !.@give_reward && #online_minute && #online_minute < .minute ) {
45 mes " ";
46 mes "You still need to accumulate another total of "+( .minute - #online_minute )+" minute(s) before you can get the rewards.";
47 }
48 }
49 else {
50 mes "> none";
51 }
52 return;
53 }
54
55 OnInit:
56 // Event cycle
57 .day_count = 28;
58 // duration to count as completed daily login.
59 .minute = 60;
60 // check interval
61 .interval_check_sec = 60;
62 // idle stop reward
63 .idle_sec = 300;
64 // cutin name format.
65 .cutin_name_format$ = "Daily00";
66 .npc_name$ = strnpcinfo(0);
67 bindatcmd "dailyreward",.npc_name$+"::OnTalk";
68
69 OnClock00:
70 .dayofyear = atoi(gettimestr("%Y%m%d", 10));
71 end;
72
73 OnTalk:
74 query_sql( "SELECT COUNT(`aid`) FROM `ero_daily_rewards` WHERE `aid` = "+getcharid(3)+" AND `status` <> 2",.@size );
75
76 if (.@size > .day_count) {
77 mes "You have completed previous cycle of daily rewards ("+.day_count+" days). You shall start a new cycle now.";
78 query_sql( "UPDATE `ero_daily_rewards` SET `status` = 2 WHERE `status` = 1 WHERE `aid` = "+ getcharid(3) + " LIMIT 1" );
79 next;
80 query_sql( "SELECT COUNT(`aid`) FROM `ero_daily_rewards` WHERE `aid` = "+getcharid(3)+" AND `status` <> 2",.@size );
81 }
82
83 if ( .cutin_name_format$ != "")
84 cutin sprintf( .cutin_name_format$,.@size ),4;
85
86 mes "[Daily Rewards]";
87 mes "Total Daily Login = "+.@size+" Day(s)";
88 mes " ";
89 next;
90 if ( select( "Claim Rewards","Cancel" ) == 1 ) {
91
92 .@give_reward = ( #online_reward_dayofyear != .dayofyear && .dayofyear > 0 && #online_minute >= .minute );
93
94 mes "[Daily Rewards]";
95 switch( .@size ) {
96 case 0:
97 mes "You have to reach the minimum online playtime to complete the daily cycle.";
98 mes " ";
99 // case X: reward_list( <itemid>,<amount>,...,<item>,<amount> ); break;
100 case 1: reward_list( .@give_reward, 644,1 ); break; // Healing Scroll 25x
101 case 2: reward_list( .@give_reward, 985,2 ); break; // Speed Potion 25x
102 case 3: reward_list( .@give_reward, 984,2 ); break; // Free Ticket for Kafra Storage 5x
103 case 4: reward_list( .@give_reward, 603,1 ); break; // Bless&Agi Scroll 5x
104 case 5: reward_list( .@give_reward, 12211,1 ); break; // Yggberrybox(10) 10x
105 case 6: reward_list( .@give_reward, 604,5 ); break; // Convex Mirror
106 case 7: reward_list( .@give_reward, 6732,10 ); break; // Speed Potion 50x
107 case 8: reward_list( .@give_reward, 11502,10 ); break; // Convex Mirror 2x
108 case 9: reward_list( .@give_reward, 985,1 ); break; // Token of Siegfried 1x
109 case 10: reward_list( .@give_reward, 954,4); break; // +5&6 Armor Refine Ticket 1x
110 case 11: reward_list( .@give_reward, 671,1); break; // Blessing Box(10) 5x Increase Agi Box(10) 5x
111 case 12: reward_list( .@give_reward, 12215,2 ); break; // Bloody Branch 2x
112 case 13: reward_list( .@give_reward, 604,15 ); break; // Old Card Album 2x
113 case 14: reward_list( .@give_reward, 12263,1 ); break; // Convex Mirror 5x
114 case 15: reward_list( .@give_reward, 12016,5 ); break; // Token of Siegfried 2x
115 case 16: reward_list( .@give_reward, 603,2 ); break; // Blessing Box(10) 2x
116 case 17: reward_list( .@give_reward, 12211,3 ); break; // Increase Agi Box(10) 2x
117 case 18: reward_list( .@give_reward, 644,2 ); break; // Bubble Gum 5x
118 case 19: reward_list( .@give_reward, 12215,3 ); break; // Convex Mirror 5x
119 case 20: reward_list( .@give_reward, 12216,5); break; // +5&6 Weapon Refine 1x
120 case 21: reward_list( .@give_reward, 7621,1 ); break; // Token of Siegfried 5x
121 case 22: reward_list( .@give_reward, 671,2 ); break; // Bubble Gum 10x
122 case 23: reward_list( .@give_reward, 6732,10 ); break; // Poring Coin 10x
123 case 24: reward_list( .@give_reward, 12103,1); break; // +9 Armor&Weapon Refine 1x
124 case 25: reward_list( .@give_reward, 6732,10 ); break; // Poring Coin 20x
125 case 26: reward_list( .@give_reward, 616,1 ); break; // Old Card Album 10
126 case 27: reward_list( .@give_reward, 6732,10 ); break; // Convex Mirror 10x
127 case 28: reward_list( .@give_reward, 12210,1 ); break; // Token of Siegfried 5x
128 // add more if you have more than 31 days..
129 default:
130 mes "You have completed previous cycle of daily rewards. You shall start a new cycle now.";
131 close;
132 }
133
134 if ( .@size && #online_reward_dayofyear == .dayofyear ) {
135 next;
136 mes "[Daily Rewards]";
137 mes "You've claimed the rewards for "+.@size+" day(s), try again tomorrow.";
138 }
139 }
140 close;
141
142 OnUpdate:
143 if ( checkidle() < .idle_sec ) {
144 #online_minute++;
145 if ( #online_minute >= .minute && #online_reward_dayofyear != .dayofyear ) {
146 query_sql( "INSERT INTO `ero_daily_rewards` ( `aid`,`time` ) VALUES ( "+getcharid(3)+",NOW() )" );
147 dispbottom "You have completed daily login for today.";
148 }
149 //else {
150 // dispbottom "Daily Reward start counting # currently "+#online_minute+"/"+.minute+" minutes.";
151 //}
152 }
153
154 OnPCLoginEvent:
155 if ( #online_reward_dayofyear != .dayofyear && .dayofyear > 0 ) {
156 if ( #online_reward_dayofyear ) {
157 #online_reward_dayofyear = 0;
158 #online_minute = 0;
159 }
160 if ( #online_minute < .minute ) {
161 deltimer .npc_name$+"::OnUpdate";
162 addtimer ( .interval_check_sec * 1000 ),.npc_name$+"::OnUpdate";
163 }
164 }
165 end;
166}