· 5 years ago · Feb 28, 2020, 12:26 PM
1// Project Ranking System
2// Design by Kate.
3// Design Date: 2020-02-27
4// Version: 1.0
5
6// Ver 1.0 2020-02-27 完成基本架構
7
8prontera,164,175,3 script 排行榜人員 4_SERVICE_30_F_01,{
9 disable_items;
10 function Cid2name;
11 .@Title_id = getchartitle();
12 .@SelectData = select("查看排行榜",.@Title_id?"":"使用稱號",.@Title_id?"取消稱號":"");
13 switch(.@SelectData)
14 {
15 case 1:
16 for ( .@i = 0; .@i < getarraysize(.RankList$); .@i++ )
17 .@menu$ = .@menu$ + .RankList$[.@i] + ":";
18 .@Ranking = select(.@menu$)-1;
19 query_sql("SELECT `char_id`, `value` FROM `char_reg_num` WHERE `key` = '"+.Variables$[.@Ranking]+"' ORDER BY value DESC LIMIT 5", .@char_id, .@value);
20 if ( !getarraysize(.@char_id) )
21 {
22 message strcharinfo(0),"尚未擁有"+.RankList$[.@Ranking]+"的排名。";
23 end;
24 }
25 mes "----- "+.RankList$[.@Ranking]+"排行榜 -----";
26 for ( .@i = 0; .@i < getarraysize(.@char_id); .@i++ )
27 mes "第 "+(.@i+1)+" 名 "+Cid2name(.@char_id[.@i])+", "+.@value[.@i]+" 點積分";
28 end;
29 case 2:
30 query_sql "SELECT `char_id` FROM `TitleList` ", .@char_id;
31 for ( .@i = 0; .@i < getarraysize(.@char_id); .@i++ )
32 {
33 if ( .@char_id[.@i] == getcharid(0) )
34 {
35 .@menu$ = .@menu$ + .RankList$[.@i];
36 .@Continue = 1;
37 }
38 .@menu$ = .@menu$ + ":";
39 }
40 if ( !.@Continue )
41 {
42 message strcharinfo(0),"尚未擁有稱號可以使用。";
43 end;
44 }
45 .@Title_id = select(.@menu$)+1599;
46 setchartitle(.@Title_id);
47 recalculatestat();
48 end;
49 case 3:
50 if ( !.@Title_id || .@Title_id <= -1 )
51 end;
52 setchartitle(0);
53 recalculatestat();
54 end;
55 }
56
57 end;
58
59OnPCLoginEvent:
60 if ( getchartitle() )
61 {
62 query_sql "SELECT `char_id` FROM `TitleList` ", .@char_id;
63 if ( inarray(.@char_id,getcharid(0)) <= -1 )
64 {
65 setchartitle(0);
66 recalculatestat();
67 }
68 else
69 recalculatestat();
70 }
71 end;
72
73OnClock0000:
74 if ( gettime(DT_DAYOFMONTH) == 1 )
75 {
76 query_sql "TRUNCATE TABLE `TitleList`";
77 for ( .@i = 0; .@i < getarraysize(.RankList$); .@i++ )
78 {
79 deletearray .@char_id;
80 query_sql("SELECT `char_id` FROM `char_reg_num` WHERE `key` = '"+.Variables$[.@Ranking]+"' ORDER BY value DESC LIMIT 1", .@char_id);
81 query_sql "INSERT `TitleList` VALUES ( '"+.@i+"' , '"+.@char_id[0]+"' , '"+gettimestr("%Y%m%d",21)+"')";
82 }
83 }
84 end;
85
86OnPCStatCalcEvent:
87 .@Title_id = getchartitle();
88 if ( !.@Title_id || .@Title_id <= -1 )
89 end;
90 switch(.@Title_id)
91 {
92 case 1600:
93 // 推廣達人
94 bonus bMaxHP,500;
95 break;
96 case 1601:
97 // 任務達人
98 bonus bMaxHP,1000;
99 break;
100 case 1602:
101 // 小遊戲達人
102 bonus bMaxHP,1500;
103 break;
104 case 1603:
105 // 道館達人
106 bonus bMaxHP,2000;
107 break;
108 }
109 end;
110OnInit:
111 setarray .RankList$,"推廣達人","任務達人","小遊戲達人","道館達人";
112 setarray .Variables$,"Advertising_Point","RadVip_Point","LittlePlay_point","Renown_Point";
113 query_sql "CREATE TABLE IF NOT EXISTS TitleList ( `Index` int(11) NOT NULL, `char_id` int(11) NOT NULL , `Date` int(11) NOT NULL DEFAULT '0' )";
114 end;
115
116 function Cid2name {
117 if(getarg(0,0) < 150000) return "";
118 query_sql "SELECT `name` FROM `char` WHERE `char_id` = '"+getarg(0)+"'",.@name$;
119 return .@name$;
120 }
121}