· 7 years ago · Nov 15, 2018, 06:08 PM
1function script F_ShuffleNumbers {
2 deletearray getarg(2);
3 .@static = getarg(0);
4 .@range = getarg(1) +1 - .@static;
5 .@count = getarg(3, .@range);
6 if (.@range <= 0 || .@count <= 0)
7 return 0;
8 if (.@count > .@range)
9 .@count = .@range;
10 for (.@i = 0; .@i < .@range; ++.@i)
11 .@temparray[.@i] = .@i;
12 for (.@i = 0; .@i < .@count; ++.@i) {
13 .@rand = rand(.@range);
14 set getelementofarray( getarg(2), .@i ), .@temparray[.@rand] + .@static;
15 .@temparray[.@rand] = .@temparray[--.@range];
16 }
17 return .@count;
18}
19
20
21prontera,155,181,5 script Monster vs Monster Bet 4_F_KAFRA1,{
22 doevent "mob_vs_mob_main::OnTalk";
23}
24
25- script mob_vs_mob_main -1,{
26
27 OnInit:
28 .zeny_win_rate = 2; // 2x bet zeny reward.
29 .waiting_time = 2; // waiting time before event starts..
30 .map$ = "gon_test";
31
32 setarray .mob_id,
33 1038, // Osiris
34 1039, // Baphomet
35 1046, // Doppelganger
36 1059, // Mistress
37 1086, // Golden Thief Bug
38 1087, // Orc Hero
39 1112, // Drake
40 1115, // Eddga
41 1147, // Maya
42 1150, // Moonlight Flower
43 1157, // Pharaoh
44 1159, // Phreeoni
45 1190, // Orc Lord
46 1251, // Stormy Knight
47 1252, // Garm
48 1272, // Dark Lord
49 1312, // Turtle General
50 1373, // Lord of the Dead
51 1388, // Arc Angeling
52 1389, // Dracula
53 1418, // Evil Snake Lord
54 1492, // Samurai Specter
55 1511, // Amon Ra
56 1583; // Tao Gunka
57 .mob_id_size = getarraysize(.mob_id);
58
59 setmapflag .map$, mf_noteleport;
60 setmapflag .map$, mf_nodrop;
61 setmapflag .map$, mf_nomobloot;
62 setmapflag .map$, mf_nomvploot;
63
64 .npc_name$ = strnpcinfo(3);
65 bindatcmd("start", strnpcinfo(3)+"::OnStartEvent");
66 query_sql(" CREATE TABLE IF NOT EXISTS `e_mob_vs_mob_bet` (`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT, `session` int(11) NOT NULL DEFAULT '0', `aid` int(11) NOT NULL DEFAULT '0', `cid` int(11) NOT NULL DEFAULT '0', `mob_id` smallint(6) NOT NULL DEFAULT '0', `zeny` int(11) NOT NULL DEFAULT '0', `zeny_rate` int(11) NOT NULL DEFAULT '0', `status` tinyint(3) NOT NULL DEFAULT '1', PRIMARY KEY (`id`)) ENGINE=MyISAM; ");
67 end;
68
69 OnStartEvent:
70 if (!.status) {
71 .status = 1;
72 .session_id = gettimetick(2);
73 .winner_mob_id = 0;
74
75 do {
76 callfunc("F_ShuffleNumbers", 0, (.mob_id_size - 1), .@output, 2); // possible output 9,55,27,84,33
77 .mob_id_1 = .mob_id[.@output[0]];
78 .mob_id_2 = .mob_id[.@output[1]];
79 } while (!.mob_id_1 || !.mob_id_2 || .mob_id_1 == .mob_id_2);
80
81 for (.@i = .waiting_time; .@i > 0; .@i--) {
82 if (.@i > 0) announce "<Monster Bet> Event start in "+.@i+" minute(s). Register and place your bet now.", bc_all;
83 sleep 60000;
84 }
85 announce "<Monster Bet> Event start now. Bet closed now.", bc_all;
86
87 .status = 2;
88 announce "<Monster Bet> Event is now starting...", bc_all;
89 .@size = query_sql("SELECT `cid` FROM `e_mob_vs_mob_bet` WHERE `session` = "+.session_id+" AND `status` = 1", .@cid);
90 for (.@i = 0; .@i < .@size; .@i++)
91 warpchar .map$, 55, 94, .@cid[.@i];
92
93 sleep 5000;
94
95 for (.@i = 10; .@i > 0; .@i--) {
96 mapannounce .map$, "-- "+.@i+" --", bc_map;
97 sleep 1000;
98 }
99
100 .@mob_gid_1 = bg_monster(1, .map$, 51, 87, "--ja--", .mob_id_1, .npc_name$+"::OnKill1");
101 .@mob_gid_2 = bg_monster(2, .map$, 64, 87, "--ja--", .mob_id_2, .npc_name$+"::OnKill2");
102
103 getunitdata .@mob_gid_1, .@unitdata;
104 setunitdata .@mob_gid_1, UMOB_MODE, .@unitdata[UMOB_MODE] | (0x0000004|0x0000080|0x0800000);
105 setunitdata .@mob_gid_2, UMOB_MODE, .@unitdata[UMOB_MODE] | (0x0000004|0x0000080|0x0800000);
106
107 while (!.winner_mob_id) {
108 unitattack .@mob_gid_1, .@mob_gid_2;
109 unitattack .@mob_gid_2, .@mob_gid_1;
110 sleep 2000;
111 }
112
113 if (.winner_mob_id) {
114 mapannounce .map$, "<Monster Bet> "+getmonsterinfo(.winner_mob_id, MOB_NAME)+" won the match.", bc_map;
115 query_sql("UPDATE `e_mob_vs_mob_bet` SET `status` = 3, `zeny` = (`zeny` * "+.zeny_win_rate+") WHERE `session` = "+.session_id+" AND `mob_id` = "+.winner_mob_id+" AND `status` = 1");
116 query_sql("UPDATE `e_mob_vs_mob_bet` SET `status` = 2 WHERE `session` = "+.session_id+" AND `mob_id` <> "+.winner_mob_id+" AND `status` = 1");
117 }
118
119 .mob_id_1 = 0;
120 .mob_id_2 = 0;
121 .status = 0;
122 .session_id = 0;
123 .winner_mob_id = 0;
124
125 sleep 5000;
126 mapwarp .map$, "prontera", 155, 181;
127 }
128 end;
129
130 OnKill1:
131 .winner_mob_id = .mob_id_2;
132 end;
133
134 OnKill2:
135 .winner_mob_id = .mob_id_1;
136 end;
137
138
139 OnTalk:
140 if (.status > 0) {
141 query_sql("SELECT `id`,`mob_id`,`zeny` FROM `e_mob_vs_mob_bet` WHERE `cid` = "+getcharid(0)+" AND `session` = "+.session_id+" LIMIT 1", .@id, .@mob_id, .@total_zeny);
142 mes "Your current betting:";
143 mes "Bet Confirmation:";
144 if (.@id > 0) {
145 mes "Monster: "+getmonsterinfo(.@mob_id, MOB_NAME);
146 mes "Zeny: "+F_InsertComma(.@total_zeny)+"z";
147 }
148 else {
149 mes "none";
150 }
151 }
152 switch (select(
153 (.status > 0) ? "Warp":"",
154 (.status > 0) ? "Place Bet":"",
155 (!.status ) ? "Claim Bet":"",
156 ( getgmlevel() > 60 ) ? "^ff0000[GM Menu] Clear Data^000000":"",
157 "Cancel"
158 )) {
159 case 1:
160 warp .map$, 55, 94;
161 end;
162 case 2:
163 if (!.status || !.session_id) {
164 mes "Event isn't running now.";
165 }
166 else if (.status != 1) {
167 mes "You can only place the bet before the event starting.";
168 }
169 else {
170 mes "Which monster would you like to bet on?";
171 .@i = select(getmonsterinfo(.mob_id_1, MOB_NAME), getmonsterinfo(.mob_id_2, MOB_NAME));
172 mes "How much zeny?";
173 next;
174 input .@zeny, 1, Zeny;
175 mes "Bet Confirmation:";
176 mes "Monster: "+getmonsterinfo(getd(".mob_id_"+.@i), MOB_NAME);
177 mes "Zeny: "+F_InsertComma(.@zeny)+"z";
178 if (.@id)
179 mes "Increase existing bet amount.";
180 next;
181 if (select("Confirm", "Cancel") == 1) {
182 if (.status == 1) {
183 Zeny -= .@zeny;
184 if (.@id) {
185 query_sql("UPDATE `e_mob_vs_mob_bet` SET `mob_id` = "+getd(".mob_id_"+.@i)+", `zeny` = `zeny` + "+.@zeny+" WHERE `id` = "+.@id+" LIMIT 1");
186 }
187 else {
188 query_sql("INSERT INTO `e_mob_vs_mob_bet` (`session`,`aid`,`cid`,`mob_id`,`zeny`) VALUES ("+.session_id+","+getcharid(3)+","+getcharid(0)+","+getd(".mob_id_"+.@i)+","+.@zeny+")");
189 }
190 mes "You have placed your bet.";
191 }
192 else {
193 mes "Bet failed. Try again later.";
194 }
195 }
196 }
197 break;
198 case 3:
199 .@size = query_sql("SELECT `id`,`zeny` FROM `e_mob_vs_mob_bet` WHERE `cid` = "+getcharid(0)+" AND `status` = 3 LIMIT 20", .@id, .@zeny);
200 for (.@i = 0; .@i < .@size; .@i++)
201 .@menu$ = .@menu$ + "#"+.@id[.@i]+" - "+F_InsertComma(.@zeny[.@i])+"z" + ":";
202 .@i = select(.@menu$) - 1;
203 if (select("Claim", "Cancel") == 1) {
204 query_sql("UPDATE `e_mob_vs_mob_bet` SET `status` = 4 WHERE `id` = "+.@id[.@i]+" LIMIT 1");
205 Zeny += .@zeny[.@i];
206 mes "You claimed "+F_InsertComma(.@zeny[.@i])+"z";
207 }
208 break;
209 case 4:
210 mes "Sucessfully cleared the data";
211 query_sql("TRUNCATE TABLE `e_mob_vs_mob_bet`");
212 break;
213 default:
214 break;
215
216 }
217 close;
218
219}