· 6 years ago · Jun 07, 2019, 07:00 AM
1// Rarity Server Service Dev Team
2
3- script WorldBossSystem_DevTeam -1,{
4 end;
5OnInit:
6 // Data TABLE
7 query_logsql "CREATE TABLE IF NOT EXISTS WorldBoss ( `party_id` int(11) NOT NULL , `party_name` varchar( 24 ) NOT NULL , `party_damage` int(11) NOT NULL DEFAULT '0' )";
8 // Map Array
9 setarray $@WorldBoss_Map$,"prt_fild08","prontera","izlude";
10 setarray $@WorldBoss_Mapname$,"普隆德拉原野08","盧恩米德加茲王國首都 普隆德拉","衛星都市-依斯魯得島";
11 // Monster Array
12 setarray $@WorldBoss,1058;
13 // Item Array
14 setarray $@WorldBossLv1,512;
15 setarray $@WorldBossLv1Amount,1;
16 setarray $@WorldBossLv2,513;
17 setarray $@WorldBossLv2Amount,1;
18 setarray $@WorldBossLv3,514;
19 setarray $@WorldBossLv3Amount,1;
20 setarray $@WorldBossJoin,515;
21 setarray $@WorldBossJoinAmount,1;
22 // Atcommand
23 bindatcmd "WorldBoss",strnpcinfo(3)+"::OnWorldBoss",0,0;
24 end;
25
26OnWorldBoss:
27 if ( !getgmlevel() )
28 end;
29 donpcevent "WorldBossSystem_DevTeam"+"::OnChallenge";
30 end;
31OnClock2000:
32 if ( gettime(DT_DAYOFWEEK) != WEDNESDAY )
33 end;
34 donpcevent "WorldBossSystem_DevTeam"+"::OnChallenge";
35 end;
36
37OnChallenge:
38 // (^~_~^) Clear Variable
39 $@WorldBossID = 0;
40 $@WorldBoss_GID = 0;
41 $@WorldBoss_Map_Var$ = "";
42 query_logsql "TRUNCATE TABLE `WorldBoss`";
43 // (^~_~^) Clear Variable
44 .@j = rand(getarraysize($@WorldBoss_Map$));
45 .@m = rand(getarraysize($@WorldBoss));
46 $@WorldBossID = $@WorldBoss[.@m];
47 $@WorldBoss_Map_Var$ = $@WorldBoss_Map$[.@j];
48 announce "[ 世界王戰報 ] : 世界王 "+getmonsterinfo($@WorldBossID,MOB_NAME)+" 出現在 "+$@WorldBoss_Mapname$[.@j]+"!",bc_all;
49 monster $@WorldBoss_Map_Var$,170,369,"--ja--",$@WorldBossID,1,strnpcinfo(3)+"::OnWorldBossDead";
50 $@WorldBoss_GID = $@mobid;
51 end;
52
53OnWorldBossDead:
54 query_logsql("SELECT `party_id`,`party_name`,`party_damage` FROM `WorldBoss` ORDER BY party_damage DESC LIMIT 3", .@party, .@partyname$ , .@partyvalue);
55 for ( .@i = 1; .@i <= 3; .@i++ ){
56 if ( .@party[.@i-1] ){
57 if ( .@party[.@i-1] > 150000 )
58 announce "[ 世界王戰報 ] - 世界王傷害第"+.@i+"名的玩家是 [ "+.@partyname$[.@i-1]+" ] 總傷害為 [ "+.@partyvalue[.@i-1]+" ]",bc_all;
59 else
60 announce "[ 世界王戰報 ] - 世界王傷害第"+.@i+"名的隊伍是 [ "+.@partyname$[.@i-1]+" ] 總傷害為 [ "+.@partyvalue[.@i-1]+" ]",bc_all;
61 }
62 }
63 // (^~_~^) Team Result
64 if ( .@party[0] > 150000 )
65 query_sql "SELECT `char_id` FROM `char` WHERE `char_id` = '"+.@party[0]+"' AND `Online` = '1'" , .@chars1;
66 else
67 query_sql "SELECT `char_id` FROM `char` WHERE `party_id` = '"+.@party[0]+"' AND `Online` = '1'" , .@chars1;
68 if ( .@party[1] > 150000 )
69 query_sql "SELECT `char_id` FROM `char` WHERE `char_id` = '"+.@party[1]+"' AND `Online` = '1'" , .@chars2;
70 else
71 query_sql "SELECT `char_id` FROM `char` WHERE `party_id` = '"+.@party[1]+"' AND `Online` = '1'" , .@chars2;
72 if ( .@party[2] > 150000 )
73 query_sql "SELECT `char_id` FROM `char` WHERE `char_id` = '"+.@party[2]+"' AND `Online` = '1'" , .@chars3;
74 else
75 query_sql "SELECT `char_id` FROM `char` WHERE `party_id` = '"+.@party[1]+"' AND `Online` = '1'" , .@chars2;
76 // (^~_~^) Team Rank Level 1
77 if ( getarraysize(.@chars1) && .@party[0] ){
78 for ( .@i = 0; .@i != getarraysize(.@chars1); .@i++ ){
79 if ( strcharinfo(3,.@chars1[.@i]) != $@WorldBoss_Map_Var$ ) continue;
80 .@s = rand(0,(getarraysize($@WorldBossLv1)-1));
81 if ( .@party[0] > 150000 )
82 sendmail .@chars1[.@i],"世界王系統","貢獻獎勵","恭喜 "+.@partyname$[0]+" 戰役貢獻度第一名!",0,$@WorldBossLv1[.@s],$@WorldBossLv1Amount[.@s];
83 else
84 sendmail .@chars1[.@i],"世界王系統","隊伍獎勵","恭喜您的隊伍 "+.@partyname$[0]+" 戰役貢獻度第一名!",0,$@WorldBossLv1[.@s],$@WorldBossLv1Amount[.@s];
85 }
86 }
87 // (^~_~^) Team Rank Level 2
88 if ( getarraysize(.@chars2) && .@party[1] ){
89 for ( .@i = 0; .@i != getarraysize(.@chars2); .@i++ ){
90 if ( strcharinfo(3,.@chars2[.@i]) != $@WorldBoss_Map_Var$ ) continue;
91 .@s = rand(0,(getarraysize($@WorldBossLv2)-1));
92 if ( .@party[1] > 150000 )
93 sendmail .@chars2[.@i],"世界王系統","貢獻獎勵","恭喜 "+.@partyname$[1]+" 戰役貢獻度第二名!",0,$@WorldBossLv2[.@s],$@WorldBossLv2Amount[.@s];
94 else
95 sendmail .@chars2[.@i],"世界王系統","隊伍獎勵","恭喜您的隊伍 "+.@partyname$[1]+" 戰役貢獻度第二名!",0,$@WorldBossLv2[.@s],$@WorldBossLv2Amount[.@s];
96 }
97 }
98 // (^~_~^) Team Rank Level 3
99 if ( getarraysize(.@chars3) && .@party[2] ){
100 for ( .@i = 0; .@i != getarraysize(.@chars3); .@i++ ){
101 if ( strcharinfo(3,.@chars3[.@i]) != $@WorldBoss_Map_Var$ ) continue;
102 .@s = rand(0,(getarraysize($@WorldBossLv3)-1));
103 if ( .@party[1] > 150000 )
104 sendmail .@chars3[.@i],"世界王系統","貢獻獎勵","恭喜 "+.@partyname$[2]+" 戰役貢獻度第三名!",0,$@WorldBossLv3[.@s],$@WorldBossLv3Amount[.@s];
105 else
106 sendmail .@chars3[.@i],"世界王系統","隊伍獎勵","恭喜您的隊伍 "+.@partyname$[2]+" 戰役貢獻度第三名!",0,$@WorldBossLv3[.@s],$@WorldBossLv3Amount[.@s];
107 }
108 }
109 // (^~_~^) Team Result
110 query_sql "SELECT `char_id` FROM `char` WHERE `Online` = '1'" , .@player;
111 freeloop(1);
112 for ( .@i = 0; .@i != getarraysize(.@player); .@i++ ){
113 if ( inarray(.@chars1,.@player[.@i]) != -1 ) continue;
114 if ( inarray(.@chars2,.@player[.@i]) != -1 ) continue;
115 if ( inarray(.@chars3,.@player[.@i]) != -1 ) continue;
116 if ( strcharinfo(3,.@player[.@i]) != $@WorldBoss_Map_Var$ ) continue;
117 .@s = rand(0,(getarraysize($@WorldBossJoin)-1));
118 sendmail .@player[.@i],"世界王系統","參加獎勵","感謝你參加本次的世界王。",0,$@WorldBossJoin[.@s],$@WorldBossJoinAmount[.@s];
119 }
120 freeloop(0);
121 end;
122OnPcAttackEvent:
123 if ( strcharinfo(3) != $@WorldBoss_Map_Var$ ) end;
124 if ( @damage_gid != $@WorldBoss_GID ) end;
125 query_logsql "SELECT `party_id`,`party_name`,`party_damage` FROM `WorldBoss` WHERE `party_id` = '"+getcharid(1)+"'" , .@party_id , .@partyname$ , .@partydamage;
126 if ( .@party_id )
127 query_logsql "UPDATE `WorldBoss` set `party_damage` = '"+(.@partydamage+@damage_val)+"' where `party_id` = '"+getcharid(1)+"'";
128 if ( !.@party_id && getcharid(1) ){
129 query_logsql "INSERT `WorldBoss` VALUES ( "+getcharid(1)+" , '"+getpartyname(getcharid(1))+"' , '"+@damage_val+"')";
130 } else if ( !.@party_id && !getcharid(1) ){
131 query_logsql "INSERT `WorldBoss` VALUES ( "+getcharid(0)+" , '"+strcharinfo(0)+"' , '"+@damage_val+"')";
132 }
133 end;
134}
135
136prontera mapflag pcatkevent
137prt_fild08 mapflag pcatkevent