Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.19 KB | None | 0 0
  1. function script nameformat {
  2. for(set .@i,16-getstrlen(""+getarg(0));.@i>0;set .@i,.@i-1)set .@h$,.@h$+" ";
  3. return getarg(0)+.@h$;
  4. }
  5.  
  6. utopia,289,220,4 script 老師 461,{
  7. switch($@TeachGameState)
  8. {
  9. case 0:
  10. mes ""+@colorA$+"["+strnpcinfo(0)+"]"+@colorB$+"";
  11. mes "現在不是開放時間唷,";
  12. mes "活動時間為 ";
  13. mes "凌晨2:00";
  14. mes "早上8:00";
  15. mes "下午2:00";
  16. mes "晚上8:00";
  17. mes "當您成功闖關時";
  18. mes "將會給予你以下獎勵。";
  19. mes "^f07c8e小遊戲幣 *15 至*20(前五名)^000000";
  20. end;
  21. case 1:
  22. if ( searcharray($@Students$,strcharinfo(0)) != -1 ){
  23. mes ""+@colorA$+"["+strnpcinfo(0)+"]"+@colorB$+"";
  24. mes "^FF0000你已經報名過了喔^000000";
  25. mes "請耐心等候游戲開始。";
  26. mes "請在內等待活動開始!";
  27. close2;
  28. warp $@Teacher_map$,52,36;
  29. end;
  30. }
  31. if(getarraysize($@Students$) > $@Student_Of_Room[1])
  32. {
  33. mes ""+@colorA$+"["+strnpcinfo(0)+"]"+@colorB$+"";
  34. mes "^0000FF報名人數已滿^000000。";
  35. end;
  36. }
  37. setarray $@Students$[getarraysize($@Students$)],strcharinfo(0);
  38. setarray $@StudentCid[getarraysize($@StudentCid)],getcharid(0);
  39. deletearray @game_skillid;
  40. mes ""+@colorA$+"["+strnpcinfo(0)+"]"+@colorB$+"";
  41. mes "^0000FF你已經成功報名了^000000";
  42. mes "現在將你傳送到活動地圖";
  43. mes "請在內等待活動開始!";
  44. close2;
  45. when_pcmove_doevent;
  46. warp $@Teacher_map$,52,36;
  47. end;
  48. case 2:
  49. mes ""+@colorA$+"["+strnpcinfo(0)+"]"+@colorB$+"";
  50. mes "活動已經開始了,如果你錯過的話請等下一場吧。";
  51. end;
  52. }
  53. end;
  54.  
  55. OnClock0200:
  56. OnClock0800:
  57. OnClock1400:
  58. OnClock2000:
  59. if($@TeachGameState)
  60. end;
  61. $@TeachGameState = 1;
  62. // 清除上一次的排行陣列
  63. deletearray $@Students$;
  64. deletearray $@StudentCid;
  65. deletearray $@Student_Point;
  66. // 技能編號
  67. switch(rand(0,3))
  68. {
  69. case 0:
  70. setarray $@Teacher_skillid,28,34,66,73,75,32,33,157,24;
  71. break;
  72. case 1:
  73. setarray $@Teacher_skillid,138,142,155,53,8,29,45,74,75;
  74. break;
  75. case 2:
  76. setarray $@Teacher_skillid,112,361,114,139,74,463,462,390,464;
  77. break;
  78. case 3:
  79. setarray $@Teacher_skillid,380,383,384,406,482,73,72,10,8;
  80. break;
  81. // 備用技能ID: 5038
  82. }
  83. announce "[老師] 活動已經開放報名, 限時 5 分鐘, 要參加的請到小遊戲區上方報名!!",15;
  84. Initnpctimer;
  85. end;
  86.  
  87. OnTimer300000:
  88. if( !$@TeachGameState || $@TeachGameState == 2 )
  89. end;
  90. donpcevent strnpcinfo(0)+"::OnStart";
  91. end;
  92.  
  93. OnStart:
  94. if(getarraysize($@Students$) < $@Student_Of_Room[0])
  95. {
  96. $@TeachGameState = 0;
  97. stopnpctimer;
  98. announce "[老師] 參賽人數不足 "+$@Student_Of_Room[0]+" 人,活動自行取消!",15;
  99. mapwarp "teacher","utopia",201,204;
  100. end;
  101. }
  102. $@TeachGameState = 2;
  103. F_JoinReward("teacher","52704","3");
  104. announce "[老師] 活動現在已經開始,報名人數 ["+getarraysize($@Students$)+"],關閉入場通道,請仔細的聽取說明!",15;
  105. donpcevent "老師#Game::OnRule";
  106. end;
  107. OnInit:
  108. waitingroom "老師說遊戲報名",0;
  109. end;
  110. }
  111.  
  112. teacher,52,43,4 script 老師#Game 2347,{
  113. end;
  114.  
  115. // 遊戲規則說明 ---
  116. OnRule:
  117. enablenpc strnpcinfo(0);
  118. .Round = 0;
  119. npctalk strnpcinfo(1)+" : 遊戲開始後,我會施放技能";
  120. sleep 5000;
  121. npctalk strnpcinfo(1)+" : 玩家必須要在我下一次施放技能前完成上一次的施放";
  122. sleep 5000;
  123. npctalk strnpcinfo(1)+" : 失敗的就出局囉";
  124. sleep 5000;
  125. npctalk strnpcinfo(1)+" : 準備好的話,即將開始囉!";
  126. sleep 5000;
  127. npctalk strnpcinfo(1)+" : 遊戲開始倒數: 5!";
  128. sleep 1000;
  129. npctalk strnpcinfo(1)+" : 遊戲開始倒數: 4!";
  130. sleep 1000;
  131. npctalk strnpcinfo(1)+" : 遊戲開始倒數: 3!";
  132. sleep 1000;
  133. npctalk strnpcinfo(1)+" : 遊戲開始倒數: 2!";
  134. sleep 1000;
  135. npctalk strnpcinfo(1)+" : 遊戲開始倒數: 1!";
  136. sleep 1000;
  137. hideonnpc strnpcinfo(0);
  138. .Teacher_gid = bg_monster(0,$@Teacher_map$,52,43,"老師",1113,"");
  139. setunitdata .Teacher_gid, UMOB_CLASS, 2347;
  140. setunitdata .Teacher_gid, UMOB_LOOKDIR, 5;
  141. setunitdata .Teacher_gid, UMOB_SPEED, 150;
  142. donpcevent strnpcinfo(0)+"::OnDo";
  143. end;
  144.  
  145.  
  146.  
  147. // 老師施放技能 ---
  148. OnDo:
  149. if(.Round >= .Max_GameRound)
  150. {
  151. donpcevent strnpcinfo(0)+"::OnSorting";
  152. end;
  153. }
  154. .Round ++;
  155. .Check_id = $@Teacher_skillid[rand(getarraysize($@Teacher_skillid))];
  156. unitskilluseid .Teacher_gid,.Check_id,1,.Teacher_gid,0;
  157. sleep rand(5000,10000);
  158. donpcevent strnpcinfo(0)+"::OnReset";
  159. donpcevent strnpcinfo(0)+"::OnDo";
  160. end;
  161.  
  162. OnReset:
  163. addrid(5,0,$@Teacher_map$);
  164. if(!@flag)
  165. {
  166. specialeffect2 635;
  167. deletearray @game_skillid;
  168. callsub Delete,getcharid(0);
  169. warp "SavePoint",0,0;
  170. }
  171. @flag = 0;
  172. end;
  173.  
  174. OnPCUseSkillExEvent:
  175. if($@TeachGameState == 2 && strcharinfo(3) == $@Teacher_map$)
  176. {
  177. if(!.Check_id)
  178. end;
  179. .@index = searcharray($@StudentCid,getcharid(0));
  180. if(.@index == -1)
  181. end;
  182. if(@useskill_id == .Check_id && @useskill_target == getcharid(3))
  183. {
  184. if(@flag) end;
  185. specialeffect2 131;
  186. @flag = 1;
  187. .@Point = rand(1,3);
  188. $@Student_Point[.@index] += .@Point;
  189. dispbottom strnpcinfo(1)+": 恭喜答對 ! 你獲得了 [ "+.@Point+" ] 點積分,目前總積分為 [ "+$@Student_Point[.@index]+" ].",0x9999FF;
  190. }
  191. else
  192. {
  193. if(@flag)
  194. end;
  195. @flag = 0;
  196. specialeffect2 635;
  197. deletearray @game_skillid;
  198. callsub Delete,getcharid(0);
  199. warp "SavePoint",0,0;
  200. }
  201. }
  202. end;
  203.  
  204. // 遊戲終了
  205. OnSorting:
  206. mobRemove .Teacher_gid;
  207. $@TeachGameState = 0;
  208. // 氣泡排序法開始 ↓↓ ( 勿動 )
  209. function swap3 {
  210. .@tmp = $@Student_Point[getarg(1)];
  211. .@var$ = $@Students$[getarg(1)];
  212. $@Student_Point[getarg(1)] = $@Student_Point[getarg(2)];
  213. $@Students$[getarg(1)] = $@Students$[getarg(2)];
  214. $@Student_Point[getarg(2)] = .@tmp;
  215. $@Students$[getarg(2)] = .@var$;
  216. return;
  217. }
  218. .@flag = 1;
  219. for(.@i=0; .@i<getarraysize($@Student_Point)-1 && .@flag; .@i++)
  220. {
  221. .@flag = 0;
  222. for(.@j=0; .@j<(getarraysize($@Student_Point)- .@i -1); .@j++)
  223. {
  224. if($@Student_Point[.@j+1] > $@Student_Point[.@j])
  225. {
  226. swap3($@Student_Point,.@j+1,.@j);
  227. .@flag = 1;
  228. }
  229. }
  230. }
  231. // 氣泡排序法結束 ↑↑ ( 勿動 )
  232. // 無人進入排行,清除陣列
  233. if(!getarraysize($@Student_Point[.@i]))
  234. {
  235. mapannounce $@Teacher_map$,"[老師] 本次尚未有人進入排行。",bc_map,0xFFCCCC;
  236. deletearray $@Students$;
  237. deletearray $@StudentCid;
  238. deletearray $@Student_Point;
  239. hideoffnpc strnpcinfo(0);
  240. disablenpc strnpcinfo(0);
  241. mapwarp "teacher","utopia",201,204;
  242. end;
  243. }
  244. // 公告排行並取得獎勵
  245. mapannounce $@Teacher_map$,"==========================================================",bc_map,0xFFCCCC;
  246. for (.@i = 0; .@i < .Winner; .@i++)
  247. {
  248. if( $@Students$[.@i]!= "" && $@Student_Point[.@i] )
  249. {
  250. .@name$ = $@Students$[.@i];
  251. query_sql("SELECT `account_id` FROM `char` WHERE `name` = '"+.@name$+"'",.@Account);
  252. if ( !.@Account ) continue;
  253. if ( !isloggedin(.@Account) ) continue;
  254. getitem .Item[.@i],.Item_cnt[.@i],.@Account;
  255. mapannounce $@Teacher_map$, "No." + (.@i + 1) + ": " + nameformat(.@name$) + " 總積分: " + $@Student_Point[.@i],bc_map,0xBBFF66;
  256. }
  257. }
  258. mapannounce $@Teacher_map$, "==========================================================",bc_map,0xFFCCCC;
  259. hideoffnpc strnpcinfo(0);
  260. disablenpc strnpcinfo(0);
  261. mapwarp "teacher","utopia",201,204;
  262. end;
  263.  
  264. // 遊戲中登出除名 ---
  265. OnPCLogoutEvent:
  266. if($@TeachGameState)
  267. {
  268. .@index = searcharray($@StudentCid,getcharid(0));
  269. if(.@index != -1)
  270. {
  271. dispbottom "[老師] 很抱歉,你上課不夠認真,下堂課認真點吧!",0x00ff99;
  272. deletearray $@Students$[.@index],1;
  273. deletearray $@StudentCid[.@index],1;
  274. }
  275. }
  276. end;
  277.  
  278. Delete:
  279. if($@TeachGameState)
  280. {
  281. if(getarraysize(PC_HotKey) > 0)
  282. {
  283. sc_end SC_ALL;
  284. for(.@i=0; .@i<9; .@i++)
  285. {
  286. if(PC_HotKey[.@i])
  287. {
  288. if(PC_HotKey_lv[.@i])
  289. sethotkey .@i,1,PC_HotKey[.@i],PC_HotKey_lv[.@i];
  290. else
  291. sethotkey .@i,0,PC_HotKey[.@i],PC_HotKey_lv[.@i];
  292. }
  293. else
  294. sethotkey .@i,0,0,0;
  295. }
  296. deletearray PC_HotKey;
  297. deletearray PC_HotKey_lv;
  298. deletearray @game_skillid;
  299. dispbottom "[提示] 您離開了遊戲活動地圖,恢復您原本的熱鍵設置。",0x888888;
  300. }
  301. else if(None_Hot_Key)
  302. {
  303. for(.@i=0; .@i<9; .@i++)
  304. sethotkey .@i,0,0,0;
  305. None_Hot_Key = 0;
  306. deletearray PC_HotKey;
  307. deletearray PC_HotKey_lv;
  308. deletearray @game_skillid;
  309. dispbottom "[提示] 您離開了遊戲活動地圖,恢復您原本的熱鍵設置。",0x888888;
  310. }
  311. .@index = searcharray($@StudentCid,getarg(0));
  312. if(.@index != -1)
  313. {
  314. dispbottom "[老師] 很抱歉,你上課不夠認真,下堂課認真點吧!",0x00ff99;
  315. deletearray $@Students$[.@index],1;
  316. deletearray $@StudentCid[.@index],1;
  317. warp "SavePoint",0,0;
  318. }
  319. }
  320. end;
  321.  
  322. end;
  323.  
  324. OnInit:
  325. // 遊戲地圖
  326. $@Teacher_map$ = "teacher";
  327.  
  328. // 報名遊戲最小人數與最大人數
  329. setarray $@Student_Of_Room,0,15;
  330.  
  331. // 遊戲回合數
  332. .Max_GameRound = 10;
  333.  
  334. // 勝利玩家數
  335. .Winner = 5;
  336.  
  337. // 遊戲獎勵 ( 預設前 10 名 )
  338. setarray .Item,52704,52704,52704,52704,52704;
  339. setarray .Item_cnt,20,19,18,17,16,15;
  340.  
  341. disablenpc strnpcinfo(0);
  342. end;
  343.  
  344. }
  345.  
  346. - script ts -1,{
  347. OnWhisperGlobal:
  348. if(getgmlevel())
  349. {
  350. switch(select(!$@TeachGameState?"> "+@colorA$+"01"+@colorB$+".開放活動報名":"",$@TeachGameState==1?"> "+@colorA$+"01"+@colorB$+".開始遊戲":$@TeachGameState==2?"> "+@colorA$+"01"+@colorB$+".活動進行中":""))
  351. {
  352. case 1:
  353. deletearray $@Students$;
  354. message strcharinfo(0),"[老師] 經由GM手動開啟報名, 忽略報名時間.";
  355. donpcevent "老師::OnClock0000";
  356. end;
  357. case 2:
  358. if($@TeachGameState>1) end;
  359. message strcharinfo(0),"[老師] 經由GM啟動遊戲, 關閉報名.";
  360. donpcevent "老師::OnStart";
  361. end;
  362. }
  363. }
  364. end;
  365. OnPCStatCalcEvent:
  366. OnPCMoveFilter:
  367. // 玩家進入地圖後儲存原本熱鍵
  368. if(!getarraysize(PC_HotKey) && strcharinfo(3) == $@Teacher_map$)
  369. {
  370. for(.@i=0; .@i<9; .@i++)
  371. {
  372. .@type = gethotkey(.@i,0);
  373. if(.@type == -1)
  374. continue;
  375. else
  376. {
  377. PC_HotKey[.@i] = gethotkey(.@i,1);
  378. if(.@type == 1) PC_HotKey_lv[.@i] = gethotkey(.@i,2);
  379. else PC_HotKey_lv[.@i] = 0;
  380. }
  381. }
  382. if(getarraysize(PC_HotKey) == 0) None_Hot_Key = 1;
  383. dispbottom "[提示] 已儲存您原本的熱鍵設置。",0x888888;
  384. }
  385. if ( !getarraysize(@game_skillid) ){
  386. // 設定遊戲活動中的熱鍵技能
  387. copyarray .@skill_id,$@Teacher_skillid,getarraysize($@Teacher_skillid);
  388. for(.@i=0; .@i<getarraysize($@Teacher_skillid); .@i++)
  389. {
  390. @game_skillid[.@i] = .@skill_id[.@j = rand(getarraysize(.@skill_id))];
  391. deletearray .@skill_id[.@j],1;
  392. }
  393. }
  394. if(strcharinfo(3) == $@Teacher_map$ && $@TeachGameState)
  395. {
  396. bonus bFixedCastRate,-100;
  397. bonus bVariableCastrate,-100;
  398. bonus bDelayRate,-100;
  399. for(.@i=0; .@i<getarraysize(@game_skillid); .@i++)
  400. {
  401. skill @game_skillid[.@i],1;
  402. sethotkey .@i,1,@game_skillid[.@i],1;
  403. }
  404. }
  405. // 離開遊戲後恢復原本熱鍵
  406. if(strcharinfo(3) != $@Teacher_map$)
  407. {
  408. if(getarraysize(PC_HotKey) > 0)
  409. {
  410. sc_end SC_ALL;
  411. for(.@i=0; .@i<9; .@i++)
  412. {
  413. if(PC_HotKey[.@i])
  414. {
  415. if(PC_HotKey_lv[.@i])
  416. sethotkey .@i,1,PC_HotKey[.@i],PC_HotKey_lv[.@i];
  417. else
  418. sethotkey .@i,0,PC_HotKey[.@i],PC_HotKey_lv[.@i];
  419. }
  420. else
  421. sethotkey .@i,0,0,0;
  422. }
  423. deletearray PC_HotKey;
  424. deletearray PC_HotKey_lv;
  425. deletearray @game_skillid;
  426. dispbottom "[提示] 您離開了遊戲活動地圖,恢復您原本的熱鍵設置。",0x888888;
  427. }
  428. else if(None_Hot_Key)
  429. {
  430. for(.@i=0; .@i<9; .@i++)
  431. sethotkey .@i,0,0,0;
  432. None_Hot_Key = 0;
  433. deletearray PC_HotKey;
  434. deletearray PC_HotKey_lv;
  435. deletearray @game_skillid;
  436. dispbottom "[提示] 您離開了遊戲活動地圖,恢復您原本的熱鍵設置。",0x888888;
  437. }
  438. }
  439. end;
  440. }
  441.  
  442. teacher mapflag monster_noteleport
  443. teacher mapflag noteleport
  444. teacher mapflag nosave
  445. teacher mapflag nomemo
  446. teacher mapflag nightenabled
  447. teacher mapflag nobranch
  448. teacher mapflag noexppenalty
  449. teacher mapflag nozenypenalty
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement